feat(web-admin): add presign save auto-submit helpers and silent finance submit option
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
1 parent
0398cb3897
commit
e56d8d7f51
3 files changed
+109
-2
No files matched your search
@@ -71,10 +71,13 @@ export function fetchUpdatePresignTransfer(transferId: string, data: Record<stri
|
||||
})
|
||||
}
|
||||
|
||||
export function fetchSubmitPresignTransferFinance(transferId: string) {
|
||||
export function fetchSubmitPresignTransferFinance(
|
||||
transferId: string,
|
||||
options?: { showSuccessMessage?: boolean }
|
||||
) {
|
||||
return request.post({
|
||||
url: `/web/admin/presign-transfers/${transferId}/submit-receipt-finance`,
|
||||
showSuccessMessage: true
|
||||
showSuccessMessage: options?.showSuccessMessage !== false
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
import { describe, it } from 'node:test'
|
||||
import assert from 'node:assert/strict'
|
||||
import {
|
||||
collectDfjTransferIds,
|
||||
formatAutoSubmitFinanceFailureMessage,
|
||||
submitDfjTransfersOnSave
|
||||
} from './presign-save-auto-submit'
|
||||
|
||||
describe('presign-save-auto-submit', () => {
|
||||
it('collects only dfj transfers with ids', () => {
|
||||
assert.deepEqual(
|
||||
collectDfjTransferIds([
|
||||
{ id: 't1', payStatus: 'dfj' },
|
||||
{ id: 't2', payStatus: 'jfqrz' },
|
||||
{ id: '', payStatus: 'dfj' },
|
||||
{ payStatus: 'dfj' },
|
||||
{ id: 't3', payStatus: 'dfj' }
|
||||
]),
|
||||
['t1', 't3']
|
||||
)
|
||||
})
|
||||
|
||||
it('formats partial failure message', () => {
|
||||
assert.equal(
|
||||
formatAutoSubmitFinanceFailureMessage([
|
||||
{ id: 't1', message: '请选择转账方式' },
|
||||
{ id: 't2', message: '请填写转账金额' }
|
||||
]),
|
||||
'订单已保存,但有 2 笔提交财务确认失败:请选择转账方式;请填写转账金额'
|
||||
)
|
||||
})
|
||||
|
||||
it('continues submitting after one failure', async () => {
|
||||
const calls: string[] = []
|
||||
const failures = await submitDfjTransfersOnSave(
|
||||
[
|
||||
{ id: 'ok', payStatus: 'dfj' },
|
||||
{ id: 'bad', payStatus: 'dfj' }
|
||||
],
|
||||
async (id) => {
|
||||
calls.push(id)
|
||||
if (id === 'bad') throw new Error('请填写转账金额')
|
||||
}
|
||||
)
|
||||
assert.deepEqual(calls, ['ok', 'bad'])
|
||||
assert.deepEqual(failures, [{ id: 'bad', message: '请填写转账金额' }])
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,56 @@
|
||||
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
|
||||
): 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)
|
||||
return `订单已保存,但有 ${list.length} 笔提交财务确认失败:${reasons.join(';')}`
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
Reference in new issue
Block a user