no message

This commit is contained in:
kuaifan 2025-05-15 17:41:55 +08:00
parent 04d31bd814
commit 0c34df290e
9 changed files with 70 additions and 47 deletions

View File

@ -81,34 +81,44 @@ class AppsController extends AbstractController
}
/**
* @api {get} api/apps/entry 04. 获取应用入口点
* @api {get} api/apps/stats 04. 获取应用状况
*
* @apiDescription 获取应用状况,包括已安装的应用和应用入口点
* @apiVersion 1.0.0
* @apiGroup apps
* @apiName entry
*
* @apiParam {String} [app_name] 应用名称
* - 不指定则获取所有已安装的应用入口点
* @apiName stats
*
* @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述)
* @apiSuccess {Object} data 应用入口点信息
*/
public function entry()
public function stats()
{
User::auth();
//
$appName = Request::input('app_name');
//
$cacheKey = 'apps_entry:' . $appName;
$cacheData = Cache::remember($cacheKey, now()->addHour(), function () use ($appName) {
return Apps::getAppEntryPoints($appName);
});
if (Base::isError($cacheData)) {
Cache::forget($cacheKey);
// 获取已安装应用列表
$res = Apps::appList();
if (Base::isError($res)) {
return $res;
}
//
return $cacheData;
$installedName = ['appstore'];
foreach ($res['data'] as $app) {
if ($app['config']['status'] == 'installed') {
$installedName[] = $app['name'];
}
}
// 获取应用入口点
$res = Apps::getAppEntryPoints();
if (Base::isError($res)) {
return $res;
}
$entriesData = $res['data'];
return Base::retSuccess('success', [
'installed' => $installedName,
'entries' => $entriesData,
]);
}
/**

View File

@ -180,10 +180,6 @@ class Apps
*/
public static function dockerComposeFinalize(string $appName, string $status): array
{
// 清理入口缓存
Cache::forget('apps_entry:' . $appName);
Cache::forget('apps_entry:');
// 获取当前应用信息
$appInfo = self::getAppConfig($appName);

View File

@ -2068,3 +2068,4 @@ AI开启新会话失败
应用加载失败
应用不存在
应用未安装

View File

@ -424,7 +424,7 @@ export default {
microApp.forceSetData(name, {type: 'beforeClose'}, array => {
if (!array?.find(item => item === true)) {
if (name === 'appstore') {
this.$store.dispatch("updateMicroAppsEntries");
this.$store.dispatch("updateMicroAppsStats");
}
if ($A.isSubElectron) {
$A.Electron.sendMessage('windowDestroy');

View File

@ -1186,7 +1186,7 @@ export default {
case 'appstore':
this.$store.dispatch("openMicroApp", {
name: 'appstore',
url: $A.mainUrl('appstore/web/'),
url: 'appstore/web/',
disableScopecss: true,
});
break;

View File

@ -364,7 +364,6 @@ export default {
},
activated() {
this.initList()
this.$store.dispatch("updateMicroAppsEntries");
},
computed: {
...mapState([

View File

@ -2624,12 +2624,10 @@ export default {
return;
}
this.$store.dispatch("openMicroApp", {
name: 'okr-details',
url: $A.mainUrl('apps/okr/'),
props: {
type: 'details',
id,
},
app_name: 'okr',
key: 'details',
url: 'apps/okr/',
props: {type: 'details', id},
transparent: true,
});
},

View File

@ -623,7 +623,7 @@ export default {
dispatch("getProjectByQueue");
dispatch("getTaskForDashboard");
dispatch("dialogMsgRead");
dispatch("updateMicroAppsEntries");
dispatch("updateMicroAppsStats");
//
const allIds = Object.values(state.userAvatar).map(({userid}) => userid);
[...new Set(allIds)].some(userid => dispatch("getUserBasic", {userid}))
@ -4640,43 +4640,61 @@ export default {
/** *****************************************************************************************/
/**
* 更新微应用菜单入口
* 更新微应用状况已安装入口菜单
* @param state
* @param dispatch
* @param appName
*/
updateMicroAppsEntries({state, dispatch}, appName) {
updateMicroAppsStats({state, dispatch}) {
dispatch("call", {
url: 'apps/entry',
data: {
app_name: appName || null,
},
url: 'apps/stats',
}).then(({data}) => {
state.microAppsEntries = data
state.microAppsInstalled = data.installed
state.microAppsEntries = data.entries
})
},
/**
* 打开微应用
* @param state
* @param item
* @param menuItem
*/
openMicroApp({state}, item) {
if (!item || !$A.isJson(item)) {
openMicroApp({state}, menuItem) {
if (!menuItem || !$A.isJson(menuItem)) {
return
}
const event = {
name: item.app_name || item.name,
url: $A.mainUrl(item.url),
name: menuItem.app_name || menuItem.name,
url: $A.mainUrl(menuItem.url),
}
if (item.key) {
event.name += `_${item.key}`
if (!state.microAppsInstalled.includes(event.name)) {
$A.modalWarning("应用未安装");
return;
}
for (let key in item) {
if (menuItem.key) {
event.name += `_${menuItem.key}`
}
for (let key in menuItem) {
if (['props', 'transparent', 'keepAlive', 'disableScopecss'].includes(key)) {
event[key] = item[key]
event[key] = menuItem[key]
}
}
emitter.emit('observeMicroApp', event);
},
/**
* 微应用是否已安装
* @param state
* @param appName
* @returns {Promise<unknown>}
*/
isMicroAppInstalled({state}, appName) {
return new Promise(resolve => {
if (!appName) {
resolve(false)
return
}
resolve(!!state.microAppsInstalled.includes(appName))
})
}
}

View File

@ -262,5 +262,6 @@ export default {
longpressData: {type: '', data: null, element: null},
// 微应用菜单入口
microAppsInstalled: [],
microAppsEntries: [],
};