feat: 封装数据字典

This commit is contained in:
xlsea
2024-09-04 09:11:04 +08:00
parent 0130688265
commit 3d426fb8e1
20 changed files with 421 additions and 24 deletions

View File

@ -0,0 +1,64 @@
import { fetchGetDictDataByType } from '@/service/api';
import { useDictStore } from '@/store/modules/dict';
export function useDict() {
const dictStore = useDictStore();
async function getDictData(...args: Array<string>) {
const dictData: { [key: string]: Array<Api.System.DictData> } = {};
const promises = args.map(async dictType => {
dictData[dictType] = [];
const dicts = dictStore.getDict(dictType);
if (dicts) {
dictData[dictType] = dicts;
return;
}
const { data, error } = await fetchGetDictDataByType(dictType);
if (error) return;
dictData[dictType] = data;
dictStore.setDict(dictType, data);
});
await Promise.all(promises);
return dictData;
}
async function getDictRecord(...args: Array<string>) {
const dictRecord: { [key: string]: { [key: string]: string } } = {};
const dictData = await getDictData(...args);
Object.keys(dictData).forEach(dictType => {
const data: { [key: string]: string } = {};
Object.keys(dictData);
dictData[dictType].forEach(dict => {
data[dict.dictValue!] = dict.dictLabel!;
});
dictRecord[dictType] = data;
});
return dictRecord;
}
async function getDictOptions(...args: Array<string>) {
const dictOptions: { [key: string]: Array<CommonType.Option> } = {};
const dictData = await getDictData(...args);
Object.keys(dictData).forEach(dictType => {
dictOptions[dictType] = dictData[dictType].map(dict => ({ label: dict.dictLabel!, value: dict.dictValue! }));
});
return dictOptions;
}
async function transformDictByCode(type: string, code: string) {
const dictData = await getDictData(type);
return transformDictByOptions(code, dictData[type]);
}
function transformDictByOptions(code: string, options: Array<Api.System.DictData>) {
return options.find(item => item.dictValue === code)?.dictLabel;
}
return {
getDictData,
getDictRecord,
getDictOptions,
transformDictByCode,
transformDictByOptions
};
}