enum.ts 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import { shallowRef, ShallowRef } from 'vue'
  2. import { queryAllEnums } from '@/services/api/common'
  3. import { defineStore } from '../store'
  4. import { sessionData } from '../storage'
  5. /**
  6. * 枚举类型
  7. */
  8. export interface EnumType {
  9. label: string;
  10. value: number;
  11. disabled?: boolean;
  12. }
  13. const enumKeys = ['confirmStatus', 'deliveryPayMode', 'deliveryStatus', 'WRPresaleStatus', 'clientType', 'stepStatus', 'scoreConfigType', 'GZBSCPayStatus', 'performanceStatus', 'handlestatus', 'performanceType', 'accountBusinessCode', 'certificatetype', 'signstatus', 'thjOrderStatus', 'THJDeliveryMode', 'goodsunit', 'WROutInApplyStatus2', 'THJTransferStatus', 'WRTradeOrderStatus', 'THJMarket', 'THJProfitRoleType', 'appointmentModelOut', 'orderstatus', 'Pricemode2', 'buildtype', 'listingselecttype', 'certypeperson', 'runstatus'] as const
  14. const enumMap = new Map<typeof enumKeys[number], ShallowRef<Model.EnumRsp[]>>()
  15. // 初始化枚举列表
  16. for (const key of enumKeys) {
  17. enumMap.set(key, shallowRef<Model.EnumRsp[]>([]))
  18. }
  19. /**
  20. * 枚举存储对象
  21. */
  22. export const useEnumStore = defineStore(() => {
  23. const loading = shallowRef(false)
  24. const allEnums = sessionData.getRef('allEnums')
  25. // 获取所有枚举列表
  26. const getAllEnumList = async () => {
  27. if (!allEnums.value.length) {
  28. loading.value = true
  29. await queryAllEnums().then((res) => {
  30. allEnums.value = res.data
  31. }).finally(() => {
  32. loading.value = false
  33. })
  34. }
  35. // 清空列表数据
  36. for (const item of enumMap.values()) {
  37. item.value = []
  38. }
  39. allEnums.value.forEach((e) => {
  40. const mapKey = enumKeys.find((key) => key === e.enumdiccode)
  41. if (mapKey && e.enumitemstatus === 1) {
  42. const enumRef = enumMap.get(mapKey)
  43. enumRef?.value.push(e)
  44. }
  45. })
  46. }
  47. // 获取枚举信息
  48. const getEnumTypeInfo = (enumKey: typeof enumKeys[number], value: number) => {
  49. const enums = enumMap.get(enumKey)
  50. return enums?.value.find((e) => e.enumitemname === value)
  51. }
  52. // 获取枚举列表
  53. const getEnumTypeList = (enumKey: typeof enumKeys[number], propertys?: (keyof Model.EnumRsp)[]) => {
  54. const enums = enumMap.get(enumKey)
  55. if (enums) {
  56. return enums.value.map((e) => {
  57. const props = propertys?.reduce((res, prop) => {
  58. const value = e[prop]
  59. if (value) res.push(value)
  60. return res
  61. }, [] as unknown[])
  62. return {
  63. label: props?.length ? props.join('-') : e.enumdicname,
  64. value: e.enumitemname,
  65. }
  66. })
  67. }
  68. return []
  69. }
  70. // 根据枚举值获取枚举名称
  71. const getEnumTypeName = (enums: EnumType[], value?: number) => {
  72. const item = enums.find((e) => e.value === value)
  73. return item?.label ?? value?.toString() ?? '--'
  74. }
  75. // 根据枚举名称获取对应的值
  76. const getEnumTypeValue = (enums: EnumType[], label?: string) => {
  77. const item = enums.find((e) => e.label === label)
  78. return item?.value ?? label
  79. }
  80. return {
  81. loading,
  82. allEnums,
  83. enumMap,
  84. getAllEnumList,
  85. getEnumTypeInfo,
  86. getEnumTypeList,
  87. getEnumTypeName,
  88. getEnumTypeValue
  89. }
  90. })