¶Ô±ÈÐÂÎļþ |
| | |
| | | import sdk from 'sdk' |
| | | import { ref, reactive, Ref, computed, onMounted, nextTick } from 'vue' |
| | | import { Create } from '@/libs/Create/Create' |
| | | import { globalState } from '../Store/Store' |
| | | const { request } = sdk.utils |
| | | // @ts-ignore |
| | | import compose from 'koa-compose' |
| | | |
| | | let composeMiddleArray: any = [] |
| | | |
| | | let flag = 0 |
| | | |
| | | export class Base< |
| | | T extends { |
| | | [key: string]: any |
| | | } = {} |
| | | > { |
| | | // ç¶æ |
| | | [key: string]: any |
| | | constructor(initState?: T) { |
| | | if (initState) { |
| | | this.initState(initState) |
| | | // this.getVariable() |
| | | this.onMounted && onMounted(this.onMounted.bind(this)) |
| | | } |
| | | } |
| | | /** |
| | | * å
¨å±ç¶æ |
| | | */ |
| | | //@ts-ignore |
| | | static globalState: Record<string, any> = globalState |
| | | /** |
| | | * 请æ±requestï¼request.get request.post... |
| | | */ |
| | | static request = request |
| | | |
| | | /** |
| | | * åékey |
| | | */ |
| | | static MAP_KEY = 'varMap' |
| | | |
| | | /** |
| | | * ç¼åæ¶é´KEY |
| | | */ |
| | | static CACHE_KEY = 'cacheKey' |
| | | |
| | | /** |
| | | * ç¼åæ¶é¿ï¼ç®å5åé |
| | | */ |
| | | static CACHE_TIME = 5 * 60 * 1000 |
| | | |
| | | /** |
| | | * ç³»ç»é
ç½® |
| | | */ |
| | | baseSystemConfig = ref({}) |
| | | |
| | | /** |
| | | * 夿æ¯å¦ä¸ºå¯¹è±¡ |
| | | * @param str |
| | | * @returns |
| | | */ |
| | | isStringAnObject(str: string) { |
| | | try { |
| | | const obj = JSON.parse(str) |
| | | return typeof obj === 'object' && obj !== null |
| | | } catch (e) { |
| | | return false |
| | | } |
| | | } |
| | | /** |
| | | * æ ¹æ®nameè·ååéID |
| | | * @param name |
| | | * @returns |
| | | */ |
| | | static getVariableIdByName(name: string) { |
| | | const map = globalState[Base.MAP_KEY] |
| | | return map.get(name) || '' |
| | | } |
| | | |
| | | /** |
| | | * å°åéè½¬æ¢æMap |
| | | * @param args æ°ç» |
| | | * @returns |
| | | */ |
| | | private transformArrayToMap(args: any[]) { |
| | | const map = new Map() |
| | | args.forEach((item) => { |
| | | map.set(item.name, item.id) |
| | | }) |
| | | return map |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢åéï¼5åéç¼å |
| | | * @param next |
| | | * @returns |
| | | */ |
| | | private async queryVariable(next: () => void) { |
| | | const size = this.getState(Base.MAP_KEY)?.size |
| | | const t = this.getState(Base.CACHE_KEY) || Date.now() |
| | | flag++ |
| | | this.clear() |
| | | // ç¼åä¸åé,妿䏿¬¡éæ°è¯·æ±ï¼åæ´æ° |
| | | if (size > 0 && Date.now() - t < Base.CACHE_TIME) return next && next() |
| | | try { |
| | | const vars = await request.get('/api/v1/variable/query') |
| | | const varMap = this.transformArrayToMap(vars.result) |
| | | this.setState(Base.CACHE_KEY, Date.now()) |
| | | this.setState(Base.MAP_KEY, varMap) |
| | | next && next() |
| | | } catch (error) { |
| | | // next() |
| | | console.error(error, 'åéæ¥è¯¢æ¥å£æ¥éï¼æå请æ±') |
| | | } |
| | | } |
| | | /** |
| | | * æ¸
çå
¨å±åæ° |
| | | */ |
| | | private clear() { |
| | | if (flag === composeMiddleArray.length) { |
| | | composeMiddleArray = [] |
| | | flag = 0 |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·ååéæéåæ§è¡ |
| | | */ |
| | | private async getVariable() { |
| | | composeMiddleArray.push((context: any, next: () => void) => |
| | | this.queryVariable(next) |
| | | ) |
| | | |
| | | nextTick(() => { |
| | | if (!flag) { |
| | | const fn = compose(composeMiddleArray) |
| | | fn() |
| | | } |
| | | }) |
| | | } |
| | | |
| | | private initState(state = {}) { |
| | | const entry = Object.entries(state) |
| | | if (Array.isArray(entry)) { |
| | | entry.forEach(([key, value]) => { |
| | | this[key] = ref(value) |
| | | }) |
| | | } |
| | | } |
| | | |
| | | // ç¶æ |
| | | /** |
| | | * è·åç¶æå¼ |
| | | * @param key key |
| | | * @returns any |
| | | */ |
| | | getState(key: string | any) { |
| | | return Base.globalState[key] |
| | | } |
| | | /** |
| | | * ä¿®æ¹ç¶æ |
| | | * @param key key |
| | | * @param value value |
| | | * @returns void |
| | | */ |
| | | setState(key: string | any, value: any) { |
| | | return (Base.globalState[key] = ref(value)) |
| | | } |
| | | |
| | | removeState(key: string) { |
| | | if (!key) return |
| | | return delete Base.globalState[key] |
| | | } |
| | | |
| | | /** |
| | | * åå§å对象 |
| | | * @param data |
| | | * @returns |
| | | */ |
| | | createObject(data: string | number | any[][] | any) { |
| | | return new Create(data) |
| | | } |
| | | /** |
| | | * è·åç¨æ·ä¿¡æ¯ |
| | | */ |
| | | get userInfo() { |
| | | return sdk.userInfo || {} |
| | | } |
| | | |
| | | // useVModels |
| | | } |