35 行
1.6 KiB
TypeScript
35 行
1.6 KiB
TypeScript
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 };
|
|
}
|