后端可视化调试

This commit is contained in:
yml2213
2026-04-14 00:21:32 +08:00
parent 0c2f2e0a12
commit fa36be6539
14 changed files with 617 additions and 34 deletions
@@ -155,9 +155,11 @@ function formatTaskEventPayload(payload: Record<string, unknown>) {
payload.previousOutcome ? `切换原因 ${formatRedeemOutcomeLabel(String(payload.previousOutcome || ''))}` : '',
payload.deliveryReference ? `单号 ${payload.deliveryReference}` : '',
payload.platformOrderId ? `平台单 ${payload.platformOrderId}` : '',
payload.trigger ? `触发 ${formatAutoDeliveryTrigger(String(payload.trigger || ''))}` : '',
payload.reason ? `原因 ${payload.reason}` : '',
payload.responseStatus ? `HTTP ${payload.responseStatus}` : '',
payload.requestId ? `请求 ${payload.requestId}` : '',
payload.aldsType ? `发货类型 ${payload.aldsType}` : '',
payload.errorMessage ? `错误 ${payload.errorMessage}` : '',
].filter(Boolean)
@@ -191,6 +193,70 @@ function formatRedeemResolutionStatus(value: string) {
return value === 'success' ? '已完成' : value === 'failed' ? '失败收口' : (value || '-')
}
function formatAutoDeliveryTrigger(value: string) {
const normalized = String(value || '').trim()
switch (normalized) {
case 'claim_redeemed':
return '用户兑换完成后触发'
case 'manual_dispatch_completed':
return '人工履约完成后触发'
case 'task_delivered':
return '任务交付完成后触发'
default:
return normalized || '-'
}
}
function formatAutoDeliveryReason(value: string) {
const normalized = String(value || '').trim()
switch (normalized) {
case 'waiting_other_tasks':
return '订单下仍有任务未完成交付'
case 'already_sent':
return '该订单已经执行过自动发货'
case 'auto_delivery_disabled':
return '自动发货开关已关闭'
case 'missing_config':
return '缺少 Agiso 自动发货配置'
case 'request_failed':
return 'Agiso 接口返回失败'
case 'request_error':
return '请求 Agiso 接口时发生异常'
case 'task_not_delivered':
return '当前任务尚未进入已交付状态'
case 'not_supported':
return '当前订单不支持 Agiso 咸鱼自动发货'
default:
return normalized || '-'
}
}
function resolveTaskAutoDeliveryStatus(taskDetail: AdminTaskDetail) {
if (taskDetail.task.agisoAutoDelivery?.status) {
return taskDetail.task.agisoAutoDelivery.status
}
return taskDetail.task.deliveryStatus === 'delivered' ? 'pending' : 'waiting'
}
function resolveTaskAutoDeliverySummary(taskDetail: AdminTaskDetail) {
const autoDelivery = taskDetail.task.agisoAutoDelivery
if (autoDelivery?.errorMessage) {
return autoDelivery.errorMessage
}
if (autoDelivery?.reason) {
return formatAutoDeliveryReason(autoDelivery.reason)
}
return taskDetail.task.deliveryStatus === 'delivered'
? '当前任务已交付,等待订单下其他任务完成后统一自动发货'
: '当前任务尚未完成交付,暂不会触发自动发货'
}
onMounted(loadDetail)
onBeforeUnmount(clearScreenshotPreview)
</script>
@@ -306,8 +372,8 @@ onBeforeUnmount(clearScreenshotPreview)
</el-button>
</section>
<section class="table-card">
<h3>任务信息</h3>
<section class="table-card">
<h3>任务信息</h3>
<table class="data-table">
<tbody>
<tr><th>商品</th><td>{{ detail.orderItem?.skuName || '-' }}</td></tr>
@@ -337,9 +403,48 @@ onBeforeUnmount(clearScreenshotPreview)
<tr><th>截图路径</th><td>{{ detail.task.screenshotPath || '-' }}</td></tr>
</tbody>
</table>
</section>
<section
v-if="detail.order?.provider === 'agiso' && detail.order?.platform === 'xianyu'"
class="table-card"
>
<h3>咸鱼自动发货</h3>
<p class="section-copy">这里展示这条任务最近一次触发咸鱼自动发货的状态原因和接口回执摘要</p>
<div class="redeem-summary-grid">
<article class="redeem-summary-card">
<span>当前状态</span>
<div class="auto-delivery-tag-line">
<AdminStatusTag :status="resolveTaskAutoDeliveryStatus(detail)" />
</div>
</article>
<article class="redeem-summary-card">
<span>触发来源</span>
<strong>{{ formatAutoDeliveryTrigger(detail.task.agisoAutoDelivery?.trigger || '') }}</strong>
</article>
<article class="redeem-summary-card">
<span>最近执行</span>
<strong>{{ formatAdminDateTime(detail.task.agisoAutoDelivery?.updatedAt) }}</strong>
</article>
<article class="redeem-summary-card">
<span>接口回执</span>
<strong>
{{ detail.task.agisoAutoDelivery?.requestId || (detail.task.agisoAutoDelivery?.responseStatus ? `HTTP ${detail.task.agisoAutoDelivery.responseStatus}` : '-') }}
</strong>
</article>
</div>
<div class="auto-delivery-note">
<p>{{ resolveTaskAutoDeliverySummary(detail) }}</p>
<p v-if="detail.task.agisoAutoDelivery?.reason">原因{{ formatAutoDeliveryReason(detail.task.agisoAutoDelivery.reason) }}</p>
<p v-if="detail.task.agisoAutoDelivery?.responseStatus">HTTP{{ detail.task.agisoAutoDelivery.responseStatus }}</p>
<p v-if="detail.task.agisoAutoDelivery?.requestId">请求 ID{{ detail.task.agisoAutoDelivery.requestId }}</p>
<p v-if="detail.task.agisoAutoDelivery?.aldsType">发货类型{{ detail.task.agisoAutoDelivery.aldsType }}</p>
</div>
</section>
<section v-if="detail.redeemResolution" class="table-card">
<section v-if="detail.redeemResolution" class="table-card">
<h3>兑换重试链路</h3>
<p class="section-copy">这里记录自动兑换时每次使用过的 CDK判定结果以及是否切换到了新的同类型凭据</p>
@@ -545,6 +650,16 @@ onBeforeUnmount(clearScreenshotPreview)
.action-row { display: flex; flex-wrap: wrap; gap: 12px; }
.table-card h3 { margin: 0 0 12px; color: #1d3555; }
.section-copy { margin: 0 0 12px; color: #64748b; }
.auto-delivery-tag-line { display: flex; align-items: center; }
.auto-delivery-note {
margin-top: 14px;
padding: 14px 16px;
border-radius: 16px;
background: rgba(248,250,252,.92);
border: 1px solid rgba(86,108,138,.08);
}
.auto-delivery-note p { margin: 0 0 8px; color: #334155; }
.auto-delivery-note p:last-child { margin-bottom: 0; }
.data-table { width: 100%; border-collapse: collapse; }
.data-table th,.data-table td { padding: 12px 10px; text-align: left; border-bottom: 1px solid rgba(86,108,138,.08); }
.data-table th { width: 160px; color: #64748b; }