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: '' + - (collapseState[group.title] ? '▶' : '▼') + ' ' + group.title + '' + 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(); }