This commit is contained in:
hero920103 committed 2026-11-03 11:13:59 +08:00
1 parent 012f8edf8b
commit 36ff960fbd
33 files changed
+1644 -344

No files matched your search

+32 -1
View File
@@ -7,9 +7,29 @@
* 这里统一封装,避免三个页面各写一遍。
*/
import { ref, computed } from 'vue'
import { fetchHome } from '@/api/workspace.js'
import { fetchHome, fetchPublicMenus } from '@/api/workspace.js'
import { isLoggedIn } from '@/utils/auth.js'
import { getSubsystem } from '@/config/subsystems.js'
/**
* 游客(未登录)菜单源:公开接口 /api/menus/public(菜单级 require_login=0)。
* 免登录控制按菜单粒度在 Platform 菜单管理配置,后端下发什么游客就能用什么;
* 多个 Sub 组件共享一次拉取(会话级缓存,失败不缓存以便重试)。
*/
let guestMenusPromise = null
function loadGuestMenus() {
if (!guestMenusPromise) {
guestMenusPromise = fetchPublicMenus()
.then((list) => (Array.isArray(list) ? list : []))
.catch((e) => {
guestMenusPromise = null
console.error('[subsystem] public menus failed:', e)
return []
})
}
return guestMenusPromise
}
/**
* @param {string} slug 子系统目录名(crm / erp / oa / cms / tools)
* @param {import('vue').Ref<string>} currentTab 当前 tab,用于按需拉数据
@@ -47,6 +67,17 @@ export function useSubsystem(slug) {
async function load(force = false) {
loading.value = true
// 游客(未登录)不拉需鉴权的 /api/home,避免 401 触发登出回环;
// 改用公开菜单接口,按 module 归组后渲染免登录入口(菜单级 require_login 控制)。
if (!isLoggedIn()) {
try {
menus.value = await loadGuestMenus()
} catch (e) {
menus.value = []
}
loading.value = false
return
}
try {
const data = await fetchHome(force)
user.value = data.user || {}