@@ -113,8 +113,8 @@ class ReceivableReport extends Component {
|
|||||||
// 加载 ag-grid
|
// 加载 ag-grid
|
||||||
//await loadJS("https://cdn.jsdelivr.net/npm/ag-grid-community/dist/ag-grid-community.min.js");
|
//await loadJS("https://cdn.jsdelivr.net/npm/ag-grid-community/dist/ag-grid-community.min.js");
|
||||||
|
|
||||||
// 统一处理 columns:给所有列添加穿透渲染器
|
// 统一处理 columns:先合并"应收开始/应收结束"为"应收周期",再给所有列添加穿透渲染器
|
||||||
const columns = this.config.columns || [];
|
const columns = this._mergeDateRangeColumns(this.config.columns || []);
|
||||||
columns.forEach((col) => {
|
columns.forEach((col) => {
|
||||||
col.cellRenderer = this.linkRender.bind(this);
|
col.cellRenderer = this.linkRender.bind(this);
|
||||||
// 对固定宽度列(如序号列)单独设置 minWidth,避免被 defaultColDef 覆盖
|
// 对固定宽度列(如序号列)单独设置 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),则渲染为可点击链接
|
* 如果字段值是对象(包含 model、id、display_name),则渲染为可点击链接
|
||||||
|
|||||||
Reference in New Issue
Block a user