// 简单的 Auth composable:基于本地存储判断登录态与角色 // 说明:按当前要求不向后端请求角色信息,直接读取 local storage 的 'token' 和 'role' // TODO: 如需更可靠的判断,可增加 fetchUserInfo() 调用后端并以服务器返回为准;还可加入 token 刷新逻辑 import { ref } from 'vue' const tokenKey = 'token' const roleKey = 'role' export function isLoggedIn(): boolean { try { const t = uni.getStorageSync(tokenKey) return !!t } catch (err) { console.error('isLoggedIn: getStorageSync error', err) return false } } export function getRole(): number | null { try { const r = uni.getStorageSync(roleKey) const rn = typeof r === 'number' ? r : (r ? Number(r) : null) return Number.isFinite(rn) ? rn : null } catch (err) { console.error('getRole: getStorageSync error', err) return null } } export function roleToString(r: number | null): string { if (r === 2) return '医生' if (r === 3) return '患者' if (r === 4) return '患者家属' return r === null ? '' : String(r) } /** * 如果当前已登录且本地 role===3(患者),则切换到患者端健康页(tab 页面)。 * 返回:true 表示已发起跳转,false 表示未跳转。 */ export function ensurePatientRedirect(): boolean { try { if (!isLoggedIn()) return false const r = getRole() if (r === 3) { // patient health 在 tabBar 中,使用 switchTab uni.switchTab({ url: '/pages/patient/health/index' }) return true } return false } catch (err) { console.error('ensurePatientRedirect error', err) return false } } // 可选:导出 reactive 的状态以便组件订阅(当前未被使用,但保留以备扩展) export const authState = { logged: ref(isLoggedIn()), role: ref(getRole()) }