| | |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="30"> |
| | | <el-col :span="6"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="检验用粉剂/液情况:" prop="inspectMaterialConditionId"> |
| | | <el-tree-select |
| | | v-model="form.inspectMaterialConditionId" |
| | | placeholder="请选择" |
| | | clearable |
| | | check-strictly |
| | | :data="productOptions" |
| | | :data="inspectProductOptions" |
| | | :render-after-expand="false" |
| | | style="width: 100%" |
| | | @change="handleInspectMaterialChange" |
| | | @change="getInspectModels" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-form-item label="规格型号:" prop="inspectProductModelId"> |
| | | <el-select v-model="form.inspectProductModelId" placeholder="请选择" clearable |
| | | filterable readonly @change="handleChangeModels"> |
| | | <el-option v-for="item in inspectProductModel" :key="item.id" :label="item.model" :value="item.id" /> |
| | | <el-col :span="12"> |
| | | <el-form-item label="规格型号(检验):" prop="inspectProductModelId"> |
| | | <el-select |
| | | v-model="form.inspectProductModelId" |
| | | placeholder="请选择" |
| | | clearable |
| | | filterable |
| | | @change="getInspectProductModel" |
| | | > |
| | | <el-option v-for="item in inspectModelOptions" :key="item.id" :label="item.model" :value="item.id" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-form-item label="批号(新):" prop="inspectBatchNo"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="UID码(检验):" prop="inspectUidNo"> |
| | | <el-input v-model="form.inspectUidNo" placeholder="自动带出" disabled /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="批号(检验):" prop="inspectBatchNo"> |
| | | <el-select |
| | | v-model="form.inspectBatchNo" |
| | | placeholder="请选择批号" |
| | | placeholder="请选择" |
| | | clearable |
| | | filterable |
| | | style="width: 100%" |
| | | @change="handleInspectBatchChange" |
| | | @change="handleInspectBatchNoChange" |
| | | > |
| | | <el-option |
| | | v-for="item in inspectBatchOptions" |
| | | :key="item.batchNo" |
| | | :label="item.batchNo" |
| | | :value="item.batchNo" |
| | | v-for="item in inspectBatchNoOptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-form-item label="生产日期(新):" prop="inspectProductionDate"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="供应商(检验):" prop="inspectSupplier"> |
| | | <el-select |
| | | v-model="form.inspectSupplier" |
| | | placeholder="请选择" |
| | | clearable |
| | | filterable |
| | | style="width: 100%" |
| | | :disabled="!inspectSupplierOptions.length" |
| | | @change="handleInspectSupplierChange" |
| | | > |
| | | <el-option |
| | | v-for="item in inspectSupplierOptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="生产日期(检验):" prop="inspectProductionDate"> |
| | | <el-input v-model="form.inspectProductionDate" placeholder="自动带出" disabled/> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-form-item label="有效期(新):" prop="inspectValidityDate"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="有效期(检验):" prop="inspectValidityDate"> |
| | | <el-input v-model="form.inspectValidityDate" placeholder="自动计算" disabled/> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | import {modelList, productTreeList} from "@/api/basicData/product.js"; |
| | | import {qualityInspectAdd, qualityInspectUpdate} from "@/api/qualityManagement/rawMaterialInspection.js"; |
| | | import {userListNoPage} from "@/api/system/user.js"; |
| | | import { getStockInventoryListPage } from "@/api/inventoryManagement/stockInventory.js"; |
| | | import { getStockInventoryAll } from "@/api/inventoryManagement/stockInventory.js"; |
| | | import {qualityInspectDetailByProductId, getQualityTestStandardParamByTestStandardId} from "@/api/qualityManagement/metricMaintenance.js"; |
| | | import {qualityInspectParamInfo} from "@/api/qualityManagement/qualityInspectParam.js"; |
| | | import {deviceList as qualityInspectParamDeviceList} from "@/api/energyManagement/index.js"; |
| | |
| | | inspectMaterialCondition: "", |
| | | inspectProductModelId : "", |
| | | inspectBatchNo: "", |
| | | inspectSupplier: "", |
| | | inspectProductModel: "", |
| | | inspectUidNo: "", |
| | | inspectProductionDate: "", |
| | | inspectValidityDate: "", |
| | | inspectValidityPeriod: "", |
| | |
| | | }); |
| | | const supplierList = ref([]); |
| | | const productOptions = ref([]); |
| | | const inspectProductModel = ref([]); |
| | | const inspectProductOptions = ref([]); |
| | | const inspectModelOptions = ref([]); |
| | | const inspectBatchNoOptions = ref([]); |
| | | const inspectSupplierOptions = ref([]); |
| | | let inspectStockInventoryAllTree = []; |
| | | let inspectBatchNodeByBatchNo = new Map(); |
| | | |
| | | const normalizeInspectStockTree = (nodes = []) => { |
| | | const normalizeNodeValue = (node) => { |
| | | if (node?.id !== null && node?.id !== undefined) return String(node.id); |
| | | if (node?.nodeType === "batch") return String(node.batchNo ?? node.label ?? ""); |
| | | if (node?.nodeType === "customer") return String(node.customer ?? node.label ?? ""); |
| | | if (node?.nodeType === "model") return String(node.productModelId ?? node.model ?? node.label ?? ""); |
| | | return String(node.productName ?? node.label ?? ""); |
| | | }; |
| | | |
| | | const normalized = (list) => |
| | | (list || []).map((n) => { |
| | | const value = normalizeNodeValue(n); |
| | | const label = n.label ?? n.productName ?? n.model ?? n.batchNo ?? n.customer ?? ""; |
| | | return { |
| | | ...n, |
| | | value, |
| | | label, |
| | | children: normalized(n.children), |
| | | }; |
| | | }); |
| | | |
| | | return normalized(nodes); |
| | | }; |
| | | |
| | | // 检验用粉剂/液树形下拉:不展示型号、批号(由右侧「规格型号」「批号」单独选择) |
| | | function filterInspectTreeForPowderSelect(nodes = []) { |
| | | return (nodes || []) |
| | | .filter( |
| | | (n) => |
| | | n && |
| | | n.nodeType !== "customer" && |
| | | n.nodeType !== "model" && |
| | | n.nodeType !== "batch" |
| | | ) |
| | | .map((n) => ({ |
| | | ...n, |
| | | children: filterInspectTreeForPowderSelect(n.children || []), |
| | | })); |
| | | } |
| | | |
| | | /** 在产品子树内递归收集型号节点(型号可能在第 3 层及更深,而非产品的直接子节点) */ |
| | | function collectInspectSubtreeModels(node) { |
| | | const out = []; |
| | | const walk = (n) => { |
| | | if (!n) return; |
| | | if (n.nodeType === "model") { |
| | | out.push(n); |
| | | return; |
| | | } |
| | | for (const c of n.children || []) walk(c); |
| | | }; |
| | | walk(node); |
| | | return out; |
| | | } |
| | | |
| | | const findInspectNodeObjByValue = (nodes = [], value) => { |
| | | for (let i = 0; i < (nodes || []).length; i++) { |
| | | const node = nodes[i]; |
| | | if (String(node?.value) === String(value)) return node; |
| | | const children = node?.children || []; |
| | | if (children.length) { |
| | | const found = findInspectNodeObjByValue(children, value); |
| | | if (found) return found; |
| | | } |
| | | } |
| | | return null; |
| | | }; |
| | | |
| | | function findInspectNodeIdByLabel(nodes, label) { |
| | | if (!label) return null; |
| | | for (let i = 0; i < nodes.length; i++) { |
| | | const node = nodes[i]; |
| | | if (node.label === label) return node.value; |
| | | if (node.children && node.children.length > 0) { |
| | | const found = findInspectNodeIdByLabel(node.children, label); |
| | | if (found !== null && found !== undefined) return found; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | const tableColumn = ref([ |
| | | { |
| | | label: "检测项目", |
| | |
| | | const testStandardOptions = ref([]); // 指标选择下拉框数据 |
| | | const modelOptions = ref([]); |
| | | const deviceList = ref([]); |
| | | const inspectBatchOptions = ref([]); |
| | | |
| | | // 打开弹框 |
| | | const openDialog = async (type, row) => { |
| | | operationType.value = type; |
| | |
| | | // 并行加载基础数据 |
| | | const [userListsRes] = await Promise.all([ |
| | | userListNoPage(), |
| | | getProductOptions(), |
| | | getMainProductTree(), |
| | | getInspectStockTree(), |
| | | getOptions().then((res) => { |
| | | supplierList.value = res.data; |
| | | }) |
| | |
| | | testStandardOptions.value = testStandardRes.data || []; |
| | | |
| | | // 设置 testStandardId 并加载参数列表 |
| | | nextTick(() => { |
| | | nextTick(async () => { |
| | | if (savedTestStandardId) { |
| | | // 确保类型匹配(item.id 可能是数字或字符串) |
| | | const matchedOption = testStandardOptions.value.find(item => |
| | |
| | | form.value.testStandardId = savedTestStandardId; |
| | | } |
| | | } |
| | | await restoreInspectMaterialFromRow(row); |
| | | // 编辑场景保留已有检验值,直接拉取原参数数据 |
| | | getQualityInspectParamList(row.id); |
| | | }); |
| | | }); |
| | | } else { |
| | | nextTick(async () => { |
| | | await restoreInspectMaterialFromRow(row); |
| | | getQualityInspectParamList(row.id); |
| | | }); |
| | | } |
| | | } |
| | | } |
| | | const getProductOptions = () => { |
| | | const getMainProductTree = () => { |
| | | return productTreeList().then((res) => { |
| | | productOptions.value = convertIdToValue(res); |
| | | }); |
| | | }; |
| | | |
| | | const getInspectStockTree = async () => { |
| | | const res = await getStockInventoryAll(); |
| | | const data = res?.data || []; |
| | | inspectStockInventoryAllTree = normalizeInspectStockTree(data); |
| | | inspectProductOptions.value = filterInspectTreeForPowderSelect(inspectStockInventoryAllTree); |
| | | return inspectProductOptions.value; |
| | | }; |
| | | const getModels = (value) => { |
| | | form.value.productModelId = undefined; |
| | |
| | | } |
| | | }; |
| | | |
| | | // 选择检验用粉剂/液情况后,根据产品ID查询库存批号列表 |
| | | const handleInspectMaterialChange = (productId) => { |
| | | inspectBatchOptions.value = []; |
| | | form.value.inspectBatchNo = ""; |
| | | // 库存树(与销售台账一致):选产品 → 规格型号 → 批号 → UID / 日期 |
| | | const getInspectModels = async (value) => { |
| | | if (value === null || value === undefined || value === "") { |
| | | form.value.inspectMaterialCondition = ""; |
| | | form.value.inspectProductModelId = null; |
| | | form.value.inspectProductModel = ""; |
| | | form.value.inspectUidNo = ""; |
| | | form.value.inspectBatchNo = ""; |
| | | form.value.inspectSupplier = ""; |
| | | form.value.inspectProductionDate = ""; |
| | | form.value.inspectValidityDate = ""; |
| | | form.value.inspectValidityPeriod = ""; |
| | | // let productName = findNodeById(productOptions.value, productId); |
| | | inspectModelOptions.value = []; |
| | | inspectBatchNoOptions.value = []; |
| | | inspectSupplierOptions.value = []; |
| | | inspectBatchNodeByBatchNo = new Map(); |
| | | return; |
| | | } |
| | | |
| | | modelList({ id: productId }).then((res) => { |
| | | inspectProductModel.value = res; |
| | | }) |
| | | /*getStockInventoryListPage({ |
| | | productName: productName, |
| | | pageNum: 1, |
| | | pageSize: -1 |
| | | }).then(res => { |
| | | inspectBatchOptions.value = res.data || [] |
| | | // 清空已选择的批号和新字段 |
| | | form.value.inspectBatchNo = ""; |
| | | const node = findInspectNodeObjByValue(inspectStockInventoryAllTree, value); |
| | | if (!node || node.nodeType === "model" || node.nodeType === "batch") return; |
| | | |
| | | const modelNodesPreview = collectInspectSubtreeModels(node); |
| | | if (!modelNodesPreview.length) return; |
| | | |
| | | form.value.inspectMaterialCondition = node.label; |
| | | form.value.inspectProductModelId = null; |
| | | form.value.inspectProductModel = ""; |
| | | form.value.inspectUidNo = ""; |
| | | form.value.inspectBatchNo = ""; |
| | | form.value.inspectSupplier = ""; |
| | | form.value.inspectProductionDate = ""; |
| | | form.value.inspectValidityDate = ""; |
| | | });*/ |
| | | form.value.inspectValidityPeriod = ""; |
| | | |
| | | inspectModelOptions.value = modelNodesPreview.map((m) => ({ |
| | | id: m.value, |
| | | model: m.model ?? m.label ?? "", |
| | | unit: m.unit ?? "", |
| | | uidNo: m.uidNo ?? m.identifierCode ?? "", |
| | | })); |
| | | |
| | | inspectBatchNoOptions.value = []; |
| | | inspectSupplierOptions.value = []; |
| | | inspectBatchNodeByBatchNo = new Map(); |
| | | |
| | | try { |
| | | const list = (await modelList({ id: value })) || []; |
| | | inspectModelOptions.value = inspectModelOptions.value.map((m) => { |
| | | const hit = list.find((x) => String(x.id) === String(m.id)); |
| | | return hit |
| | | ? { |
| | | ...m, |
| | | validityPeriod: hit.validityPeriod, |
| | | uidNo: hit.uidNo ?? m.uidNo, |
| | | unit: hit.unit ?? m.unit, |
| | | } |
| | | : m; |
| | | }); |
| | | } catch (e) { |
| | | console.error("加载检验用规格型号失败", e); |
| | | } |
| | | }; |
| | | |
| | | const handleChangeModels = (value) => { |
| | | form.value.inspectProductModel = inspectProductModel.value.find(item => item.id == value)?.model || ''; |
| | | |
| | | getStockInventoryListPage({ |
| | | model: form.value.inspectProductModel, |
| | | pageNum: 1, |
| | | pageSize: -1 |
| | | }).then(res => { |
| | | inspectBatchOptions.value = res.data || [] |
| | | // 清空已选择的批号和新字段 |
| | | const getInspectProductModel = (value) => { |
| | | if (value === null || value === undefined || value === "") { |
| | | form.value.inspectProductModel = ""; |
| | | form.value.inspectUidNo = ""; |
| | | form.value.inspectBatchNo = ""; |
| | | form.value.inspectSupplier = ""; |
| | | form.value.inspectProductionDate = ""; |
| | | form.value.inspectValidityDate = ""; |
| | | }); |
| | | |
| | | if (form.value.productionDate) { |
| | | calculateInspectValidityDate(); |
| | | } |
| | | } |
| | | |
| | | |
| | | const calculateInspectValidityDate = () => { |
| | | if (!form.value.inspectProductionDate) { |
| | | form.value.inspectValidityDate = ''; |
| | | inspectBatchNoOptions.value = []; |
| | | inspectSupplierOptions.value = []; |
| | | inspectBatchNodeByBatchNo = new Map(); |
| | | return; |
| | | } |
| | | // 获取规格型号的有效期 |
| | | const selectedModel = inspectProductModel.value.find(item => item.id == form.value.inspectProductModelId); |
| | | if (selectedModel && selectedModel.validityPeriod) { |
| | | const inspectProductionDate = new Date(form.value.inspectProductionDate); |
| | | const validityPeriod = parseFloat(selectedModel.inspectValidityDate); |
| | | const validityDate = new Date(inspectProductionDate); |
| | | validityDate.setFullYear(validityDate.getFullYear() + Math.floor(validityPeriod)); |
| | | validityDate.setMonth(validityDate.getMonth() + Math.round((validityPeriod % 1) * 12)); |
| | | form.value.inspectValidityDate = validityDate.toISOString().split('T')[0]; |
| | | } |
| | | |
| | | const modelNode = findInspectNodeObjByValue(inspectStockInventoryAllTree, value); |
| | | if (!modelNode || modelNode.nodeType !== "model") return; |
| | | |
| | | const prevBatchNo = form.value.inspectBatchNo; |
| | | |
| | | form.value.inspectProductModelId = modelNode.value; |
| | | form.value.inspectProductModel = modelNode.model ?? modelNode.label ?? ""; |
| | | |
| | | const nextUid = modelNode.uidNo ?? modelNode.identifierCode ?? ""; |
| | | if (String(nextUid ?? "").trim() !== "") { |
| | | form.value.inspectUidNo = nextUid; |
| | | } |
| | | |
| | | const handleInspectBatchChange = (batchNo) => { |
| | | if (!batchNo) { |
| | | const batchNodes = (modelNode.children || []).filter((b) => b.nodeType === "batch"); |
| | | inspectBatchNodeByBatchNo = new Map( |
| | | batchNodes.map((b) => { |
| | | const key = String(b.batchNo ?? b.value ?? b.label ?? "").trim(); |
| | | return [key, b]; |
| | | }) |
| | | ); |
| | | inspectBatchNoOptions.value = batchNodes.map((b) => ({ |
| | | label: String(b.batchNo ?? b.label ?? "").trim(), |
| | | value: String(b.batchNo ?? b.value ?? b.label ?? "").trim(), |
| | | })); |
| | | |
| | | const batchValues = new Set(inspectBatchNoOptions.value.map((x) => x.value)); |
| | | if (!prevBatchNo || !batchValues.has(prevBatchNo)) { |
| | | form.value.inspectBatchNo = ""; |
| | | } |
| | | |
| | | if (form.value.inspectBatchNo) { |
| | | handleInspectBatchNoChange(form.value.inspectBatchNo); |
| | | } else { |
| | | form.value.inspectProductionDate = ""; |
| | | form.value.inspectValidityDate = ""; |
| | | } |
| | | }; |
| | | |
| | | const handleInspectBatchNoChange = (batchNo) => { |
| | | const safeBatchNo = String(batchNo ?? "").trim(); |
| | | if (!safeBatchNo || !inspectBatchNodeByBatchNo.size) { |
| | | form.value.inspectProductionDate = ""; |
| | | form.value.inspectValidityDate = ""; |
| | | form.value.inspectValidityPeriod = ""; |
| | | form.value.inspectSupplier = ""; |
| | | inspectSupplierOptions.value = []; |
| | | return; |
| | | } |
| | | const selectedBatch = inspectBatchOptions.value.find(item => item.batchNo === batchNo); |
| | | if (selectedBatch) { |
| | | // 带出规格型号和生产日期 |
| | | // form.value.inspectProductModel = selectedBatch.model || ""; |
| | | form.value.inspectProductionDate = selectedBatch.productionDate || ""; |
| | | calculateInspectValidityDate() |
| | | |
| | | const batchNode = inspectBatchNodeByBatchNo.get(String(safeBatchNo)); |
| | | if (!batchNode) { |
| | | form.value.inspectProductionDate = ""; |
| | | form.value.inspectValidityDate = ""; |
| | | form.value.inspectValidityPeriod = ""; |
| | | form.value.inspectSupplier = ""; |
| | | inspectSupplierOptions.value = []; |
| | | return; |
| | | } |
| | | |
| | | const nextUid = batchNode.uidNo ?? batchNode.identifierCode ?? batchNode.uid ?? ""; |
| | | if (String(nextUid ?? "").trim() !== "") { |
| | | form.value.inspectUidNo = nextUid; |
| | | } |
| | | |
| | | // 批号变化:先生成可选供应商;生产日期/有效期在“供应商”选择后带出 |
| | | const customers = (batchNode.children || []) |
| | | .filter((c) => c.nodeType === "customer") |
| | | .map((c) => c.customer ?? c.label ?? "") |
| | | .filter(Boolean); |
| | | const uniq = Array.from(new Set(customers)); |
| | | inspectSupplierOptions.value = uniq.map((s) => ({ label: s, value: s })); |
| | | |
| | | form.value.inspectSupplier = ""; |
| | | form.value.inspectProductionDate = ""; |
| | | form.value.inspectValidityDate = ""; |
| | | form.value.inspectValidityPeriod = ""; |
| | | |
| | | // 不需要用户再选供应商:直接取第一条 customer 计算生产日期/有效期 |
| | | if (inspectSupplierOptions.value.length) { |
| | | const first = inspectSupplierOptions.value[0].value; |
| | | form.value.inspectSupplier = first; |
| | | handleInspectSupplierChange(first); |
| | | } |
| | | }; |
| | | |
| | | const calculateInspectValidityDateByYears = (productionDate, years) => { |
| | | if (!productionDate) return ""; |
| | | const y = Number(years); |
| | | if (Number.isNaN(y) || y <= 0) return ""; |
| | | const d = new Date(productionDate); |
| | | d.setFullYear(d.getFullYear() + Math.floor(y)); |
| | | d.setMonth(d.getMonth() + Math.round((y % 1) * 12)); |
| | | return d.toISOString().split("T")[0]; |
| | | }; |
| | | |
| | | const handleInspectSupplierChange = (supplier) => { |
| | | const safeSupplier = String(supplier ?? "").trim(); |
| | | if (!safeSupplier || !inspectBatchNodeByBatchNo.size) { |
| | | form.value.inspectProductionDate = ""; |
| | | form.value.inspectValidityDate = ""; |
| | | form.value.inspectValidityPeriod = ""; |
| | | return; |
| | | } |
| | | |
| | | const safeBatchNo = String(form.value.inspectBatchNo ?? "").trim(); |
| | | const batchNode = inspectBatchNodeByBatchNo.get(safeBatchNo); |
| | | if (!batchNode) { |
| | | form.value.inspectProductionDate = ""; |
| | | form.value.inspectValidityDate = ""; |
| | | form.value.inspectValidityPeriod = ""; |
| | | return; |
| | | } |
| | | |
| | | const customerNode = (batchNode.children || []).find( |
| | | (c) => c.nodeType === "customer" && String(c.customer ?? c.label ?? "").trim() === safeSupplier |
| | | ); |
| | | if (!customerNode) { |
| | | form.value.inspectProductionDate = ""; |
| | | form.value.inspectValidityDate = ""; |
| | | form.value.inspectValidityPeriod = ""; |
| | | return; |
| | | } |
| | | |
| | | const rawProd = |
| | | customerNode.productionDate ?? |
| | | customerNode.production_date ?? |
| | | batchNode.productionDate ?? |
| | | batchNode.production_date; |
| | | form.value.inspectProductionDate = rawProd ? String(rawProd).slice(0, 10) : ""; |
| | | |
| | | // 有效期年数:优先取供应商节点,其次回退到规格型号有效期 |
| | | const validityYears = |
| | | customerNode.validityPeriod ?? |
| | | customerNode.validity_period ?? |
| | | customerNode.validityYears ?? |
| | | null; |
| | | |
| | | if (validityYears == null || validityYears === "") { |
| | | const selectedModel = inspectModelOptions.value.find( |
| | | (item) => String(item.id) === String(form.value.inspectProductModelId) |
| | | ); |
| | | form.value.inspectValidityPeriod = selectedModel?.validityPeriod ?? ""; |
| | | form.value.inspectValidityDate = calculateInspectValidityDateByYears( |
| | | form.value.inspectProductionDate, |
| | | selectedModel?.validityPeriod ?? "" |
| | | ); |
| | | } else { |
| | | form.value.inspectValidityPeriod = validityYears; |
| | | form.value.inspectValidityDate = calculateInspectValidityDateByYears( |
| | | form.value.inspectProductionDate, |
| | | validityYears |
| | | ); |
| | | } |
| | | }; |
| | | |
| | | const restoreInspectMaterialFromRow = async (row) => { |
| | | try { |
| | | if (!inspectProductOptions.value?.length) { |
| | | await getInspectStockTree(); |
| | | } |
| | | let productKey = row.inspectMaterialConditionId; |
| | | if (!productKey && row.inspectMaterialCondition) { |
| | | productKey = findInspectNodeIdByLabel(inspectProductOptions.value, row.inspectMaterialCondition); |
| | | } |
| | | if (!productKey) return; |
| | | |
| | | const categoryNode = findInspectNodeObjByValue(inspectStockInventoryAllTree, productKey); |
| | | if (!categoryNode || categoryNode.nodeType === "model" || categoryNode.nodeType === "batch") return; |
| | | |
| | | await getInspectModels(productKey); |
| | | form.value.inspectMaterialConditionId = productKey; |
| | | form.value.inspectMaterialCondition = row.inspectMaterialCondition ?? categoryNode.label; |
| | | const savedSupplier = row.inspectSupplier ?? row.supplier ?? row.inspectCustomer ?? ""; |
| | | |
| | | const merged = inspectModelOptions.value; |
| | | const targetSpec = String(row.inspectProductModel ?? "").trim(); |
| | | const currentModel = |
| | | merged.find((m) => String(m.model ?? "").trim() === targetSpec) || |
| | | merged.find((m) => String(m.id) === String(row.inspectProductModelId)); |
| | | |
| | | if (currentModel) { |
| | | form.value.inspectProductModelId = currentModel.id; |
| | | getInspectProductModel(currentModel.id); |
| | | await nextTick(); |
| | | form.value.inspectBatchNo = row.inspectBatchNo ?? ""; |
| | | if (form.value.inspectBatchNo) { |
| | | handleInspectBatchNoChange(form.value.inspectBatchNo); |
| | | if (savedSupplier) { |
| | | form.value.inspectSupplier = savedSupplier; |
| | | handleInspectSupplierChange(savedSupplier); |
| | | } |
| | | } |
| | | } else if (row.inspectProductModelId) { |
| | | form.value.inspectProductModelId = row.inspectProductModelId; |
| | | getInspectProductModel(row.inspectProductModelId); |
| | | await nextTick(); |
| | | form.value.inspectBatchNo = row.inspectBatchNo ?? ""; |
| | | if (form.value.inspectBatchNo) { |
| | | handleInspectBatchNoChange(form.value.inspectBatchNo); |
| | | if (savedSupplier) { |
| | | form.value.inspectSupplier = savedSupplier; |
| | | handleInspectSupplierChange(savedSupplier); |
| | | } |
| | | } |
| | | } |
| | | |
| | | form.value.inspectUidNo = row.inspectUidNo ?? form.value.inspectUidNo ?? ""; |
| | | } catch (e) { |
| | | console.error("回显检验用粉剂/液失败", e); |
| | | } |
| | | }; |
| | | |
| | |
| | | proxy.resetForm("formRef"); |
| | | tableData.value = []; |
| | | testStandardOptions.value = []; |
| | | inspectBatchOptions.value = []; |
| | | inspectModelOptions.value = []; |
| | | inspectBatchNoOptions.value = []; |
| | | inspectSupplierOptions.value = []; |
| | | inspectBatchNodeByBatchNo = new Map(); |
| | | form.value.testStandardId = ''; |
| | | form.value.inspectSupplier = ''; |
| | | form.value.inspectBatchNo = ''; |
| | | form.value.inspectProductionDate = ''; |
| | | form.value.inspectValidityDate = ''; |
| | | form.value.inspectValidityPeriod = ''; |
| | | dialogFormVisible.value = false; |
| | | emit('close') |
| | | }; |