fix: close receipt delivery workflows

This commit is contained in:
hectorzhao
2026-07-24 14:40:57 +08:00
parent 2ee39056eb
commit 91f04f5288
22 changed files with 829 additions and 48 deletions
+108
View File
@@ -0,0 +1,108 @@
import { CheckCircle2 } from 'lucide-react';
import type { RechargeOrder, TenantOption } from '@/api/adminApi';
import { formatCents } from '@/utils/currency';
import { formatDateTime } from '@/utils/dateTime';
import { Button } from './Button';
import { Modal } from './Modal';
type RechargeReceiptDialogProps = {
open: boolean;
record: RechargeOrder | null;
tenant?: Pick<TenantOption, 'name' | 'code'>;
onClose: () => void;
};
export function formatReceiptAmount(moneyUnits: number) {
return formatCents(Math.abs(moneyUnits)).replace(/\.?0+$/, '');
}
export function RechargeReceiptDialog({
open,
record,
tenant,
onClose,
}: RechargeReceiptDialogProps) {
if (!record) return null;
const isCorrection = record.amountCents < 0;
const balanceAfter = record.balanceAfterCents;
const balanceBefore = balanceAfter === null || balanceAfter === undefined
? null
: balanceAfter - record.amountCents;
const enterpriseName = record.tenant?.name ?? tenant?.name ?? record.tenantId;
const enterpriseCode = record.tenant?.code ?? tenant?.code ?? '-';
return (
<Modal
footer={<Button onClick={onClose}></Button>}
onClose={onClose}
open={open}
title="账户充值回执"
>
<article className="recharge-receipt">
<header className="recharge-receipt__header">
<img
alt="聆界短信服务平台"
className="recharge-receipt__logo"
src="/logo/logo1.png"
/>
<span className={isCorrection ? 'is-correction' : 'is-posted'}>
<CheckCircle2 aria-hidden="true" size={16} />
{isCorrection ? '已冲正' : '已入账'}
</span>
</header>
<section className="recharge-receipt__amount">
<span>{isCorrection ? '冲正' : '充值'}</span>
<strong>
{isCorrection ? '' : '+'}
<small>¥</small>
{formatReceiptAmount(record.amountCents)}
</strong>
</section>
<section className="recharge-receipt__enterprise">
<span></span>
<strong>{enterpriseName}</strong>
<small>{enterpriseCode}</small>
</section>
<dl className="recharge-receipt__details">
<div>
<dt></dt>
<dd>{record.orderNo}</dd>
</div>
<div>
<dt></dt>
<dd>{formatDateTime(record.paidAt ?? record.createdAt)}</dd>
</div>
<div>
<dt></dt>
<dd>{balanceBefore === null ? '-' : `¥${formatCents(balanceBefore)}`}</dd>
</div>
<div>
<dt></dt>
<dd>{balanceAfter === null || balanceAfter === undefined ? '-' : `¥${formatCents(balanceAfter)}`}</dd>
</div>
<div>
<dt></dt>
<dd> · {isCorrection ? '冲正' : '充值'}</dd>
</div>
<div>
<dt></dt>
<dd>{isCorrection ? '冲正完成' : '充值完成'}</dd>
</div>
</dl>
<section className="recharge-receipt__remark">
<span></span>
<p>{record.remark || '无'}</p>
</section>
<footer className="recharge-receipt__note">
</footer>
</article>
</Modal>
);
}
+1
View File
@@ -10,6 +10,7 @@ export { RiskAction } from './RiskAction';
export { DeleteRiskAction } from './DeleteRiskAction';
export { ManualRechargeDialog } from './ManualRechargeDialog';
export type { ManualRechargeTarget } from './ManualRechargeDialog';
export { RechargeReceiptDialog } from './RechargeReceiptDialog';
export { Input } from './Input';
export { Modal } from './Modal';
export { InlineTextPreview, Pagination, QueryPanel } from './PagePrimitives';