automated_uniapp/cool/store/dict.ts

67 lines
1.3 KiB
TypeScript
Raw Normal View History

2025-01-09 16:16:11 +08:00
import { defineStore } from "pinia";
import { computed, reactive, toRaw } from "vue";
import { deepTree } 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: string) {
return computed(() => data[name]).value || [];
}
// 获取名称
function getLabel(name: string | 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?: string[]) {
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 = e.value !== undefined ? e.value : e.id;
});
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 };