文件
hyb-oa/client/src/lib/reimbursementPaymentHandoff.ts
T

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 };
}