78 lines
2.1 KiB
JavaScript
78 lines
2.1 KiB
JavaScript
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
|