Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | 17x 29x 29x 29x 18x 18x 5x 5x 29x | import { computed, ref } from 'vue'
import { defineStore } from 'pinia'
export const useAuthStore = defineStore(
'auth',
() => {
// —— 会话信息(凭证 + 会话期用户详情):退出登录时清空,持久化到 sessionStorage ——
const loginInfo = ref({ token: '', user: null })
// —— 用户信息(机构码 + 账号):跨会话长存,登录页回显用,退出登录刻意不清 ——
const userInfo = ref({ orgId: '', account: '' })
const isAuthenticated = computed(() => Boolean(loginInfo.value.token))
function setSession(session, organizationId) {
loginInfo.value = {
token: session.token ?? session.access_token ?? '',
user: session.user ?? session.user_info ?? null,
}
userInfo.value.orgId = session.orgid ?? organizationId ?? ''
}
function clearSession() {
loginInfo.value = { token: '', user: null }
// 故意不清 userInfo:机构码/账号是登录页回显数据,不属于会话
}
function saveLastLogin(orgId, account) {
userInfo.value = { orgId: orgId ?? '', account: account ?? '' }
}
return {
loginInfo,
userInfo,
isAuthenticated,
setSession,
clearSession,
saveLastLogin,
}
},
{
persist: [
// 会话凭证:关标签页/浏览器即失效
{ key: 'fms-login', storage: sessionStorage, pick: ['loginInfo'] },
// 用户信息(机构码/账号):跨会话保留,供登录页回显
{ key: 'fms-user', storage: localStorage, pick: ['userInfo'] },
],
},
)
|