import { defineStore } from 'pinia'
|
import { ref, computed } from 'vue'
|
import { LanguageEnum } from '@/enums/appEnum'
|
import { router } from '@/router'
|
import { useSettingStore } from './setting'
|
import { useWorktabStore } from './worktab'
|
import { setPageTitle } from '@/utils/router'
|
import { resetRouterState } from '@/router/guards/beforeEach'
|
import { useMenuStore } from './menu'
|
import { StorageConfig } from '@/utils/storage/storage-config'
|
const useUserStore = defineStore(
|
'userStore',
|
() => {
|
const language = ref(LanguageEnum.ZH)
|
const isLogin = ref(false)
|
const isLock = ref(false)
|
const lockPassword = ref('')
|
const info = ref({})
|
const searchHistory = ref([])
|
const accessToken = ref('')
|
const refreshToken = ref('')
|
const getUserInfo = computed(() => info.value)
|
const getSettingState = computed(() => useSettingStore().$state)
|
const getWorktabState = computed(() => useWorktabStore().$state)
|
const setUserInfo = (newInfo) => {
|
info.value = newInfo
|
}
|
const setLoginStatus = (status) => {
|
isLogin.value = status
|
}
|
const setLanguage = (lang) => {
|
setPageTitle(router.currentRoute.value)
|
language.value = lang
|
}
|
const setSearchHistory = (list) => {
|
searchHistory.value = list
|
}
|
const setLockStatus = (status) => {
|
isLock.value = status
|
}
|
const setLockPassword = (password) => {
|
lockPassword.value = password
|
}
|
const setToken = (newAccessToken, newRefreshToken) => {
|
accessToken.value = newAccessToken
|
if (newRefreshToken) {
|
refreshToken.value = newRefreshToken
|
}
|
}
|
const logOut = () => {
|
const currentUserId = info.value.userId
|
if (currentUserId) {
|
localStorage.setItem(StorageConfig.LAST_USER_ID_KEY, String(currentUserId))
|
}
|
info.value = {}
|
isLogin.value = false
|
isLock.value = false
|
lockPassword.value = ''
|
accessToken.value = ''
|
refreshToken.value = ''
|
sessionStorage.removeItem('iframeRoutes')
|
useMenuStore().setHomePath('')
|
resetRouterState(500)
|
const currentRoute = router.currentRoute.value
|
const redirect = currentRoute.path !== '/login' ? currentRoute.fullPath : void 0
|
router.push({
|
name: 'Login',
|
query: redirect ? { redirect } : void 0
|
})
|
}
|
const checkAndClearWorktabs = () => {
|
const lastUserId = localStorage.getItem(StorageConfig.LAST_USER_ID_KEY)
|
const currentUserId = info.value.userId
|
if (!currentUserId) return
|
if (!lastUserId) {
|
return
|
}
|
if (String(currentUserId) !== lastUserId) {
|
const worktabStore = useWorktabStore()
|
worktabStore.opened = []
|
worktabStore.keepAliveExclude = []
|
}
|
localStorage.removeItem(StorageConfig.LAST_USER_ID_KEY)
|
}
|
return {
|
language,
|
isLogin,
|
isLock,
|
lockPassword,
|
info,
|
searchHistory,
|
accessToken,
|
refreshToken,
|
getUserInfo,
|
getSettingState,
|
getWorktabState,
|
setUserInfo,
|
setLoginStatus,
|
setLanguage,
|
setSearchHistory,
|
setLockStatus,
|
setLockPassword,
|
setToken,
|
logOut,
|
checkAndClearWorktabs
|
}
|
},
|
{
|
persist: {
|
key: 'user',
|
storage: localStorage
|
}
|
}
|
)
|
export { useUserStore }
|