/** * 导入结算单列表(avue-crud)配置 * ------------------------------------------------------------------ * 列表页与其它模块统一使用 avue-crud,头部 4 个按钮(刷新 / 列显隐 / 搜索显隐 / * 显示方式)由 avue-crud 自带,不做二次封装。 * * ⚠️ searchOrder 为降序排序,值越大越靠前。 * ⚠️ 仅用于搜索的列必须 hide + showColumn: false,否则会混进「列显隐」抽屉。 */ const IMPORT_STATUS_OPTIONS = [ { label: '草稿', value: 'draft' }, { label: '已完成', value: 'completed' }, { label: '已作废', value: 'voided' }, ]; const SETTLEMENT_TYPE_OPTIONS = [ { label: '应收', value: 'receivable' }, { label: '应付', value: 'payable' }, ]; const textFormatter = (row, value) => value === null || value === undefined || value === '' ? '-' : value; const pickLabel = (options, value) => options.find(item => item.value === value)?.label || value || '-'; const settlementTypeLabel = value => pickLabel(SETTLEMENT_TYPE_OPTIONS, value); const billTypeLabel = value => (value === 'pre' ? '预结算单' : value ? '正式结算单' : '-'); export const importStatusLabel = value => pickLabel(IMPORT_STATUS_OPTIONS, value); export const settlementImportOption = () => ({ 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: false, addBtn: false, viewBtn: false, delBtn: false, editBtn: false, menuWidth: 220, menuFixed: 'right', column: [ // ---------- 搜索项(前 4 项默认展示,其余折叠;searchOrder 越大越靠前) ---------- { label: '状态', prop: 'importStatus', type: 'select', search: true, searchSpan: 5, searchOrder: 6, searchPlaceholder: '请选择', dicData: IMPORT_STATUS_OPTIONS, hide: true, showColumn: false, addDisplay: false, editDisplay: false, viewDisplay: false, }, { label: '导入类型', prop: 'settlementType', type: 'select', search: true, searchSpan: 5, searchOrder: 5, searchPlaceholder: '请选择', dicData: SETTLEMENT_TYPE_OPTIONS, hide: true, showColumn: false, addDisplay: false, editDisplay: false, viewDisplay: false, }, // ---------- 表格列 ---------- { label: '导入批次号', prop: 'batchNo', slot: true, search: true, searchSpan: 5, searchOrder: 7, searchPlaceholder: '请选择', minWidth: 160, }, { label: '状态', prop: 'importStatusName', slot: true, width: 100, align: 'center' }, { label: '导入类型', prop: 'settlementTypeName', minWidth: 100, align: 'center', formatter: (row, value) => value || settlementTypeLabel(row.settlementType), }, { label: '结算单', prop: 'settlementBillTypeName', minWidth: 110, align: 'center', formatter: (row, value) => value || billTypeLabel(row.settlementBillType), }, { label: '项目', prop: 'projectName', search: true, searchSpan: 5, searchOrder: 4, searchPlaceholder: '请输入', minWidth: 140, formatter: textFormatter, }, { label: '客户', prop: 'customerName', search: true, searchSpan: 5, searchOrder: 3, searchPlaceholder: '请输入', minWidth: 140, formatter: textFormatter, }, { label: '承运商', prop: 'carrierName', search: true, searchSpan: 5, searchOrder: 2, searchPlaceholder: '请输入', minWidth: 140, formatter: textFormatter, }, { label: '明细行数', prop: 'detailCount', width: 100, align: 'center', formatter: row => row.detailCount ?? row.waybillCount ?? 0, }, { label: '创建时间', prop: 'createTime', width: 180, align: 'center', formatter: textFormatter }, { label: '创建人', prop: 'createUserName', minWidth: 110, formatter: textFormatter }, ], });