| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- // 简单的 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<boolean>(isLoggedIn()),
- role: ref<number | null>(getRole())
- }
|