/** * 正式结算单列表(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);