import request from "./request"; /** * 封装字典工具类 */ const $dict = { url: "/admin/dictionary/queryValsByCodeList", loading: [], resolves: [], getStorage() { const dicts = JSON.parse(localStorage.getItem('dicts') || null) return dicts?.data || dicts || []; }, setUrl(v) { this.url = v }, getData(codeList) { codeList = [codeList].flat().filter(Boolean).toString() return request.post(this.url, null, { withoutToken: true, params: {codeList} }).then(res => res?.data && this.setStorage(res.data)) }, load(...code) { return new Promise(resolve => { this.resolves.push(resolve) if (this.loading.length == 2) { const [timer, codes] = this.loading; clearTimeout(timer) code = Array.from(new Set([codes, code].flat())) } const timer = setTimeout(() => { this.getData(code).then(() => Promise.all(this.resolves.map(e => e())).then(() => this.resolves = [])) }, 500) this.loading = [timer, code] }) }, setStorage(data) { let ds = this.getStorage() data.map(p => { if (ds.some(d => d.key == p.key)) { const index = ds.findIndex(d => d.key == p.key) ds.splice(index, 1, p) } else { ds.push(p) } }) localStorage.setItem("dicts", JSON.stringify([ds].flat())) }, getDict(key) { let dict = this.getStorage().find(e => e.key == key) !dict && console.warn("字典%s缺少加载...", key) return dict ? dict.values : [] }, getValue(key, label) { let dict = this.getDict(key) if (dict) { let item = dict.find(v => v.dictName == label) return item ? item.dictValue : label } else return label }, getLabel(key, value) { let dict = this.getDict(key) if (dict) { let item = dict.find(v => v.dictValue == value) return item ? item.dictName : value } else return value }, getColor(key, value) { let dict = this.getDict(key) if (dict) { let item = dict.find(v => v.dictValue == value) return item ? item.dictColor : value } else return value }, } export default $dict