提交
This commit is contained in:
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
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user