All files / src/stores auth.js

100% Statements 10/10
69.23% Branches 9/13
100% Functions 5/5
100% Lines 9/9

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'] },
    ],
  },
)