const STATUS_META = { 1: { text: '正常', type: 'success' }, 0: { text: '冻结', type: 'info' } } export const FLOW_INSTANCE_REPORT_TITLE = '流程实例报表' function normalizeText(value) { return String(value ?? '').trim() } function normalizeNumber(value) { if (value === '' || value === null || value === undefined) { return null } const numericValue = Number(value) return Number.isFinite(numericValue) ? numericValue : null } function normalizeDateTime(value) { return normalizeText(value) || '--' } export function createFlowInstanceSearchState() { return { condition: '', timeStart: '', timeEnd: '', flowInstanceNo: '', taskId: '', taskNo: '', nodeInstanceId: '', nodeCode: '', flowTemplateId: '', flowTemplateCode: '', templateVersion: '', currentStepCode: '', currentStepOrder: '', executeResult: '', errorCode: '', errorMessage: '', startTime: '', endTime: '', timeoutAt: '', durationSeconds: '', retryTimes: '', lastRetryTime: '', memo: '', status: '' } } export function getFlowInstancePaginationKey() { return { current: 'current', size: 'pageSize' } } export function buildFlowInstanceSearchParams(params = {}) { const result = {} ;[ 'condition', 'flowInstanceNo', 'taskNo', 'nodeCode', 'flowTemplateCode', 'currentStepCode', 'executeResult', 'errorCode', 'errorMessage', 'startTime', 'endTime', 'timeoutAt', 'lastRetryTime', 'memo' ].forEach((key) => { const value = normalizeText(params[key]) if (value) { result[key] = value } }) ;['timeStart', 'timeEnd'].forEach((key) => { if (params[key]) { result[key] = params[key] } }) ;[ 'taskId', 'nodeInstanceId', 'flowTemplateId', 'templateVersion', 'currentStepOrder', 'durationSeconds', 'retryTimes', 'status' ].forEach((key) => { const value = normalizeNumber(params[key]) if (value !== null) { result[key] = value } }) return { condition: '', ...result } } export function buildFlowInstancePageQueryParams(params = {}) { return { current: params.current || 1, pageSize: params.pageSize || params.size || 20, ...buildFlowInstanceSearchParams(params) } } export function normalizeFlowInstanceRow(record = {}) { const statusMeta = STATUS_META[Number(record.status)] || STATUS_META[0] return { ...record, id: record.id ?? '--', flowInstanceNo: normalizeText(record.flowInstanceNo) || '--', taskNo: normalizeText(record.taskNo) || '--', nodeCode: normalizeText(record.nodeCode) || '--', flowTemplateCode: normalizeText(record.flowTemplateCode) || '--', currentStepCode: normalizeText(record.currentStepCode) || '--', executeResult: normalizeText(record.executeResult) || '--', errorMessage: normalizeText(record.errorMessage) || '--', startTimeText: normalizeDateTime(record['startTime$'] || record.startTimeText || record.startTime), endTimeText: normalizeDateTime(record['endTime$'] || record.endTimeText || record.endTime), statusText: record['status$'] || statusMeta.text, statusType: statusMeta.type, memo: normalizeText(record.memo) || '--' } } export function getFlowInstanceReportColumns() { return [ { prop: 'flowInstanceNo', label: '流程实例号' }, { prop: 'taskNo', label: '任务号' }, { prop: 'nodeCode', label: '节点编码' }, { prop: 'flowTemplateCode', label: '流程模板编码' }, { prop: 'currentStepCode', label: '当前步骤' }, { prop: 'executeResult', label: '执行结果' }, { prop: 'errorMessage', label: '错误信息' }, { prop: 'startTimeText', label: '开始时间' }, { prop: 'endTimeText', label: '结束时间' }, { prop: 'statusText', label: '状态' }, { prop: 'memo', label: '备注' } ] } export function buildFlowInstancePrintRows(records = []) { return (Array.isArray(records) ? records : []).map((record) => { const row = normalizeFlowInstanceRow(record) return { flowInstanceNo: row.flowInstanceNo, taskNo: row.taskNo, nodeCode: row.nodeCode, flowTemplateCode: row.flowTemplateCode, currentStepCode: row.currentStepCode, executeResult: row.executeResult, errorMessage: row.errorMessage, startTimeText: row.startTimeText, endTimeText: row.endTimeText, statusText: row.statusText, memo: row.memo } }) }