fix(web-admin): align freight source and transport tags with registry

Use receptionSource and transportType tag types instead of hard-coded success/primary plain.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
zlwuandCursor committed 2026-10-15 09:51:26 +08:00
1 parent 920b432491
commit a7a5a914f1
2 files changed
+52 -22

No files matched your search

@@ -117,8 +117,12 @@
/>
<el-table-column label="来源" min-width="100" align="center" header-align="center">
<template #default="{ row }">
<el-tag :type="row.sampleSource === 'cell_storage' ? 'success' : 'warning'" size="small">
{{ row.sampleSource === 'cell_storage' ? '细胞存储' : '科研捐赠' }}
<el-tag
v-if="row.sampleSource"
:type="receptionSourceTagType(String(row.sampleSource || ''))"
size="small"
>
{{ receptionSourceLabel(String(row.sampleSource || '')) }}
</el-tag>
</template>
</el-table-column>
@@ -195,6 +199,7 @@
type SampleFreight,
type SampleFreightItem
} from '@/api/sample-freight'
import { receptionSourceLabel, receptionSourceTagType } from '@/utils/status-tag-registry'
defineOptions({ name: 'FreightConfigDialog' })
@@ -79,15 +79,7 @@
@click="handleBatchUnlink"
>
<el-icon><Link /></el-icon>
取消运费
</el-button>
<el-button
class="btn-ghost"
:disabled="selectedFreightIds.length !== 1"
@click="openEditSelected"
>
<el-icon><Edit /></el-icon>
编辑运费
取消样本关联
</el-button>
</div>
</div>
@@ -126,9 +118,14 @@
header-align="center"
>
<template #default="{ row }">
<el-tag type="primary" size="small" effect="plain">
{{ row.transportModeLabel || row.transportMode || '—' }}
<el-tag
v-if="row.transportMode || row.transportModeLabel"
:type="transportTypeTagType(String(row.transportMode || ''))"
size="small"
>
{{ row.transportModeLabel || transportTypeLabel(String(row.transportMode || '')) || '—' }}
</el-tag>
<span v-else class="muted">—</span>
</template>
</el-table-column>
<el-table-column
@@ -151,10 +148,10 @@
<template #default="{ row }">
<el-tag
v-if="row.sampleSource"
:type="row.sampleSource === 'cell_storage' ? 'success' : 'warning'"
:type="receptionSourceTagType(String(row.sampleSource || ''))"
size="small"
>
{{ row.sampleSource === 'cell_storage' ? '细胞存储' : '科研捐赠' }}
{{ receptionSourceLabel(String(row.sampleSource || '')) }}
</el-tag>
<span v-else class="muted">—</span>
</template>
@@ -225,7 +222,7 @@
<el-table-column
prop="actions"
label="操作"
min-width="180"
min-width="280"
fixed="right"
align="center"
header-align="center"
@@ -238,7 +235,11 @@
</el-button>
<el-button class="btn-op-item" @click="openUnlinkDialog(row.freightId)">
<el-icon><Link /></el-icon>
取消运费
取消样本关联
</el-button>
<el-button class="btn-op-item" type="danger" plain @click="handleDelete(row)">
<el-icon><Delete /></el-icon>
删除
</el-button>
</div>
</template>
@@ -263,6 +264,9 @@
<FreightUnlinkDialog
v-model="unlinkVisible"
title="取消样本关联"
hint="勾选要取消关联的样本:"
empty-warning="请勾选要取消关联的样本"
:items="unlinkDialogItems"
:default-selected-keys="unlinkDefaultKeys"
:submitting="unlinkSubmitting"
@@ -272,9 +276,10 @@
</template>
<script setup lang="ts">
import { Edit, Link, Plus, RefreshLeft, Search } from '@element-plus/icons-vue'
import { Delete, Edit, Link, Plus, RefreshLeft, Search } from '@element-plus/icons-vue'
import { fetchDictDataOptions } from '@/api/admin'
import {
fetchDeleteSampleFreight,
fetchSampleFreightDetail,
fetchSampleFreightList,
fetchUnlinkSampleFreight,
@@ -285,6 +290,12 @@
} from '@/components/business/freight-unlink-dialog/index.vue'
import { formatDisplayOrDash } from '@/utils/datetime-display'
import { formatMoneyDisplay } from '@/utils/money-format'
import {
receptionSourceLabel,
receptionSourceTagType,
transportTypeLabel,
transportTypeTagType
} from '@/utils/status-tag-registry'
import {
flattenSampleFreights,
sampleFreightSpanMethod,
@@ -411,9 +422,23 @@
editDialogRef.value?.open(f)
}
function openEditSelected() {
if (selectedFreightIds.value.length !== 1) return
openEditById(selectedFreightIds.value[0])
function handleDelete(row: FlatRow) {
const freightId = String(row.freightId || '').trim()
if (!freightId) return
const batchNo = String(row.batchNo || freightId).trim()
const linked = Number(row.linkedSampleCount || 0)
const linkHint =
linked > 0 ? `将解除其全部 ${linked} 条关联样本,并删除该运费单。` : '将删除该运费单。'
ElMessageBox.confirm(
`确认删除运费批次「${batchNo}」吗?${linkHint}`,
'删除确认',
{ type: 'warning', confirmButtonText: '删除', cancelButtonText: '取消' }
)
.then(async () => {
await fetchDeleteSampleFreight(freightId)
await loadData()
})
.catch(() => undefined)
}
function toUnlinkRow(it: NonNullable<SampleFreight['items']>[number], freightId: string): FreightUnlinkRow {
@@ -460,7 +485,7 @@
unlinkVisible.value = false
await loadData()
} catch (e: any) {
ElMessage.error(e?.message || '取消运费失败')
ElMessage.error(e?.message || '取消样本关联失败')
} finally {
unlinkSubmitting.value = false
}