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