| src/api/qualityManagement/metricMaintenance.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/qualityManagement/finalInspection/components/formDia.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/qualityManagement/processInspection/components/formDia.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/qualityManagement/rawMaterialInspection/components/formDia.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/api/qualityManagement/metricMaintenance.js
@@ -37,10 +37,11 @@ } // 删除指标列表 export function qualityInspectDetailByProductId(productId) { export function qualityInspectDetailByProductId(params) { return request({ url: "/qualityTestStandard/product/" + productId, url: "/qualityTestStandard/getQualityTestStandardByProductId", method: "get", params: params, }); } @@ -98,3 +99,12 @@ data: ids, }); } // 根据标准ID获取标准参数 export function getQualityTestStandardParamByTestStandardId(testStandardId) { return request({ url: "/qualityTestStandard/getQualityTestStandardParamByTestStandardId", method: "get", params: { testStandardId }, }); } src/views/qualityManagement/finalInspection/components/formDia.vue
@@ -27,6 +27,24 @@ <el-input v-model="form.model" placeholder="请输入" clearable/> </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%" > <el-option v-for="item in testStandardOptions" :key="item.id" :label="item.standardName || item.standardNo" :value="item.id" /> </el-select> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> @@ -101,12 +119,12 @@ </template> <script setup> import {ref} from "vue"; import {ref, reactive, toRefs, getCurrentInstance, nextTick} from "vue"; import {getOptions} from "@/api/procurementManagement/procurementLedger.js"; import {productTreeList} from "@/api/basicData/product.js"; import {qualityInspectAdd, qualityInspectUpdate} from "@/api/qualityManagement/rawMaterialInspection.js"; import {userListNoPage} from "@/api/system/user.js"; import {qualityInspectDetailByProductId} from "@/api/qualityManagement/metricMaintenance.js"; import {qualityInspectDetailByProductId, getQualityTestStandardParamByTestStandardId} from "@/api/qualityManagement/metricMaintenance.js"; import {qualityInspectParamInfo} from "@/api/qualityManagement/qualityInspectParam.js"; const { proxy } = getCurrentInstance() const emit = defineEmits(['close']) @@ -121,6 +139,7 @@ productName: "", productId: "", model: "", testStandardId: "", unit: "", quantity: "", checkCompany: "", @@ -132,6 +151,7 @@ checkName: [{ required: false, message: "请输入", trigger: "blur" }], productId: [{ required: true, message: "请输入", trigger: "blur" }], model: [{ required: false, message: "请输入", trigger: "blur" }], testStandardId: [{required: true, message: "请选择指标", trigger: "change"}], unit: [{ required: false, message: "请输入", trigger: "blur" }], quantity: [{ required: true, message: "请输入", trigger: "blur" }], checkCompany: [{ required: false, message: "请输入", trigger: "blur" }], @@ -169,6 +189,7 @@ const tableLoading = ref(false); const userList = ref([]); const currentProductId = ref(0); const testStandardOptions = ref([]); // 指标选择下拉框数据 // 打开弹框 const openDialog = async (type, row) => { @@ -180,11 +201,54 @@ let userLists = await userListNoPage(); userList.value = userLists.data; form.value = {} testStandardOptions.value = []; tableData.value = []; getProductOptions(); if (operationType.value === 'edit') { form.value = {...row} // 先保存 testStandardId,避免被清空 const savedTestStandardId = row.testStandardId; // 先设置表单数据,但暂时清空 testStandardId,等选项加载完成后再设置 form.value = {...row, testStandardId: ''} currentProductId.value = row.productId || 0 getQualityInspectParamList(row.id) // 编辑模式下,先加载指标选项,然后加载参数列表 if (currentProductId.value) { // 先加载指标选项 let params = { productId: currentProductId.value, inspectType: 2 } qualityInspectDetailByProductId(params).then(res => { testStandardOptions.value = res.data || []; // 使用 nextTick 和 setTimeout 确保选项已经渲染到 DOM nextTick(() => { setTimeout(() => { // 如果编辑数据中有 testStandardId,则设置并加载对应的参数 if (savedTestStandardId) { // 确保类型匹配(item.id 可能是数字或字符串) const matchedOption = testStandardOptions.value.find(item => item.id == savedTestStandardId || String(item.id) === String(savedTestStandardId) ); if (matchedOption) { // 确保使用匹配项的 id(保持类型一致) form.value.testStandardId = matchedOption.id; console.log(22222,form.value.testStandardId); handleTestStandardChange(matchedOption.id); } else { // 如果找不到匹配项,尝试直接使用原值 console.warn('未找到匹配的指标选项,testStandardId:', savedTestStandardId, '可用选项:', testStandardOptions.value); form.value.testStandardId = savedTestStandardId; handleTestStandardChange(savedTestStandardId); } } else { // 否则使用旧的逻辑 getQualityInspectParamList(row.id); } }, 100); }); }); } else { getQualityInspectParamList(row.id); } } } const getProductOptions = () => { @@ -195,7 +259,7 @@ const getModels = (value) => { currentProductId.value = value form.value.productName = findNodeById(productOptions.value, value); if (currentProductId) { if (currentProductId.value) { getList(); } }; @@ -253,8 +317,39 @@ }) } const getList = () => { qualityInspectDetailByProductId(currentProductId.value).then(res => { tableData.value = res.data; if (!currentProductId.value) { testStandardOptions.value = []; tableData.value = []; return; } let params = { productId: currentProductId.value, inspectType: 2 } qualityInspectDetailByProductId(params).then(res => { // 保存下拉框选项数据 testStandardOptions.value = res.data || []; // 清空表格数据,等待用户选择指标 tableData.value = []; // 清空指标选择 form.value.testStandardId = ''; }) } // 指标选择变化处理 const handleTestStandardChange = (testStandardId) => { if (!testStandardId) { tableData.value = []; return; } tableLoading.value = true; getQualityTestStandardParamByTestStandardId(testStandardId).then(res => { tableData.value = res.data || []; }).catch(error => { console.error('获取标准参数失败:', error); tableData.value = []; }).finally(() => { tableLoading.value = false; }) } const getQualityInspectParamList = (id) => { @@ -265,6 +360,9 @@ // 关闭弹框 const closeDia = () => { proxy.resetForm("formRef"); tableData.value = []; testStandardOptions.value = []; form.value.testStandardId = ''; dialogFormVisible.value = false; emit('close') }; src/views/qualityManagement/processInspection/components/formDia.vue
@@ -9,8 +9,21 @@ <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef"> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="工序:" prop="process"> <el-input v-model="form.process" placeholder="请输入" clearable/> <el-form-item label="工序:" prop="processId"> <el-select v-model="form.processId" placeholder="请选择工序" clearable @change="handleProcessChange" style="width: 100%" > <el-option v-for="item in processOptions" :key="item.value" :label="item.label" :value="item.value" /> </el-select> </el-form-item> </el-col> <el-col :span="12"> @@ -32,6 +45,24 @@ <el-col :span="12"> <el-form-item label="规格型号:" prop="model"> <el-input v-model="form.model" placeholder="请输入" clearable/> </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%" > <el-option v-for="item in testStandardOptions" :key="item.id" :label="item.standardName || item.standardNo" :value="item.id" /> </el-select> </el-form-item> </el-col> </el-row> @@ -108,11 +139,12 @@ </template> <script setup> import {ref} from "vue"; import {ref, reactive, toRefs, getCurrentInstance, nextTick} from "vue"; import {getOptions} from "@/api/procurementManagement/procurementLedger.js"; import {productTreeList} from "@/api/basicData/product.js"; import {productProcessListPage} from "@/api/basicData/productProcess.js"; import {qualityInspectAdd, qualityInspectUpdate} from "@/api/qualityManagement/rawMaterialInspection.js"; import {qualityInspectDetailByProductId} from "@/api/qualityManagement/metricMaintenance.js"; import {qualityInspectDetailByProductId, getQualityTestStandardParamByTestStandardId} from "@/api/qualityManagement/metricMaintenance.js"; import {userListNoPage} from "@/api/system/user.js"; import {qualityInspectParamInfo} from "@/api/qualityManagement/qualityInspectParam.js"; const { proxy } = getCurrentInstance() @@ -123,11 +155,12 @@ const data = reactive({ form: { checkTime: "", process: "", processId: "", checkName: "", productName: "", productId: "", model: "", testStandardId: "", unit: "", quantity: "", checkCompany: "", @@ -135,10 +168,11 @@ }, rules: { checkTime: [{ required: true, message: "请输入", trigger: "blur" },], process: [{ required: true, message: "请输入", trigger: "blur" }], processId: [{ required: true, message: "请选择工序", trigger: "change" }], checkName: [{ required: false, message: "请输入", trigger: "blur" }], productId: [{ required: true, message: "请输入", trigger: "blur" }], model: [{ required: false, message: "请输入", trigger: "blur" }], testStandardId: [{required: true, message: "请选择指标", trigger: "change"}], unit: [{ required: false, message: "请输入", trigger: "blur" }], quantity: [{ required: true, message: "请输入", trigger: "blur" }], checkCompany: [{ required: false, message: "请输入", trigger: "blur" }], @@ -176,6 +210,24 @@ const tableData = ref([]); const tableLoading = ref(false); const currentProductId = ref(0); const processOptions = ref([]); // 工序下拉框数据 const testStandardOptions = ref([]); // 指标选择下拉框数据 // 获取工序列表 const getProcessList = async () => { try { const res = await productProcessListPage({ current: 1, size: 1000 }) if (res?.code === 200) { const records = res?.data?.records || [] processOptions.value = records.map(item => ({ label: item.processName || item.name || item.label, value: item.id || item.processId || item.value })) } } catch (error) { console.error('获取工序列表失败:', error) } } // 打开弹框 const openDialog = async (type, row) => { @@ -187,11 +239,64 @@ let userLists = await userListNoPage(); userList.value = userLists.data; form.value = {} testStandardOptions.value = []; tableData.value = []; getProductOptions(); // 先加载工序列表 await getProcessList(); if (operationType.value === 'edit') { form.value = {...row} // 先保存 testStandardId,避免被清空 const savedTestStandardId = row.testStandardId; // 先设置表单数据,但暂时清空 testStandardId,等选项加载完成后再设置 form.value = {...row, testStandardId: ''} // 兼容旧数据:如果 row 中有 process 字段,转换为 processId if (row.process && !row.processId) { // 尝试从 processOptions 中查找匹配的工序 const processOption = processOptions.value.find(p => p.label === row.process); if (processOption) { form.value.processId = processOption.value; } } currentProductId.value = row.productId || 0 getQualityInspectParamList(row.id) // 编辑模式下,先加载指标选项,然后加载参数列表 if (currentProductId.value) { // 先加载指标选项 let params = { productId: currentProductId.value, inspectType: 1, process: form.value.processId ? processOptions.value.find(p => p.value === form.value.processId)?.label : '' } qualityInspectDetailByProductId(params).then(res => { testStandardOptions.value = res.data || []; // 使用 nextTick 和 setTimeout 确保选项已经渲染到 DOM nextTick(() => { setTimeout(() => { // 如果编辑数据中有 testStandardId,则设置并加载对应的参数 if (savedTestStandardId) { // 确保类型匹配(item.id 可能是数字或字符串) const matchedOption = testStandardOptions.value.find(item => item.id == savedTestStandardId || String(item.id) === String(savedTestStandardId) ); if (matchedOption) { // 确保使用匹配项的 id(保持类型一致) form.value.testStandardId = matchedOption.id; handleTestStandardChange(matchedOption.id); } else { // 如果找不到匹配项,尝试直接使用原值 console.warn('未找到匹配的指标选项,testStandardId:', savedTestStandardId, '可用选项:', testStandardOptions.value); form.value.testStandardId = savedTestStandardId; handleTestStandardChange(savedTestStandardId); } } else { // 否则使用旧的逻辑 getQualityInspectParamList(row.id); } }, 100); }); }); } else { getQualityInspectParamList(row.id); } } } const getProductOptions = () => { @@ -202,7 +307,7 @@ const getModels = (value) => { currentProductId.value = value form.value.productName = findNodeById(productOptions.value, value); if (currentProductId) { if (currentProductId.value) { getList(); } }; @@ -234,17 +339,31 @@ return newItem; }); } // 工序变化处理 const handleProcessChange = () => { // 工序变化时,如果已选择产品,重新加载指标列表 if (currentProductId.value) { getList(); } } // 提交产品表单 const submitForm = () => { proxy.$refs.formRef.validate(valid => { if (valid) { form.value.inspectType = 1 // 将 processId 转换为 process 名称(如果后端需要 process 字段) const processName = form.value.processId ? processOptions.value.find(p => p.value === form.value.processId)?.label : ''; if (operationType.value === "add") { tableData.value.forEach((item) => { delete item.id }) } const data = {...form.value, qualityInspectParams: tableData.value} const data = { ...form.value, process: processName, // 保留 process 字段以兼容后端 qualityInspectParams: tableData.value } if (operationType.value === "add") { qualityInspectAdd(data).then(res => { proxy.$modal.msgSuccess("提交成功"); @@ -260,8 +379,42 @@ }) } const getList = () => { qualityInspectDetailByProductId(currentProductId.value).then(res => { tableData.value = res.data; if (!currentProductId.value) { testStandardOptions.value = []; tableData.value = []; return; } // 获取工序名称 const processName = form.value.processId ? processOptions.value.find(p => p.value === form.value.processId)?.label : ''; let params = { productId: currentProductId.value, inspectType: 1, process: processName } qualityInspectDetailByProductId(params).then(res => { // 保存下拉框选项数据 testStandardOptions.value = res.data || []; // 清空表格数据,等待用户选择指标 tableData.value = []; // 清空指标选择 form.value.testStandardId = ''; }) } // 指标选择变化处理 const handleTestStandardChange = (testStandardId) => { if (!testStandardId) { tableData.value = []; return; } tableLoading.value = true; getQualityTestStandardParamByTestStandardId(testStandardId).then(res => { tableData.value = res.data || []; }).catch(error => { console.error('获取标准参数失败:', error); tableData.value = []; }).finally(() => { tableLoading.value = false; }) } const getQualityInspectParamList = (id) => { @@ -272,6 +425,9 @@ // 关闭弹框 const closeDia = () => { proxy.resetForm("formRef"); tableData.value = []; testStandardOptions.value = []; form.value.testStandardId = ''; dialogFormVisible.value = false; emit('close') }; src/views/qualityManagement/rawMaterialInspection/components/formDia.vue
@@ -45,6 +45,24 @@ <el-input v-model="form.model" placeholder="请输入" clearable/> </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%" > <el-option v-for="item in testStandardOptions" :key="item.id" :label="item.standardName || item.standardNo" :value="item.id" /> </el-select> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> @@ -121,13 +139,13 @@ </template> <script setup> import {ref} from "vue"; import {ref, reactive, toRefs, getCurrentInstance, nextTick} from "vue"; import {getOptions} from "@/api/procurementManagement/procurementLedger.js"; import {productTreeList} from "@/api/basicData/product.js"; import {qualityInspectAdd, qualityInspectUpdate} from "@/api/qualityManagement/rawMaterialInspection.js"; import {ElMessageBox} from "element-plus"; import {qualityInspectParamDel, qualityInspectParamInfo} from "@/api/qualityManagement/qualityInspectParam.js"; import {qualityInspectDetailByProductId} from "@/api/qualityManagement/metricMaintenance.js"; import {qualityInspectDetailByProductId, getQualityTestStandardParamByTestStandardId} from "@/api/qualityManagement/metricMaintenance.js"; const {proxy} = getCurrentInstance() const emit = defineEmits(['close']) @@ -142,6 +160,7 @@ productName: "", productId: "", model: "", testStandardId: "", unit: "", quantity: "", checkCompany: "", @@ -153,6 +172,7 @@ checkName: [{required: false, message: "请输入", trigger: "blur"}], productId: [{required: true, message: "请输入", trigger: "blur"}], model: [{required: false, message: "请输入", trigger: "blur"}], testStandardId: [{required: true, message: "请选择指标", trigger: "change"}], unit: [{required: false, message: "请输入", trigger: "blur"}], quantity: [{required: true, message: "请输入", trigger: "blur"}], checkCompany: [{required: false, message: "请输入", trigger: "blur"}], @@ -190,6 +210,7 @@ const supplierList = ref([]); const productOptions = ref([]); const currentProductId = ref(0); const testStandardOptions = ref([]); // 指标选择下拉框数据 // 打开弹框 const openDialog = (type, row) => { @@ -199,11 +220,52 @@ supplierList.value = res.data; }); form.value = {} testStandardOptions.value = []; tableData.value = []; getProductOptions(); if (operationType.value === 'edit') { // 先保存 testStandardId,避免被清空 const savedTestStandardId = row.testStandardId; form.value = {...row} currentProductId.value = row.productId || 0 getQualityInspectParamList(row.id) // 编辑模式下,先加载指标选项,然后加载参数列表 if (currentProductId.value) { // 先加载指标选项 let params = { productId: currentProductId.value, inspectType: 0 } qualityInspectDetailByProductId(params).then(res => { testStandardOptions.value = res.data || []; // 使用 nextTick 和 setTimeout 确保选项已经渲染到 DOM nextTick(() => { setTimeout(() => { // 如果编辑数据中有 testStandardId,则设置并加载对应的参数 if (savedTestStandardId) { // 确保类型匹配(item.id 可能是数字或字符串) const matchedOption = testStandardOptions.value.find(item => item.id == savedTestStandardId || String(item.id) === String(savedTestStandardId) ); if (matchedOption) { // 确保使用匹配项的 id(保持类型一致) form.value.testStandardId = matchedOption.id; handleTestStandardChange(matchedOption.id); } else { // 如果找不到匹配项,尝试直接使用原值 console.warn('未找到匹配的指标选项,testStandardId:', savedTestStandardId, '可用选项:', testStandardOptions.value); form.value.testStandardId = savedTestStandardId; handleTestStandardChange(savedTestStandardId); } } else { // 否则使用旧的逻辑 getQualityInspectParamList(row.id); } }, 100); }); }); } else { getQualityInspectParamList(row.id); } } } const getProductOptions = () => { @@ -214,7 +276,7 @@ const getModels = (value) => { currentProductId.value = value form.value.productName = findNodeById(productOptions.value, value); if (currentProductId) { if (currentProductId.value) { getList(); } }; @@ -275,8 +337,39 @@ } const getList = () => { qualityInspectDetailByProductId(currentProductId.value).then(res => { tableData.value = res.data; if (!currentProductId.value) { testStandardOptions.value = []; tableData.value = []; return; } let params = { productId: currentProductId.value, inspectType: 0 } qualityInspectDetailByProductId(params).then(res => { // 保存下拉框选项数据 testStandardOptions.value = res.data || []; // 清空表格数据,等待用户选择指标 tableData.value = []; // 清空指标选择 form.value.testStandardId = ''; }) } // 指标选择变化处理 const handleTestStandardChange = (testStandardId) => { if (!testStandardId) { tableData.value = []; return; } tableLoading.value = true; getQualityTestStandardParamByTestStandardId(testStandardId).then(res => { tableData.value = res.data || []; }).catch(error => { console.error('获取标准参数失败:', error); tableData.value = []; }).finally(() => { tableLoading.value = false; }) } @@ -288,7 +381,9 @@ // 关闭弹框 const closeDia = () => { proxy.resetForm("formRef"); tableData.value = [] tableData.value = []; testStandardOptions.value = []; form.value.testStandardId = ''; dialogFormVisible.value = false; emit('close') };