This commit is contained in:
zlwu committed 2026-06-24 10:39:55 +08:00
1 parent 93c28759d0
commit b23a2eb350
129 files changed
+28511 -17769

No files matched your search

@@ -90,7 +90,7 @@
</el-table-column>
<el-table-column label="目的站点" min-width="120" show-overflow-tooltip>
<template #default="{ row }">{{
siteName(String(row.transport?.destSiteId || ''))
siteName(String(row.transport?.destSiteId || ''), row.transport)
}}</template>
</el-table-column>
<el-table-column label="预计到达" min-width="150" show-overflow-tooltip>
@@ -164,7 +164,14 @@
</el-select>
</el-form-item>
<el-form-item label="样本编码">
<el-input
v-if="autoGenerateSampleCode"
:model-value="sampleDraft.sampleCode"
disabled
placeholder="系统自动生成"
/>
<el-select
v-else
v-model="sampleDraft.sampleCodeId"
placeholder="输入编码检索"
filterable
@@ -186,7 +193,10 @@
/>
</el-select>
</el-form-item>
<el-form-item v-if="!hideCollectDetailFields" label="采集量">
<el-form-item
v-if="!hideCollectDetailFields && !hideDialogCollectAmountUnit"
label="采集量"
>
<el-input
v-model="sampleDraft.collectAmount"
type="number"
@@ -195,7 +205,10 @@
style="width: 100%"
/>
</el-form-item>
<el-form-item v-if="!hideCollectDetailFields" label="单位">
<el-form-item
v-if="!hideCollectDetailFields && !hideDialogCollectAmountUnit"
label="单位"
>
<el-select
v-model="sampleDraft.unitId"
placeholder="输入单位检索"
@@ -412,6 +425,10 @@
expressCompanyOptions: Api.ExpressCompany.ExpressCompanyItem[]
showPrice?: boolean
hideCollectDetailFields?: boolean
/** 添加/编辑样本弹窗内隐藏采集量、单位(不影响列表列与存储年限) */
hideDialogCollectAmountUnit?: boolean
autoGenerateSampleCode?: boolean
reserveSampleCode?: () => Promise<string>
sampleCodeUsedKey?: 'usedInProtocol'
sampleCodeOptionsLoading?: boolean
sampleTypeOptionsLoading?: boolean
@@ -422,6 +439,8 @@
{
showPrice: false,
hideCollectDetailFields: false,
hideDialogCollectAmountUnit: false,
autoGenerateSampleCode: false,
sampleCodeUsedKey: 'usedInProtocol',
sampleCodeOptionsLoading: false,
sampleTypeOptionsLoading: false,
@@ -497,6 +516,7 @@
expressCompanyId: transportRaw.expressCompanyId || '',
waybillNo: transportRaw.waybillNo || '',
destSiteId: transportRaw.destSiteId || '',
destSiteName: transportRaw.destSiteName || '',
expressFee: transportRaw.expressFee ?? null,
etaTime: transportRaw.etaTime || '',
carrierName: transportRaw.carrierName || '',
@@ -544,9 +564,13 @@
return name
}
function siteName(id: string) {
function siteName(id: string, transport?: Record<string, any>) {
if (!id) return '—'
return props.siteOptions.find((x) => x.id === id)?.siteName || '—'
const fromOpt = props.siteOptions.find((x) => x.id === id)?.siteName
if (fromOpt && fromOpt !== id) return fromOpt
const fromTransport = String(transport?.destSiteName || '').trim()
if (fromTransport && fromTransport !== id) return fromTransport
return '—'
}
function expressName(id: string) {
@@ -638,7 +662,9 @@
function refreshSampleDialogOptions() {
emit('search-sample-type', '')
emit('search-sample-code', '', sampleCodeFilterForRow(sampleDraft))
if (!props.autoGenerateSampleCode) {
emit('search-sample-code', '', sampleCodeFilterForRow(sampleDraft))
}
emit('search-unit', '')
}
@@ -664,6 +690,7 @@
}
row.storageYears = st.storageYears
}
if (props.autoGenerateSampleCode) return
row.sampleCodeId = ''
row.sampleCode = ''
emit('search-sample-code', '', sampleCodeFilterForRow(row))
@@ -694,6 +721,10 @@
return
}
Object.assign(batchTransport, createEmptyTransport())
const firstWithTransport = selectedSamples.value.find((row) => row.transport?.destSiteId)
if (firstWithTransport?.transport) {
Object.assign(batchTransport, { ...firstWithTransport.transport })
}
batchTransportVisible.value = true
refreshBatchTransportOptions()
}
@@ -715,7 +746,7 @@
ElMessage.success(`已为 ${selectedSamples.value.length} 个样本应用运输信息`)
}
function openAddSampleDialog() {
async function openAddSampleDialog() {
sampleDialogMode.value = 'add'
sampleDialogIndex.value = -1
Object.assign(
@@ -735,6 +766,15 @@
props.samples.length
)
)
if (props.autoGenerateSampleCode && props.reserveSampleCode) {
try {
sampleDraft.sampleCode = await props.reserveSampleCode()
sampleDraft.sampleCodeId = ''
} catch {
ElMessage.error('样本编码生成失败,请稍后重试')
return
}
}
sampleDialogVisible.value = true
refreshSampleDialogOptions()
}
@@ -758,7 +798,21 @@
ElMessage.warning('请选择样本类型')
return
}
if (!sampleDraft.sampleCodeId) {
if (props.autoGenerateSampleCode) {
const code = String(sampleDraft.sampleCode || '').trim()
if (!code) {
ElMessage.warning('样本编码生成失败,请关闭后重试')
return
}
const dup = props.samples.some(
(s, i) =>
i !== sampleDialogIndex.value && String(s.sampleCode || '').trim() === code
)
if (dup) {
ElMessage.warning('样本编码重复,请重新添加')
return
}
} else if (!sampleDraft.sampleCodeId) {
ElMessage.warning('请选择样本编码')
return
}