Преглед на файлове

Merge remote-tracking branch 'origin/master'

ouyj преди 3 месеца
родител
ревизия
2fa4522ea0

+ 1 - 1
ygtx-gxt/src/main/java/com/ygtx/gxt/service/impl/GxtRepairOrderServiceImpl.java

@@ -1016,7 +1016,7 @@ public class GxtRepairOrderServiceImpl implements IGxtRepairOrderService
 //                                gxtRepairOrderMapper.updateGxtRepairOrder(gxtRepairOrder);
 //                            }
                         } else {
-                            if (person.getIsLeader() == 0) {
+                            if (null == person.getIsLeader() || person.getIsLeader() == 0) {
                                 throw new ServiceException("已匹配到MIS工单,但工作班成员'" + person.getNickName() + "'在系统中不存在,系统无法自动结单,请检查");
                             } else {
                                 throw new ServiceException("已匹配到MIS工单,但工作负责人'" + person.getNickName() + "'在系统中不存在,系统无法自动结单,请检查");

+ 1 - 1
ygtx-gxt/src/main/java/com/ygtx/gxt/service/impl/GxtWorkOrderServiceImpl.java

@@ -860,7 +860,7 @@ public class GxtWorkOrderServiceImpl implements IGxtWorkOrderService
 //                                    gxtWorkOrderMapper.updateGxtWorkOrder(order);
 //                                }
                             } else {
-                                if (person.getIsLeader() == 0) {
+                                if (null == person.getIsLeader() || person.getIsLeader() == 0) {
                                     throw new ServiceException("已匹配到MIS工单,但工作班成员'" + person.getNickName() + "'在系统中不存在,系统无法自动结单,请检查");
                                 } else {
                                     throw new ServiceException("已匹配到MIS工单,但工作负责人'" + person.getNickName() + "'在系统中不存在,系统无法自动结单,请检查");

+ 6 - 6
ygtx-gxt/src/main/java/com/ygtx/gxt/task/OrderAutoFinalizeTask.java

@@ -100,7 +100,7 @@ public class OrderAutoFinalizeTask {
                             boolean hasMembers = false;
                             
                             for (GxtWorkOrderPerson person : personList) {
-                                if (person.getIsLeader() != null && 1 == person.getIsLeader()) {
+                                if (null != person.getIsLeader() && 1 == person.getIsLeader()) {
                                     hasLeader = true;
                                 } else {
                                     hasMembers = true;
@@ -121,7 +121,7 @@ public class OrderAutoFinalizeTask {
                 boolean hasLeaderCheck = false;
                 boolean hasMembersCheck = false;
                 for (GxtWorkOrderPerson person : personList) {
-                    if (person.getIsLeader() != null && 1 == person.getIsLeader()) {
+                    if (null != person.getIsLeader() && 1 == person.getIsLeader()) {
                         hasLeaderCheck = true;
                     } else {
                         hasMembersCheck = true;
@@ -143,7 +143,7 @@ public class OrderAutoFinalizeTask {
                         queryUser.setNickName(person.getNickName());
                         List<SysUser> users = sysUserMapper.selectUserList(queryUser);
                         if (null != users && !users.isEmpty()) {
-                            if (person.getIsLeader() != null && 1 == person.getIsLeader()) {
+                            if (null != person.getIsLeader() && 1 == person.getIsLeader()) {
                                 leader = person.getNickName();
                                 // 查询工作负责人的ID
                                 leaderUserId = users.get(0).getUserId();
@@ -265,7 +265,7 @@ public class OrderAutoFinalizeTask {
                             boolean hasMembers = false;
                             
                             for (GxtWorkOrderPerson person : personList) {
-                                if (person.getIsLeader() != null && 1 == person.getIsLeader()) {
+                                if (null != person.getIsLeader() && 1 == person.getIsLeader()) {
                                     hasLeader = true;
                                 } else {
                                     hasMembers = true;
@@ -286,7 +286,7 @@ public class OrderAutoFinalizeTask {
                 boolean hasLeaderCheck = false;
                 boolean hasMembersCheck = false;
                 for (GxtWorkOrderPerson person : personList) {
-                    if (person.getIsLeader() != null && 1 == person.getIsLeader()) {
+                    if (null != person.getIsLeader() && 1 == person.getIsLeader()) {
                         hasLeaderCheck = true;
                     } else {
                         hasMembersCheck = true;
@@ -308,7 +308,7 @@ public class OrderAutoFinalizeTask {
                         queryUser.setNickName(person.getNickName());
                         List<SysUser> users = sysUserMapper.selectUserList(queryUser);
                         if (null != users && !users.isEmpty()) {
-                            if (person.getIsLeader() != null && 1 == person.getIsLeader()) {
+                            if (null != person.getIsLeader() && 1 == person.getIsLeader()) {
                                 leader = person.getNickName();
                                 // 查询工作负责人的ID
                                 leaderUserId = users.get(0).getUserId();

+ 85 - 55
ygtx-ui/src/components/repairOrder/finalize.vue

@@ -896,82 +896,112 @@ const onUserSelected = (users) => {
 };
 
 // 提交操作
+// const handleSubmit = async () => {
+//   if (!finalizeFormRef.value) return
+//
+//   await finalizeFormRef.value.validate(async (valid) => {
+//     if (valid) {
+//       const { realStartTime, acceptTime } = formData.value;
+//       debugger
+//       try {
+//         debugger
+//         // 根据维修方式清除不需要的字段
+//         if (formData.value.repairMethod === '1') {
+//           // 正常维修时清除复位方式
+//           formData.value.resetMethod = undefined;
+//           formData.value.workArea = Array.isArray(formData.value.workArea) ? formData.value.workArea.join(',')
+//                                 : formData.value.workArea || ''
+//         } else if (formData.value.repairMethod === '2') {
+//           // 复位启机时清除MIS相关字段
+//           formData.value.misOrderNo = undefined;
+//           formData.value.realStartTime = undefined;
+//           formData.value.realEndTime = undefined;
+//           formData.value.workGroupMemberName = undefined;
+//           formData.value.infoEntry = undefined;
+//           formData.value.wwryNum = undefined;
+//           formData.value.wlryNum = undefined;
+//           formData.value.workArea = undefined;
+//           formData.value.repairOrderPersonList = [];
+//         }
+//
+//         // 调用父组件传入的提交函数
+//         if (props.onSubmit && typeof props.onSubmit === 'function') {
+//
+//           flowList.value = []
+//           if (formData.value.resumeTime && formData.value.resumeTime != resumeInfo.value.actionTime) { //存入新的挂起结束时间
+//             resumeInfo.value.actionTime = formData.value.resumeTime
+//             flowList.value.push(resumeInfo.value)
+//           }
+//           formData.value.repairOrderFlowList = flowList.value
+//           formData.value.finalizeMethod = '2'
+//           await props.onSubmit(formData.value)
+//         } else {
+//           throw new Error("未提供提交方法")
+//         }
+//
+//         proxy.$modal.msgSuccess("结单成功")
+//         visible.value = false
+//         emit('success')
+//       } catch (error) {
+//         // proxy.$modal.msgError("操作失败: " + (error.message || "未知错误"))
+//       }
+//     }
+//   })
+// }
+
+// 核心修改:提交函数 - 临时转换workArea格式,异常时恢复
 const handleSubmit = async () => {
   if (!finalizeFormRef.value) return
 
+  // 1. 提交前深拷贝当前表单数据(保留原始数组格式的workArea)
+  const submitBackup = JSON.parse(JSON.stringify(formData.value))
+
   await finalizeFormRef.value.validate(async (valid) => {
     if (valid) {
-      const { realStartTime, acceptTime } = formData.value;
-      debugger
-      // if (realStartTime && acceptTime && (new Date(realStartTime) < new Date(acceptTime))) {
-      //   formData.value.orderEntryType = '2'
-        // try {
-        //   debugger
-        //   await ElMessageBox.confirm(
-        //       '检测到开始时间早于接单时间,系统将按“补录工单”处理,准备工时为0。是否继续?',
-        //       '提示',
-        //       {
-        //         confirmButtonText: '是',
-        //         cancelButtonText: '否',
-        //         type: 'warning',
-        //         distinguishCancelAndClose: true
-        //       }
-        //   );
-        //   formData.value.orderEntryType = '2'
-        //   // 用户点击“是”,继续提交
-        // } catch (error) {
-        //   // 用户点击“否”或关闭弹窗
-        //   finalizeFormRef.value?.validateField('realStartTime');
-        //   return;
-        // }
-      // }
-
       try {
-        debugger
-        // 根据维修方式清除不需要的字段
-        if (formData.value.repairMethod === '1') {
-          // 正常维修时清除复位方式
-          formData.value.resetMethod = undefined;
-          formData.value.workArea = Array.isArray(formData.value.workArea) ? formData.value.workArea.join(',')
-                                : formData.value.workArea || ''
-        } else if (formData.value.repairMethod === '2') {
-          // 复位启机时清除MIS相关字段
-          formData.value.misOrderNo = undefined;
-          formData.value.realStartTime = undefined;
-          formData.value.realEndTime = undefined;
-          formData.value.workGroupMemberName = undefined;
-          formData.value.infoEntry = undefined;
-          formData.value.wwryNum = undefined;
-          formData.value.wlryNum = undefined;
-          formData.value.workArea = undefined;
-          formData.value.repairOrderPersonList = [];
+        formData.value.repairMethod = '1';
+        // 2. 构建提交用的临时数据(不修改原formData)
+        const submitData = { ...formData.value }
+
+        // 3. 仅对提交数据转换workArea格式(数组转逗号分隔字符串)
+          submitData.resetMethod = undefined;
+          // 数组转字符串:适配后端String类型
+          submitData.workArea = Array.isArray(submitData.workArea)
+              ? submitData.workArea.join(',')
+              : submitData.workArea || '';
+
+        // 4. 处理挂起结束时间逻辑
+        flowList.value = []
+        if (submitData.resumeTime && submitData.resumeTime != resumeInfo.value?.actionTime) {
+          resumeInfo.value.actionTime = submitData.resumeTime
+          flowList.value.push(resumeInfo.value)
         }
+        submitData.repairOrderFlowList = flowList.value
+        submitData.finalizeMethod = '2'
 
-        // 调用父组件传入的提交函数
+        // 5. 调用父组件提交函数(传入转换后的临时数据)
         if (props.onSubmit && typeof props.onSubmit === 'function') {
-
-          flowList.value = []
-          if (formData.value.resumeTime && formData.value.resumeTime != resumeInfo.value.actionTime) { //存入新的挂起结束时间
-            resumeInfo.value.actionTime = formData.value.resumeTime
-            flowList.value.push(resumeInfo.value)
-          }
-          formData.value.repairOrderFlowList = flowList.value
-          formData.value.finalizeMethod = '2'
-          await props.onSubmit(formData.value)
+          await props.onSubmit(submitData) // 提交转换后的数据
         } else {
           throw new Error("未提供提交方法")
         }
 
+        // 提交成功逻辑
         proxy.$modal.msgSuccess("结单成功")
         visible.value = false
         emit('success')
       } catch (error) {
-        // proxy.$modal.msgError("操作失败: " + (error.message || "未知错误"))
+        // 6. 后端抛出异常时,恢复原始表单数据(保留workArea数组)
+        // console.error('结单提交失败:', error)
+        formData.value = submitBackup // 恢复原始数组格式的workArea
+        // 重置表单验证状态
+        proxy.$nextTick(() => {
+          finalizeFormRef.value.clearValidate()
+        })
       }
     }
   })
 }
-
 // 工作负责人快速检索方法
 /** 过滤快速检索用户列表 */
 const filterQuickUserList = (keyword) => {

+ 8 - 1
ygtx-ui/src/views/gxt/gxtOrder/index.vue

@@ -2332,7 +2332,14 @@ function handleFinish(row) {
           }).then(() => {
           }).catch(() => {})
         } else if (misInfo.length > 1) {
-          infoEntryDisabled.value = false
+          ElMessageBox.confirm('已匹配到多个MIS工单,请手动结单,信息录入选择关联MIS。', '提示', {
+            confirmButtonText: '确定',
+            showCancelButton: false,
+            type: 'warning'
+          }).then(function() {
+            infoEntryDisabled.value = false
+          }).then(() => {
+          }).catch(() => {})
         }
       })
     } else {

+ 11 - 3
ygtx-ui/src/views/gxt/monthScore/index.vue

@@ -193,11 +193,19 @@
               <span :style="{ color: scope.row.userId === monthScore.userId ? 'red' : '' }">{{ scope.row.nickName }}</span>
             </template>
           </el-table-column>
-          <el-table-column prop="maintenanceTotalScore" label="维保工分"></el-table-column>
-          <el-table-column prop="repairTotalScore" label="维修工分"></el-table-column>
+          <el-table-column prop="maintenanceTotalScore" label="维保工分">
+            <template #default="scope">
+              {{ parseFloat(scope.row.maintenanceTotalScore).toFixed(2) }}
+            </template>
+          </el-table-column>
+          <el-table-column prop="repairTotalScore" label="维修工分">
+            <template #default="scope">
+              {{ parseFloat(scope.row.repairTotalScore).toFixed(2) }}
+            </template>
+          </el-table-column>
           <el-table-column prop="finalScore" label="总工分">
             <template #default="scope">
-              <span :style="{ color: getScoreColor(scope.row.finalScore) }">{{ scope.row.finalScore }}</span>
+              <span :style="{ color: getScoreColor(scope.row.finalScore) }">{{ parseFloat(scope.row.finalScore).toFixed(2) }}</span>
             </template>
           </el-table-column>
         </el-table>

+ 11 - 3
ygtx-ui/src/views/gxt/monthScore/info.vue

@@ -129,11 +129,19 @@
               <span :style="{ color: scope.row.userId === monthScore.userId ? 'red' : '' }">{{ scope.row.nickName }}</span>
             </template>
           </el-table-column>
-          <el-table-column prop="maintenanceTotalScore" label="维保工分"></el-table-column>
-          <el-table-column prop="repairTotalScore" label="维修工分"></el-table-column>
+          <el-table-column prop="maintenanceTotalScore" label="维保工分">
+            <template #default="scope">
+              {{ parseFloat(scope.row.maintenanceTotalScore).toFixed(2) }}
+            </template>
+          </el-table-column>
+          <el-table-column prop="repairTotalScore" label="维修工分">
+            <template #default="scope">
+              {{ parseFloat(scope.row.repairTotalScore).toFixed(2) }}
+            </template>
+          </el-table-column>
           <el-table-column prop="finalScore" label="总工分">
             <template #default="scope">
-              <span :style="{ color: getScoreColor(scope.row.finalScore) }">{{ scope.row.finalScore }}</span>
+              <span :style="{ color: getScoreColor(scope.row.finalScore) }">{{ parseFloat(scope.row.finalScore).toFixed(2) }}</span>
             </template>
           </el-table-column>
         </el-table>

+ 11 - 3
ygtx-ui/src/views/gxt/repairOrder/index.vue

@@ -3441,7 +3441,7 @@ function handleFinalize(row, method) {
   finalizeFormData.value = row
   finalizeFormData.value.orderId = row.id
   finalizeFormData.value.infoEntry = '1'
-  finalizeFormData.value.repairMethod = method;
+  // finalizeFormData.value.repairMethod = method;
   debugger
   if (row.occurTime && row.restartTime) {
     listAutoMisInfo({
@@ -3509,7 +3509,7 @@ function handleFinalize(row, method) {
                 }
               })
             } else {
-              ElMessageBox.confirm('未找到匹配的MIS工单,请确认风机停复机时间是否已录入工效通系统或请进入工作票录入方式。', '提示', {
+              ElMessageBox.confirm('该MIS工单已被其他工单关联,请检查是否重复操作。', '提示', {
                 confirmButtonText: '确定',
                 showCancelButton: false,
                 type: 'warning'
@@ -3543,7 +3543,15 @@ function handleFinalize(row, method) {
         }).then(() => {
         }).catch(() => {})
       } else if (misInfo.length > 1) {
-        infoEntryDisabled.value = false
+        ElMessageBox.confirm('已匹配到多个MIS工单,请手动结单,信息录入选择关联MIS。', '提示', {
+          confirmButtonText: '确定',
+          showCancelButton: false,
+          type: 'warning'
+        }).then(function() {
+          // finalizeFormData.value.infoEntry = '2'
+          infoEntryDisabled.value = false
+        }).then(() => {
+        }).catch(() => {})
       }
     })
   } else {

+ 4 - 8
ygtx-ui/src/views/index5.vue

@@ -279,7 +279,7 @@
                   </template>
                 </el-table-column>
                 <el-table-column prop="station" label="场站" align="center"></el-table-column>
-                <el-table-column prop="finalScore" label="工分" width="80" align="center"></el-table-column>
+                <el-table-column prop="finalScore" label="工分" width="80" align="center" :formatter="formatScore"></el-table-column>
               </el-table>
             </div>
           </el-card>
@@ -430,17 +430,13 @@ export default {
       this.applyFilter();
     },
     formatScore(row, column, cellValue) {
-      if (cellValue == null || cellValue === '') return '--'; // 处理空值
+      if (cellValue == null || cellValue === '') return '0.00'; // 处理空值
       return parseFloat(cellValue).toFixed(2); // 保留两位小数
     },
     // 格式化工时和工分显示,0显示为0,小数位超过两位时四舍五入
     formatWorkValue(value) {
-      if (value == null || value === '') return '--'; // 处理空值
-      const num = parseFloat(value);
-      // 四舍五入保留两位小数
-      const rounded = num.toFixed(2);
-      // 去掉不必要的末尾0
-      return parseFloat(rounded).toString();
+      if (value == null || value === '') return '0.00'; // 处理空值
+      return parseFloat(value).toFixed(2);
     },
     // 加载首页统计数据
     loadHomePageData() {

+ 4 - 8
ygtx-ui/src/views/index6.vue

@@ -279,7 +279,7 @@
                   </template>
                 </el-table-column>
                 <el-table-column prop="station" label="场站" align="center"></el-table-column>
-                <el-table-column prop="finalScore" label="工分" width="80" align="center"></el-table-column>
+                <el-table-column prop="finalScore" label="工分" width="80" align="center" :formatter="formatScore"></el-table-column>
               </el-table>
             </div>
           </el-card>
@@ -429,17 +429,13 @@ export default {
       this.applyFilter();
     },
     formatScore(row, column, cellValue) {
-      if (cellValue == null || cellValue === '') return '--'; // 处理空值
+      if (cellValue == null || cellValue === '') return '0.00'; // 处理空值
       return parseFloat(cellValue).toFixed(2); // 保留两位小数
     },
     // 格式化工时和工分显示,0显示为0,小数位超过两位时四舍五入
     formatWorkValue(value) {
-      if (value == null || value === '') return '--'; // 处理空值
-      const num = parseFloat(value);
-      // 四舍五入保留两位小数
-      const rounded = num.toFixed(2);
-      // 去掉不必要的末尾0
-      return parseFloat(rounded).toString();
+      if (value == null || value === '') return '0.00'; // 处理空值
+      return parseFloat(value).toFixed(2);
     },
     // 加载首页统计数据
     loadHomePageData() {