diff --git a/frontend/src/views/List/List.js b/frontend/src/views/List/List.js index 989a8e2..62f6eef 100644 --- a/frontend/src/views/List/List.js +++ b/frontend/src/views/List/List.js @@ -298,6 +298,11 @@ export function usePage() { errorDialogVisible.value = true } + const isPartialDelivery = function (row) { + if (row?.status !== 2) return false + return /^投递未全部完成;已接收\s*[1-9]\d*,失败\s*[1-9]\d*/.test(String(row.error || '')) + } + return { EpArrowDownBold, Delete, @@ -341,6 +346,7 @@ export function usePage() { isOutbox, trustSender, showError, + isPartialDelivery, errorDialogVisible, currentErrorMsg, isRefreshing, diff --git a/frontend/src/views/List/List.vue b/frontend/src/views/List/List.vue index 8cda742..492405e 100644 --- a/frontend/src/views/List/List.vue +++ b/frontend/src/views/List/List.vue @@ -92,6 +92,11 @@ 投递结果待核对 + + + 部分成功 (查看详情) + + 发送成功 @@ -164,6 +169,7 @@ const { isOutbox, trustSender, showError, + isPartialDelivery, errorDialogVisible, currentErrorMsg, isRefreshing, diff --git a/test/review/frontend-findings.test.mjs b/test/review/frontend-findings.test.mjs index d83d08c..b202277 100644 --- a/test/review/frontend-findings.test.mjs +++ b/test/review/frontend-findings.test.mjs @@ -11,6 +11,20 @@ const Vue = require('vue') const { parse, compileScript } = require('@vue/compiler-sfc') const read = name => readFileSync(new URL(`../../frontend/${name}`, import.meta.url), 'utf8') +test('发件箱必须区分部分成功与全部失败', () => { + const source = read('src/views/List/List.js') + .replace(/^import .*$/gm, '') + .replace('export function usePage', 'function usePage') + .replace(/export \{[^}]+\}\s*$/, '') + const { isPartialDelivery } = compileFunction(source + '\nreturn { isPartialDelivery }')() + assert.equal(isPartialDelivery({ + status: 2, + error: '投递未全部完成;已接收 1,失败 1。已接收的收件人不会自动重投' + }), true) + assert.equal(isPartialDelivery({ status: 2, error: '投递失败;已接收 0,失败 2' }), false) + assert.equal(isPartialDelivery({ status: 1, error: '' }), false) +}) + test('邮件列表挂载后,表格选中项必须用于全选和批量操作', async () => { const source = read('src/views/List/List.js').replace(/^import .*$/gm, '') .replace('export function usePage', 'function usePage').replace(/export \{[^}]+\}\s*$/, '')