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 * @apiVersion 1.0.0
* @apiGroup apps * @apiGroup apps
* @apiName entry * @apiName stats
*
* @apiParam {String} [app_name] 应用名称
* - 不指定则获取所有已安装的应用入口点
* *
* @apiSuccess {Number} ret 返回状态码1正确、0错误 * @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述) * @apiSuccess {String} msg 返回信息(错误描述)
* @apiSuccess {Object} data 应用入口点信息 * @apiSuccess {Object} data 应用入口点信息
*/ */
public function entry() public function stats()
{ {
User::auth(); User::auth();
//
$appName = Request::input('app_name'); // 获取已安装应用列表
// $res = Apps::appList();
$cacheKey = 'apps_entry:' . $appName; if (Base::isError($res)) {
$cacheData = Cache::remember($cacheKey, now()->addHour(), function () use ($appName) { return $res;
return Apps::getAppEntryPoints($appName);
});
if (Base::isError($cacheData)) {
Cache::forget($cacheKey);
} }
// $installedName = ['appstore'];
return $cacheData; 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 public static function dockerComposeFinalize(string $appName, string $status): array
{ {
// 清理入口缓存
Cache::forget('apps_entry:' . $appName);
Cache::forget('apps_entry:');
// 获取当前应用信息 // 获取当前应用信息
$appInfo = self::getAppConfig($appName); $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 => { microApp.forceSetData(name, {type: 'beforeClose'}, array => {
if (!array?.find(item => item === true)) { if (!array?.find(item => item === true)) {
if (name === 'appstore') { if (name === 'appstore') {
this.$store.dispatch("updateMicroAppsEntries"); this.$store.dispatch("updateMicroAppsStats");
} }
if ($A.isSubElectron) { if ($A.isSubElectron) {
$A.Electron.sendMessage('windowDestroy'); $A.Electron.sendMessage('windowDestroy');

View File

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

View File

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

View File

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

View File

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