import { computed } from "vue"; import { businessApprovalStatusLabel, businessApprovalStatusTagType, formatFieldDisplayValue, resolveInstanceFormFields, } from "../approve-list/approveListConstants.js"; /** 列表/详情不回显为独立列的填报项 key */ const DEFAULT_EXCLUDE_KEYS = new Set(["summary"]); /** * 从行数据 formConfig 解析字段定义与填报值,并铺平到行上供主表 prop 绑定(展示用格式化值) */ export function enrichInstanceRowFromFormConfig(row, caches) { const { fields, formPayload, templateSnapshot } = resolveInstanceFormFields(row); const formDisplay = {}; const displayRow = { ...row, formFieldDefs: fields, formPayload, templateSnapshot: row.templateSnapshot || templateSnapshot, formDisplay, }; for (const f of fields) { if (!f?.key || DEFAULT_EXCLUDE_KEYS.has(f.key)) continue; const val = formPayload[f.key]; let text = formatFieldDisplayValue(f, val, caches); if ( text === String(val) && row?.applicantName && (f.label === "申请人" || f.key === "applicant" || f.key === "applicantName") ) { const idMatch = String(val) === String(row.applicantId) || String(val) === String(row.applicantNo); if (idMatch) text = row.applicantName; } formDisplay[f.key] = text; displayRow[f.key] = text; } return displayRow; } /** * 从列表首行 formConfig 生成主表动态列(label 取自模板字段 label) */ export function getFormConfigFieldColumns(firstRow, { excludeKeys = DEFAULT_EXCLUDE_KEYS } = {}) { const fields = (firstRow?.formFieldDefs || []).filter( (f) => f?.key && !excludeKeys.has(f.key) ); return fields.map((f) => ({ label: f.label || f.key, prop: f.key, minWidth: f.type === "textarea" ? 200 : f.type === "datetimerange" ? 160 : 120, showOverflowTooltip: true, })); } /** * 业务申请主表列:固定列 + formConfig 动态列 + 审批状态 + 操作 */ export function buildInstanceTableColumns(tableDataRef, buildTableActions, options = {}) { const { excludeKeys = DEFAULT_EXCLUDE_KEYS, beforeFormColumns = [], extraColumns = [], afterFormColumns = [], actionWidth = 260, } = options; return computed(() => { const formCols = getFormConfigFieldColumns(tableDataRef.value?.[0], { excludeKeys }); return [ ...beforeFormColumns, ...formCols, ...extraColumns, ...afterFormColumns, { label: "创建时间", prop: "createTime", width: 170 }, { label: "审批状态", prop: "approvalStatus", width: 110, dataType: "tag", formatData: (v) => businessApprovalStatusLabel(v), formatType: (v) => businessApprovalStatusTagType(v), }, { dataType: "action", label: "操作", align: "center", fixed: "right", width: actionWidth, operation: buildTableActions(), }, ]; }); }