更新
This commit is contained in:
1 parent
012f8edf8b
commit
36ff960fbd
33 files changed
+1644
-344
No files matched your search
@@ -0,0 +1,28 @@
|
||||
/**
|
||||
* 游客轻身份(免登录模块的数据临时存储)
|
||||
*
|
||||
* 小程序冷启动进入 nav 游客态时,引导用户授权微信手机号,
|
||||
* 由 /api/guest/mini-login 签发游客令牌(30 天有效)。
|
||||
* 携带该令牌可直接使用记事本 / 日程提醒 / 密码库等免登录功能,
|
||||
* 数据落在后端 yz_guest_data;正式登录后调 /api/guest/merge 并入账号。
|
||||
*/
|
||||
import { getToken } from '@/utils/auth.js'
|
||||
|
||||
const GUEST_TOKEN_KEY = 'app_guest_token'
|
||||
|
||||
export function setGuestToken(token) {
|
||||
uni.setStorageSync(GUEST_TOKEN_KEY, token || '')
|
||||
}
|
||||
|
||||
export function getGuestToken() {
|
||||
return uni.getStorageSync(GUEST_TOKEN_KEY) || ''
|
||||
}
|
||||
|
||||
export function clearGuestToken() {
|
||||
uni.removeStorageSync(GUEST_TOKEN_KEY)
|
||||
}
|
||||
|
||||
/** 游客模式:未登录但持有手机号授权签发的游客令牌 */
|
||||
export function isGuestMode() {
|
||||
return !getToken() && !!getGuestToken()
|
||||
}
|
||||
@@ -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 || {}
|
||||
|
||||
Reference in new issue
Block a user