wangzhibo
4 天以前 10595d8632f959d0954d1939243196f4eed02372
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import { defineStore } from "pinia";
import { computed, reactive, toRaw } from "vue";
import { deepTree, isEmpty } from "../utils";
import { service } from "../service";
import { isDev } from "/@/config";
import { isString } from "lodash-es";
import type { Dict } from "../types";
 
const useDictStore = defineStore("dict", () => {
    // 对象数据
    const data = reactive<Dict.Data>({});
 
    // 获取数据列表
    function get(name: Dict.Key) {
        return computed(() => data[name]).value || [];
    }
 
    // 获取名称
    function getLabel(name: Dict.Key | any[], value: any): string {
        const arr: any[] = String(value)?.split(",") || [];
 
        return arr
            .map((e) => {
                return (isString(name) ? get(name) : name).find((a) => a.value == e)?.label;
            })
            .filter(Boolean)
            .join(",");
    }
 
    // 刷新
    async function refresh(types?: Dict.Key[]) {
        return service.dict.info
            .data({
                types,
            })
            .then((res: Dict.Data) => {
                const d: any = {};
 
                for (const [i, arr] of Object.entries(res)) {
                    arr.forEach((e) => {
                        e.label = e.name;
                        e.value = isEmpty(e.value) ? e.id : e.value;
                    });
 
                    d[i] = deepTree(arr, "desc");
                }
 
                Object.assign(data, d);
 
                if (isDev) {
                    console.log("字典数据:");
                    console.log(toRaw(data));
                }
 
                return data;
            });
    }
 
    return {
        data,
        get,
        getLabel,
        refresh,
    };
});
 
export { useDictStore };