| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 | import { dictDataAll } from '@/api/setting/dict'import { reactive, toRaw } from 'vue'interface Options {    [propName: string]: {        api: PromiseFun        params?: Record<string, any>        transformData?(data: any): any    }}// {//     dict: {//         api: dictData,//         params: { name: 'user' },//         transformData(data: any) {//             return data.list//         }//     }// }export function useDictOptions<T = any>(options: Options) {    const optionsData: any = reactive({})    const optionsKey = Object.keys(options)    const apiLists = optionsKey.map((key) => {        const value = options[key]        optionsData[key] = []        return () => value.api(toRaw(value.params) || {})    })    const refresh = async () => {        const res = await Promise.allSettled<Promise<any>>(apiLists.map((api) => api()))        res.forEach((item, index) => {            const key = optionsKey[index]            if (item.status == 'fulfilled') {                const { transformData } = options[key]                const data = transformData ? transformData(item.value) : item.value                optionsData[key] = data            }        })    }    refresh()    return {        optionsData: optionsData as T,        refresh    }}// useDictOptions<{//     dict: any[]// }>({//     dict: dictData// })export function useDictData<T = any>(dict: string[]) {    const options: Options = {}    for (const type of dict) {        options[type] = {            api: dictDataAll,            params: {                dictType: type            }        }    }    const { optionsData } = useDictOptions<T>(options)    return {        dictData: optionsData    }}
 |