feat(M08-B): 补微信预检导出

This commit is contained in:
Codex
2026-07-05 15:14:54 +08:00
parent aa4f74360d
commit 8fae70ef8e
6 changed files with 57 additions and 10 deletions
@@ -331,6 +331,13 @@
</el-table>
</div>
<template #footer>
<el-button
:icon="Download"
:disabled="!preflightDialog.result"
@click="exportPreflight"
>
导出预检
</el-button>
<el-button @click="preflightDialog.open = false">关闭</el-button>
</template>
</el-dialog>
@@ -731,6 +738,36 @@ function exportCandidates() {
]);
}
function exportPreflight() {
const result = preflightDialog.result;
if (!result) return;
downloadCsv(`cleaning-transfer-preflight-${result.settlement.settlementNo}-${Date.now()}.csv`, [
['类别', '字段', '值'],
['summary', 'ready', result.ready ? 'PASS' : 'BLOCKED'],
['settlement', 'settlementNo', result.settlement.settlementNo],
['settlement', 'status', result.settlement.status],
['settlement', 'amount', money(result.settlement.totalRewardCents)],
['settlement', 'cleanerUserId', result.settlement.cleanerUserId],
['settlement', 'storeId', result.settlement.storeId || ''],
['account', 'merchantId', compactText(result.account.merchantIdMasked)],
['account', 'credentialRef', compactText(result.account.credentialRefMasked)],
['account', 'authorizationStatus', compactText(result.account.authorizationStatus)],
['account', 'scope', result.account.storeScoped ? 'STORE' : 'TENANT'],
['credential', 'appId', configuredText(result.credential.appIdPresent)],
['credential', 'serialNo', configuredText(result.credential.serialNoPresent)],
['credential', 'transferSceneId', compactText(result.credential.transferSceneId)],
['credential', 'reportInfoCount', String(result.credential.reportInfoCount ?? 0)],
['credential', 'transferNotifyUrl', configuredText(result.credential.transferNotifyUrlConfigured)],
['credential', 'platformCertificateCount', String(result.credential.platformCertificateCount ?? 0)],
['cleaner', 'openid', result.cleaner.openidConfigured ? 'BOUND' : 'MISSING'],
...result.checks.map((check) => [
'check',
`${check.key}:${check.status}`,
check.message
])
]);
}
function downloadCsv(filename: string, rows: string[][]) {
const content = rows.map((row) => row.map(csvCell).join(',')).join('\r\n');
const blob = new Blob([`\uFEFF${content}`], { type: 'text/csv;charset=utf-8' });