From ff5cef99b31de0a28a08e307d033adfa1e616c47 Mon Sep 17 00:00:00 2001 From: pengm <674192343@qq.com> Date: Fri, 30 Jan 2026 15:37:40 +0800 Subject: [PATCH] 1.系统单据如果勾选了bMark,在表格Footer增加部分勾选合计数据展示 --- src/components/Common/CommonTable/index.js | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- src/components/Common/commonFunc.js | 1 + src/utils/utils.js | 2 +- 3 files changed, 119 insertions(+), 3 deletions(-) diff --git a/src/components/Common/CommonTable/index.js b/src/components/Common/CommonTable/index.js index 600598b..a4b1ace 100644 --- a/src/components/Common/CommonTable/index.js +++ b/src/components/Common/CommonTable/index.js @@ -200,6 +200,8 @@ class CommonTableRc extends React.Component { currentHoverSid: '', simpleModalVisible: false, simpleModalWord: '', + selectedSumData: {}, /* 部分勾选合计数据 */ + selectedRowCount: 0, /* 部分勾选行数 */ }; this.rowKey = commonUtils.isNotEmptyObject(props.tableProps) && !commonUtils.isEmpty(props.tableProps.rowKey) ? props.tableProps.rowKey : 'sId'; /* 表格主键 */ this.config = {}; /* 配置信息(基础)(数据格式:对象) */ @@ -2371,7 +2373,7 @@ class CommonTableRc extends React.Component { let showConfig = []; /* 通过sName过滤出对应的showConfig */ /* 通过sName过滤出对应的showConfig */ - + if (this.props.customConfig) { const showConfigArr = this.props.customConfig.filter(item => commonUtils.isNotEmptyObject(item.sName) && commonUtils.isNotEmptyObject(item.sColorTerms) && item.bVisible); if (commonUtils.isNotEmptyArr(showConfigArr)) { @@ -4494,7 +4496,11 @@ class CommonTableRc extends React.Component { const sumset = commonFunc.showMessage(this.props.app.commonConst, 'sumSet') || '合计'; let colSpan = 0; - if ((!totalData.length && !totalData1.length) || this.props.footer !== undefined) { + if (this.props.footer !== undefined) { + return (<>); + } + // 即使 totalData 和 totalData1 都为空,也要显示部分勾选合计 + if (!totalData.length && !totalData1.length && !this.state.selectedRowCount) { return (<>); } if (this.props.tableProps.rowSelection !== null && !(this.props.config && !this.props.config.bisMutiSelect)) { @@ -4692,9 +4698,59 @@ class CommonTableRc extends React.Component { } }); } + // 部分勾选合计 + const { selectedSumData, selectedRowCount } = this.state; + const selectedCells = []; + if (selectedRowCount > 0) { + let selectedSummaryCellTotal = ''; + selectedSummaryCellTotal = ( + + 已选{selectedRowCount}行 + + ); + selectedCells.push(selectedSummaryCellTotal); + + tableColumn.forEach((item, index) => { + if (colSpan === 0 && index === 0) { + return; + } + let iTag = index + colSpan; + if (tableColumn[index].children !== undefined && tableColumn[index].children.length > 0) { + tableColumn[index].children.forEach((itemChild, i) => { + const sValue = selectedSumData[itemChild.dataIndex] || 0; + const cellChild = ( + + {this.formatThousands(sValue)} + + ); + selectedCells.push(cellChild); + }); + } else { + const sValue = selectedSumData[item.dataIndex] || 0; + const cell = ( + + {this.formatThousands(sValue)} + + ); + selectedCells.push(cell); + } + }); + } + return ( { + selectedRowCount > 0 ? ( + + {selectedCells} + + ) : '' + } + { totalData.length ? ( {cells} @@ -4783,6 +4839,64 @@ class CommonTableRc extends React.Component { } } + + handleSelectColumn = (config, dataSource) => { + const tableDataTotal = {}; + // 添加防御性检查 + if (!config || !config.gdsconfigformslave || !Array.isArray(config.gdsconfigformslave)) { + return; + } + const sumConfig = config.gdsconfigformslave.filter(item => item && item.sName !== '' && item.bVisible && item.bSum); + if (commonUtils.isNotEmptyArr(sumConfig)) { + if (commonUtils.isNotEmptyObject(config) && commonUtils.isNotEmptyArr(dataSource)) { + // 筛选出 bMark === true 的行 + const selectedRows = dataSource.filter(tableDataRow => tableDataRow && tableDataRow.bMark === true); + selectedRows.forEach((tableDataRow) => { + sumConfig.forEach((sumItem) => { + if (tableDataRow && tableDataRow.handleType !== 'del' && sumItem && sumItem.sName) { + if (sumItem.sName.substring(sumItem.sName.length - 5, sumItem.sName.length).toLowerCase() === 'Price'.toLowerCase()) { + tableDataTotal[sumItem.sName] = commonUtils.convertFixNum(commonUtils.convertToNum(tableDataTotal[sumItem.sName]) + + commonUtils.convertToNum(tableDataRow[sumItem.sName]), this.props.getFloatNum ? this.props.getFloatNum(sumItem.sName) : 2); + } else { + /* 如果设置格式 按照设置格式来,否则按照系统设定 */ + const sFieldConfigArr = config.gdsconfigformslave.filter(item => item.sName === sumItem.sName && item.bVisible); + if (commonUtils.isNotEmptyArr(sFieldConfigArr)) { + const { sFieldValidation: sFieldValidationOld, sName } = sFieldConfigArr[0]; + if (commonUtils.isNotEmptyObject(sFieldValidationOld)) { + const [length1, length2] = sFieldValidationOld.split(','); + if (commonUtils.isNotEmptyNumber(length2)) { + tableDataTotal[sumItem.sName] = commonUtils.convertFixNum(commonUtils.convertToNum(tableDataTotal[sumItem.sName]) + + commonUtils.convertToNum(tableDataRow[sumItem.sName]), this.props.getFloatNum(length2)); + } + } else { + tableDataTotal[sumItem.sName] = commonUtils.convertFixNum(commonUtils.convertToNum(tableDataTotal[sumItem.sName]) + + commonUtils.convertToNum(tableDataRow[sumItem.sName]), this.props.getFloatNum(sumItem.sName)); + } + } + } + } + }); + }); + } else { + sumConfig.forEach((sumItem) => { + tableDataTotal[sumItem.sName] = 0; + }); + } + tableDataTotal.bSum = true; + tableDataTotal.key = '0000'; + console.log('tableDat212222222aTotal', tableDataTotal); + + if (this.mounted) { + // 计算选中的行数,添加防御性检查 + const selectedRowCount = commonUtils.isNotEmptyArr(dataSource) ? dataSource.filter(row => row && row.bMark === true).length : 0; + this.setState({ + selectedSumData: tableDataTotal, + selectedRowCount: selectedRowCount + }); + } + } + } + handleSumOtherColumn = (config, dataSource) => { const tableDataTotal = {}; const sumConfig = config.gdsconfigformslave.filter(item => item.sName !== '' && item.bVisible && item.bSum); @@ -6185,6 +6299,7 @@ class CommonTableRc extends React.Component { } else if (name === 'slaveChild') { this.handleSumChildColumn(props.config, props.data); } else { + this.handleSelectColumn(props.config, props.data); this.handleSumAllColumn(props.config, props.data); } } diff --git a/src/components/Common/commonFunc.js b/src/components/Common/commonFunc.js index b56c367..76c9019 100644 --- a/src/components/Common/commonFunc.js +++ b/src/components/Common/commonFunc.js @@ -104,6 +104,7 @@ export function getHeaderConfig(config) { sTitleColor: child.sFontColor, /* 设置表格标题字体颜色 */ bCheckBox: child.bCheckBox, /* 是否支持表头多选 */ bReadonly: child.bReadonly, /* 是否只读 */ + bSum: child.bSum, /* 设置表格必填项*号 */ }); } } diff --git a/src/utils/utils.js b/src/utils/utils.js index ed70b20..45fdfd4 100644 --- a/src/utils/utils.js +++ b/src/utils/utils.js @@ -157,7 +157,7 @@ export function convertStrToObj(str, defaultObj = {}) { try { result = JSON.parse(str.replace(/\r\n|\n|\r|\t/g, ' ')); } catch (error) { - console.log(`${str}JSON报错:`, e.message); + // console.log(`${str}JSON报错:`, e.message); result = defaultObj; } } -- libgit2 0.22.2