import { defineStore } from "pinia"; import { ref } from "vue"; import { getAllDataDictList as getList } from "@/api"; export const useDataDictStore = defineStore("dataDict", () => { const dataDict = ref([]); const map = new Map(); /** * 加载数据字典 */ const loadDataDictList = async () => { dataDict.value = (await getList()).data; }; /** * 获取type对应字典列表 * @param type */ const getDataDictList = (type) => { if (map.has(type) && map.get(type).length > 0) { return map.get(type); } const list = dataDict.value.filter((item) => item.dictType === type); // const locale = uni.getLocale() // // label格式为'xxxx~~en**aaaa~~ru**bbbb', 根据当前语言环境进行处理 // const list = dataDict.value.filter(item => item.dictType === type) // .map(item => { // if (item.label.includes('~~') && item.label.includes('**')) { // const s = item.label.split('~~') // if (locale.startsWith('zh')) { // item.label = s[0] // } else if (locale.startsWith('ru')) { // const s2 = s[2].split('**') // item.label = s2[1] // } else { // const s1 = s[1].split('**') // item.label = s1[1] // } // } // return JSON.parse(JSON.stringify(item)) // }) map.set(type, list); return list; }; const getStrDictOptions = (dictType) => { // 获得通用的 DictDataType 列表 const dictOptions = getDataDictList(dictType); // 转换成 string 类型的 StringDictDataType 类型 // why 需要特殊转换:避免 IDEA 在 v-for="dict in getStrDictOptions(...)" 时,el-option 的 key 会告警 const dictOption = []; dictOptions.forEach((dict) => { dictOption.push({ ...dict, value: dict.value + "", }); }); return dictOption; }; const getIntDictOptions = (dictType) => { // 获得通用的 DictDataType 列表 const dictOptions = getDataDictList(dictType); // 转换成 number 类型的 NumberDictDataType 类型 // why 需要特殊转换:避免 IDEA 在 v-for="dict in getIntDictOptions(...)" 时,el-option 的 key 会告警 const dictOption = []; dictOptions.forEach((dict) => { dictOption.push({ ...dict, value: parseInt(dict.value + ""), }); }); return dictOption; }; return { dataDict, getDataDictList, loadDataDictList, getStrDictOptions, getIntDictOptions, }; });