From 3ccdf499ed5e1129a05eb3973f0fcc240ee1f690 Mon Sep 17 00:00:00 2001 From: zch Date: Thu, 3 Jul 2025 19:21:25 +0800 Subject: [PATCH 1/9] =?UTF-8?q?refactor(dms):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=95=85=E9=9A=9C=E7=BB=B4=E4=BF=AE=E6=B5=81=E7=A8=8B=E5=92=8C?= =?UTF-8?q?=E8=A1=A8=E5=8D=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 调整表单布局和样式,提高可读性和易用性 - 优化工作流变量准备逻辑,确保与 Warm-Flow 和 submitVerify 组件兼容 - 修复审批状态和维修结果的变量转换问题 - 优化组件引用,使用相对路径引用 submitVerify 组件 --- .../approvalRecord.vue | 0 .../dms/dmsFaultInstanceActivity/backup.vue | 775 ++++++++++++++++++ .../dms/dmsFaultInstanceActivity/index.vue | 319 +++---- .../dmsFaultInstanceActivity/submitVerify.vue | 557 +++++++++++++ 4 files changed, 1494 insertions(+), 157 deletions(-) create mode 100644 src/views/dms/dmsFaultInstanceActivity/approvalRecord.vue create mode 100644 src/views/dms/dmsFaultInstanceActivity/backup.vue create mode 100644 src/views/dms/dmsFaultInstanceActivity/submitVerify.vue diff --git a/src/views/dms/dmsFaultInstanceActivity/approvalRecord.vue b/src/views/dms/dmsFaultInstanceActivity/approvalRecord.vue new file mode 100644 index 0000000..e69de29 diff --git a/src/views/dms/dmsFaultInstanceActivity/backup.vue b/src/views/dms/dmsFaultInstanceActivity/backup.vue new file mode 100644 index 0000000..db10a06 --- /dev/null +++ b/src/views/dms/dmsFaultInstanceActivity/backup.vue @@ -0,0 +1,775 @@ + + + + + diff --git a/src/views/dms/dmsFaultInstanceActivity/index.vue b/src/views/dms/dmsFaultInstanceActivity/index.vue index 60c4499..2f3b903 100644 --- a/src/views/dms/dmsFaultInstanceActivity/index.vue +++ b/src/views/dms/dmsFaultInstanceActivity/index.vue @@ -4,37 +4,37 @@
- 暂存 - 提交 - {{ currentStepName }} - 主管确认 - 流程进度 @@ -89,66 +89,66 @@

{{ currentStepTitle }}

- - + @@ -157,42 +157,42 @@ - + - + - - - + + + - - - @@ -206,21 +206,21 @@ - - - + + - - + + - - + + @@ -233,8 +233,8 @@ - - + + @@ -264,11 +264,11 @@
- - + @@ -284,7 +284,7 @@ import { addDmsFaultInstanceActivity } from '@/api/dms/dmsFaultInstanceActivity' import { pageByTaskWait } from '@/api/workflow/task'; import { getCurrentDateTime } from '@/utils/dateUtils'; import { getDmsBaseOutsourcingInfoList } from '@/api/dms/dmsBaseOutsourcingInfo'; -import SubmitVerify from '@/components/Process/submitVerify.vue'; +import SubmitVerify from '@/views/dms/dmsFaultInstanceActivity/submitVerify.vue'; import ApprovalRecord from '@/components/Process/approvalRecord.vue'; const { proxy } = getCurrentInstance() as ComponentInternalInstance; @@ -352,7 +352,7 @@ const needProcessResolution = computed(() => currentStepOrder.value > 1); const currentStepName = computed(() => { const stepNames = { 1: '故障报修', - 2: '维修处理', + 2: '维修处理', 3: '维修确认' }; return stepNames[currentStepOrder.value] || '处理工单'; @@ -377,9 +377,9 @@ const confirmButtonShow = computed(() => { // 2. 或者工单状态为维修完成(2)且确认状态为待确认(0) // 3. 且审批状态为审批成功(2) - 只有审批通过的工单才能进行确认 return routeParams.value.type === 'confirm' || - (workOrder.value.billsStatus === '2' && - workOrder.value.repairConfirm === '0' && - workOrder.value.approveStatus === '2'); + (workOrder.value.billsStatus === '2' && + workOrder.value.repairConfirm === '0' && + workOrder.value.approveStatus === '2'); }); // 是否为审批阶段 @@ -414,16 +414,16 @@ onMounted(async () => { await loadCurrentTask(); } - // 初始化表单数据 - initializeFormData(); + // 初始化表单数据 + initializeFormData(); - // 设置审批阶段的表单验证规则 - if (routeParams.value.type === 'approval' && workOrder.value.approveStatus === '1') { - rules.approveStatus = [{ required: true, message: '审批状态不能为空', trigger: 'change' }]; - } + // 设置审批阶段的表单验证规则 + if (routeParams.value.type === 'approval' && workOrder.value.approveStatus === '1') { + rules.approveStatus = [{ required: true, message: '审批状态不能为空', trigger: 'change' }]; + } - // 设置外协单位验证规则 - updateOutsourcingValidation(); + // 设置外协单位验证规则 + updateOutsourcingValidation(); } catch (error) { console.error('初始化失败:', error); @@ -446,15 +446,15 @@ watch(() => form.repairType, (newValue) => { const loadWorkOrderInfo = async () => { // 从query参数获取businessId const businessId = routeParams.value.id; - + if (!businessId) { proxy?.$modal.msgError('缺少工单ID参数'); return; } - + const res = await getDmsBillsFaultInstance(businessId); workOrder.value = res.data; - + // 设置状态显示文本 workOrderStatusText.value = getStatusText(workOrder.value.billsStatus); }; @@ -464,21 +464,21 @@ const loadCurrentTask = async () => { // 从query参数获取businessId和taskId const businessId = routeParams.value.id; const taskId = routeParams.value.taskId; - + // 通过taskId或businessId获取当前任务 const taskRes = await pageByTaskWait({ pageNum: 1, pageSize: 10, flowCode: 'Fault01' // 故障维修流程代码 }); - - const tasks = taskRes.rows.filter(task => + + const tasks = taskRes.rows.filter(task => task.businessId === businessId || task.id === taskId ); - + if (tasks.length > 0) { currentTask.value = tasks[0]; - + // 根据节点名称确定当前步骤 const nodeName = currentTask.value.nodeName; if (nodeName === '故障报修') { @@ -488,7 +488,7 @@ const loadCurrentTask = async () => { } else if (nodeName === '维修确认') { currentStepOrder.value = 3; } - + // 动态设置处理意见校验规则 if (needProcessResolution.value) { rules.processHandleResolution = [ @@ -503,7 +503,7 @@ const initializeFormData = () => { // 基础信息从工单获取 form.repairInstanceId = workOrder.value.repairInstanceId; form.processStepOrder = currentStepOrder.value; - + if (currentStepOrder.value === 1) { // 第一步:故障报修,表单为空等待用户填写 form.faultType = workOrder.value.faultType; @@ -530,12 +530,12 @@ const initializeFormData = () => { // 提交表单方法 const submitForm = async (status: string) => { if (!processFormRef.value) return; - + try { const valid = await processFormRef.value.validate(); if (valid) { buttonLoading.value = true; - + if (status === 'draft') { // 暂存逻辑 await addDmsFaultInstanceActivity({ @@ -555,7 +555,7 @@ const submitForm = async (status: string) => { processStepOrder: form.processStepOrder, handleTime: getCurrentDateTime() }); - + proxy?.$modal.msgSuccess('暂存成功'); goBack(); } else { @@ -579,7 +579,7 @@ const submitForm = async (status: string) => { processStepOrder: form.processStepOrder } }; - + // 启动工作流或继续处理 if (routeParams.value.taskId) { submitVerifyRef.value?.openDialog(routeParams.value.taskId); @@ -601,7 +601,7 @@ const submitForm = async (status: string) => { // 审批处理 const approvalVerifyOpen = async () => { if (!processFormRef.value) return; - + try { const valid = await processFormRef.value.validate(); if (valid) { @@ -610,9 +610,11 @@ const approvalVerifyOpen = async () => { proxy?.$modal.msgError('请选择审批状态'); return; } - - // 准备工作流变量 - 确保变量结构符合SubmitVerify和Warm-Flow要求 + + // 准备工作流变量 - 符合Warm-Flow和submitVerify组件的期望格式 taskVariables.value = { + // 工作流变量 - 用于互斥网关条件判断 + variables: {}, // 业务实体数据 entity: { repairInstanceId: form.repairInstanceId, @@ -631,24 +633,27 @@ const approvalVerifyOpen = async () => { processStepOrder: form.processStepOrder } }; - + // 如果是审批阶段,设置跳转条件变量 if (routeParams.value.type === 'approval' && form.approveStatus) { - // 直接在taskVariables根级别设置approveStatus - 这是SubmitVerify期望的格式 + // 将approveStatus转换为数字放在variables中,供Warm-Flow互斥网关使用 + taskVariables.value.variables.approveStatus = parseInt(form.approveStatus); + // 同时在根级别设置字符串格式,兼容submitVerify组件 taskVariables.value.approveStatus = form.approveStatus; - console.log('设置审批状态变量:', form.approveStatus); + console.log('设置审批状态变量:', parseInt(form.approveStatus)); } - + // 如果是确认阶段,设置确认结果变量 if (routeParams.value.type === 'confirm' && form.repairConfirm) { // 确认通过传0,确认不通过传1 - const repairConfirmValue = form.repairConfirm === '1' ? '0' : '1'; - taskVariables.value.repairConfirm = repairConfirmValue; + const repairConfirmValue = form.repairConfirm === '1' ? 0 : 1; + taskVariables.value.variables.repairConfirm = repairConfirmValue; + taskVariables.value.repairConfirm = repairConfirmValue.toString(); console.log('设置确认结果变量:', repairConfirmValue); } - + console.log('完整的工作流变量:', taskVariables.value); - + // 直接使用传入的taskId进行审批 submitVerifyRef.value?.openDialog(routeParams.value.taskId); } @@ -665,7 +670,7 @@ const submitCallback = async (approvalResult?: any) => { // 使用用户选择的审批状态 const approveStatus = form.approveStatus; // 直接使用表单中选择的审批状态 const message = approvalResult?.message || form.processHandleResolution || ''; - + await approveWorkOrder(form.repairInstanceId, approveStatus, message); const statusText = approveStatus === '2' ? '通过' : '拒绝'; proxy?.$modal.msgSuccess(`审批${statusText}成功`); @@ -675,34 +680,34 @@ const submitCallback = async (approvalResult?: any) => { await confirmRepairResult(form.repairInstanceId, confirmResult); proxy?.$modal.msgSuccess('确认完成'); } else { - // 保存工单实例活动记录 - await addDmsFaultInstanceActivity({ - repairInstanceId: form.repairInstanceId, - faultType: form.faultType, - faultDescription: form.faultDescription, - designOperations: form.designOperations, - repairType: form.repairType, - outsourcingId: form.outsourcingId, - checkedFault: form.checkedFault || '', - repairContent: form.repairContent || '', - protectedMethod: form.protectedMethod || '', - repairer: form.repairer || '', - repairConfirm: form.repairConfirm, - componentsPartsId: form.componentsPartsId, - processHandleResolution: form.processHandleResolution || '', - processStepOrder: form.processStepOrder, - handleTime: getCurrentDateTime() - }); - - proxy?.$modal.msgSuccess(`${currentStepName.value}完成`); + // 保存工单实例活动记录 + await addDmsFaultInstanceActivity({ + repairInstanceId: form.repairInstanceId, + faultType: form.faultType, + faultDescription: form.faultDescription, + designOperations: form.designOperations, + repairType: form.repairType, + outsourcingId: form.outsourcingId, + checkedFault: form.checkedFault || '', + repairContent: form.repairContent || '', + protectedMethod: form.protectedMethod || '', + repairer: form.repairer || '', + repairConfirm: form.repairConfirm, + componentsPartsId: form.componentsPartsId, + processHandleResolution: form.processHandleResolution || '', + processStepOrder: form.processStepOrder, + handleTime: getCurrentDateTime() + }); + + proxy?.$modal.msgSuccess(`${currentStepName.value}完成`); } - + // 关闭页面返回 goBack(); - } catch (error: any) { - console.error('操作失败:', error); - proxy?.$modal.msgError('操作失败:' + (error.message || '未知错误')); - } + } catch (error: any) { + console.error('操作失败:', error); + proxy?.$modal.msgError('操作失败:' + (error.message || '未知错误')); + } }; // 主管确认处理 @@ -710,7 +715,7 @@ const handleConfirm = async () => { try { // 设置确认结果 form.repairConfirm = '1'; // 1表示确认通过 - + // 调用审批处理方法(实际上是工作流处理) await approvalVerifyOpen(); } catch (error: any) { @@ -772,4 +777,4 @@ const getStatusText = (status: string) => { color: #303133; font-weight: 600; } - \ No newline at end of file + diff --git a/src/views/dms/dmsFaultInstanceActivity/submitVerify.vue b/src/views/dms/dmsFaultInstanceActivity/submitVerify.vue new file mode 100644 index 0000000..ef85cf2 --- /dev/null +++ b/src/views/dms/dmsFaultInstanceActivity/submitVerify.vue @@ -0,0 +1,557 @@ + + + + \ No newline at end of file From a7ae94db56689bb9616a7fd8e018ae6b5dfa6b03 Mon Sep 17 00:00:00 2001 From: zangchenhao Date: Thu, 3 Jul 2025 21:38:35 +0800 Subject: [PATCH 2/9] =?UTF-8?q?feat(dms):=20=E4=BC=98=E5=8C=96=E6=95=85?= =?UTF-8?q?=E9=9A=9C=E5=AE=9E=E4=BE=8B=E6=B4=BB=E5=8A=A8=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增审批记录组件,支持查看流程图和审批信息 - 重构表单验证逻辑,提高用户体验 -优化工作流变量处理,简化审批流程 - 调整表单字段初始化,确保数据准确性 --- .../approvalRecord.vue | 280 ++++++++++++++++++ .../dms/dmsFaultInstanceActivity/index.vue | 215 +++++++------- .../dmsFaultInstanceActivity/submitVerify.vue | 2 +- 3 files changed, 387 insertions(+), 110 deletions(-) diff --git a/src/views/dms/dmsFaultInstanceActivity/approvalRecord.vue b/src/views/dms/dmsFaultInstanceActivity/approvalRecord.vue index e69de29..84fbfb1 100644 --- a/src/views/dms/dmsFaultInstanceActivity/approvalRecord.vue +++ b/src/views/dms/dmsFaultInstanceActivity/approvalRecord.vue @@ -0,0 +1,280 @@ + + + diff --git a/src/views/dms/dmsFaultInstanceActivity/index.vue b/src/views/dms/dmsFaultInstanceActivity/index.vue index 2f3b903..959a886 100644 --- a/src/views/dms/dmsFaultInstanceActivity/index.vue +++ b/src/views/dms/dmsFaultInstanceActivity/index.vue @@ -52,7 +52,7 @@ - + @@ -62,24 +62,24 @@ - + - + - + - + @@ -333,9 +333,9 @@ const form = reactive({ ...initFormData }); // 表单验证规则 const rules = reactive({ - faultType: [{ required: true, message: '故障类型不能为空', trigger: 'change' }], - faultDescription: [{ required: true, message: '故障描述不能为空', trigger: 'blur' }], - repairType: [{ required: true, message: '维修类型不能为空', trigger: 'change' }], + faultType: [{ required: false, message: '故障类型不能为空', trigger: 'change' }], + faultDescription: [{ required: false, message: '故障描述不能为空', trigger: 'blur' }], + repairType: [{ required: false, message: '维修类型不能为空', trigger: 'change' }], outsourcingId: [{ required: false, message: '外协单位不能为空', trigger: 'change' }], repairer: [{ required: false, message: '维修人不能为空', trigger: 'blur' }], checkedFault: [{ required: false, message: '检查后的故障判断不能为空', trigger: 'blur' }], @@ -377,14 +377,14 @@ const confirmButtonShow = computed(() => { // 2. 或者工单状态为维修完成(2)且确认状态为待确认(0) // 3. 且审批状态为审批成功(2) - 只有审批通过的工单才能进行确认 return routeParams.value.type === 'confirm' || - (workOrder.value.billsStatus === '2' && - workOrder.value.repairConfirm === '0' && - workOrder.value.approveStatus === '2'); + (workOrder.value?.billsStatus === '2' && + workOrder.value?.repairConfirm === '0' && + workOrder.value?.approveStatus === '2'); }); // 是否为审批阶段 const isApprovalStage = computed(() => { - return routeParams.value.type === 'approval' && workOrder.value.approveStatus === '1'; + return routeParams.value.type === 'approval' && workOrder.value?.approveStatus === '1'; }); // 提交按钮显示控制逻辑 @@ -392,7 +392,7 @@ const submitButtonShow = computed(() => { return ( routeParams.value.type === 'add' || (routeParams.value.type === 'update' && - workOrder.value.billsStatus && + workOrder.value?.billsStatus && (workOrder.value.billsStatus === 'draft' || workOrder.value.billsStatus === 'cancel' || workOrder.value.billsStatus === 'back')) ); }); @@ -417,13 +417,8 @@ onMounted(async () => { // 初始化表单数据 initializeFormData(); - // 设置审批阶段的表单验证规则 - if (routeParams.value.type === 'approval' && workOrder.value.approveStatus === '1') { - rules.approveStatus = [{ required: true, message: '审批状态不能为空', trigger: 'change' }]; - } - - // 设置外协单位验证规则 - updateOutsourcingValidation(); + // 动态设置表单验证规则 + setDynamicValidationRules(); } catch (error) { console.error('初始化失败:', error); @@ -453,10 +448,10 @@ const loadWorkOrderInfo = async () => { } const res = await getDmsBillsFaultInstance(businessId); - workOrder.value = res.data; + workOrder.value = res.data || {}; // 确保不为null - // 设置状态显示文本 - workOrderStatusText.value = getStatusText(workOrder.value.billsStatus); + // 设置状态显示文本 - 添加安全检查 + workOrderStatusText.value = getStatusText(workOrder.value.billsStatus || ''); }; // 加载当前任务信息 @@ -501,29 +496,25 @@ const loadCurrentTask = async () => { // 初始化表单数据 const initializeFormData = () => { // 基础信息从工单获取 - form.repairInstanceId = workOrder.value.repairInstanceId; + form.repairInstanceId = workOrder.value?.repairInstanceId; form.processStepOrder = currentStepOrder.value; - if (currentStepOrder.value === 1) { - // 第一步:故障报修,表单为空等待用户填写 - form.faultType = workOrder.value.faultType; - form.faultDescription = workOrder.value.faultDescription; - form.designOperations = workOrder.value.designOperations; - form.repairType = workOrder.value.repairType; - form.outsourcingId = workOrder.value.outsourcingId; - } else { - // 第二步、第三步:从工单基础信息预填充 - form.faultType = workOrder.value.faultType; - form.faultDescription = workOrder.value.faultDescription; - form.designOperations = workOrder.value.designOperations; - form.repairType = workOrder.value.repairType; - form.outsourcingId = workOrder.value.outsourcingId; - form.checkedFault = workOrder.value.checkedFault; - form.repairContent = workOrder.value.repairContent; - form.protectedMethod = workOrder.value.protectedMethod; - form.repairer = workOrder.value.repairer; - form.repairConfirm = workOrder.value.repairConfirm; - form.componentsPartsId = workOrder.value.componentsPartsId; + // 处理所有字段,确保没有undefined值 + form.faultType = workOrder.value?.faultType || ''; + form.faultDescription = workOrder.value?.faultDescription || ''; + form.designOperations = workOrder.value?.designOperations || ''; + form.repairType = workOrder.value?.repairType || ''; + form.outsourcingId = workOrder.value?.outsourcingId || ''; + form.checkedFault = workOrder.value?.checkedFault || ''; + form.repairContent = workOrder.value?.repairContent || ''; + form.protectedMethod = workOrder.value?.protectedMethod || ''; + form.repairer = workOrder.value?.repairer || ''; + form.repairConfirm = workOrder.value?.repairConfirm || ''; + form.componentsPartsId = workOrder.value?.componentsPartsId || ''; + + // 如果是审批阶段,设置默认审批状态 + if (routeParams.value.type === 'approval' && !form.approveStatus) { + form.approveStatus = undefined; // 保持未选择状态,让用户必须选择 } }; @@ -605,76 +596,36 @@ const approvalVerifyOpen = async () => { try { const valid = await processFormRef.value.validate(); if (valid) { - // 检查审批状态 - if (routeParams.value.type === 'approval' && !form.approveStatus) { - proxy?.$modal.msgError('请选择审批状态'); - return; - } + await proxy?.$modal.confirm('是否确认提交审批?'); + + buttonLoading.value = true; + + // 直接调用后端审批接口,后端会在同一事务中处理业务状态更新和工作流推进 + const approveStatus = form.approveStatus; + const message = form.processHandleResolution || ''; - // 准备工作流变量 - 符合Warm-Flow和submitVerify组件的期望格式 - taskVariables.value = { - // 工作流变量 - 用于互斥网关条件判断 - variables: {}, - // 业务实体数据 - entity: { - repairInstanceId: form.repairInstanceId, - faultType: form.faultType, - faultDescription: form.faultDescription, - designOperations: form.designOperations, - repairType: form.repairType, - outsourcingId: form.outsourcingId, - checkedFault: form.checkedFault || '', - repairContent: form.repairContent || '', - protectedMethod: form.protectedMethod || '', - repairer: form.repairer || '', - repairConfirm: form.repairConfirm, - componentsPartsId: form.componentsPartsId, - processHandleResolution: form.processHandleResolution || '', - processStepOrder: form.processStepOrder - } - }; - - // 如果是审批阶段,设置跳转条件变量 - if (routeParams.value.type === 'approval' && form.approveStatus) { - // 将approveStatus转换为数字放在variables中,供Warm-Flow互斥网关使用 - taskVariables.value.variables.approveStatus = parseInt(form.approveStatus); - // 同时在根级别设置字符串格式,兼容submitVerify组件 - taskVariables.value.approveStatus = form.approveStatus; - console.log('设置审批状态变量:', parseInt(form.approveStatus)); - } - - // 如果是确认阶段,设置确认结果变量 - if (routeParams.value.type === 'confirm' && form.repairConfirm) { - // 确认通过传0,确认不通过传1 - const repairConfirmValue = form.repairConfirm === '1' ? 0 : 1; - taskVariables.value.variables.repairConfirm = repairConfirmValue; - taskVariables.value.repairConfirm = repairConfirmValue.toString(); - console.log('设置确认结果变量:', repairConfirmValue); - } - - console.log('完整的工作流变量:', taskVariables.value); - - // 直接使用传入的taskId进行审批 - submitVerifyRef.value?.openDialog(routeParams.value.taskId); + await approveWorkOrder(form.repairInstanceId, approveStatus, message); + + const statusText = approveStatus === '2' ? '通过' : '拒绝'; + proxy?.$modal.msgSuccess(`审批${statusText}成功`); + + // 关闭页面返回 + goBack(); } - } catch (error) { - proxy?.$modal.msgError('表单验证失败,请检查输入项'); + } catch (error: any) { + if (error !== 'cancel' && error !== 'close') { + console.error('审批失败:', error); + proxy?.$modal.msgError('审批失败:' + (error.message || '未知错误')); + } + } finally { + buttonLoading.value = false; } }; // 提交回调 const submitCallback = async (approvalResult?: any) => { try { - // 如果是审批类型,调用审批接口 - if (routeParams.value.type === 'approval') { - // 使用用户选择的审批状态 - const approveStatus = form.approveStatus; // 直接使用表单中选择的审批状态 - const message = approvalResult?.message || form.processHandleResolution || ''; - - await approveWorkOrder(form.repairInstanceId, approveStatus, message); - const statusText = approveStatus === '2' ? '通过' : '拒绝'; - proxy?.$modal.msgSuccess(`审批${statusText}成功`); - } else if (routeParams.value.type === 'confirm') { + if (routeParams.value.type === 'confirm') { // 主管确认逻辑 const confirmResult = form.repairConfirm || '1'; // 默认确认通过 await confirmRepairResult(form.repairInstanceId, confirmResult); @@ -749,15 +700,61 @@ const getOutsourceList = async () => { // 更新外协单位验证规则 const updateOutsourcingValidation = () => { - if (form.repairType === '2') { - // 维修类型为外协时,外协单位为必填 + // 只有在非审批阶段且维修类型为外协时才设置为必填 + if (routeParams.value.type !== 'approval' && form.repairType === '2') { rules.outsourcingId = [{ required: true, message: '外协单位不能为空', trigger: 'change' }]; } else { - // 其他情况下,外协单位不是必填 rules.outsourcingId = [{ required: false, message: '外协单位不能为空', trigger: 'change' }]; } }; +// 动态设置表单验证规则 +const setDynamicValidationRules = () => { + // 重置所有规则为非必填 + Object.keys(rules).forEach(key => { + rules[key] = [{ required: false, message: rules[key][0].message, trigger: rules[key][0].trigger }]; + }); + + // 根据页面类型和步骤设置验证规则 + if (routeParams.value.type === 'approval') { + // 审批阶段只需要审批状态和处理意见 + rules.approveStatus = [{ required: true, message: '审批状态不能为空', trigger: 'change' }]; + if (needProcessResolution.value) { + rules.processHandleResolution = [{ required: true, message: '处理意见不能为空', trigger: 'blur' }]; + } + } else if (routeParams.value.type === 'confirm') { + // 确认阶段只需要确认结果和处理意见 + rules.repairConfirm = [{ required: true, message: '维修结果不能为空', trigger: 'change' }]; + rules.processHandleResolution = [{ required: true, message: '处理意见不能为空', trigger: 'blur' }]; + } else { + // 新增或编辑模式,根据当前步骤设置验证规则 + if (currentStepOrder.value === 1) { + // 第一步:故障报修 + rules.faultType = [{ required: true, message: '故障类型不能为空', trigger: 'change' }]; + rules.faultDescription = [{ required: true, message: '故障描述不能为空', trigger: 'blur' }]; + rules.repairType = [{ required: true, message: '维修类型不能为空', trigger: 'change' }]; + } else if (currentStepOrder.value === 2) { + // 第二步:维修处理 + rules.repairer = [{ required: true, message: '维修人不能为空', trigger: 'blur' }]; + rules.checkedFault = [{ required: true, message: '检查后的故障判断不能为空', trigger: 'blur' }]; + rules.protectedMethod = [{ required: true, message: '维修措施不能为空', trigger: 'blur' }]; + rules.repairContent = [{ required: true, message: '维修内容不能为空', trigger: 'blur' }]; + if (needProcessResolution.value) { + rules.processHandleResolution = [{ required: true, message: '处理意见不能为空', trigger: 'blur' }]; + } + } else if (currentStepOrder.value === 3) { + // 第三步:维修确认 + rules.repairConfirm = [{ required: true, message: '维修结果不能为空', trigger: 'change' }]; + if (needProcessResolution.value) { + rules.processHandleResolution = [{ required: true, message: '处理意见不能为空', trigger: 'blur' }]; + } + } + } + + // 更新外协单位验证规则 + updateOutsourcingValidation(); +}; + // 工具函数 const getStatusText = (status: string) => { const statusMap = { diff --git a/src/views/dms/dmsFaultInstanceActivity/submitVerify.vue b/src/views/dms/dmsFaultInstanceActivity/submitVerify.vue index ef85cf2..f6d41ad 100644 --- a/src/views/dms/dmsFaultInstanceActivity/submitVerify.vue +++ b/src/views/dms/dmsFaultInstanceActivity/submitVerify.vue @@ -305,7 +305,7 @@ form.value.flowCopyList = flowCopyList; } - // 【关键修复】处理故障报修工单的工作流变量传递 + // 处理工作流变量传递 if (props.taskVariables && typeof props.taskVariables === 'object') { const taskVars = props.taskVariables as any; From fb72ec70a1a6eeb172465342044b3b366a76f81a Mon Sep 17 00:00:00 2001 From: yinq Date: Fri, 4 Jul 2025 10:27:28 +0800 Subject: [PATCH 3/9] =?UTF-8?q?update=20mes=E6=B7=BB=E5=8A=A0=E5=B7=A5?= =?UTF-8?q?=E8=A3=85=E7=B1=BB=E5=9E=8B=EF=BC=9A=E5=85=B3=E8=81=94=E7=89=A9?= =?UTF-8?q?=E6=96=99=E3=80=81=E5=85=B3=E8=81=94=E5=B7=A5=E5=BA=8F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/mes/toolingType/index.ts | 77 ++++ src/api/mes/toolingType/types.ts | 129 ++++++ src/api/mes/toolingTypeRelation/index.ts | 77 ++++ src/api/mes/toolingTypeRelation/types.ts | 76 ++++ src/views/mes/toolingType/index.vue | 510 +++++++++++++++++++++++ 5 files changed, 869 insertions(+) create mode 100644 src/api/mes/toolingType/index.ts create mode 100644 src/api/mes/toolingType/types.ts create mode 100644 src/api/mes/toolingTypeRelation/index.ts create mode 100644 src/api/mes/toolingTypeRelation/types.ts create mode 100644 src/views/mes/toolingType/index.vue diff --git a/src/api/mes/toolingType/index.ts b/src/api/mes/toolingType/index.ts new file mode 100644 index 0000000..69e45d6 --- /dev/null +++ b/src/api/mes/toolingType/index.ts @@ -0,0 +1,77 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { ToolingTypeVO, ToolingTypeForm, ToolingTypeQuery } from '@/api/mes/toolingType/types'; + +/** + * 查询载具工装类型列表 + * @param query + * @returns {*} + */ + +export const listToolingType = (query?: ToolingTypeQuery): AxiosPromise => { + return request({ + url: '/mes/toolingType/list', + method: 'get', + params: query + }); +}; + +/** + * 查询载具工装类型详细 + * @param toolingTypeId + */ +export const getToolingType = (toolingTypeId: string | number): AxiosPromise => { + return request({ + url: '/mes/toolingType/' + toolingTypeId, + method: 'get' + }); +}; + +/** + * 新增载具工装类型 + * @param data + */ +export const addToolingType = (data: ToolingTypeForm) => { + return request({ + url: '/mes/toolingType', + method: 'post', + data: data + }); +}; + +/** + * 修改载具工装类型 + * @param data + */ +export const updateToolingType = (data: ToolingTypeForm) => { + return request({ + url: '/mes/toolingType', + method: 'put', + data: data + }); +}; + +/** + * 删除载具工装类型 + * @param toolingTypeId + */ +export const delToolingType = (toolingTypeId: string | number | Array) => { + return request({ + url: '/mes/toolingType/' + toolingTypeId, + method: 'delete' + }); +}; + + +/** + * 下拉框查询载具工装类型列表 + * @param query + * @returns {*} + */ +export function getBaseToolingTypeList (query) { + return request({ + url: '/mes/toolingType/getBaseToolingTypeList', + method: 'get', + params: query + }); +}; diff --git a/src/api/mes/toolingType/types.ts b/src/api/mes/toolingType/types.ts new file mode 100644 index 0000000..537bed8 --- /dev/null +++ b/src/api/mes/toolingType/types.ts @@ -0,0 +1,129 @@ +export interface ToolingTypeVO { + /** + * 主键标识 + */ + toolingTypeId: string | number; + + /** + * 工装类型编号 + */ + toolingTypeCode: string; + + /** + * 工装类型名称 + */ + toolingTypeName: string; + + /** + * 工装类型规格 + */ + toolingSpecCode: string; + + /** + * 标准使用次数/秒 + */ + standardLife: number; + + /** + * 标准重量(kg) + */ + standardWeight: number; + + /** + * 备注 + */ + remark: string; + + /** + * 关联物料信息 + */ + typeRelationList?: any[]; +} + +export interface ToolingTypeForm extends BaseEntity { + /** + * 主键标识 + */ + toolingTypeId?: string | number; + + /** + * 工装类型编号 + */ + toolingTypeCode?: string; + + /** + * 工装类型名称 + */ + toolingTypeName?: string; + + /** + * 工装类型规格 + */ + toolingSpecCode?: string; + + /** + * 标准使用次数/秒 + */ + standardLife?: number; + + /** + * 标准重量(kg) + */ + standardWeight?: number; + + /** + * 备注 + */ + remark?: string; + + /** + * 关联物料信息 + */ + typeRelationList?: any[]; + + /** + * 关联工序信息 + */ + processList?: any[]; +} + +export interface ToolingTypeQuery extends PageQuery { + + /** + * 主键标识 + */ + toolingTypeId?: string | number; + + /** + * 工装类型编号 + */ + toolingTypeCode?: string; + + /** + * 工装类型名称 + */ + toolingTypeName?: string; + + /** + * 工装类型规格 + */ + toolingSpecCode?: string; + + /** + * 标准使用次数/秒 + */ + standardLife?: number; + + /** + * 标准重量(kg) + */ + standardWeight?: number; + + /** + * 日期范围参数 + */ + params?: any; +} + + + diff --git a/src/api/mes/toolingTypeRelation/index.ts b/src/api/mes/toolingTypeRelation/index.ts new file mode 100644 index 0000000..d970084 --- /dev/null +++ b/src/api/mes/toolingTypeRelation/index.ts @@ -0,0 +1,77 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { ToolingTypeRelationVO, ToolingTypeRelationForm, ToolingTypeRelationQuery } from '@/api/mes/toolingTypeRelation/types'; + +/** + * 查询载具工装类型关联信息列表 + * @param query + * @returns {*} + */ + +export const listToolingTypeRelation = (query?: ToolingTypeRelationQuery): AxiosPromise => { + return request({ + url: '/mes/toolingTypeRelation/list', + method: 'get', + params: query + }); +}; + +/** + * 查询载具工装类型关联信息详细 + * @param relationId + */ +export const getToolingTypeRelation = (relationId: string | number): AxiosPromise => { + return request({ + url: '/mes/toolingTypeRelation/' + relationId, + method: 'get' + }); +}; + +/** + * 新增载具工装类型关联信息 + * @param data + */ +export const addToolingTypeRelation = (data: ToolingTypeRelationForm) => { + return request({ + url: '/mes/toolingTypeRelation', + method: 'post', + data: data + }); +}; + +/** + * 修改载具工装类型关联信息 + * @param data + */ +export const updateToolingTypeRelation = (data: ToolingTypeRelationForm) => { + return request({ + url: '/mes/toolingTypeRelation', + method: 'put', + data: data + }); +}; + +/** + * 删除载具工装类型关联信息 + * @param relationId + */ +export const delToolingTypeRelation = (relationId: string | number | Array) => { + return request({ + url: '/mes/toolingTypeRelation/' + relationId, + method: 'delete' + }); +}; + + +/** + * 下拉框查询载具工装类型关联信息列表 + * @param query + * @returns {*} + */ +export function getBaseToolingTypeRelationList (query) { + return request({ + url: '/mes/toolingTypeRelation/getBaseToolingTypeRelationList', + method: 'get', + params: query + }); +}; diff --git a/src/api/mes/toolingTypeRelation/types.ts b/src/api/mes/toolingTypeRelation/types.ts new file mode 100644 index 0000000..6fda0d3 --- /dev/null +++ b/src/api/mes/toolingTypeRelation/types.ts @@ -0,0 +1,76 @@ +export interface ToolingTypeRelationVO { + /** + * 主键标识 + */ + relationId: string | number; + + /** + * 工装类型ID + */ + toolingTypeId: string | number; + + /** + * 关联信息类型(1物料 2工序) + */ + relationInfoType: string; + + /** + * 关联信息ID + */ + relationInfoId: string | number; + +} + +export interface ToolingTypeRelationForm extends BaseEntity { + /** + * 主键标识 + */ + relationId?: string | number; + + /** + * 工装类型ID + */ + toolingTypeId?: string | number; + + /** + * 关联信息类型(1物料 2工序) + */ + relationInfoType?: string; + + /** + * 关联信息ID + */ + relationInfoId?: string | number; + +} + +export interface ToolingTypeRelationQuery extends PageQuery { + + /** + * 主键标识 + */ + relationId?: string | number; + + /** + * 工装类型ID + */ + toolingTypeId?: string | number; + + /** + * 关联信息类型(1物料 2工序) + */ + relationInfoType?: string; + + /** + * 关联信息ID + */ + relationInfoId?: string | number; + + /** + * 日期范围参数 + */ + params?: any; +} + + + diff --git a/src/views/mes/toolingType/index.vue b/src/views/mes/toolingType/index.vue new file mode 100644 index 0000000..dc4b5f0 --- /dev/null +++ b/src/views/mes/toolingType/index.vue @@ -0,0 +1,510 @@ + + + From 7c1d399809f1e7d2a131fe2ec94b9046daaa3819 Mon Sep 17 00:00:00 2001 From: yinq Date: Fri, 4 Jul 2025 11:10:49 +0800 Subject: [PATCH 4/9] =?UTF-8?q?update=20mes=E5=B7=A5=E8=89=BA=E8=B7=AF?= =?UTF-8?q?=E7=BA=BF=E5=85=B3=E8=81=94=E5=B7=A5=E8=89=BA=E6=AD=A5=E9=AA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/mes/baseRoute/index.vue | 777 +++++++++++++++++++++--------- 1 file changed, 541 insertions(+), 236 deletions(-) diff --git a/src/views/mes/baseRoute/index.vue b/src/views/mes/baseRoute/index.vue index d54420d..8b08b81 100644 --- a/src/views/mes/baseRoute/index.vue +++ b/src/views/mes/baseRoute/index.vue @@ -13,11 +13,11 @@ - - - - - + + + + + 搜索 重置 @@ -110,23 +110,14 @@ @@ -176,20 +176,20 @@ > - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + @@ -233,64 +233,7 @@ - - - - - - - - 工艺路线组成信息 - - - 添加 - - - 删除 - - - - - - - - - - - - - - - - - - - + @@ -338,7 +281,7 @@ @@ -353,20 +296,344 @@ + + + + + + + 工艺路线关联工艺步骤信息 + + + 添加工艺步骤 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{dict.label}} + + + + + + + + + + {{dict.label}} + + + + + {{dict.label}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{dict.label}} + + + + + {{dict.label}} + + + + + {{dict.label}} + + + + + {{dict.label}} + + + + + {{dict.label}} + + + + + {{dict.label}} + + + + + {{dict.label}} + + + + + + + + + + + + + + + + + +
From f9658eaea74384dc8c7136a5d8241d7a7093b59b Mon Sep 17 00:00:00 2001 From: yinq Date: Fri, 4 Jul 2025 11:11:30 +0800 Subject: [PATCH 5/9] =?UTF-8?q?update=20=E7=8F=AD=E7=BB=84=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/mes/baseRoute/types.ts | 54 +++++++++++++++++++++++ src/views/mes/baseClassTeamInfo/index.vue | 10 ++--- 2 files changed, 59 insertions(+), 5 deletions(-) diff --git a/src/api/mes/baseRoute/types.ts b/src/api/mes/baseRoute/types.ts index d89841d..a7433b2 100644 --- a/src/api/mes/baseRoute/types.ts +++ b/src/api/mes/baseRoute/types.ts @@ -1,9 +1,63 @@ // 定义工艺路线步骤的接口 export interface ProdBaseRouteProcess { + /** 工艺路线步骤ID */ + routeProcessId?: number; + /** 工艺路线ID */ + routeId?: number; /** 工序ID */ processId: string | number; + /** 工序名称 */ + processName?: string; + /** 工序类型 */ + processType?: string; /** 工序顺序 */ processOrder: string | number; + /** 委外标识 */ + outsourcingFlag?: string; + /** 工序类型 */ + operationType?: string; + /** 是否需要上料 */ + needFeeding?: string; + /** 设备点检 */ + needEquipmentCheck?: string; + /** 实际产出率 */ + actualYieldRate?: number; + /** 领料方式 */ + materialIssuance?: string; + /** 委外提前期 */ + outsourcingLeadTime?: number; + /** 准备时间 */ + setupTime?: number; + /** 加工时间 */ + processingTime?: number; + /** 拆卸时间 */ + teardownTime?: number; + /** 生产节拍 */ + productionTakt?: number; + /** 质检方式 */ + inspectionMethod?: string; + /** 质量检验规则ID */ + qualityRuleId?: string; + /** 关键工序 */ + isKeyOperation?: string; + /** 下工序要求 */ + nextStepRequirement?: string; + /** 最后工序 */ + isFinalStep?: string; + /** 生成流转卡任务 */ + generatePrepareTask?: string; + /** 瓶颈工序 */ + bottleneckFlag?: string; + /** 瓶颈设置 */ + bottleneckSetting?: string; + /** 接续关系 */ + successorRelation?: string; + /** 偏置时间 */ + offsetTime?: number; + /** 技术附件 */ + techAttachments?: string; + /** 质检员 */ + inspectors?: string; /** 备注 */ remark?: string; /** 创建人 */ diff --git a/src/views/mes/baseClassTeamInfo/index.vue b/src/views/mes/baseClassTeamInfo/index.vue index 0ff022e..d973633 100644 --- a/src/views/mes/baseClassTeamInfo/index.vue +++ b/src/views/mes/baseClassTeamInfo/index.vue @@ -134,7 +134,7 @@ - + @@ -292,10 +292,10 @@ const columns = ref([ { key: 0, label: `班组编号`, visible: true }, { key: 1, label: `班组名称`, visible: true }, { key: 2, label: `班组负责人`, visible: true }, - { key: 3, label: `班次`, visible: true }, - { key: 4, label: `工序`, visible: true }, - { key: 5, label: `工位`, visible: true }, - { key: 6, label: `设备`, visible: true }, + { key: 3, label: `班次`, visible: false }, + { key: 4, label: `工序`, visible: false }, + { key: 5, label: `工位`, visible: false }, + { key: 6, label: `设备`, visible: false }, { key: 7, label: `激活标识`, visible: true }, /* { key: 10, label: `创建部门`, visible: true }, { key: 11, label: `创建人`, visible: true }, From 1f9f07b26ec80c43c4c4a317d1a268821a94de92 Mon Sep 17 00:00:00 2001 From: yinq Date: Fri, 4 Jul 2025 15:15:39 +0800 Subject: [PATCH 6/9] =?UTF-8?q?update=20mes=E8=BD=BD=E5=85=B7=E5=B7=A5?= =?UTF-8?q?=E8=A3=85=E5=85=B3=E8=81=94=E8=BD=BD=E5=85=B7=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/mes/baseToolingInfo/types.ts | 2 + src/api/mes/planInfo/types.ts | 28 ++-- src/views/mes/baseToolingInfo/index.vue | 47 ++++--- src/views/mes/planInfo/index.vue | 167 +++++++++++++----------- 4 files changed, 143 insertions(+), 101 deletions(-) diff --git a/src/api/mes/baseToolingInfo/types.ts b/src/api/mes/baseToolingInfo/types.ts index 38c2e4b..eea65f5 100644 --- a/src/api/mes/baseToolingInfo/types.ts +++ b/src/api/mes/baseToolingInfo/types.ts @@ -132,6 +132,7 @@ export interface BaseToolingInfoForm extends BaseEntity { */ weight?: number; + /** * 备注 */ @@ -142,6 +143,7 @@ export interface BaseToolingInfoForm extends BaseEntity { */ activeFlag?: string; + toolingTypeId?: number; } export interface BaseToolingInfoQuery extends PageQuery { diff --git a/src/api/mes/planInfo/types.ts b/src/api/mes/planInfo/types.ts index 20ccaf0..03e851f 100644 --- a/src/api/mes/planInfo/types.ts +++ b/src/api/mes/planInfo/types.ts @@ -335,15 +335,6 @@ export interface PlanInfoForm extends BaseEntity { materialBoMName?: string | number; - materialIdL?: string | number; - materialNameL?: string | number; - materialIdR?: string | number; - materialNameR?: string | number; - materialBoMIdL?: string | number; - materialBoMNameL?: string | number; - materialBoMIdR?: string | number; - materialBoMNameR?: string | number; - /** * 班次id */ @@ -356,6 +347,24 @@ export interface PlanInfoForm extends BaseEntity { materialName?: string; + // 业务临时字段补充,便于 index.vue 类型推断 + planAmount1?: number; + planAmount2?: number; + planAmount3?: number; + planAmount4?: number; + planAmount5?: number; + planAmount6?: number; + materialIdL?: string | number; + materialNameL?: string; + materialIdR?: string | number; + materialNameR?: string; + materialBomVersion?: string; + materialBomVersionL?: string; + materialBomVersionR?: string; + materialBoMNameL?: string; + materialBoMNameR?: string; + materialBoMIdL?: string | number; + materialBoMIdR?: string | number; } export interface PlanInfoQuery extends PageQuery { @@ -520,6 +529,7 @@ export interface PlanInfoQuery extends PageQuery { */ params?: any; + planRangeTime?: [string, string]; /** * 班次名称 diff --git a/src/views/mes/baseToolingInfo/index.vue b/src/views/mes/baseToolingInfo/index.vue index 39cce2f..f9e2269 100644 --- a/src/views/mes/baseToolingInfo/index.vue +++ b/src/views/mes/baseToolingInfo/index.vue @@ -13,11 +13,11 @@ - - - - - + + + + + @@ -74,11 +74,7 @@ - - - + diff --git a/src/views/mes/planInfo/index.vue b/src/views/mes/planInfo/index.vue index 7c96f71..fba6d5e 100644 --- a/src/views/mes/planInfo/index.vue +++ b/src/views/mes/planInfo/index.vue @@ -238,17 +238,7 @@ - - - - - - - - - - - + - - - - + + + + + + + + @@ -956,7 +946,7 @@ const columns = ref([ { key: 24, label: `计划状态`, visible: true }, { key: 25, label: `导入类型`, visible: false }, { key: 26, label: `完成标识`, visible: true }, - { key: 27, label: `优先级`, visible: true }, + { key: 27, label: `优先级`, visible: false }, { key: 28, label: `班次`, visible: true }, { key: 29, label: `班组`, visible: true }, { key: 30, label: `模号`, visible: true }, @@ -1001,7 +991,26 @@ const initFormData: PlanInfoForm = { modelCode: undefined, remark: undefined, materialBoMName: undefined, - workshopId: undefined + workshopId: undefined, + // 批量计划相关字段 + planAmount1: undefined, + planAmount2: undefined, + planAmount3: undefined, + planAmount4: undefined, + planAmount5: undefined, + planAmount6: undefined, + materialIdL: undefined, + materialNameL: undefined, + materialIdR: undefined, + materialNameR: undefined, + materialBomVersion: undefined, + materialBomVersionL: undefined, + materialBomVersionR: undefined, + materialBoMNameL: undefined, + materialBoMNameR: undefined, + materialBoMIdL: undefined, + materialBoMIdR: undefined, + shiftName: '', }; const data = reactive>({ form: { ...initFormData }, @@ -1039,7 +1048,11 @@ const data = reactive>({ classTeamId: undefined, modelCode: undefined, workshopId: undefined, - params: {} + params: {}, + planRangeTime: undefined, + materialName: undefined, + shiftName: '', + shifitId: undefined, }, rules: { materialId: [ @@ -1060,15 +1073,15 @@ const data = reactive>({ planBeginTime: [ { required: true, message: '计划日期不能为空', trigger: 'blur' } ], - planAmount1: [ - { required: true, message: '早班数量不能为空', trigger: 'blur' } - ], - planAmount2: [ - { required: true, message: '中班数量不能为空', trigger: 'blur' } - ], - planAmount3: [ - { required: true, message: '晚班数量不能为空', trigger: 'blur' } - ] + // planAmount1: [ + // { required: true, message: '早班数量不能为空', trigger: 'blur' } + // ], + // planAmount2: [ + // { required: true, message: '中班数量不能为空', trigger: 'blur' } + // ], + // planAmount3: [ + // { required: true, message: '晚班数量不能为空', trigger: 'blur' } + // ] } }); @@ -1186,7 +1199,14 @@ const handleUpdate = async (row?: PlanInfoVO) => { const _planId = row?.planId || ids.value[0]; const res = await getPlanInfo(_planId); Object.assign(form.value, res.data); - form.value.finishFlag = form.value.finishFlag.split(','); + // finishFlag 类型守卫 + if (Array.isArray(form.value.finishFlag)) { + // do nothing + } else if (typeof form.value.finishFlag === 'string') { + form.value.finishFlag = form.value.finishFlag.split(',').filter(Boolean).join(','); + } else { + form.value.finishFlag = []; + } dialog.visible = true; dialog.title = '修改生产计划信息'; }; @@ -1209,12 +1229,14 @@ const submitForm = () => { planInfoFormRef.value?.validate(async (valid: boolean) => { if (valid) { buttonLoading.value = true; - form.value.finishFlag = form.value.finishFlag !== null ? form.value.finishFlag.join(',') : null; - // if (form.value.planId) { - // await updatePlanInfo(form.value).finally(() => buttonLoading.value = false); - // } else { - // await addPlanInfo(form.value).finally(() => buttonLoading.value = false); - // } + // finishFlag 类型守卫 + if (Array.isArray(form.value.finishFlag)) { + form.value.finishFlag = form.value.finishFlag.join(','); + } else if (typeof form.value.finishFlag === 'string') { + // do nothing + } else { + form.value.finishFlag = ''; + } //半制品、成型、硫化新增 let assemblyData = batchesAddAssemblyData(); if (machineIds.value.length == 0) { @@ -1239,60 +1261,61 @@ const submitForm = () => { /** 批量新增组装数据 */ const batchesAddAssemblyData = () => { const formData = form.value; - formData.workshopId = workshopId.value;//车间 + // 统一workshopId类型为字符串,保证比较安全 + const workshopIdStr = formData.workshopId != null ? String(formData.workshopId) : ''; let list = []; - if (formData.planAmount1 > 0) { + if (typeof formData.planAmount1 === 'number' && formData.planAmount1 > 0) { let data = { ...formData }; - data.modelCode = formData.workshopId === '4' ? 'L' : null; - data.materialId = formData.workshopId === '4' ? formData.materialIdL : formData.materialId; - data.materialBomVersion = formData.workshopId === '4' ? formData.materialBomVersionL : formData.materialBomVersion; + data.modelCode = workshopIdStr === '4' ? 'L' : null; + data.materialId = workshopIdStr === '4' ? formData.materialIdL : formData.materialId; + data.materialBomVersion = workshopIdStr === '4' ? formData.materialBomVersionL : formData.materialBomVersion; data.shiftId = '1'; data.planAmount = formData.planAmount1; list.push(data); } - if (formData.planAmount2 > 0) { + if (typeof formData.planAmount2 === 'number' && formData.planAmount2 > 0) { let data = { ...formData }; - data.modelCode = formData.workshopId === '4' ? 'L' : null; + data.modelCode = workshopIdStr === '4' ? 'L' : null; data.shiftId = '2'; data.planAmount = formData.planAmount2; - data.materialId = formData.workshopId === '4' ? formData.materialIdL : formData.materialId; - data.materialBomVersion = formData.workshopId === '4' ? formData.materialBomVersionL : formData.materialBomVersion; + data.materialId = workshopIdStr === '4' ? formData.materialIdL : formData.materialId; + data.materialBomVersion = workshopIdStr === '4' ? formData.materialBomVersionL : formData.materialBomVersion; list.push(data); } - if (formData.planAmount3 > 0) { + if (typeof formData.planAmount3 === 'number' && formData.planAmount3 > 0) { let data = { ...formData }; - data.modelCode = formData.workshopId === '4' ? 'L' : null; + data.modelCode = workshopIdStr === '4' ? 'L' : null; data.shiftId = '3'; data.planAmount = formData.planAmount3; - data.materialId = formData.workshopId === '4' ? formData.materialIdL : formData.materialId; - data.materialBomVersion = formData.workshopId === '4' ? formData.materialBomVersionL : formData.materialBomVersion; + data.materialId = workshopIdStr === '4' ? formData.materialIdL : formData.materialId; + data.materialBomVersion = workshopIdStr === '4' ? formData.materialBomVersionL : formData.materialBomVersion; list.push(data); } - if (formData.planAmount4 > 0) { + if (typeof formData.planAmount4 === 'number' && formData.planAmount4 > 0) { let data = { ...formData }; data.modelCode = 'R'; data.shiftId = '1'; data.planAmount = formData.planAmount4; - data.materialId = formData.workshopId === '4' ? formData.materialIdR : formData.materialId; - data.materialBomVersion = formData.workshopId === '4' ? formData.materialBomVersionR : formData.materialBomVersion; + data.materialId = workshopIdStr === '4' ? formData.materialIdR : formData.materialId; + data.materialBomVersion = workshopIdStr === '4' ? formData.materialBomVersionR : formData.materialBomVersion; list.push(data); } - if (formData.planAmount5 > 0) { + if (typeof formData.planAmount5 === 'number' && formData.planAmount5 > 0) { let data = { ...formData }; data.modelCode = 'R'; data.shiftId = '2'; data.planAmount = formData.planAmount5; - data.materialId = formData.workshopId === '4' ? formData.materialIdR : formData.materialId; - data.materialBomVersion = formData.workshopId === '4' ? formData.materialBomVersionR : formData.materialBomVersion; + data.materialId = workshopIdStr === '4' ? formData.materialIdR : formData.materialId; + data.materialBomVersion = workshopIdStr === '4' ? formData.materialBomVersionR : formData.materialBomVersion; list.push(data); } - if (formData.planAmount6 > 0) { + if (typeof formData.planAmount6 === 'number' && formData.planAmount6 > 0) { let data = { ...formData }; data.modelCode = 'R'; data.shiftId = '3'; data.planAmount = formData.planAmount6; - data.materialId = formData.workshopId === '4' ? formData.materialIdR : formData.materialId; - data.materialBomVersion = formData.workshopId === '4' ? formData.materialBomVersionR : formData.materialBomVersion; + data.materialId = workshopIdStr === '4' ? formData.materialIdR : formData.materialId; + data.materialBomVersion = workshopIdStr === '4' ? formData.materialBomVersionR : formData.materialBomVersion; list.push(data); } return list; @@ -1351,15 +1374,15 @@ const submitMaterialForm = () => { }; /** 新增物料BOM按钮操作 */ -const handleMaterialBomAdd = (modelCode) => { - if (form.value.materialId == null && form.value.materialIdL == null - && form.value.materialIdR == null) { - proxy?.$modal.msgWarning('请先选择物料!'); - return; - } - modelCodeRef.value = modelCode; - materialBomOpen.value = true; -}; +// const handleMaterialBomAdd = (modelCode) => { +// if (form.value.materialId == null && form.value.materialIdL == null +// && form.value.materialIdR == null) { +// proxy?.$modal.msgWarning('请先选择物料!'); +// return; +// } +// modelCodeRef.value = modelCode; +// materialBomOpen.value = true; +// }; /** 提交物料BOM信息按钮 */ const submitMaterialBomForm = () => { @@ -1425,12 +1448,6 @@ const getTreeSelect = async () => { materialBomVersionOptions.value = res.data; }; -async function handleMaterialBomChange(value: number | string) { - const response = await optionselect(value); - postOptions.value = response.data; - form.value.postIds = []; -} - onMounted(() => { getWorkshopId(); From 9c99a82d9c8baa47ca69c278959ef3de9d15c017 Mon Sep 17 00:00:00 2001 From: zangchenhao Date: Fri, 4 Jul 2025 15:31:07 +0800 Subject: [PATCH 7/9] =?UTF-8?q?refactor(dms):=E5=90=AF=E7=94=A8=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E5=A4=A7=E7=B1=BB=E5=92=8C=E8=AE=BE=E5=A4=87=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E9=A1=B5=E9=9D=A2=EF=BC=8C=E4=B8=8E=20mes=20=E5=85=B1?= =?UTF-8?q?=E7=94=A8=E7=9B=B8=E5=90=8C=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/dms/baseDeviceCategory/index.ts | 154 ++--- src/api/dms/baseDeviceType/index.ts | 174 +++--- src/views/dms/baseDeviceCategory/index.vue | 519 +++++++-------- src/views/dms/baseDeviceType/index.vue | 694 ++++++++++----------- 4 files changed, 771 insertions(+), 770 deletions(-) diff --git a/src/api/dms/baseDeviceCategory/index.ts b/src/api/dms/baseDeviceCategory/index.ts index 362a6a4..1701bef 100644 --- a/src/api/dms/baseDeviceCategory/index.ts +++ b/src/api/dms/baseDeviceCategory/index.ts @@ -1,77 +1,77 @@ -// import request from '@/utils/request'; -// import { AxiosPromise } from 'axios'; -// import { BaseDeviceCategoryVO, BaseDeviceCategoryForm, BaseDeviceCategoryQuery } from '@/api/dms/baseDeviceCategory/types'; -// -// /** -// * 查询设备大类信息列表 -// * @param query -// * @returns {*} -// */ -// -// export const listBaseDeviceCategoryInDMS = (query?: BaseDeviceCategoryQuery): AxiosPromise => { -// return request({ -// url: '/dms/baseDeviceCategory/list', -// method: 'get', -// params: query -// }); -// }; -// -// /** -// * 查询设备大类信息详细 -// * @param deviceCategoryId -// */ -// export const getBaseDeviceCategoryInDMS = (deviceCategoryId: string | number): AxiosPromise => { -// return request({ -// url: '/dms/baseDeviceCategory/' + deviceCategoryId, -// method: 'get' -// }); -// }; -// -// /** -// * 新增设备大类信息 -// * @param data -// */ -// export const addBaseDeviceCategoryInDMS = (data: BaseDeviceCategoryForm) => { -// return request({ -// url: '/dms/baseDeviceCategory', -// method: 'post', -// data: data -// }); -// }; -// -// /** -// * 修改设备大类信息 -// * @param data -// */ -// export const updateBaseDeviceCategoryInDMS = (data: BaseDeviceCategoryForm) => { -// return request({ -// url: '/dms/baseDeviceCategory', -// method: 'put', -// data: data -// }); -// }; -// -// /** -// * 删除设备大类信息 -// * @param deviceCategoryId -// */ -// export const delBaseDeviceCategoryInDMS = (deviceCategoryId: string | number | Array) => { -// return request({ -// url: '/dms/baseDeviceCategory/' + deviceCategoryId, -// method: 'delete' -// }); -// }; -// -// -// /** -// * 下拉框查询设备大类信息列表 -// * @param query -// * @returns {*} -// */ -// export function getBaseDeviceCategoryListInDMS (query) { -// return request({ -// url: '/dms/baseDeviceCategory/getBaseDeviceCategoryList', -// method: 'get', -// params: query -// }); -// }; +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { BaseDeviceCategoryVO, BaseDeviceCategoryForm, BaseDeviceCategoryQuery } from '@/api/dms/baseDeviceCategory/types'; + +/** + * 查询设备大类信息列表 + * @param query + * @returns {*} + */ + +export const listBaseDeviceCategory = (query?: BaseDeviceCategoryQuery): AxiosPromise => { + return request({ + url: '/dms/baseDeviceCategory/list', + method: 'get', + params: query + }); +}; + +/** + * 查询设备大类信息详细 + * @param deviceCategoryId + */ +export const getBaseDeviceCategory = (deviceCategoryId: string | number): AxiosPromise => { + return request({ + url: '/dms/baseDeviceCategory/' + deviceCategoryId, + method: 'get' + }); +}; + +/** + * 新增设备大类信息 + * @param data + */ +export const addBaseDeviceCategory = (data: BaseDeviceCategoryForm) => { + return request({ + url: '/dms/baseDeviceCategory', + method: 'post', + data: data + }); +}; + +/** + * 修改设备大类信息 + * @param data + */ +export const updateBaseDeviceCategory = (data: BaseDeviceCategoryForm) => { + return request({ + url: '/dms/baseDeviceCategory', + method: 'put', + data: data + }); +}; + +/** + * 删除设备大类信息 + * @param deviceCategoryId + */ +export const delBaseDeviceCategory = (deviceCategoryId: string | number | Array) => { + return request({ + url: '/dms/baseDeviceCategory/' + deviceCategoryId, + method: 'delete' + }); +}; + + +/** + * 下拉框查询设备大类信息列表 + * @param query + * @returns {*} + */ +export function getBaseDeviceCategoryList (query) { + return request({ + url: '/dms/baseDeviceCategory/getBaseDeviceCategoryList', + method: 'get', + params: query + }); +}; diff --git a/src/api/dms/baseDeviceType/index.ts b/src/api/dms/baseDeviceType/index.ts index 039383e..e8ff345 100644 --- a/src/api/dms/baseDeviceType/index.ts +++ b/src/api/dms/baseDeviceType/index.ts @@ -1,87 +1,87 @@ -// import request from '@/utils/request'; -// import { AxiosPromise } from 'axios'; -// import { BaseDeviceTypeVO, BaseDeviceTypeForm, BaseDeviceTypeQuery } from '@/api/dms/baseDeviceType/types'; -// -// /** -// * 查询设备类型信息列表 -// * @param query -// * @returns {*} -// */ -// -// export const listBaseDeviceTypeInDMS = (query?: BaseDeviceTypeQuery): AxiosPromise => { -// return request({ -// url: '/dms/baseDeviceType/list', -// method: 'get', -// params: query -// }); -// }; -// -// /** -// * 查询设备类型信息详细 -// * @param deviceTypeId -// */ -// export const getBaseDeviceTypeInDMS = (deviceTypeId: string | number): AxiosPromise => { -// return request({ -// url: '/dms/baseDeviceType/' + deviceTypeId, -// method: 'get' -// }); -// }; -// -// /** -// * 新增设备类型信息 -// * @param data -// */ -// export const addBaseDeviceTypeInDMS = (data: BaseDeviceTypeForm) => { -// return request({ -// url: '/dms/baseDeviceType', -// method: 'post', -// data: data -// }); -// }; -// -// /** -// * 修改设备类型信息 -// * @param data -// */ -// export const updateBaseDeviceTypeInDMS = (data: BaseDeviceTypeForm) => { -// return request({ -// url: '/dms/baseDeviceType', -// method: 'put', -// data: data -// }); -// }; -// -// /** -// * 删除设备类型信息 -// * @param deviceTypeId -// */ -// export const delBaseDeviceTypeInDMS = (deviceTypeId: string | number | Array) => { -// return request({ -// url: '/dms/baseDeviceType/' + deviceTypeId, -// method: 'delete' -// }); -// }; -// -// -// /** -// * 下拉框查询设备类型信息列表 -// * @param query -// * @returns {*} -// */ -// export function getBaseDeviceTypeListInDMS (query) { -// return request({ -// url: '/dms/baseDeviceType/getBaseDeviceTypeList', -// method: 'get', -// params: query -// }); -// }; -// -// -// //根据设备id查询设备类型信息 -// export function selectDevicetypeByDeviceId(query) { -// return request({ -// url: '/dms/baseDeviceType/selectDevicetypeByDeviceId', -// method: 'get', -// params: query -// }) -// }; +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { BaseDeviceTypeVO, BaseDeviceTypeForm, BaseDeviceTypeQuery } from '@/api/dms/baseDeviceType/types'; + +/** + * 查询设备类型信息列表 + * @param query + * @returns {*} + */ + +export const listBaseDeviceType = (query?: BaseDeviceTypeQuery): AxiosPromise => { + return request({ + url: '/dms/baseDeviceType/list', + method: 'get', + params: query + }); +}; + +/** + * 查询设备类型信息详细 + * @param deviceTypeId + */ +export const getBaseDeviceType = (deviceTypeId: string | number): AxiosPromise => { + return request({ + url: '/dms/baseDeviceType/' + deviceTypeId, + method: 'get' + }); +}; + +/** + * 新增设备类型信息 + * @param data + */ +export const addBaseDeviceType = (data: BaseDeviceTypeForm) => { + return request({ + url: '/dms/baseDeviceType', + method: 'post', + data: data + }); +}; + +/** + * 修改设备类型信息 + * @param data + */ +export const updateBaseDeviceType = (data: BaseDeviceTypeForm) => { + return request({ + url: '/dms/baseDeviceType', + method: 'put', + data: data + }); +}; + +/** + * 删除设备类型信息 + * @param deviceTypeId + */ +export const delBaseDeviceType = (deviceTypeId: string | number | Array) => { + return request({ + url: '/dms/baseDeviceType/' + deviceTypeId, + method: 'delete' + }); +}; + + +/** + * 下拉框查询设备类型信息列表 + * @param query + * @returns {*} + */ +export function getBaseDeviceTypeList (query) { + return request({ + url: '/dms/baseDeviceType/getBaseDeviceTypeList', + method: 'get', + params: query + }); +}; + + +//根据设备id查询设备类型信息 +export function selectDevicetypeByDeviceId(query) { + return request({ + url: '/dms/baseDeviceType/selectDevicetypeByDeviceId', + method: 'get', + params: query + }) +}; diff --git a/src/views/dms/baseDeviceCategory/index.vue b/src/views/dms/baseDeviceCategory/index.vue index 7f32d05..81d5ad0 100644 --- a/src/views/dms/baseDeviceCategory/index.vue +++ b/src/views/dms/baseDeviceCategory/index.vue @@ -1,283 +1,284 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - +--> +onMounted(() => { + getList(); +}); + diff --git a/src/views/dms/baseDeviceType/index.vue b/src/views/dms/baseDeviceType/index.vue index 951fe4d..8ea9802 100644 --- a/src/views/dms/baseDeviceType/index.vue +++ b/src/views/dms/baseDeviceType/index.vue @@ -1,377 +1,377 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - +--> +onMounted(() => { + getCategorySelect(); + getList(); +}); + From 85a34a9cb08b3f70e7ac5a6a3b2c4d97b5e8328c Mon Sep 17 00:00:00 2001 From: yinq Date: Fri, 4 Jul 2025 16:12:51 +0800 Subject: [PATCH 8/9] =?UTF-8?q?update=20mes=E7=94=9F=E4=BA=A7=E8=AE=A1?= =?UTF-8?q?=E5=88=92=E6=98=BE=E7=A4=BA=E7=89=A9=E6=96=99=E5=8D=95=E4=BD=8D?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/mes/planInfo/index.vue | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/views/mes/planInfo/index.vue b/src/views/mes/planInfo/index.vue index fba6d5e..1543906 100644 --- a/src/views/mes/planInfo/index.vue +++ b/src/views/mes/planInfo/index.vue @@ -148,6 +148,7 @@ +