Files
pqs-9100_client/frontend/src/stores/modules/auth.ts

94 lines
3.4 KiB
TypeScript
Raw Normal View History

2025-10-14 19:00:47 +08:00
import { defineStore } from 'pinia'
import { type AuthState } from '@/stores/interface'
2025-10-14 19:00:47 +08:00
import { getAuthButtonListApi, getAuthMenuListApi } from '@/api/user/login'
import { getAllBreadcrumbList, getFlatMenuList, getShowMenuList } from '@/utils'
import { AUTH_STORE_KEY } from '@/stores/constant'
import { useModeStore } from '@/stores/modules/mode'
import { getLicense } from '@/api/activate'
import type { Activate } from '@/api/activate/interface'
2025-07-21 13:47:56 +08:00
const CONTRAST_MODE_NAME = '比对式'
export const useAuthStore = defineStore(AUTH_STORE_KEY, {
2025-10-14 19:00:47 +08:00
state: (): AuthState => ({
authButtonList: {},
authMenuList: [],
routeName: '',
showMenuFlag: JSON.parse(localStorage.getItem('showMenuFlag') as string),
activateInfo: {} as Activate.ActivationCodePlaintext
2025-10-14 19:00:47 +08:00
}),
getters: {
authButtonListGet: state => state.authButtonList,
authMenuListGet: state => state.authMenuList,
showMenuListGet: state => getShowMenuList(state.authMenuList),
flatMenuListGet: state => getFlatMenuList(state.authMenuList),
breadcrumbListGet: state => getAllBreadcrumbList(state.authMenuList),
showMenuFlagGet: state => state.showMenuFlag,
activateInfoGet: state => state.activateInfo
2024-08-23 13:19:20 +08:00
},
2025-10-14 19:00:47 +08:00
actions: {
async getAuthButtonList() {
const { data } = await getAuthButtonListApi()
this.authButtonList = data
},
async getAuthMenuList() {
const modeStore = useModeStore()
const { data: menuData } = await getAuthMenuListApi()
2025-07-21 13:47:56 +08:00
const isContrastMode = modeStore.currentMode === CONTRAST_MODE_NAME
const filteredMenu = isContrastMode
? filterMenuByExcludedNames(menuData, ['testSource', 'testScript', 'controlSource'])
: filterMenuByExcludedNames(menuData, ['standardDevice'])
this.authMenuList = filterMenuByExcludedNames(filteredMenu, ['sntp'])
2025-10-14 19:00:47 +08:00
},
async setRouteName(name: string) {
this.routeName = name
},
async resetAuthStore() {
this.showMenuFlag = false
localStorage.removeItem('showMenuFlag')
},
async setShowMenu() {
this.showMenuFlag = true
localStorage.setItem('showMenuFlag', 'true')
},
changeModel() {
2025-10-14 19:00:47 +08:00
this.showMenuFlag = false
localStorage.removeItem('showMenuFlag')
},
async setActivateInfo() {
const licenseResult = await getLicense()
const licenseData = licenseResult.data as Activate.ActivationCodePlaintext
if (!licenseData.simulate) {
licenseData.simulate = {
permanently: 0
}
}
if (!licenseData.digital) {
licenseData.digital = {
permanently: 0
}
}
if (!licenseData.contrast) {
licenseData.contrast = {
permanently: 0
}
}
2025-10-14 19:00:47 +08:00
this.activateInfo = licenseData
}
}
})
2025-07-21 13:47:56 +08:00
function filterMenuByExcludedNames(menuList: Menu.MenuOptions[], excludedNames: string[]): Menu.MenuOptions[] {
2025-10-14 19:00:47 +08:00
return menuList.filter(menu => {
if (menu.children && menu.children.length > 0) {
menu.children = filterMenuByExcludedNames(menu.children, excludedNames)
}
2025-10-14 19:00:47 +08:00
return !excludedNames.includes(menu.name)
})
2025-07-21 13:47:56 +08:00
}