diff --git a/apps/frontend-vue/src/views/admin/tasks/AdminTaskDetail.css b/apps/frontend-vue/src/views/admin/tasks/AdminTaskDetail.css index f65f5fbb..376df950 100644 --- a/apps/frontend-vue/src/views/admin/tasks/AdminTaskDetail.css +++ b/apps/frontend-vue/src/views/admin/tasks/AdminTaskDetail.css @@ -149,6 +149,10 @@ color: var(--text-primary); } +.voucher-missing-alert { + margin-bottom: var(--space-3); +} + .section-copy { margin: 0 0 var(--space-3); color: var(--text-secondary); diff --git a/apps/frontend-vue/src/views/admin/tasks/AdminTaskDetailView.vue b/apps/frontend-vue/src/views/admin/tasks/AdminTaskDetailView.vue index 475ce392..33aff7c4 100644 --- a/apps/frontend-vue/src/views/admin/tasks/AdminTaskDetailView.vue +++ b/apps/frontend-vue/src/views/admin/tasks/AdminTaskDetailView.vue @@ -124,7 +124,6 @@ onMounted(loadDetail) /> +import { computed } from 'vue' + import AdminStatusTag from '@/components/admin/AdminStatusTag.vue' import type { AdminTaskDetail } from '@/types/admin' import { formatAdminDateTime } from '@/utils/admin-time' @@ -8,13 +10,30 @@ interface Props { actionLoading: boolean } -defineProps() +const props = defineProps() const emit = defineEmits<{ resendIndustryCode: [] consumeIndustryVoucher: [] }>() +const voucher = computed(() => props.detail.kuaishouIndustryVoucher) +const shouldShowSection = computed(() => Boolean(voucher.value || hasKuaishouIndustrySignal())) +const missingReason = computed(() => { + const message = props.detail.task.lastError || props.detail.task.resultMessage || '' + return message || '未找到电子凭证记录' +}) + +function hasKuaishouIndustrySignal() { + const signal = [ + props.detail.task.resultCode, + props.detail.task.resultMessage, + props.detail.task.lastError, + ].join(' ') + + return /电子凭证|核销码|发码回调|kuaishou_industry/.test(signal) +} + function formatConsumeDetailTime(value: unknown) { const parsed = Number(value || 0) if (Number.isFinite(parsed) && parsed > 0) { @@ -38,10 +57,10 @@ function formatValue(value: unknown) {