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
 |