dict.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import { defineStore } from 'pinia'
  2. import { store } from '../index'
  3. // @ts-ignore
  4. import { DictDataVO } from '@/api/system/dict/types'
  5. import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
  6. const { wsCache } = useCache('sessionStorage')
  7. import { listSimpleDictData } from '@/api/system/dict/dict.data'
  8. export interface DictValueType {
  9. value: any
  10. label: string
  11. clorType?: string
  12. cssClass?: string
  13. }
  14. export interface DictTypeType {
  15. dictType: string
  16. dictValue: DictValueType[]
  17. }
  18. export interface DictState {
  19. dictMap: Map<string, any>
  20. isSetDict: boolean
  21. }
  22. export const useDictStore = defineStore('dict', {
  23. state: (): DictState => ({
  24. dictMap: new Map<string, any>(),
  25. isSetDict: false
  26. }),
  27. getters: {
  28. getDictMap(): Recordable {
  29. const dictMap = wsCache.get(CACHE_KEY.DICT_CACHE)
  30. if (dictMap) {
  31. this.dictMap = dictMap
  32. }
  33. return this.dictMap
  34. },
  35. getIsSetDict(): boolean {
  36. return this.isSetDict
  37. }
  38. },
  39. actions: {
  40. async setDictMap() {
  41. const dictMap = wsCache.get(CACHE_KEY.DICT_CACHE)
  42. if (dictMap) {
  43. this.dictMap = dictMap
  44. this.isSetDict = true
  45. } else {
  46. const res = await listSimpleDictData()
  47. // 设置数据
  48. const dictDataMap = new Map<string, any>()
  49. res.forEach((dictData: DictDataVO) => {
  50. // 获得 dictType 层级
  51. const enumValueObj = dictDataMap[dictData.dictType]
  52. if (!enumValueObj) {
  53. dictDataMap[dictData.dictType] = []
  54. }
  55. // 处理 dictValue 层级
  56. dictDataMap[dictData.dictType].push({
  57. value: dictData.value,
  58. label: dictData.label,
  59. colorType: dictData.colorType,
  60. cssClass: dictData.cssClass
  61. })
  62. })
  63. this.dictMap = dictDataMap
  64. this.isSetDict = true
  65. wsCache.set(CACHE_KEY.DICT_CACHE, dictDataMap, { exp: 60 }) // 60 秒 过期
  66. }
  67. },
  68. getDictByType(type: string) {
  69. if (!this.isSetDict) {
  70. this.setDictMap()
  71. }
  72. return this.dictMap[type]
  73. },
  74. async resetDict() {
  75. wsCache.delete(CACHE_KEY.DICT_CACHE)
  76. const res = await listSimpleDictData()
  77. // 设置数据
  78. const dictDataMap = new Map<string, any>()
  79. res.forEach((dictData: DictDataVO) => {
  80. // 获得 dictType 层级
  81. const enumValueObj = dictDataMap[dictData.dictType]
  82. if (!enumValueObj) {
  83. dictDataMap[dictData.dictType] = []
  84. }
  85. // 处理 dictValue 层级
  86. dictDataMap[dictData.dictType].push({
  87. value: dictData.value,
  88. label: dictData.label,
  89. colorType: dictData.colorType,
  90. cssClass: dictData.cssClass
  91. })
  92. })
  93. this.dictMap = dictDataMap
  94. this.isSetDict = true
  95. wsCache.set(CACHE_KEY.DICT_CACHE, dictDataMap, { exp: 60 }) // 60 秒 过期
  96. }
  97. }
  98. })
  99. export const useDictStoreWithOut = () => {
  100. return useDictStore(store)
  101. }