diff --git a/YLErpWeb/wwwroot/Scripts/utils.js b/YLErpWeb/wwwroot/Scripts/utils.js
index 05aee8b1..993ad26c 100644
--- a/YLErpWeb/wwwroot/Scripts/utils.js
+++ b/YLErpWeb/wwwroot/Scripts/utils.js
@@ -1118,21 +1118,25 @@ main.initCollapsibleGroupHeaders = function (jgrid, groupConfig) {
var collapseState = {};
// 根据 groupConfig + 当前 colModel 可见性,构造 setGroupHeaders 所需的 groupHeaders 参数。
- // 同步剔除"该组所有列都被隐藏"的分组(与 setcolumnChooser2:185-186 的 notShow 逻辑一致)。
+ // 关键:折叠的分组仍需保留一个表头单元格作为"展开锚点",否则用户无法再次展开。
function buildGroupHeaders() {
var colModel = jgrid.jqGrid('getGridParam', 'colModel');
var visibleNames = colModel.filter(function (c) { return !c.hidden; }).map(function (c) { return c.name; });
var groupHeaders = [];
for (var g = 0; g < groupConfig.length; g++) {
var group = groupConfig[g];
- // 计算该分组在当前可见列中的连续段,用于 setGroupHeaders 的 startColumnName/numberOfColumns
var visibleColsInGroup = group.columns.filter(function (n) { return visibleNames.indexOf(n) > -1; });
- if (!visibleColsInGroup.length) continue; // 整组都隐藏,跳过
+ //整组都不可见:若是被折叠的分组,仍需保留锚点(下方 applyGroupHeaders 已保留首列);
+ //若是被 setcolumnChooser 主动隐藏的分组,则跳过不渲染表头
+ if (!visibleColsInGroup.length && !collapseState[group.title]) continue;
+ //锚点列:折叠态下 numberOfColumns=1(首列被保留);展开态为该组可见列数
+ var count = visibleColsInGroup.length || 1;
+ var icon = collapseState[group.title] ? '▶' : '▼';
+ var titleClass = collapseState[group.title] ? 'group-header-title group-collapsed' : 'group-header-title';
groupHeaders.push({
- startColumnName: visibleColsInGroup[0],
- numberOfColumns: visibleColsInGroup.length,
- titleText: ''
+ startColumnName: group.columns[0], //锚点列始终是首列(折叠时首列被保留)
+ numberOfColumns: count,
+ titleText: '' + icon + ' ' + group.title + ''
});
}
return groupHeaders;
@@ -1141,12 +1145,17 @@ main.initCollapsibleGroupHeaders = function (jgrid, groupConfig) {
// 应用一次分组表头(含折叠态显隐),复用 destroyGroupHeader → setGroupHeaders 模式
function applyGroupHeaders() {
jgrid.jqGrid('destroyGroupHeader', true); // true: 不恢复为单行表头
- // 先按折叠状态显隐列
+ // 按折叠状态显隐列:折叠的分组保留首列作为锚点(避免整组表头消失无法展开)
for (var g = 0; g < groupConfig.length; g++) {
var group = groupConfig[g];
if (collapseState[group.title]) {
- jgrid.setGridParam().hideCol(group.columns);
+ //折叠:隐藏除首列外的所有列,保留首列作为锚点
+ if (group.columns.length > 1) {
+ jgrid.setGridParam().hideCol(group.columns.slice(1));
+ }
+ jgrid.setGridParam().showCol([group.columns[0]]);
} else {
+ //展开:恢复该组所有列
jgrid.setGridParam().showCol(group.columns);
}
}
@@ -1154,7 +1163,7 @@ main.initCollapsibleGroupHeaders = function (jgrid, groupConfig) {
if (groupHeaders.length) {
jgrid.jqGrid('setGroupHeaders', { useColSpanStyle: true, groupHeaders: groupHeaders });
}
- // 保存到 jqGrid 参数,便于与 setcolumnChooser 协调
+ //保存到 jqGrid 参数,便于与 setcolumnChooser 协调
jgrid.jqGrid('setGridParam', { collapsibleGroupConfig: groupConfig, collapseState: collapseState });
bindHeaderClick();
}