| | |
| | | return out; |
| | | } |
| | | |
| | | /** 是否存在列表筛选条件(仅申请人) */ |
| | | export function hasActiveReimbursementSearch(searchForm = {}) { |
| | | return Boolean((searchForm?.applicantKeyword || "").trim()); |
| | | |
| | | export function expenseTypeToCategory(typeLabel) { |
| | | const hit = EXPENSE_CATEGORY_OPTIONS.find((x) => x.label === typeLabel || x.value === typeLabel); |
| | | return hit?.value || typeLabel || ""; |
| | | } |
| | | |
| | | /** 服务端未生效时,按申请人做前端兜底筛选 */ |
| | | /** 是否存在列表筛选条件 */ |
| | | export function hasActiveReimbursementSearch(searchForm = {}) { |
| | | return Boolean( |
| | | (searchForm?.applicantKeyword || "").trim() || |
| | | searchForm?.deptId || |
| | | searchForm?.expenseCategory || |
| | | (searchForm?.applyTimeRange && searchForm.applyTimeRange.length === 2) |
| | | ); |
| | | } |
| | | |
| | | /** 服务端未生效时,按条件做前端兜底筛选 */ |
| | | export function filterReimbursementRowsBySearch(rows, searchForm = {}) { |
| | | const list = Array.isArray(rows) ? rows : []; |
| | | const kw = (searchForm?.applicantKeyword || "").trim().toLowerCase(); |
| | | if (!kw) return list; |
| | | let result = list; |
| | | |
| | | return list.filter((row) => { |
| | | const kw = (searchForm?.applicantKeyword || "").trim().toLowerCase(); |
| | | if (kw) { |
| | | result = result.filter((row) => { |
| | | const parts = [ |
| | | row.applicantName, |
| | | row.employeeName, |
| | |
| | | .map((v) => String(v).toLowerCase()); |
| | | return parts.some((p) => p.includes(kw)); |
| | | }); |
| | | } |
| | | |
| | | if (searchForm?.deptId) { |
| | | result = result.filter(row => String(row.deptId) === String(searchForm.deptId)); |
| | | } |
| | | |
| | | if (searchForm?.expenseCategory) { |
| | | result = result.filter(row => row.expenseCategory === searchForm.expenseCategory); |
| | | } |
| | | |
| | | if (searchForm?.applyTimeRange && searchForm.applyTimeRange.length === 2) { |
| | | const start = searchForm.applyTimeRange[0]; |
| | | const end = searchForm.applyTimeRange[1]; |
| | | result = result.filter(row => { |
| | | const t = (row.applyTime || row.createTime || "").substring(0, 10); |
| | | return t >= start && t <= end; |
| | | }); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | |
| | | /** 扁平化为 Spring GET 可绑定的 query(finReimbursementDto.xxx,勿用方括号) */ |
| | |
| | | }) { |
| | | const dto = { |
| | | reimbursementType, |
| | | deptId: searchForm.deptId || undefined, |
| | | expenseType: searchForm.expenseCategory ? expenseCategoryToType(searchForm.expenseCategory) : undefined, |
| | | createTimeStart: searchForm.applyTimeRange?.[0] || undefined, |
| | | createTimeEnd: searchForm.applyTimeRange?.[1] || undefined, |
| | | ...pickApplicantQuery(searchForm), |
| | | ...(extraDto && typeof extraDto === "object" ? extraDto : {}), |
| | | }; |
| | |
| | | "page.size": page.size, |
| | | ...dto, |
| | | }; |
| | | |
| | | if (searchForm.applyTimeRange && searchForm.applyTimeRange.length === 2) { |
| | | params["params[beginTime]"] = searchForm.applyTimeRange[0] + " 00:00:00"; |
| | | params["params[endTime]"] = searchForm.applyTimeRange[1] + " 23:59:59"; |
| | | } |
| | | |
| | | appendDotNotationQuery(params, "finReimbursementDto", dto); |
| | | return params; |
| | | } |
| | |
| | | applicantName: row.applicantName || "", |
| | | employeeNo: row.applicantCode || "", |
| | | employeeName: row.applicantName || "", |
| | | applicantDeptName: row.applicantDeptName || "", |
| | | applicantDeptName: row.deptName || "", |
| | | deptId: row.deptId, |
| | | reimburseReason: row.reason || "", |
| | | travelStartTime: formatReimbursementDateTime(travel.startTime), |
| | | travelEndTime: formatReimbursementDateTime(travel.endTime), |
| | |
| | | applicantName: row.applicantName || "", |
| | | employeeNo: row.applicantCode || "", |
| | | employeeName: row.applicantName || "", |
| | | applicantDeptName: row.applicantDeptName || "", |
| | | applicantDeptName: row.deptName || "", |
| | | deptId: row.deptId, |
| | | reimburseReason: row.reason || "", |
| | | expenseCategory: row.expenseType || "", |
| | | expenseCategory: expenseTypeToCategory(row.expenseType) || "", |
| | | applyAmount: row.applyAmount, |
| | | applyTime: formatReimbursementDateTime(row.createTime), |
| | | payee: row.payeeName || "", |
| | | payer: row.payer || "", |
| | | payeeAccount: row.payeeAccount || "", |
| | | bankBranch: row.payeeBank || "", |
| | | billStatus: row.billStatus, |
| | |
| | | applyAmount, |
| | | detailTotalAmount: detailTotal, |
| | | payeeName: form.payee || "", |
| | | payer: form.payer || "", |
| | | payeeAccount: form.payeeAccount || "", |
| | | payeeBank: form.bankBranch || form.payeeBank || "", |
| | | billStatus: "IN_APPROVAL", |