Files
client-web/src/modules/overseas-warehouse/components/RelabelQuantityPanel.vue
T
2026-10-20 11:54:44 +08:00

38 lines
2.0 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<script setup lang="ts">
import { ref, watch } from 'vue'
import { getRelabelQuantities, type RelabelQuantityTotals } from '../api/relabelQuantities'
const props = defineProps<{ query?: Record<string, unknown>; relabelNo?: string }>()
const data = ref<RelabelQuantityTotals | null>(null)
const error = ref('')
let generation = 0
function dimension(known: number, unknown: number, unit: string) {
if (unknown > 0 && known === 0) return `未提供(${unknown} 票)`
return `已知 ${known} ${unit}${unknown > 0 ? `(${unknown} 票未提供)` : ''}`
}
watch(() => [props.query, props.relabelNo], async () => {
const current = ++generation
data.value = null; error.value = ''
try {
const result = await getRelabelQuantities({ ...props.query, ...(props.relabelNo ? { relabelNo: props.relabelNo } : {}) })
if (current === generation) data.value = result
} catch { if (current === generation) error.value = '数量汇总加载失败,请刷新重试' }
}, { immediate: true, deep: true })
</script>
<template>
<section class="relabel-quantity-panel" aria-label="贴标数量维度">
<p v-if="error" role="alert">{{ error }}</p>
<template v-else-if="data">
<strong>{{ relabelNo ? '本单数量' : '全部筛选结果' }}</strong>
<span>{{ data.orderCount }} 票</span><span>{{ data.skuCount }} 种 SKU</span>
<span>贴标件数:{{ dimension(Number(data.knownLabelPieceCount), Number(data.unknownPieceOrders), '件') }}</span>
<span>箱数:{{ dimension(Number(data.knownCartonCount), Number(data.unknownCartonOrders), '箱') }}</span>
<p v-if="relabelNo && data.orders[relabelNo]?.duplicateCarton" role="status">存在重复箱唛关联,箱数已去重,贴标件数待核查。</p>
</template>
<span v-else>数量加载中…</span>
</section>
</template>
<style scoped>
.relabel-quantity-panel { display: flex; gap: 12px; flex-wrap: wrap; padding: 12px 16px; border: 1px solid var(--border); border-radius: 8px; background: var(--surface, white); margin-bottom: 12px; }
.relabel-quantity-panel p { margin: 0; }
</style>