mirror of
https://github.com/m-xlsea/ruoyi-plus-soybean.git
synced 2025-09-24 07:49:47 +08:00
feat: 封装数据字典
This commit is contained in:
64
src/hooks/business/dict.ts
Normal file
64
src/hooks/business/dict.ts
Normal 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
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user