From 58826493a44c70ef2a4a2d7f24aee026bb076bc5 Mon Sep 17 00:00:00 2001 From: "zangch@mesnac.com" Date: Fri, 9 Jan 2026 16:56:57 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat(qcInspectionTemplate):=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=A3=80=E6=B5=8B=E9=A1=B9=E6=A8=A1=E6=9D=BF=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改 handleAddTemplateItem 方法为异步函数 - 添加 selectedTypeId 初始化逻辑确保类型ID正确设置 - 根据检测类型动态加载对应检测项列表 - 更新 getInspectionItemList 方法支持传入检测类型参数 - 优化 filteredQcInspectionItemList 计算属性处理类型筛选 - 改进类型比较逻辑支持字符串和数字类型匹配 - 添加空值检查防止数据异常导致页面错误 --- src/views/qms/qcInspectionTemplate/index.vue | 44 ++++++++++++++++---- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/src/views/qms/qcInspectionTemplate/index.vue b/src/views/qms/qcInspectionTemplate/index.vue index 463d205..59996f6 100644 --- a/src/views/qms/qcInspectionTemplate/index.vue +++ b/src/views/qms/qcInspectionTemplate/index.vue @@ -736,9 +736,25 @@ const handleUpdate = async (row?: QcInspectionTemplateVO) => { } /** 新增检测项 */ -const handleAddTemplateItem = () => { +const handleAddTemplateItem = async () => { resetTemplateItem(); templateItemForm.value.templateId = selectedTemplateId.value; + + // 确保 selectedTypeId 已设置 + if (selectedTypeId.value === null && selectedTemplateId.value) { + const template = qcInspectionTemplateList.value.find(item => item.templateId === selectedTemplateId.value); + if (template) { + selectedTypeId.value = template.typeId; + } + } + + // 根据检测类型加载对应的检测项列表 + if (selectedTypeId.value) { + await getInspectionItemList(selectedTypeId.value); + } else { + await getInspectionItemList(); + } + templateItemDialog.visible = true; templateItemDialog.title = "添加检测项"; } @@ -934,9 +950,10 @@ const getInspectionTypeList = async () => { //获取检测项列表(不分页,获取全部) let qcInspectionItemList = ref([]); -const getInspectionItemList = async () => { - const res = await getQcInspectionItemList(null); - qcInspectionItemList.value = res.data; +const getInspectionItemList = async (inspectionType?: string | number) => { + const params = inspectionType ? { inspectionType } : null; + const res = await getQcInspectionItemList(params); + qcInspectionItemList.value = res.data || []; } @@ -986,10 +1003,23 @@ const submitMaterialForm = () => { materialOpen.value = false; }; -// 添加 computed +// 添加 computed - 当 selectedTypeId 为 null 时显示所有检测项 const filteredQcInspectionItemList = computed(() => { - if (selectedTypeId.value === null) return []; - return qcInspectionItemList.value.filter(item => item.inspectionType === Number(selectedTypeId.value)); + // 如果没有设置类型筛选条件,返回所有检测项 + if (selectedTypeId.value === null || selectedTypeId.value === undefined) { + return qcInspectionItemList.value; + } + // 严格匹配检测类型,处理字符串和数字类型的比较 + return qcInspectionItemList.value.filter(item => { + const itemType = item.inspectionType; + const targetType = selectedTypeId.value; + // 字符串类型比较 + if (typeof itemType === 'string') { + return itemType === String(targetType) || itemType === targetType; + } + // 数字类型比较 + return itemType === Number(targetType); + }); }); From 9a9eb80d409a72fec9be4e965dec0c99702b66eb Mon Sep 17 00:00:00 2001 From: yinq Date: Fri, 9 Jan 2026 17:20:31 +0800 Subject: [PATCH 2/2] =?UTF-8?q?update=20=E6=B7=BB=E5=8A=A0=E6=9C=BA?= =?UTF-8?q?=E5=8A=A0=E5=B7=A5=E5=8D=95=E9=A1=B5=E9=9D=A2=E3=80=81=E6=8A=A5?= =?UTF-8?q?=E5=B7=A5=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/mes/orderInfo/editProductPlan.vue | 31 +- src/views/mes/orderInfo/index.vue | 58 +- src/views/mes/planInfo/JJPlanIndex.vue | 861 ++++++++++++++++++ .../mes/prodReport/components/CurrentTask.vue | 446 +++++++++ .../prodReport/components/PendingTasks.vue | 157 ++++ .../components/ProcessDocuments.vue | 227 +++++ .../components/WorkReportRecord.vue | 126 +++ src/views/mes/prodReport/index.vue | 468 ++++++++++ 8 files changed, 2362 insertions(+), 12 deletions(-) create mode 100644 src/views/mes/planInfo/JJPlanIndex.vue create mode 100644 src/views/mes/prodReport/components/CurrentTask.vue create mode 100644 src/views/mes/prodReport/components/PendingTasks.vue create mode 100644 src/views/mes/prodReport/components/ProcessDocuments.vue create mode 100644 src/views/mes/prodReport/components/WorkReportRecord.vue create mode 100644 src/views/mes/prodReport/index.vue diff --git a/src/views/mes/orderInfo/editProductPlan.vue b/src/views/mes/orderInfo/editProductPlan.vue index 71d8fab..c0bf2c3 100644 --- a/src/views/mes/orderInfo/editProductPlan.vue +++ b/src/views/mes/orderInfo/editProductPlan.vue @@ -231,7 +231,7 @@ width="150" > + formData.orderStatus!==ORDER_STATUS.DELETED">删除 @@ -278,7 +277,14 @@ import { reactive, onMounted, ref } from 'vue' import { useRouter, useRoute } from 'vue-router' import { ElMessage, ElMessageBox } from 'element-plus' import { getOrderInfo } from '@/api/mes/orderInfo' -import { getBaseRouteProcesses, getDispatchCode, getPlanCode, selectProductPlans, orderAddProductPlanList } from '@/api/mes/planInfo' +import { + getBaseRouteProcesses, + getDispatchCode, + getPlanCode, + selectProductPlans, + orderAddProductPlanList, + orderAddProductPlanJJList +} from '@/api/mes/planInfo'; import { getStationInfoList } from '@/api/mes/baseStationInfo' @@ -305,6 +311,13 @@ const PLAN_STATUS = { FINISHED: '3' // 已完成 } +const planStatusTextMap = { + '0': '待派工', + '1': '已派工', + '2': '已开始', + '3': '已完成' +} + const orderStatusTextMap = { '0': '待生产', '1': '生产中', @@ -360,6 +373,10 @@ const getOrderStatusText = (status) => { return orderStatusTextMap[status] || `未知状态(${status})` } +const getPlanStatusText = (status) => { + return planStatusTextMap[status] || `未知状态(${status})` +} + const fetchOrderInfo = async (productOrderId) => { // console.log('Fetching order info for ID', productOrderId) try { @@ -458,7 +475,7 @@ const groupProductPlans = async (productPlans) => { planBeginTime: productPlan.planBeginTime || formData.value.planBeginTime || '', planEndTime: productPlan.planEndTime || formData.value.planEndTime || '', planStatus: productPlan.planStatus, - materialId: productPlan.materialId || formData.value.materialId, + materialId: formData.value.materialId, materialBomId: productPlan.materialBomId || formData.value.materialBomId, productOrderId: productPlan.productOrderId || formData.value.productOrderId, saleOrderId: productPlan.saleOrderId || formData.value.saleOrderId || null, @@ -583,7 +600,7 @@ const submitForm = async () => { planBeginTime: planBeginTime, planEndTime: planEndTime, planStatus: PLAN_STATUS.TO_DISPATCH, - materialId: Number(formData.value.materialId), + materialId: formData.value.materialId, materialBomId: Number(formData.value.materialBomId), productOrderId: Number(formData.value.productOrderId), saleOrderId: formData.value.saleOrderId ? Number(formData.value.saleOrderId) : null, @@ -622,7 +639,7 @@ const submitForm = async () => { console.log('提交数据:', JSON.stringify(submitData, null, 2)) - const res = await orderAddProductPlanList(submitData); + const res = await orderAddProductPlanJJList(submitData); if (res.code === 200) { ElMessage.success('提交成功'); diff --git a/src/views/mes/orderInfo/index.vue b/src/views/mes/orderInfo/index.vue index 4835970..806fbf0 100644 --- a/src/views/mes/orderInfo/index.vue +++ b/src/views/mes/orderInfo/index.vue @@ -469,15 +469,63 @@ const data = reactive>({ factoryId: undefined, params: {} }, - rules: { - planAmount: [ - { required: true, message: '计划数量不能为空', trigger: 'blur' } - ], - } + rules: {} }); const { queryParams, form, rules } = toRefs(data); +// 设置验证规则 +data.rules = { + planAmount: [ + { required: true, message: '计划数量不能为空', trigger: 'blur' } + ], + planBeginTime: [ + { + validator: (rule: any, value: any, callback: any) => { + if (!value) { + callback(); + return; + } + if (data.form.planEndTime && value > data.form.planEndTime) { + callback(new Error('计划开始时间不能大于计划结束时间')); + } else { + callback(); + } + }, + trigger: 'change' + } + ], + planEndTime: [ + { + validator: (rule: any, value: any, callback: any) => { + if (!value) { + callback(); + return; + } + if (data.form.planBeginTime && value < data.form.planBeginTime) { + callback(new Error('计划结束时间不能小于计划开始时间')); + } else { + callback(); + } + }, + trigger: 'change' + } + ] +}; + +// 监听时间变化,自动触发另一个字段的验证 +watch(() => form.value.planBeginTime, () => { + if (form.value.planEndTime) { + orderInfoFormRef.value?.validateField('planEndTime'); + } +}); + +watch(() => form.value.planEndTime, () => { + if (form.value.planBeginTime) { + orderInfoFormRef.value?.validateField('planBeginTime'); + } +}); + /** 查询生产订单信息列表 */ const getList = async () => { loading.value = true; diff --git a/src/views/mes/planInfo/JJPlanIndex.vue b/src/views/mes/planInfo/JJPlanIndex.vue new file mode 100644 index 0000000..7d5ce68 --- /dev/null +++ b/src/views/mes/planInfo/JJPlanIndex.vue @@ -0,0 +1,861 @@ + + + + diff --git a/src/views/mes/prodReport/components/CurrentTask.vue b/src/views/mes/prodReport/components/CurrentTask.vue new file mode 100644 index 0000000..dbd5006 --- /dev/null +++ b/src/views/mes/prodReport/components/CurrentTask.vue @@ -0,0 +1,446 @@ + + + + + diff --git a/src/views/mes/prodReport/components/PendingTasks.vue b/src/views/mes/prodReport/components/PendingTasks.vue new file mode 100644 index 0000000..232a0aa --- /dev/null +++ b/src/views/mes/prodReport/components/PendingTasks.vue @@ -0,0 +1,157 @@ + + + + + diff --git a/src/views/mes/prodReport/components/ProcessDocuments.vue b/src/views/mes/prodReport/components/ProcessDocuments.vue new file mode 100644 index 0000000..a71ab5d --- /dev/null +++ b/src/views/mes/prodReport/components/ProcessDocuments.vue @@ -0,0 +1,227 @@ +