| | |
| | | createTime: formatReimbursementDateTime(row.createTime), |
| | | expenseDetails: details.map((d) => ({ |
| | | ...d, |
| | | expenseSubject: d.expenseCategory, |
| | | expenseSubject: resolveExpenseSubjectValue(d.expenseCategory ?? d.expenseSubject), |
| | | })), |
| | | travel: |
| | | row.travel && typeof row.travel === "object" && Object.keys(row.travel).length |
| | |
| | | createTime: formatReimbursementDateTime(row.createTime), |
| | | expenseDetails: details.map((d) => ({ |
| | | ...d, |
| | | expenseSubject: d.expenseCategory, |
| | | expenseSubject: resolveExpenseSubjectValue(d.expenseCategory ?? d.expenseSubject), |
| | | })), |
| | | details, |
| | | nodes: apiNodes, |
| | |
| | | return hit?.label || subject || ""; |
| | | } |
| | | |
| | | /** 接口返回的 expenseCategory 可能是中文 label,反转为前端 value;已经是 value 则原样返回 */ |
| | | function resolveExpenseSubjectValue(val) { |
| | | if (!val) return ""; |
| | | const byValue = EXPENSE_SUBJECT_OPTIONS.find((x) => x.value === val); |
| | | if (byValue) return val; |
| | | const byLabel = EXPENSE_SUBJECT_OPTIONS.find((x) => x.label === val); |
| | | return byLabel?.value || val; |
| | | } |
| | | |
| | | function expenseCategoryToType(category) { |
| | | const hit = EXPENSE_CATEGORY_OPTIONS.find((x) => x.value === category); |
| | | return hit?.label || category || ""; |