75 lines
2.0 KiB
TypeScript
Raw Normal View History

2022-07-18 19:06:37 +08:00
import { defineStore } from 'pinia'
import { store } from '../index'
import { DictDataVO } from '@/api/system/dict/types'
2022-12-06 16:12:54 +08:00
import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
2022-11-16 23:15:14 +08:00
const { wsCache } = useCache('sessionStorage')
2023-01-05 14:52:14 +08:00
import { listSimpleDictDataApi } from '@/api/system/dict/dict.data'
2022-07-18 19:06:37 +08:00
export interface DictValueType {
2022-11-16 23:15:14 +08:00
value: any
2022-07-18 19:06:37 +08:00
label: string
2022-11-15 09:17:26 +08:00
clorType?: string
cssClass?: string
2022-07-18 19:06:37 +08:00
}
export interface DictTypeType {
dictType: string
dictValue: DictValueType[]
}
export interface DictState {
2022-11-16 23:15:14 +08:00
dictMap: Map<string, any>
2023-01-05 14:52:14 +08:00
isSetDict: boolean
2022-07-18 19:06:37 +08:00
}
2022-10-08 18:51:50 +08:00
export const useDictStore = defineStore('dict', {
2022-07-18 19:06:37 +08:00
state: (): DictState => ({
2023-01-05 14:52:14 +08:00
dictMap: new Map<string, any>(),
isSetDict: false
2022-07-18 19:06:37 +08:00
}),
getters: {
getDictMap(): Recordable {
2022-12-06 16:12:54 +08:00
const dictMap = wsCache.get(CACHE_KEY.DICT_CACHE)
2023-01-05 14:52:14 +08:00
if (dictMap) {
this.dictMap = dictMap
2022-08-03 12:38:58 +08:00
}
2023-01-05 14:52:14 +08:00
return this.dictMap
},
getIsSetDict(): boolean {
return this.isSetDict
2022-07-18 19:06:37 +08:00
}
},
actions: {
2023-01-05 14:52:14 +08:00
async setDictMap() {
const dictMap = wsCache.get(CACHE_KEY.DICT_CACHE)
if (dictMap) {
this.dictMap = dictMap
this.isSetDict = true
} else {
const res = await listSimpleDictDataApi()
// 设置数据
const dictDataMap = new Map<string, any>()
res.forEach((dictData: DictDataVO) => {
// 获得 dictType 层级
const enumValueObj = dictDataMap[dictData.dictType]
if (!enumValueObj) {
dictDataMap[dictData.dictType] = []
}
// 处理 dictValue 层级
dictDataMap[dictData.dictType].push({
value: dictData.value,
label: dictData.label,
colorType: dictData.colorType,
cssClass: dictData.cssClass
})
2022-07-18 19:06:37 +08:00
})
2023-01-05 14:52:14 +08:00
this.dictMap = dictDataMap
this.isSetDict = true
wsCache.set(CACHE_KEY.DICT_CACHE, dictDataMap, { exp: 60 }) // 60 秒 过期
}
2022-07-18 19:06:37 +08:00
}
}
})
export const useDictStoreWithOut = () => {
return useDictStore(store)
}