Files
zkxw/web-admin/src/utils/presign-save-auto-submit.ts
T
2026-10-15 23:21:07 +08:00

77 lines
2.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
export type PresignTransferLike = {
id?: string | null
payStatus?: string | null
}
export type AutoSubmitFailure = {
id: string
message: string
}
export function collectDfjTransferIds(
transfers: PresignTransferLike[] | null | undefined
): string[] {
const rows = Array.isArray(transfers) ? transfers : []
return rows
.filter((row) => {
const id = String(row?.id || '').trim()
const status = String(row?.payStatus || 'dfj').trim() || 'dfj'
return Boolean(id) && status === 'dfj'
})
.map((row) => String(row.id).trim())
}
export function formatAutoSubmitFinanceFailureMessage(
failures: Array<AutoSubmitFailure | string> | null | undefined,
entityLabel = '订单'
): string {
const list = Array.isArray(failures) ? failures.filter(Boolean) : []
if (!list.length) return ''
const reasons = list
.map((item) =>
typeof item === 'string'
? item.trim()
: String(item?.message || '提交失败').trim()
)
.filter(Boolean)
const label = String(entityLabel || '订单').trim() || '订单'
return `${label}已保存,但有 ${list.length} 笔提交财务确认失败:${reasons.join(';')}`
}
/** 从 v2 samplePayments 展平全部转账笔(供保存后自动提交财务) */
export function flattenSamplePaymentTransfers(
samplePayments: Array<Record<string, any>> | null | undefined
): PresignTransferLike[] {
const payments = Array.isArray(samplePayments) ? samplePayments : []
const out: PresignTransferLike[] = []
for (const pay of payments) {
const schedules = Array.isArray(pay?.schedules) ? pay.schedules : []
for (const sch of schedules) {
const transfers = Array.isArray(sch?.transfers) ? sch.transfers : []
for (const tr of transfers) {
if (tr && typeof tr === 'object') out.push(tr)
}
}
}
return out
}
export async function submitDfjTransfersOnSave(
transfers: PresignTransferLike[] | null | undefined,
submitOne: (transferId: string) => Promise<unknown>
): Promise<AutoSubmitFailure[]> {
const ids = collectDfjTransferIds(transfers)
const failures: AutoSubmitFailure[] = []
for (const id of ids) {
try {
await submitOne(id)
} catch (error: any) {
failures.push({
id,
message: String(error?.message || error || '提交失败').trim() || '提交失败'
})
}
}
return failures
}