fix: 统一报销付款状态与进度(09-04-reimbursement-state-gap-finance-view)

这个提交包含在:
2026-09-11 09:43:36 +08:00
父节点 fe025e65cf
当前提交 f9aee4c932
共修改 19 个文件,包含 549 行新增和 32 行删除
@@ -0,0 +1,34 @@
import type { ProcessingProgress } from "../types/processingProgress";
export function resolveReimbursementPaymentHandoff({
status,
deletedAt,
progress,
}: {
status: string;
deletedAt?: string | null;
progress?: ProcessingProgress | null;
}) {
const unavailable = { nextStep: "付款进度暂不可用,请刷新后重试", canCreateBatch: false, targetHref: null as string | null };
if (deletedAt || !["approved", "paid"].includes(status)) return null;
const stages = progress?.stages ?? [];
const created = stages.find((stage) => stage.key === "payment_batch_created");
const review = stages.find((stage) => stage.key === "payment_batch_review");
const payment = stages.find((stage) => stage.key === "payment_and_receipt");
if (!created || !review || !payment) return unavailable;
if (status === "paid") {
return {
...unavailable,
nextStep: payment.state === "completed" ? payment.detail ?? "查看付款结果" : unavailable.nextStep,
targetHref: payment.state === "completed" ? payment.targetHref : null,
};
}
if (created.state === "current" && review.state === "pending" && payment.state === "pending"
&& !created.targetHref && !review.targetHref && !payment.targetHref) {
return { ...unavailable, nextStep: created.detail ?? "待财务组建付款批次", canCreateBatch: true };
}
if (created.state !== "completed") return unavailable;
const current = [payment, review].find((stage) => stage.state === "current" || stage.state === "exception");
if (!current || !current.detail) return unavailable;
return { ...unavailable, nextStep: current.detail, targetHref: current.targetHref };
}