!12913 !12912 周期列合并

Merge pull request !12913 from 李鹏宇/dev
This commit is contained in:
李鹏宇
2026-09-23 03:16:51 +00:00
committed by Gitee
@@ -113,8 +113,8 @@ class ReceivableReport extends Component {
// 加载 ag-grid
//await loadJS("https://cdn.jsdelivr.net/npm/ag-grid-community/dist/ag-grid-community.min.js");
// 统一处理 columns:给所有列添加穿透渲染器
const columns = this.config.columns || [];
// 统一处理 columns:先合并"应收开始/应收结束"为"应收周期",再给所有列添加穿透渲染器
const columns = this._mergeDateRangeColumns(this.config.columns || []);
columns.forEach((col) => {
col.cellRenderer = this.linkRender.bind(this);
// 对固定宽度列(如序号列)单独设置 minWidth,避免被 defaultColDef 覆盖
@@ -247,6 +247,48 @@ class ReceivableReport extends Component {
});
}
/**
* 合并相邻的"应收开始/应收结束"两列为"应收周期"一列
* 仅前端展示层合并,不动后端数据与搜索;违约金相关列(含"违约金")按用户要求保留原样
*/
_mergeDateRangeColumns(columns) {
// 判断是否为"应收开始"列(兼容"应收开始日期",排除违约金)
const isStart = (f) =>
!!f && (f === '应收开始' || f === '应收开始日期' ||
f.endsWith('应收开始') || f.endsWith('应收开始日期')) && !f.includes('违约金');
// 判断是否为"应收结束"列(兼容"应收结束日期",排除违约金)
const isEnd = (f) =>
!!f && (f === '应收结束' || f === '应收结束日期' ||
f.endsWith('应收结束') || f.endsWith('应收结束日期')) && !f.includes('违约金');
const result = [];
for (let i = 0; i < columns.length; i++) {
const cur = columns[i];
const next = columns[i + 1];
// 当前是开始列且紧邻下一是结束列 → 合并为一列
if (isStart(cur.field) && next && isEnd(next.field)) {
result.push({
...cur, // 继承开始列的全部属性(含穿透渲染器等)
headerName: '应收周期', // 表头改为"应收周期"
field: cur.field, // 仍以开始字段为锚点(数据里该字段仍存在)
// 合并取值:开始 ~ 结束;单头为空只显另一头,不加兜底
valueGetter: (params) => {
const start = params.data ? params.data[cur.field] : '';
const end = params.data ? params.data[next.field] : '';
if (start && end) return `${start} ~ ${end}`;
return start || end || '';
},
// 列宽取两列之和,保持原布局占比
flex: (cur.flex || 0) + (next.flex || 0) || 1,
});
i++; // 跳过已合并的结束列
} else {
result.push(cur);
}
}
return result;
}
/**
* 穿透渲染器:将对象格式的字段渲染为可点击的链接
* 如果字段值是对象(包含 model、id、display_name),则渲染为可点击链接