充值申请增加付款凭证与付款时间,管理端可核对后审核

- 打手端充值表单新增付款时间(必填)与付款凭证上传(最多5张)
- 后端存储 paidAt 与 proofFiles 归一化数据
- 管理端资金申请列表新增付款凭证缩略图列,审核弹窗展示付款时间与凭证预览
This commit is contained in:
yml2213
2026-08-01 15:22:25 +08:00
parent d9db2f5dce
commit 52a85f7f9e
4 changed files with 101 additions and 0 deletions
@@ -1617,6 +1617,16 @@ function FinancePanel() {
minWidth: 240,
render: (_, row) => renderFinanceRequestAccount(row),
},
{
title: '付款凭证',
minWidth: 140,
render: (_, row) =>
row.requestType === 'recharge' ? (
<ImagePreviewList files={getRechargeProofs(row)} size={48} />
) : (
'-'
),
},
{
title: '备注',
minWidth: 260,
@@ -1851,6 +1861,18 @@ function FinancePanel() {
<Descriptions.Item label="收款信息">
{renderFinanceRequestAccountText(reviewState.request)}
</Descriptions.Item>
{reviewState.request.requestType === 'recharge' ? (
<>
<Descriptions.Item label="付款时间">
{getRechargePaidAt(reviewState.request)
? formatAdminDateTime(getRechargePaidAt(reviewState.request))
: '-'}
</Descriptions.Item>
<Descriptions.Item label="付款凭证">
<ImagePreviewList files={getRechargeProofs(reviewState.request)} size={88} />
</Descriptions.Item>
</>
) : null}
<Descriptions.Item label="申请备注">
{reviewState.request.note || '-'}
</Descriptions.Item>
@@ -2370,6 +2392,29 @@ function getRechargeSnapshot(request: WorkerFinanceRequest) {
}
}
function getRechargeProofs(request: WorkerFinanceRequest): UploadedFile[] {
if (request.requestType !== 'recharge') return []
const payload = asRecord(request.payload)
const rawFiles = Array.isArray(payload.proofFiles) ? payload.proofFiles : []
return rawFiles
.map((item) => {
const file = asRecord(item)
const url = String(file.url || '').trim()
if (!url) return null
return {
url,
mediumUrl: String(file.mediumUrl || '').trim(),
thumbnailUrl: String(file.thumbnailUrl || '').trim(),
} as UploadedFile
})
.filter((item): item is UploadedFile => Boolean(item))
}
function getRechargePaidAt(request: WorkerFinanceRequest): string {
const payload = asRecord(request.payload)
return String(payload.paidAt || '').trim()
}
function formatFinanceChannel(channel: string) {
if (channel === 'alipay') return '支付宝'
if (channel === 'wechat') return '微信收款'