- 搜索栏与应收/应付明细页统一为页面级手写搜索区(4列网格、查询/重置独占一行靠右、默认折叠一行4条件) - 发票状态/收付款状态的搜索标签、表格列标签与下拉选项按结算类型区分(收款=开票/收款方向,付款=收票/付款方向) - 下拉选项优先取数据字典(invoice_status_*/payment_status_*),未配置时回退前端默认文案 - 搜索区展开/收起后触发 avue 表格高度重算,避免分页被推出视口出现多个滚动条
101 lines
3.8 KiB
JavaScript
101 lines
3.8 KiB
JavaScript
/**
|
||
* 正式结算单列表(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);
|