周期列合并
This commit is contained in:
@@ -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),则渲染为可点击链接
|
||||
|
||||
Reference in New Issue
Block a user