dataDict.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import { defineStore } from 'pinia';
  2. import { ref } from 'vue';
  3. import { getAllDataDictList as getList } from '@/api';
  4. export const useDataDictStore = defineStore('dataDict', () => {
  5. const dataDict = ref([]);
  6. const map = new Map();
  7. /**
  8. * 加载数据字典
  9. */
  10. const loadDataDictList = async () => {
  11. dataDict.value = (await getList()).data;
  12. };
  13. /**
  14. * 获取type对应字典列表
  15. * @param type
  16. */
  17. const getDataDictList = type => {
  18. if (map.has(type) && map.get(type).length > 0) {
  19. return map.get(type);
  20. }
  21. const list = dataDict.value.filter(item => item.dictType === type);
  22. // const locale = uni.getLocale()
  23. // // label格式为'xxxx~~en**aaaa~~ru**bbbb', 根据当前语言环境进行处理
  24. // const list = dataDict.value.filter(item => item.dictType === type)
  25. // .map(item => {
  26. // if (item.label.includes('~~') && item.label.includes('**')) {
  27. // const s = item.label.split('~~')
  28. // if (locale.startsWith('zh')) {
  29. // item.label = s[0]
  30. // } else if (locale.startsWith('ru')) {
  31. // const s2 = s[2].split('**')
  32. // item.label = s2[1]
  33. // } else {
  34. // const s1 = s[1].split('**')
  35. // item.label = s1[1]
  36. // }
  37. // }
  38. // return JSON.parse(JSON.stringify(item))
  39. // })
  40. map.set(type, list);
  41. return list;
  42. };
  43. const getStrDictOptions = dictType => {
  44. // 获得通用的 DictDataType 列表
  45. const dictOptions = getDataDictList(dictType);
  46. // 转换成 string 类型的 StringDictDataType 类型
  47. // why 需要特殊转换:避免 IDEA 在 v-for="dict in getStrDictOptions(...)" 时,el-option 的 key 会告警
  48. const dictOption = [];
  49. dictOptions.forEach(dict => {
  50. dictOption.push({
  51. ...dict,
  52. value: dict.value + '',
  53. });
  54. });
  55. return dictOption;
  56. };
  57. const getIntDictOptions = dictType => {
  58. // 获得通用的 DictDataType 列表
  59. const dictOptions = getDataDictList(dictType);
  60. // 转换成 number 类型的 NumberDictDataType 类型
  61. // why 需要特殊转换:避免 IDEA 在 v-for="dict in getIntDictOptions(...)" 时,el-option 的 key 会告警
  62. const dictOption = [];
  63. dictOptions.forEach(dict => {
  64. dictOption.push({
  65. ...dict,
  66. value: parseInt(dict.value + ''),
  67. });
  68. });
  69. return dictOption;
  70. };
  71. return {
  72. dataDict,
  73. getDataDictList,
  74. loadDataDictList,
  75. getStrDictOptions,
  76. getIntDictOptions,
  77. };
  78. });