| | |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="规格型号:" prop="productModelId"> |
| | | <el-select v-model="form.productModelId" placeholder="请选择" clearable :disabled="operationType === 'edit'" |
| | | <el-select v-model="form.productModelId" placeholder="请选择" clearable |
| | | :disabled="operationType === 'edit'" |
| | | filterable readonly @change="handleChangeModel"> |
| | | <el-option v-for="item in modelOptions" :key="item.id" :label="item.model" :value="item.id" /> |
| | | <el-option v-for="item in modelOptions" :key="item.id" :label="item.model" :value="item.id"/> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="指标选择:" prop="testStandardId"> |
| | | <el-select |
| | | v-model="form.testStandardId" |
| | | placeholder="请选择指标" |
| | | clearable |
| | | @change="handleTestStandardChange" |
| | | style="width: 100%" |
| | | v-model="form.testStandardId" |
| | | placeholder="请选择指标" |
| | | clearable |
| | | @change="handleTestStandardChange" |
| | | style="width: 100%" |
| | | > |
| | | <el-option |
| | | v-for="item in testStandardOptions" |
| | | :key="item.id" |
| | | :label="item.standardName || item.standardNo" |
| | | :value="item.id" |
| | | v-for="item in testStandardOptions" |
| | | :key="item.id" |
| | | :label="item.standardName || item.standardNo" |
| | | :value="item.id" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | |
| | | <el-col :span="12"> |
| | | <el-form-item label="批号:" prop="batchNo"> |
| | | <el-input |
| | | v-model="form.batchNo" |
| | | placeholder="请输入" |
| | | clearable |
| | | :disabled="operationType === 'edit'" |
| | | v-model="form.batchNo" |
| | | placeholder="请输入" |
| | | clearable |
| | | :disabled="operationType === 'edit'" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | <el-row :gutter="30"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="检品数量:" prop="inspectedQuantity"> |
| | | <el-input-number :step="0.01" :min="0" style="width: 100%" v-model="form.inspectedQuantity" placeholder="请输入" clearable :precision="2"/> |
| | | <el-input-number :step="0.01" :min="0" style="width: 100%" v-model="form.inspectedQuantity" |
| | | placeholder="请输入" clearable :precision="2"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="总数量:" prop="quantity"> |
| | | <el-input-number :step="0.01" :min="0" style="width: 100%" v-model="form.quantity" placeholder="请输入" clearable :precision="2" :disabled="quantityDisabled"/> |
| | | <el-input-number :step="0.01" :min="0" style="width: 100%" v-model="form.quantity" placeholder="请输入" |
| | | clearable :precision="2" :disabled="quantityDisabled"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="30"> |
| | | |
| | | <el-col :span="12"> |
| | | <el-form-item label="生产日期:" prop="productionDate"> |
| | | <el-date-picker |
| | |
| | | <el-col :span="12"> |
| | | <el-form-item label="检测结果:" prop="checkResult"> |
| | | <el-select v-model="form.checkResult"> |
| | | <el-option label="合格" value="合格" /> |
| | | <el-option label="不合格" value="不合格" /> |
| | | <el-option label="合格" value="合格"/> |
| | | <el-option label="不合格" value="不合格"/> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | <el-row :gutter="30"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="检验员:" prop="checkName"> |
| | | <el-select v-model="form.checkName" placeholder="请选择" clearable> |
| | | <el-option v-for="item in userList" :key="item.nickName" :label="item.nickName" |
| | | :value="item.nickName"/> |
| | | </el-select> |
| | | <el-select v-model="form.checkName" placeholder="请选择" clearable> |
| | | <el-option v-for="item in userList" :key="item.nickName" :label="item.nickName" |
| | | :value="item.nickName"/> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | |
| | | filterable |
| | | @change="getInspectProductModel" |
| | | > |
| | | <el-option v-for="item in inspectModelOptions" :key="item.id" :label="item.model" :value="item.id" /> |
| | | <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="12"> |
| | | <el-form-item label="UID码(检验):" prop="inspectUidNo"> |
| | | <el-input v-model="form.inspectUidNo" placeholder="自动带出" disabled /> |
| | | <el-input v-model="form.inspectUidNo" placeholder="自动带出" disabled/> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | |
| | | <el-input v-model="form.inspectValidityDate" placeholder="自动计算" disabled/> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="请检部门:" prop="manufacturingTeam"> |
| | | <el-input v-model="form.manufacturingTeam" placeholder="请输入" clearable/> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <PIMTable |
| | | rowKey="id" |
| | | :column="tableColumn" |
| | | :tableData="tableData" |
| | | :tableLoading="tableLoading" |
| | | height="400" |
| | | > |
| | | <template #instrument="{ row }"> |
| | | <PIMTable |
| | | rowKey="id" |
| | | :column="tableColumn" |
| | | :tableData="tableData" |
| | | :tableLoading="tableLoading" |
| | | height="400" |
| | | > |
| | | <template #instrument="{ row }"> |
| | | <el-select |
| | | v-model="row.instrument" |
| | | placeholder="请选择或输入" |
| | |
| | | style="width: 100%" |
| | | @change="handleInstrumentChange(row)" |
| | | > |
| | | <el-option label="目测" value="目测" /> |
| | | <el-option label="目测" value="目测"/> |
| | | <el-option |
| | | v-for="item in deviceList" |
| | | :key="item.id" |
| | |
| | | clearable |
| | | style="width: 100%" |
| | | > |
| | | <el-option label="正常" value="正常" /> |
| | | <el-option label="停机" value="停机" /> |
| | | <el-option label="运行" value="运行" /> |
| | | <el-option label="维修" value="维修" /> |
| | | <el-option label="/" value="/" /> |
| | | <el-option label="正常" value="正常"/> |
| | | <el-option label="停机" value="停机"/> |
| | | <el-option label="运行" value="运行"/> |
| | | <el-option label="维修" value="维修"/> |
| | | <el-option label="/" value="/"/> |
| | | </el-select> |
| | | </template> |
| | | <template #result="{ row }"> |
| | | <el-input v-model="row.result" placeholder="请输入" clearable /> |
| | | <el-input v-model="row.result" placeholder="请输入" clearable/> |
| | | </template> |
| | | <template #resultJudgment="{ row }"> |
| | | <el-select v-model="row.resultJudgment" placeholder="请选择" clearable style="width: 100%"> |
| | | <el-option label="合格" value="合格" /> |
| | | <el-option label="不合格" value="不合格" /> |
| | | <el-option label="/" value="/" /> |
| | | <el-option label="合格" value="合格"/> |
| | | <el-option label="不合格" value="不合格"/> |
| | | <el-option label="/" value="/"/> |
| | | </el-select> |
| | | </template> |
| | | </PIMTable> |
| | | </PIMTable> |
| | | <template #footer> |
| | | <div class="dialog-footer"> |
| | | <el-button type="primary" @click="submitForm">确认</el-button> |
| | |
| | | import {modelList, productTreeList} from "@/api/basicData/product.js"; |
| | | import {qualityInspectAdd, qualityInspectUpdate} from "@/api/qualityManagement/rawMaterialInspection.js"; |
| | | import {userListNoPage} from "@/api/system/user.js"; |
| | | import { getStockInventoryAll } from "@/api/inventoryManagement/stockInventory.js"; |
| | | import {qualityInspectDetailByProductId, getQualityTestStandardParamByTestStandardId} from "@/api/qualityManagement/metricMaintenance.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"; |
| | | const { proxy } = getCurrentInstance() |
| | | |
| | | const {proxy} = getCurrentInstance() |
| | | const emit = defineEmits(['close']) |
| | | |
| | | const dialogFormVisible = ref(false); |
| | |
| | | // 检验用粉剂/液情况相关新字段 |
| | | inspectMaterialConditionId: "", |
| | | inspectMaterialCondition: "", |
| | | inspectProductModelId : "", |
| | | inspectProductModelId: "", |
| | | inspectBatchNo: "", |
| | | inspectSupplier: "", |
| | | inspectProductModel: "", |
| | |
| | | inspectProductionDate: "", |
| | | inspectValidityDate: "", |
| | | inspectValidityPeriod: "", |
| | | manufacturingTeam: "", |
| | | }, |
| | | rules: { |
| | | checkTime: [{ required: true, message: "请输入", trigger: "blur" },], |
| | | process: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | checkName: [{ required: false, message: "请输入", trigger: "blur" }], |
| | | productId: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | productModelId: [{ required: true, message: "请选择", trigger: "change" }], |
| | | checkTime: [{required: true, message: "请输入", trigger: "blur"},], |
| | | process: [{required: true, message: "请输入", trigger: "blur"}], |
| | | checkName: [{required: false, message: "请输入", trigger: "blur"}], |
| | | productId: [{required: true, message: "请输入", trigger: "blur"}], |
| | | productModelId: [{required: true, message: "请选择", trigger: "change"}], |
| | | testStandardId: [{required: false, message: "请选择指标", trigger: "change"}], |
| | | unit: [{ required: false, message: "请输入", trigger: "blur" }], |
| | | unit: [{required: false, message: "请输入", trigger: "blur"}], |
| | | inspectedQuantity: [ |
| | | { required: true, message: "请输入检品数量", trigger: "blur" }, |
| | | {required: true, message: "请输入检品数量", trigger: "blur"}, |
| | | { |
| | | validator: (rule, value, callback) => { |
| | | if (value !== '' && value !== null && value !== undefined) { |
| | |
| | | trigger: "blur" |
| | | } |
| | | ], |
| | | quantity: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | checkCompany: [{ required: false, message: "请输入", trigger: "blur" }], |
| | | batchNo: [{ required: true, validator: validateBatchNo, trigger: "blur" }], |
| | | checkResult: [{ required: true, message: "请输入", trigger: "change" }], |
| | | quantity: [{required: true, message: "请输入", trigger: "blur"}], |
| | | checkCompany: [{required: false, message: "请输入", trigger: "blur"}], |
| | | batchNo: [{required: true, validator: validateBatchNo, trigger: "blur"}], |
| | | checkResult: [{required: true, message: "请输入", trigger: "change"}], |
| | | }, |
| | | }); |
| | | const { form, rules } = toRefs(data); |
| | | const {form, rules} = toRefs(data); |
| | | // 编辑时:productMainId 或 purchaseLedgerId 任一有值则数量置灰 |
| | | const quantityDisabled = computed(() => { |
| | | const v = form.value || {}; |
| | |
| | | }; |
| | | |
| | | 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), |
| | | }; |
| | | }); |
| | | (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 || []), |
| | | })); |
| | | .filter( |
| | | (n) => |
| | | n && |
| | | n.nodeType !== "customer" && |
| | | n.nodeType !== "model" && |
| | | n.nodeType !== "batch" |
| | | ) |
| | | .map((n) => ({ |
| | | ...n, |
| | | children: filterInspectTreeForPowderSelect(n.children || []), |
| | | })); |
| | | } |
| | | |
| | | /** 在产品子树内递归收集型号节点(型号可能在第 3 层及更深,而非产品的直接子节点) */ |
| | |
| | | } |
| | | |
| | | const tableColumn = ref([ |
| | | { |
| | | label: "检测项目", |
| | | prop: "parameterItem", |
| | | width: 150 |
| | | }, |
| | | { |
| | | label: "标准要求", |
| | | prop: "standardValue", |
| | | width: 180 |
| | | }, |
| | | { |
| | | label: "检测项目", |
| | | prop: "parameterItem", |
| | | width: 150 |
| | | }, |
| | | { |
| | | label: "标准要求", |
| | | prop: "standardValue", |
| | | width: 180 |
| | | }, |
| | | { |
| | | label: "单位", |
| | | prop: "unit", |
| | |
| | | slot: 'result', |
| | | width: 150 |
| | | }, |
| | | { |
| | | label: "结果判断", |
| | | prop: "resultJudgment", |
| | | dataType: 'slot', |
| | | slot: 'resultJudgment', |
| | | width: 120 |
| | | }, |
| | | { |
| | | label: "结果判断", |
| | | prop: "resultJudgment", |
| | | dataType: 'slot', |
| | | slot: 'resultJudgment', |
| | | width: 120 |
| | | }, |
| | | ]); |
| | | const tableData = ref([]); |
| | | const tableLoading = ref(false); |
| | |
| | | if (currentProductId.value) { |
| | | // 设置产品名称 |
| | | form.value.productName = findNodeById(productOptions.value, currentProductId.value); |
| | | syncInspectDeptByProductName(form.value.productName); |
| | | |
| | | // 并行加载规格型号和指标选项 |
| | | const params = { |
| | |
| | | }; |
| | | |
| | | Promise.all([ |
| | | modelList({ id: currentProductId.value }), |
| | | modelList({id: currentProductId.value}), |
| | | qualityInspectDetailByProductId(params) |
| | | ]).then(([modelRes, testStandardRes]) => { |
| | | // 设置规格型号选项 |
| | |
| | | if (savedTestStandardId) { |
| | | // 确保类型匹配(item.id 可能是数字或字符串) |
| | | const matchedOption = testStandardOptions.value.find(item => |
| | | item.id == savedTestStandardId || String(item.id) === String(savedTestStandardId) |
| | | item.id == savedTestStandardId || String(item.id) === String(savedTestStandardId) |
| | | ); |
| | | if (matchedOption) { |
| | | // 确保使用匹配项的 id(保持类型一致) |
| | |
| | | inspectProductOptions.value = filterInspectTreeForPowderSelect(inspectStockInventoryAllTree); |
| | | return inspectProductOptions.value; |
| | | }; |
| | | |
| | | const getInspectDeptByProductName = (productName) => { |
| | | const name = String(productName ?? "").trim(); |
| | | if (!name) return ""; |
| | | const match = name.match(/^成品-([一三])类产品-/); |
| | | if (!match) return ""; |
| | | return `${match[1]}类车间`; |
| | | }; |
| | | |
| | | const syncInspectDeptByProductName = (productName, force = false) => { |
| | | const dept = getInspectDeptByProductName(productName); |
| | | if (!dept) return; |
| | | if (force || !String(form.value.inspectDept ?? "").trim()) { |
| | | form.value.inspectDept = dept; |
| | | } |
| | | }; |
| | | |
| | | const getModels = (value) => { |
| | | form.value.productModelId = undefined; |
| | | form.value.unit = undefined; |
| | |
| | | modelOptions.value = []; |
| | | currentProductId.value = value |
| | | form.value.productName = findNodeById(productOptions.value, value); |
| | | modelList({ id: value }).then((res) => { |
| | | syncInspectDeptByProductName(form.value.productName, true); |
| | | modelList({id: value}).then((res) => { |
| | | modelOptions.value = res; |
| | | }) |
| | | if (currentProductId.value) { |
| | |
| | | } |
| | | return null; // 没有找到节点,返回null |
| | | }; |
| | | |
| | | function convertIdToValue(data) { |
| | | return data.map((item) => { |
| | | const { id, children, ...rest } = item; |
| | | const {id, children, ...rest} = item; |
| | | const newItem = { |
| | | ...rest, |
| | | value: id, // 将 id 改为 value |
| | |
| | | return newItem; |
| | | }); |
| | | } |
| | | |
| | | // 提交产品表单 |
| | | const submitForm = () => { |
| | | proxy.$refs.formRef.validate(valid => { |
| | | if (valid) { |
| | | form.value.inspectType = 2 |
| | | if (operationType.value === "add") { |
| | | tableData.value.forEach((item) => { |
| | | delete item.id |
| | | }) |
| | | } |
| | | const data = {...form.value, qualityInspectParams: tableData.value} |
| | | if (operationType.value === "add") { |
| | | tableData.value.forEach((item) => { |
| | | delete item.id |
| | | }) |
| | | } |
| | | const data = {...form.value, qualityInspectParams: tableData.value} |
| | | if (operationType.value === "add") { |
| | | qualityInspectAdd(data).then(res => { |
| | | proxy.$modal.msgSuccess("提交成功"); |
| | |
| | | productId: currentProductId.value, |
| | | inspectType: 2 |
| | | } |
| | | qualityInspectDetailByProductId(params).then(res => { |
| | | // 保存下拉框选项数据 |
| | | testStandardOptions.value = res.data || []; |
| | | // 清空表格数据,等待用户选择指标 |
| | | tableData.value = []; |
| | | // 清空指标选择 |
| | | form.value.testStandardId = ''; |
| | | }) |
| | | qualityInspectDetailByProductId(params).then(res => { |
| | | // 保存下拉框选项数据 |
| | | testStandardOptions.value = res.data || []; |
| | | // 清空表格数据,等待用户选择指标 |
| | | tableData.value = []; |
| | | // 清空指标选择 |
| | | form.value.testStandardId = ''; |
| | | }) |
| | | } |
| | | |
| | | // 指标选择变化处理 |
| | |
| | | }) |
| | | } |
| | | const getQualityInspectParamList = (id) => { |
| | | qualityInspectParamInfo(id).then(res => { |
| | | tableData.value = (res.data || []).map(item => ({...item})); |
| | | }) |
| | | qualityInspectParamInfo(id).then(res => { |
| | | tableData.value = (res.data || []).map(item => ({...item})); |
| | | }) |
| | | } |
| | | |
| | | // 计算有效期(生产日期 + 规格型号中的有效期) |
| | |
| | | inspectBatchNodeByBatchNo = new Map(); |
| | | |
| | | try { |
| | | const list = (await modelList({ id: value })) || []; |
| | | 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; |
| | | : m; |
| | | }); |
| | | } catch (e) { |
| | | console.error("加载检验用规格型号失败", e); |
| | |
| | | |
| | | 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]; |
| | | }) |
| | | 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(), |
| | |
| | | |
| | | // 批号变化:先生成可选供应商;生产日期/有效期在“供应商”选择后带出 |
| | | const customers = (batchNode.children || []) |
| | | .filter((c) => c.nodeType === "customer") |
| | | .map((c) => c.customer ?? c.label ?? "") |
| | | .filter(Boolean); |
| | | .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 })); |
| | | inspectSupplierOptions.value = uniq.map((s) => ({label: s, value: s})); |
| | | |
| | | form.value.inspectSupplier = ""; |
| | | form.value.inspectProductionDate = ""; |
| | |
| | | } |
| | | |
| | | const customerNode = (batchNode.children || []).find( |
| | | (c) => c.nodeType === "customer" && String(c.customer ?? c.label ?? "").trim() === safeSupplier |
| | | (c) => c.nodeType === "customer" && String(c.customer ?? c.label ?? "").trim() === safeSupplier |
| | | ); |
| | | if (!customerNode) { |
| | | form.value.inspectProductionDate = ""; |
| | |
| | | } |
| | | |
| | | const rawProd = |
| | | customerNode.productionDate ?? |
| | | customerNode.production_date ?? |
| | | batchNode.productionDate ?? |
| | | batchNode.production_date; |
| | | 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; |
| | | 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) |
| | | (item) => String(item.id) === String(form.value.inspectProductModelId) |
| | | ); |
| | | form.value.inspectValidityPeriod = selectedModel?.validityPeriod ?? ""; |
| | | form.value.inspectValidityDate = calculateInspectValidityDateByYears( |
| | | form.value.inspectProductionDate, |
| | | selectedModel?.validityPeriod ?? "" |
| | | form.value.inspectProductionDate, |
| | | selectedModel?.validityPeriod ?? "" |
| | | ); |
| | | } else { |
| | | form.value.inspectValidityPeriod = validityYears; |
| | | form.value.inspectValidityDate = calculateInspectValidityDateByYears( |
| | | form.value.inspectProductionDate, |
| | | validityYears |
| | | form.value.inspectProductionDate, |
| | | validityYears |
| | | ); |
| | | } |
| | | }; |
| | |
| | | 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)); |
| | | merged.find((m) => String(m.model ?? "").trim() === targetSpec) || |
| | | merged.find((m) => String(m.id) === String(row.inspectProductModelId)); |
| | | |
| | | if (currentModel) { |
| | | form.value.inspectProductModelId = currentModel.id; |
| | |
| | | |
| | | // 获取设备台账列表 |
| | | const loadDeviceList = () => { |
| | | qualityInspectParamDeviceList().then(res => { |
| | | deviceList.value = res.data || []; |
| | | }); |
| | | qualityInspectParamDeviceList().then(res => { |
| | | deviceList.value = res.data || []; |
| | | }); |
| | | }; |
| | | |
| | | // 设备状态颜色映射 |
| | | const getDeviceStatusType = (status) => { |
| | | const map = { |
| | | '正常': 'success', |
| | | '运行': 'primary', |
| | | '停机': 'warning', |
| | | '维修': 'danger' |
| | | }; |
| | | return map[status] || 'info'; |
| | | const map = { |
| | | '正常': 'success', |
| | | '运行': 'primary', |
| | | '停机': 'warning', |
| | | '维修': 'danger' |
| | | }; |
| | | return map[status] || 'info'; |
| | | }; |
| | | |
| | | // 检测器具变化时,自动填充设备状态 |
| | | const handleInstrumentChange = (row) => { |
| | | if (row.instrument === '目测') { |
| | | row.deviceId = null; |
| | | row.deviceName = '目测'; |
| | | row.deviceStatus = ''; |
| | | return; |
| | | } |
| | | const device = deviceList.value.find(d => d.deviceName === row.instrument); |
| | | if (device) { |
| | | row.deviceId = device.id; |
| | | row.deviceName = device.deviceName; |
| | | row.deviceStatus = device.status || ''; |
| | | } else { |
| | | row.deviceId = null; |
| | | row.deviceName = row.instrument || ''; |
| | | row.deviceStatus = ''; |
| | | } |
| | | if (row.instrument === '目测') { |
| | | row.deviceId = null; |
| | | row.deviceName = '目测'; |
| | | row.deviceStatus = ''; |
| | | return; |
| | | } |
| | | const device = deviceList.value.find(d => d.deviceName === row.instrument); |
| | | if (device) { |
| | | row.deviceId = device.id; |
| | | row.deviceName = device.deviceName; |
| | | row.deviceStatus = device.status || ''; |
| | | } else { |
| | | row.deviceId = null; |
| | | row.deviceName = row.instrument || ''; |
| | | row.deviceStatus = ''; |
| | | } |
| | | }; |
| | | |
| | | // 关闭弹框 |
| | |
| | | |
| | | <style scoped> |
| | | |
| | | </style> |
| | | </style> |