175 lines
5.4 KiB
JavaScript
175 lines
5.4 KiB
JavaScript
/**
|
||
* 正式结算单列表(avue-crud)配置
|
||
* ------------------------------------------------------------------
|
||
* 列表页与其它模块统一使用 avue-crud,头部 4 个按钮(刷新 / 列显隐 / 搜索显隐 /
|
||
* 显示方式)由 avue-crud 自带,不做二次封装。
|
||
*
|
||
* 表格列复用 formalSettlementTable.js 的 formalSettlementTableColumns(与弹窗内
|
||
* 明细表共用同一份列定义),此处只补充 avue 需要的展示/搜索属性,避免两处维护。
|
||
*
|
||
* ⚠️ searchOrder 为降序排序,值越大越靠前。
|
||
* ⚠️ 仅用于搜索的列必须 hide + showColumn: false,否则会混进「列显隐」抽屉。
|
||
* ⚠️ column 数组顺序 = 表格列顺序,搜索专用列统一放在数组最前面。
|
||
*/
|
||
|
||
import {
|
||
approvalStatusOptions,
|
||
invoiceStatusOptions,
|
||
kingdeeSyncStatusOptions,
|
||
paymentStatusOptions,
|
||
} from './formalSettlementSearch';
|
||
import { formalSettlementTableColumns } from './formalSettlementTable';
|
||
|
||
const textFormatter = (row, value) =>
|
||
value === null || value === undefined || value === '' ? '-' : 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 || '-';
|
||
|
||
const searchOnlyColumn = ({ label, prop, searchOrder, type = 'input', dicData }) => {
|
||
const column = {
|
||
label,
|
||
prop,
|
||
search: true,
|
||
searchOrder,
|
||
searchSpan: 5,
|
||
hide: true,
|
||
showColumn: false,
|
||
addDisplay: false,
|
||
editDisplay: false,
|
||
viewDisplay: false,
|
||
};
|
||
if (type === 'select') {
|
||
column.type = 'select';
|
||
column.searchPlaceholder = '请选择';
|
||
column.dicData = dicData || [];
|
||
} else if (type === 'daterange') {
|
||
column.type = 'daterange';
|
||
column.searchType = 'daterange';
|
||
column.searchPlaceholder = '请选择';
|
||
} else {
|
||
column.searchPlaceholder = '请输入';
|
||
}
|
||
return column;
|
||
};
|
||
|
||
/** 表格列的 avue 增量配置:搜索项、插槽、覆盖宽度等 */
|
||
const COLUMN_EXTRA = {
|
||
formalSettlementNo: {
|
||
slot: true,
|
||
search: true,
|
||
searchSpan: 5,
|
||
searchOrder: 12,
|
||
searchPlaceholder: '请输入',
|
||
},
|
||
payerName: { search: true, searchSpan: 5, searchOrder: 7, searchPlaceholder: '请输入' },
|
||
payeeName: { search: true, searchSpan: 5, searchOrder: 6, searchPlaceholder: '请输入' },
|
||
projectName: { search: true, searchSpan: 5, searchOrder: 11, searchPlaceholder: '请输入' },
|
||
deptName: { search: true, searchslot: true, searchSpan: 5, searchOrder: 10 },
|
||
contractNo: { search: true, searchSpan: 5, searchOrder: 9, searchPlaceholder: '请输入' },
|
||
invoiceStatusName: { slot: true },
|
||
paymentStatusName: { slot: true },
|
||
approvalStatusName: { slot: true },
|
||
adjustFlag: {
|
||
formatter: row => row.adjustStatusName || (row.originFormalSettlementNo ? '调整后单' : '-'),
|
||
},
|
||
kingdeeSyncStatus: {
|
||
slot: true,
|
||
search: true,
|
||
type: 'select',
|
||
dicData: kingdeeSyncStatusOptions,
|
||
searchSpan: 5,
|
||
searchOrder: 2,
|
||
searchPlaceholder: '请选择',
|
||
},
|
||
kingdeeLockStatus: { slot: true },
|
||
createTime: { width: 180 },
|
||
};
|
||
|
||
const buildTableColumns = () =>
|
||
formalSettlementTableColumns.map(column => {
|
||
const extra = { ...(COLUMN_EXTRA[column.prop] || {}) };
|
||
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 = () => ({
|
||
height: 'auto',
|
||
calcHeight: 32,
|
||
tip: false,
|
||
searchBtnText: '查询',
|
||
emptyBtnText: '重置',
|
||
searchShow: true,
|
||
searchIcon: true,
|
||
searchLabelWidth: 88,
|
||
// 查询/重置紧跟首行 4 个条件(4×5 + 菜单 4 = 24),不再独占下一整行
|
||
searchMenuSpan: 4,
|
||
searchIndex: 4,
|
||
searchMenuPosition: 'right',
|
||
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: [
|
||
// ---------- 仅搜索列 ----------
|
||
searchOnlyColumn({
|
||
label: '预付结算单号',
|
||
prop: 'preSettlementNo',
|
||
searchOrder: 8,
|
||
}),
|
||
searchOnlyColumn({
|
||
label: '发票状态',
|
||
prop: 'invoiceStatus',
|
||
searchOrder: 5,
|
||
type: 'select',
|
||
dicData: invoiceStatusOptions,
|
||
}),
|
||
searchOnlyColumn({
|
||
label: '收付款状态',
|
||
prop: 'paymentStatus',
|
||
searchOrder: 4,
|
||
type: 'select',
|
||
dicData: paymentStatusOptions,
|
||
}),
|
||
searchOnlyColumn({
|
||
label: '审核状态',
|
||
prop: 'approvalStatus',
|
||
searchOrder: 3,
|
||
type: 'select',
|
||
dicData: approvalStatusOptions,
|
||
}),
|
||
searchOnlyColumn({
|
||
label: '生成日期',
|
||
prop: 'createDateRange',
|
||
searchOrder: 1,
|
||
type: 'daterange',
|
||
}),
|
||
// ---------- 表格列(部分兼搜索项) ----------
|
||
...buildTableColumns(),
|
||
],
|
||
});
|
||
|
||
export const kingdeeSyncName = value => pickLabel(kingdeeSyncStatusOptions, value);
|
||
export const paymentStatusName = value => pickLabel(paymentStatusOptions, value);
|