This commit is contained in:
zlwu committed 2026-05-21 21:29:54 +08:00
1 parent b0eb80a2d4
commit 87dbbf1247
25 files changed
+6659 -5256

No files matched your search

@@ -172,7 +172,8 @@
<el-table-column type="index" label="序号" width="56" align="center" :index="(i: number) => i + 1" />
<el-table-column label="产出类型" min-width="150" align="center">
<template #default="{ row }">
<el-select v-model="row.outputTypeId" placeholder="选择类型" filterable class="inner-cell-select">
<el-select v-model="row.outputTypeId" placeholder="选择类型" filterable class="inner-cell-select"
@change="editor.saveOutputs">
<el-option v-for="ot in editor.outputTypeOptions.value" :key="ot.id"
:label="ot.typeName || ot.name" :value="ot.id" />
</el-select>
@@ -180,17 +181,20 @@
</el-table-column>
<el-table-column label="名称" min-width="150" align="center">
<template #default="{ row }">
<el-input v-model="row.outputName" placeholder="名称" class="inner-cell-input" />
<el-input v-model="row.outputName" placeholder="名称" class="inner-cell-input"
@change="editor.saveOutputs" />
</template>
</el-table-column>
<el-table-column label="条码" min-width="150" align="center">
<template #default="{ row }">
<el-input v-model="row.outputBarcode" placeholder="条码" class="inner-cell-input" />
<el-input v-model="row.outputBarcode" placeholder="条码" class="inner-cell-input"
@change="editor.saveOutputs" />
</template>
</el-table-column>
<el-table-column label="备注" min-width="120" align="center">
<template #default="{ row }">
<el-input v-model="row.remark" placeholder="备注" class="inner-cell-input" />
<el-input v-model="row.remark" placeholder="备注" class="inner-cell-input"
@change="editor.saveOutputs" />
</template>
</el-table-column>
<el-table-column label="操作" width="80" align="center">
@@ -212,7 +216,8 @@
<el-table-column type="index" label="序号" width="56" align="center" :index="(i: number) => i + 1" />
<el-table-column label="采集名称" min-width="180" align="center">
<template #default="{ row }">
<el-input v-model="row.collectionName" placeholder="采集项名称" class="inner-cell-input" />
<el-input v-model="row.collectionName" placeholder="采集项名称" class="inner-cell-input"
@change="editor.saveDataCollections" />
</template>
</el-table-column>
<el-table-column label="单位" min-width="120" align="center">
@@ -220,19 +225,16 @@
<el-select v-model="row.unit" placeholder="请选择单位" clearable filterable remote
reserve-keyword class="inner-cell-select" :loading="editor.itemUnitOptionsLoading.value"
:remote-method="editor.searchItemUnitOptions"
@visible-change="(vis: boolean) => vis && editor.searchItemUnitOptions('')">
@visible-change="(vis: boolean) => vis && editor.searchItemUnitOptions('')"
@change="editor.saveDataCollections">
<el-option v-for="item in editor.itemUnitOptions.value" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</template>
</el-table-column>
<el-table-column label="排序号" min-width="100" align="center">
<template #default="{ row }">
<el-input v-model="row.orderNum" placeholder="排序号" class="inner-cell-input" />
</template>
</el-table-column>
<el-table-column label="备注" min-width="120" align="center">
<template #default="{ row }">
<el-input v-model="row.remark" placeholder="备注" class="inner-cell-input" />
<el-input v-model="row.remark" placeholder="备注" class="inner-cell-input"
@change="editor.saveDataCollections" />
</template>
</el-table-column>
<el-table-column label="操作" width="80" align="center">
@@ -109,6 +109,17 @@ export function useTaskStepEditor() {
for (const r of list) if (r?.id) next[r.id] = r
reagentMasterById.value = next
}
/** 通过 reagentCode 在已缓存的主表数据中反查 masterId */
function resolveReagentMasterId(row: Record<string, any>): string | null {
const code = (row.reagentCode || '').trim()
if (!code) return null
for (const master of Object.values(reagentMasterById.value)) {
if ((master.reagentCode || '').trim() === code) return master.id
}
return null
}
async function searchReagentOptions(query: string) {
reagentOptionsLoading.value = true
try {
@@ -132,6 +143,14 @@ export function useTaskStepEditor() {
reagentOptions.value = [{ id: row.reagentId, label: mapReagentOptionLabel(row) }, ...reagentOptions.value]
return
}
// reagentId 为空(后端不存储该字段)— 通过 reagentCode 反查主表真实 ID
const masterId = resolveReagentMasterId(row)
if (masterId) {
row.reagentId = masterId
// 主表选项已在 searchReagentOptions 中加载,无需重复添加
return
}
// 实在找不到主表记录才走 legacy 兜底
const code = (row.reagentCode || '').trim()
const name = (row.reagentName || '').trim()
if (!code && !name) return
@@ -179,6 +198,17 @@ export function useTaskStepEditor() {
for (const c of list) if (c?.id) next[c.id] = c
consumableMasterById.value = next
}
/** 通过 consumableCode 在已缓存的主表数据中反查 masterId */
function resolveConsumableMasterId(row: Record<string, any>): string | null {
const code = (row.consumableCode || '').trim()
if (!code) return null
for (const master of Object.values(consumableMasterById.value)) {
if ((master.consumableCode || '').trim() === code) return master.id
}
return null
}
async function searchConsumableOptions(query: string) {
consumableOptionsLoading.value = true
try {
@@ -202,6 +232,14 @@ export function useTaskStepEditor() {
consumableOptions.value = [{ id: row.consumableId, label: mapConsumableOptionLabel(row) }, ...consumableOptions.value]
return
}
// consumableId 为空(后端不存储该字段)— 通过 consumableCode 反查主表真实 ID
const masterId = resolveConsumableMasterId(row)
if (masterId) {
row.consumableId = masterId
// 主表选项已在 searchConsumableOptions 中加载,无需重复添加
return
}
// 实在找不到主表记录才走 legacy 兜底
const code = (row.consumableCode || '').trim()
const name = (row.consumableName || '').trim()
if (!code && !name) return
@@ -237,18 +275,6 @@ export function useTaskStepEditor() {
})
ensureItemUnitOption(row.unit)
ensureConsumableOption(row)
}
const master = consumableMasterById.value[consumableId]
if (!master) { saveConsumables(); return }
Object.assign(row, {
consumableId: master.id, consumableCode: master.consumableCode || '',
consumableName: master.consumableName || '', specModel: master.specModel || '',
standardUsage: master.standardUsage ?? '', unit: master.unit || '',
remark: master.remark ?? master.description ?? ''
})
ensureItemUnitOption(row.unit)
ensureConsumableOption(row)
saveConsumables()
}
function ensureAllStepUnitOptions() {
for (const step of stepList.value) {