From 5f27c85ae98f8dafa693f45931b2a0e7942a44f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=90=8D=E9=94=90?= <1565842059@qq.com> Date: Thu, 9 Jul 2026 15:21:05 +0800 Subject: [PATCH] =?UTF-8?q?feat(export):=20=E4=B8=BAExcel=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E5=8A=9F=E8=83=BD=E6=B7=BB=E5=8A=A0=E5=88=86=E7=BB=84?= =?UTF-8?q?=E8=A1=A8=E5=A4=B4=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改exportVisibleColumnsToExcel函数,增加groupConfig参数 - 实现buildGroupHeaderHtml函数用于构建二级表头结构 - 当存在分组配置时自动生成合并单元格的表头 - 支持按字段分组显示标题并设置样式 - 更新函数注释文档说明新参数用途 --- .../Scripts/app/swaptrade/EodPositionRisks.js | 3 +- YLErpWeb/wwwroot/Scripts/utils.js | 30 +++++++++++++++++-- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/YLErpWeb/wwwroot/Scripts/app/swaptrade/EodPositionRisks.js b/YLErpWeb/wwwroot/Scripts/app/swaptrade/EodPositionRisks.js index 4c5b205a..9d347225 100644 --- a/YLErpWeb/wwwroot/Scripts/app/swaptrade/EodPositionRisks.js +++ b/YLErpWeb/wwwroot/Scripts/app/swaptrade/EodPositionRisks.js @@ -730,7 +730,8 @@ function exportVisibleColumns() { var dateStr = $("#DateValueDate").val() || ''; var tabName = page.tabIndex == 2 ? '框架合约' : '日终持仓'; var fileName = '日终持仓风险_互换_' + tabName + (dateStr ? '_' + dateStr : ''); - main.exportVisibleColumnsToExcel(jgrid, fileName); + var groupConfig = page.tabIndex == 2 ? eodSwapGroupConfig : null; + main.exportVisibleColumnsToExcel(jgrid, fileName, groupConfig); } //---------------------------Formatter--------------------------------- diff --git a/YLErpWeb/wwwroot/Scripts/utils.js b/YLErpWeb/wwwroot/Scripts/utils.js index 993ad26c..ad2601b6 100644 --- a/YLErpWeb/wwwroot/Scripts/utils.js +++ b/YLErpWeb/wwwroot/Scripts/utils.js @@ -1209,8 +1209,9 @@ main.refreshCollapsibleGroupHeaders = function (jgrid) { * * @param {jQuery} jgrid jqGrid 容器 * @param {string} fileName 导出文件名(不含扩展名) + * @param {Array} groupConfig 可选,分组表头配置,每项 { title: string, columns: string[] } */ -main.exportVisibleColumnsToExcel = function (jgrid, fileName) { +main.exportVisibleColumnsToExcel = function (jgrid, fileName, groupConfig) { var colModel = jgrid.jqGrid('getGridParam', 'colModel'); // 只导出可见列(hidden !== true),与折叠状态联动:收起的列自动不可见 var visibleCols = colModel.filter(function (c) { return c.hidden !== true && c.name !== 'cb' && c.name !== 'rn'; }); @@ -1223,7 +1224,10 @@ main.exportVisibleColumnsToExcel = function (jgrid, fileName) { var html = ''; html += ''; html += ''; - //表头 + //表头:有分组配置时导出两级表头(分类 + 字段),否则保持原单级表头。 + if (groupConfig && groupConfig.length) { + html += buildGroupHeaderHtml(visibleCols, groupConfig); + } html += '' + headerLabels.map(function (l) { return ''; }).join('') + ''; @@ -1252,5 +1256,25 @@ main.exportVisibleColumnsToExcel = function (jgrid, fileName) { function escapeXml(s) { return s.replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"'); } + + function buildGroupHeaderHtml(cols, config) { + var titleByColumn = {}; + config.forEach(function (group) { + (group.columns || []).forEach(function (name) { + titleByColumn[name] = group.title || ''; + }); + }); + + var cells = []; + for (var i = 0; i < cols.length; i++) { + var title = titleByColumn[cols[i].name] || ''; + var colspan = 1; + while (i + colspan < cols.length && (titleByColumn[cols[i + colspan].name] || '') === title) { + colspan++; + } + cells.push(''); + i += colspan - 1; + } + return '' + cells.join('') + ''; + } }; - \ No newline at end of file
' + escapeXml(l) + '
' + escapeXml(title) + '