Files
tms-erp-web/src/option/settlement/formalSettlement.js
T
刘泉佳 69782cecfc 💄 收款/付款结算单搜索栏改造为手写搜索区,状态文案按结算类型区分
- 搜索栏与应收/应付明细页统一为页面级手写搜索区(4列网格、查询/重置独占一行靠右、默认折叠一行4条件)
- 发票状态/收付款状态的搜索标签、表格列标签与下拉选项按结算类型区分(收款=开票/收款方向,付款=收票/付款方向)
- 下拉选项优先取数据字典(invoice_status_*/payment_status_*),未配置时回退前端默认文案
- 搜索区展开/收起后触发 avue 表格高度重算,避免分页被推出视口出现多个滚动条
2026-11-10 00:51:29 +08:00

101 lines
3.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 正式结算单列表(avue-crud)配置
* ------------------------------------------------------------------
* 列表页与其它模块统一使用 avue-crud,头部按钮(刷新 / 列显隐 / 显示方式)
* 由 avue-crud 自带,不做二次封装。
*
* 搜索栏与应收/应付明细页统一为页面级手写搜索区(见 formal-settlement.vue),
* 此处只保留表格列配置。
*
* 表格列复用 formalSettlementTable.js 的 formalSettlementTableColumns(与弹窗内
* 明细表共用同一份列定义),此处只补充 avue 需要的展示属性,避免两处维护。
*/
import { formatSealTypes } from '@/utils/settlement-seal';
import {
kingdeeSyncStatusOptions,
kingdeeWriteOffStatusOptions,
paymentStatusOptions,
} from './formalSettlementSearch';
import { formalSettlementTableColumns } from './formalSettlementTable';
const textFormatter = (row, value) =>
value === null || value === undefined || value === '' ? '-' : value;
const sealTypesFormatter = (row, value) => formatSealTypes(value) || '-';
/** 金额统一展示:两位小数 + 币种 */
const moneyFormatter = (row, value) =>
`${Number(value || 0).toFixed(2)} ${row?.currency || 'RMB'}`;
const pickLabel = (options, value) =>
options.find(item => item.value === value)?.label || value || '-';
/** 表格列的 avue 增量配置:插槽、覆盖宽度等 */
const COLUMN_EXTRA = {
formalSettlementNo: { slot: true },
sealTypes: { formatter: sealTypesFormatter },
invoiceStatusName: { slot: true },
paymentStatusName: { slot: true },
approvalStatusName: { slot: true },
adjustFlag: {
formatter: row => row.adjustStatusName || (row.originFormalSettlementNo ? '调整后单' : '-'),
},
kingdeeSyncStatus: { slot: true },
kingdeeLockStatus: { slot: true },
kingdeeWriteOffStatus: { slot: true },
kingdeeAssignStatus: { slot: true },
createTime: { width: 180 },
};
/** 收款/付款结算单按结算类型展示各自标签 */
const PAYMENT_FIELD_LABELS = {
paidAmount: { payable: '已付合计(含预付)', receivable: '已收合计(含预付)' },
paymentStatusName: { payable: '付款状态', receivable: '收款状态' },
};
// 已指定应付仅付款结算单(先票后款 A302-6)有,收款结算单不展示
const buildTableColumns = settlementType =>
formalSettlementTableColumns
.filter(column => !(settlementType === 'receivable' && column.prop === 'kingdeeAssignStatus'))
.map(column => {
const extra = { ...(COLUMN_EXTRA[column.prop] || {}) };
const label = PAYMENT_FIELD_LABELS[column.prop]?.[settlementType];
if (label) extra.label = label;
if (column.money) {
extra.formatter = moneyFormatter;
extra.align = 'right';
}
// link / status 标记的列统一走单元格插槽
if (column.link || column.status) extra.slot = true;
// 插槽列不挂兜底 formatter:avue 中 formatter 会覆盖单元格插槽渲染
if (!extra.slot && !extra.formatter) extra.formatter = textFormatter;
return { ...column, ...extra };
});
export const formalSettlementOption = (settlementType = '') => ({
height: 'auto',
calcHeight: 32,
tip: false,
border: true,
index: true,
indexLabel: '序号',
indexWidth: 64,
indexFixed: 'left',
selection: true,
selectionWidth: 52,
selectionFixed: 'left',
addBtn: false,
viewBtn: false,
delBtn: false,
editBtn: false,
menuWidth: 320,
menuFixed: 'right',
column: [...buildTableColumns(settlementType)],
});
export const kingdeeSyncName = value => pickLabel(kingdeeSyncStatusOptions, value);
export const kingdeeWriteOffName = value => pickLabel(kingdeeWriteOffStatusOptions, value);
export const paymentStatusName = (value, settlementType) =>
pickLabel(paymentStatusOptions(settlementType), value);