From e114652579336acdd667cc58b053b8c623b7b950 Mon Sep 17 00:00:00 2001 From: pengm <674192343@qq.com> Date: Wed, 10 Dec 2025 10:43:19 +0800 Subject: [PATCH] 1.修复keyup业务逻辑处理,支持跨任意表取值,如dLossQty:var s =0; var a=0; a= control.dSumMachineQty / 100 * dAdjustLossRate;只要标明slave. control. --- src/components/Common/commonBusiness.js | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++- src/components/Common/commonFunc.js | 49 +++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 97 insertions(+), 5 deletions(-) diff --git a/src/components/Common/commonBusiness.js b/src/components/Common/commonBusiness.js index 51ae065..410c59b 100644 --- a/src/components/Common/commonBusiness.js +++ b/src/components/Common/commonBusiness.js @@ -994,6 +994,47 @@ export function getCalculateMoneyByLossMoney(app, type, masterData, tableDataRow return tableDataRow; } +export function extractTableNames(expression) { + // 1. 定义需要识别的表名列表(与tableSelectedData的key一一对应) + const targetTables = ['master', 'slave', 'control', 'materialsRow', 'processRow', 'slaveChildRow']; + + // 入参校验:非字符串直接返回空数组 + if (typeof expression !== 'string' || expression.trim() === '') { + return []; + } + + // 2. 构建正则:匹配「表名.任意属性」的格式(仅捕获表名) + const tableNamePattern = targetTables.join('|'); + // \b 确保表名是独立单词(避免匹配control123这种) + // 正则匹配:master/slave/control等 + 点号 + 任意属性名 + const regex = new RegExp(`\\b(${tableNamePattern})\\.\\w+`, 'g'); + + // 3. 匹配所有符合规则的片段,提取表名 + const matches = expression.match(regex) || []; + const tableNames = matches.map(match => { + // 拆分 "control.dSumMachineQty" → 取前面的表名部分 + return match.split('.')[0]; + }); + + // 4. 去重并返回纯表名数组 + return [...new Set(tableNames)]; +} + +/** + * 移除tableSelectedData中key的Row后缀,返回新对象 + */ +function formatTableData(originObj) { + const newObj = {}; + // 遍历原始对象的键值对 + Object.entries(originObj).forEach(([key, value]) => { + // 去掉末尾的Row后缀 + const newKey = key.replace(/Row$/, ''); + // 赋值到新对象(键名更新,数据不变) + newObj[newKey] = value; + }); + return newObj; +} + /* 自定义onChange事件 */ export function getKeyUpEvent(name, sFieldName, tableConfig, masterData, tableDataRow, isWait, dataCollection, dataSelected, app) { let tableDataRowNew = {}; @@ -1448,7 +1489,17 @@ export function getKeyUpEvent(name, sFieldName, tableConfig, masterData, tableDa } } } else if (commonUtils.isNotEmptyObject(sAssignField)) { /* 单表keyUp事件 */ - tableDataRowNew = { ...tableDataRowNew, ...commonFunc.getAssignFieldValue(sAssignField, tableDataRowNew, newCopyTo) }; // 取赋值字段 + const bCrossTable =(sAssignField?.includes('slave.') || sAssignField?.includes('slave.') + || sAssignField.includes('control.') + || sAssignField?.includes('materials.') + || sAssignField?.includes('process.') + || sAssignField?.includes('master.')); + + const tableNames = this.extractTableNames(sAssignField); + // 生成新的tableSelectedData + const newTableSelectedMap = formatTableData(dataSelected); + const datasetMap = bCrossTable ? newTableSelectedMap : newCopyTo; + tableDataRowNew = { ...tableDataRowNew, ...commonFunc.getAssignFieldValue(sAssignField, tableDataRowNew, datasetMap, false, bCrossTable, tableNames) }; // 取赋值字段 let { handleType } = masterData ? masterData : { handleType: '' }; if (name !== 'master') { // eslint-disable-next-line prefer-destructuring diff --git a/src/components/Common/commonFunc.js b/src/components/Common/commonFunc.js index a3b15d0..4affb58 100644 --- a/src/components/Common/commonFunc.js +++ b/src/components/Common/commonFunc.js @@ -270,7 +270,7 @@ export function getDefaultData(config, allTableData = {}, extraData = {}) { } /** 获取数据默认值 */ -export function getAssignFieldValue(sAssignField, srcData, allTableData = {}, bMultiTable, bCommon) { +export function getAssignFieldValue(sAssignField, srcData, allTableData = {}, bMultiTable, bCommon, tableNames) { const returnData = {}; if (!commonUtils.isEmpty(sAssignField)) { /* 赋值数组 */ @@ -281,12 +281,40 @@ export function getAssignFieldValue(sAssignField, srcData, allTableData = {}, bM console.log('sAssignFiel:d', sAssignField); if (sAssignField.includes('slave.') || sAssignField.includes('slave.') || sAssignField.includes('control.') || sAssignField.includes('materials.') || sAssignField.includes('process.') || sAssignField.includes('master.')) { /* var表格对象 */ - for (const row of Object.keys(allTableData)) { + // 第一步:统一转为key数组(核心优化) + const allKeys = Object.keys(allTableData); // 先拿到原对象所有key + const matchedKeys = commonUtils.isNotEmptyArr(tableNames) + ? allKeys.filter(key => tableNames.includes(key)) // 筛选匹配的key + : allKeys; // 未筛选时直接用所有key + + for (const row of matchedKeys) { const srcData = allTableData[row]; const srcNewData = lodash.cloneDeep(srcData); if (srcNewData.sCombinedMemo) { srcNewData.sCombinedMemo = ''; } + if(srcNewData.sWorkOrderParam) { + srcNewData.sWorkOrderParam = ''; + } + if(srcNewData.sProcessParam) { + srcNewData.sProcessParam = ''; + } + if(srcNewData.sNormParam) { + srcNewData.sNormParam = ''; + } + if(srcNewData.sNormPanel) { + srcNewData.sNormPanel = ''; + } + if(srcNewData.sWorkOrderPanel) { + srcNewData.sWorkOrderPanel = ''; + } + if(srcNewData.sParams) { + srcNewData.sParams = ''; + } + if(srcNewData.sQuoParams) { + srcNewData.sQuoParams = ''; + } + if (srcNewData.sPositiveColor) { srcNewData.sPositiveColor = ''; } @@ -307,8 +335,21 @@ export function getAssignFieldValue(sAssignField, srcData, allTableData = {}, bM varValue = varValue === 'NaN' || varValue === undefined ? '' : varValue; field = `var ${key}='${varValue}';`; } else { - varValue = varValue === 'NaN' || isNaN(varValue) || varValue === undefined || commonUtils.isEmptyObject(varValue) ? 0 : varValue; - field = `var ${key}=${varValue};`; + let finalValue = varValue; + // 1. 先判断类型:非数字类型且无法转为数字 → 设为0 + if (typeof finalValue !== 'number' && isNaN(Number(finalValue))) { + finalValue = 0; + } + // 2. 处理特殊异常值(NaN/undefined/"NaN") + else if (finalValue === 'NaN' || finalValue === undefined || Number.isNaN(finalValue)) { + finalValue = 0; + } + // 3. 空对象特殊处理(仅当值是对象且为空时设为0) + else if (typeof finalValue === 'object' && finalValue !== null && commonUtils.isEmptyObject(finalValue)) { + finalValue = 0; + } + // 4. 合法数字(包括0/222等)保留原值 + field = `var ${key}=${finalValue};`; } strVar += field; } -- libgit2 0.22.2