import { isIntType } from './type'; export const typeConversion = (type: string, curValue: string) => { return isIntType(type) ? Number.parseInt(curValue + '') + '' : Number.parseFloat(curValue + '') + ''; }; export const mergeParameters = (jsonData: any, ...args: object[]) => { const props: any = { ...jsonData, }; args.forEach((item: any) => { if (typeof item === 'object') { const key = Object.keys(item)[0]; props[key] = item[key]; } if (typeof item === 'function') { // console.log(item.name); props[item.name] = item; } }); return props; }; export const resolveRule = (attr: any, ruleJson: any, snapShot: any) => { let copyData = { ...attr }; const streamId = attr['streamId']; const rules = ruleJson[streamId]; if (rules && rules.length > 0) { rules.map((item: any) => { const ifData = item['if']; const thenData = item['then']; if (condJudgment(ifData, snapShot)) { copyData = { ...renderResolve(thenData, copyData) }; } }); } // console.log(copyData, 'copyData==='); return { ...copyData }; }; // 条件判断 const condJudgment = (ifData: any, snapShot: any) => { let flag = false; const curValue = snapShot[ifData['streamId']]; if (!curValue) return false; if (ifData['operator'] === '=') { flag = ifData['value'].toString() === curValue.toString(); } else if (ifData['operator'] === '!=') { flag = ifData['value'].toString() !== curValue.toString(); } else if (ifData['operator'] === '>') { flag = Number(curValue) > Number(ifData['value']); } else if (ifData['operator'] === '<') { flag = Number(curValue) < Number(ifData['value']); } else if (ifData['operator'] === '>=') { flag = Number(curValue) >= Number(ifData['value']); } else if (ifData['operator'] === '<=') { flag = Number(curValue) <= Number(ifData['value']); } return flag; }; // 渲染数据处理判断 const renderResolve = (thenData: any, attr: any) => { let obj = { ...attr }; if (thenData['operator'] === 'hidden') { obj = {}; } else if (thenData['operator'] === 'disabled') { if (JSON.stringify(obj) !== '{}') { obj['disabled'] = true; } } else if (thenData['operator'] === 'valueDisabled') { if (JSON.stringify(obj) === '{}') return; const types = getMappingType(thenData['type']); if (types === 'enum') { const list = obj['items'].map((item: any) => { if (item['value'].toString() === thenData['value']) { item['disabled'] = item['value'].toString() === thenData['value']; } return item; }); obj['items'] = [...list]; } else if (types === 'bool') { const f = obj['curValue'].toString() === thenData['value']; f && (obj['curValue'] = !obj['curValue']); } else if (types === 'number') { // 暂不处理 } } else if (thenData['operator'] === '=') { if (JSON.stringify(obj) === '{}') return; const types = getMappingType(thenData['type']); if (types === 'enum') { const list = obj['items'].map((item: any) => { item['checked'] = item['value'].toString() === thenData['value']; return item; }); obj['items'] = [...list]; } else if (types === 'bool') { obj['curValue'] = thenData['value'] === '1'; } else if (types === 'number') { obj['curValue'] = Number(thenData['value']); } } else if (thenData['operator'] === '>') { if (JSON.stringify(obj) === '{}') return; const types = getMappingType(thenData['type']); if (types === 'number') { obj['min'] = Number(thenData['value']) + Number(obj['step']); } } else if (thenData['operator'] === '<') { if (JSON.stringify(obj) === '{}') return; const types = getMappingType(thenData['type']); if (types === 'number') { obj['max'] = Number(thenData['value']) - Number(obj['step']); } } else if (thenData['operator'] === '>=') { if (JSON.stringify(obj) === '{}') return; const types = getMappingType(thenData['type']); if (types === 'number') { obj['min'] = Number(thenData['value']); } } else if (thenData['operator'] === '<=') { if (JSON.stringify(obj) === '{}') return; const types = getMappingType(thenData['type']); if (types === 'number') { obj['max'] = Number(thenData['value']); } } return obj; }; const getMappingType = (thingModelType: string) => { switch (thingModelType) { case 'uint8': case 'uint16': case 'uint32': case 'int': case 'int8': case 'int16': case 'int32': case 'int64': return 'number'; break; case 'float': case 'double': return 'number'; break; default: break; } return thingModelType; }; // 控制成功后 规则联动 export const resolveUiStreams = (streamsObj: any, ruleJson: any) => { let copyData = {}; Object.keys(ruleJson).forEach((key: string) => { const rules = ruleJson[key]; Object.keys(streamsObj).forEach((streamId: string) => { if (rules && rules.length > 0) { rules.map((item: any) => { const ifData = item['if']; const thenData = item['then']; if (condJudgmentForOne(ifData, { [streamId]: streamsObj[streamId] })) { copyData = { ...resolveThenObject(thenData, copyData) }; } }); } }); }); return { ...streamsObj, ...copyData }; }; const resolveThenObject = (thenData: any, attr: any) => { const obj: any = {}; if (thenData['operator'] === '=') { obj[thenData['streamId']] = thenData['value']; } return { ...attr, ...obj }; }; export const condJudgmentForOne = (ifData: any, streamObj: any) => { let flag = false; const curValue = streamObj[ifData['streamId']]; if (!curValue) return false; if (ifData['operator'] === '=') { flag = ifData['value'].toString() === curValue.toString(); } else if (ifData['operator'] === '!=') { flag = ifData['value'].toString() !== curValue.toString(); } else if (ifData['operator'] === '>') { flag = Number(curValue) > Number(ifData['value']); } else if (ifData['operator'] === '<') { flag = Number(curValue) < Number(ifData['value']); } else if (ifData['operator'] === '>=') { flag = Number(curValue) >= Number(ifData['value']); } else if (ifData['operator'] === '<=') { flag = Number(curValue) <= Number(ifData['value']); } return flag; }; let timer: any; /** * @name 防抖 * @param fn回调 * @param ms时间 */ export function debounce(fn: (...args: any) => void, ms: number) { return function (...args: any) { if (timer) { clearTimeout(timer); timer = null; } // console.log(1); timer = setTimeout(() => { // console.log(2); fn(...args); }, ms); }; }