From 27ba504441037666e787ded85b4af2f65be65c17 Mon Sep 17 00:00:00 2001 From: schangxiang@126.com <schangxiang@126.com> Date: 周二, 29 4月 2025 18:06:07 +0800 Subject: [PATCH] Merge branch 'master' of http://222.71.245.114:9086/r/HIA24016N_PipeLineDemo --- HIAWms/web/src/libs/Base/Base.ts | 191 +++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 191 insertions(+), 0 deletions(-) diff --git a/HIAWms/web/src/libs/Base/Base.ts b/HIAWms/web/src/libs/Base/Base.ts new file mode 100644 index 0000000..b3329ef --- /dev/null +++ b/HIAWms/web/src/libs/Base/Base.ts @@ -0,0 +1,191 @@ +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锛宺equest.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 +} -- Gitblit v1.9.3