ouyj il y a 4 mois
Parent
commit
882a36c523

+ 25 - 7
ygtx-gxt/src/main/java/com/ygtx/gxt/service/impl/GxtOrderMineServiceImpl.java

@@ -132,8 +132,8 @@ public class GxtOrderMineServiceImpl implements IGxtOrderMineService {
         addBusinessDataScopeFilter(repairOrder, workOrder);
         
         // 根据用户权限和工单状态进行过滤数据
-        // repairOrder只能查询workOrderStatus为assigned、to_finish、to_approve状态的数据
-        // workOrder只能查询workOrderStatus为assigned、processing、to_finish、to_approve状态的数据
+        // repairOrder只能查询workOrderStatus为assigned、to_finish、to_approve、completed、to_issue、accept_return状态的数据
+        // workOrder只能查询workOrderStatus为assigned、processing、to_finish、to_approve、completed、to_issue状态的数据
         
         Long currentUserId = SecurityUtils.getUserId();
         
@@ -163,11 +163,23 @@ public class GxtOrderMineServiceImpl implements IGxtOrderMineService {
         }
         
         // completed状态且有复运权限
-        /*if (SecurityUtils.hasPermi("gxt:repairOrder:restart")) {
+        if (SecurityUtils.hasPermi("gxt:repairOrder:restart")) {
             if (hasConditions) repairFilterSql.append(" OR ");
             repairFilterSql.append("t.work_order_status = 'completed'");
             hasConditions = true;
-        }*/
+        }
+        
+        // to_issue、accept_return状态且有编辑权限,且当前用户是创建人本部门的人
+        if (SecurityUtils.hasPermi("gxt:repairOrder:edit")) {
+            if (hasConditions) repairFilterSql.append(" OR ");
+            //repairFilterSql.append("t.work_order_status IN ('to_issue', 'accept_return') ");
+            repairFilterSql.append("(t.work_order_status IN ('to_issue', 'accept_return') AND EXISTS (SELECT 1 FROM sys_user u, sys_dept d WHERE u.del_flag='0' and u.user_name = t.create_by AND u.dept_id = d.dept_id AND (d.dept_id = ")
+                    .append(SecurityUtils.getDeptId())
+                    .append(" OR FIND_IN_SET(")
+                    .append(SecurityUtils.getDeptId())
+                    .append(", d.ancestors))))");
+            hasConditions = true;
+        }
         
         // 如果没有任何权限,则不返回任何数据
         if (!hasConditions) {
@@ -205,12 +217,18 @@ public class GxtOrderMineServiceImpl implements IGxtOrderMineService {
         }
         
         // completed状态且有复运权限
-        /*if (SecurityUtils.hasPermi("gxt:maintenance:order:restart")) {
+        if (SecurityUtils.hasPermi("gxt:maintenance:order:restart")) {
             if (hasConditions) workFilterSql.append(" OR ");
             workFilterSql.append("t.work_order_status = 'completed'");
             hasConditions = true;
-        }*/
-        
+        }
+
+        // to_issue状态且有编辑权限
+        if (SecurityUtils.hasPermi("gxt:maintenance:order:edit")) {
+            if (hasConditions) workFilterSql.append(" OR ");
+            workFilterSql.append("t.work_order_status = 'to_issue' ");
+            hasConditions = true;
+        }
         // 如果没有任何权限,则不返回任何数据
         if (!hasConditions) {
             workFilterSql = new StringBuilder();

+ 1 - 1
ygtx-gxt/src/main/resources/mapper/gxt/GxtRepairOrderMapper.xml

@@ -170,7 +170,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                 ${params.businessDataScope}
             </if>
             <!-- 限制待下发工单只能创建人本部门查看 -->
-            and (t.work_order_status != 'to_issue' or t.create_by in
+            and ((t.work_order_status != 'to_issue' and t.work_order_status != 'accept_return') or t.create_by in
                 (select user_name from sys_user t1
                  left join sys_dept t2 on t1.dept_id = t2.dept_id
                  where t2.dept_id = (select dept_id from sys_user where user_name = #{createBy,jdbcType=VARCHAR} and del_flag='0')))

+ 18 - 0
ygtx-ui/src/api/gxt/orderMine.js

@@ -96,4 +96,22 @@ export function approveWorkOrder(data) {
     method: 'post',
     data: data
   })
+}
+
+// 维修工单复运 - 使用现有的维修工单接口
+export function restartRepairOrder(data) {
+  return request({
+    url: '/gxt/repairOrder/restart',
+    method: 'put',
+    data: data
+  })
+}
+
+// 维保工单复运 - 使用现有的维保工单接口
+export function restartWorkOrder(data) {
+  return request({
+    url: '/gxt/order/complete/' + data.id,
+    method: 'post',
+    data: data
+  })
 }

+ 291 - 21
ygtx-ui/src/views/gxt/orderMyTodo/index.vue

@@ -148,6 +148,15 @@
         <template #default="scope">
           <!-- 维修工单操作按钮 -->
           <template v-if="scope.row.orderType === 1">
+
+            <el-button
+                v-if="scope.row.workOrderStatus === 'to_issue' || scope.row.workOrderStatus === 'accept_return'"
+                type="primary"
+                link
+                @click="handleUpdate(scope.row)"
+                v-hasPermi="['gxt:repairOrder:edit']"
+            ><i class="fa fa-user-plus"></i>下发</el-button>
+
             <el-button
                 v-if="scope.row.workOrderStatus === 'assigned'"
                 type="primary"
@@ -171,10 +180,26 @@
                 @click="handleApprove(scope.row)"
                 v-hasPermi="['gxt:repairOrder:approve']"
             ><i class="fa fa-check-circle"></i>审批</el-button>
+
+            <el-button
+                v-if="scope.row.workOrderStatus === 'completed'"
+                type="success"
+                link
+                @click="handleRestart(scope.row)"
+                v-hasPermi="['gxt:repairOrder:restart']"
+            ><i class="fa fa-refresh"></i>复运</el-button>
           </template>
           
           <!-- 维保工单操作按钮 -->
           <template v-else>
+            <el-button
+                v-if="scope.row.workOrderStatus === 'to_issue'"
+                type="primary"
+                link
+                @click="handleUpdate(scope.row)"
+                v-hasPermi="['gxt:maintenance:order:edit']"
+            ><i class="fa fa-user-plus"></i>下发</el-button>
+
             <el-button
                 v-if="scope.row.workOrderStatus === 'assigned'"
                 type="primary"
@@ -198,6 +223,14 @@
                 @click="handleApprove(scope.row)"
                 v-hasPermi="['gxt:maintenance:order:approve']"
             ><i class="fa fa-check-circle"></i>审批</el-button>
+
+            <el-button
+                link type="success"
+                @click="handleRestart(scope.row)"
+                v-if="scope.row.workOrderStatus === 'completed'"
+                v-hasPermi="['gxt:maintenance:order:restart']">
+              <i class="fa fa-refresh"></i>复运
+            </el-button>
           </template>
           
           <el-button
@@ -1158,6 +1191,166 @@
         </div>
       </template>
     </el-dialog>
+
+    <!-- 复运对话框 (维修工单) -->
+    <el-dialog title="复运" v-model="restartRepairDialogVisible" width="800px" append-to-body>
+      <el-form ref="restartRepairFormRef" :model="restartRepairForm" :rules="restartRepairRules" label-width="120px" label-position="top">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="工单编码"><el-input v-model="restartRepairForm.workOrderProjectNo" disabled /></el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="风机编号"><el-input v-model="restartRepairForm.pcsDeviceName" disabled /></el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="工单状态">
+              <el-select v-model="restartRepairForm.workOrderStatus" style="width: 100%" disabled>
+                <el-option
+                    v-for="dict in gxt_work_order_status"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="维保中心"><el-input v-model="restartRepairForm.gxtCenter" disabled /> </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="场站"><el-input v-model="restartRepairForm.pcsStationName" disabled /> </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="品牌"><el-input v-model="restartRepairForm.brand" disabled /> </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="故障代码"><el-input v-model="restartRepairForm.faultCode" disabled /> </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="故障信息">
+              <el-input
+                  v-model="restartRepairForm.faultBarcode"
+                  type="textarea"
+                  placeholder="请输入故障信息"
+                  maxlength="100"
+                  show-word-limit
+                  :rows="3"
+                  disabled
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="下发人"><el-input v-model="restartRepairForm.assignUserName" disabled /> </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="下发时间"><el-input v-model="restartRepairForm.assignTime" disabled /> </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="接单人"><el-input v-model="restartRepairForm.acceptUserName" disabled /> </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="接单时间"><el-input v-model="restartRepairForm.acceptTime" disabled /> </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="工作负责人"><el-input v-model="restartRepairForm.teamLeaderName" disabled /> </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="结束时间"><el-input v-model="restartRepairForm.realEndTime" disabled /> </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="恢复运行时间" prop="restartTime">
+              <el-date-picker
+                  v-model="restartRepairForm.restartTime"
+                  type="datetime"
+                  format="YYYY-MM-DD HH:mm"
+                  value-format="YYYY-MM-DD HH:mm"
+                  placeholder="请选择恢复运行时间"
+                  style="width: 100%"
+                  :disabled-date="disabledDate"
+                  :disabled-time="disabledTime"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button @click="restartRepairDialogVisible = false">取 消</el-button>
+          <el-button type="primary" @click="submitRestartRepair">确认复运</el-button>
+        </div>
+      </template>
+    </el-dialog>
+
+    <!-- 复运对话框 (维保工单) -->
+    <el-dialog title="复运" v-model="restartWorkDialogVisible" width="800px" append-to-body>
+      <el-form ref="restartWorkFormRef" :model="restartWorkForm" :rules="restartWorkRules" label-width="120px" label-position="top">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="工单编码"><el-input v-model="restartWorkForm.workOrderProjectNo" disabled /></el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="风机编号"><el-input v-model="restartWorkForm.pcsDeviceName" disabled /></el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="工单状态">
+              <el-select v-model="restartWorkForm.workOrderStatus" style="width: 100%" disabled>
+                <el-option
+                    v-for="dict in gxt_work_order_status"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="维保中心"><el-input v-model="restartWorkForm.gxtCenter" disabled /> </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="场站"><el-input v-model="restartWorkForm.pcsStationName" disabled /> </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="品牌"><el-input v-model="restartWorkForm.brand" disabled /> </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="机型"><el-input v-model="restartWorkForm.model" disabled /> </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="MIS工单编码"><el-input v-model="restartWorkForm.misNo" disabled /></el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="接单人"><el-input v-model="restartWorkForm.acceptUserName" disabled /> </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="接单时间"><el-input v-model="restartWorkForm.acceptTime" disabled /> </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="结束时间"><el-input v-model="restartWorkForm.realEndTime" disabled /> </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="恢复运行时间" prop="restartTime">
+              <el-date-picker
+                  v-model="restartWorkForm.restartTime"
+                  type="datetime"
+                  format="YYYY-MM-DD HH:mm"
+                  value-format="YYYY-MM-DD HH:mm"
+                  placeholder="请选择恢复运行时间"
+                  style="width: 100%"
+                  :disabled-date="disabledDate"
+                  :disabled-time="disabledTime"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button @click="restartWorkDialogVisible = false">取 消</el-button>
+          <el-button type="primary" @click="submitRestartWork">确认复运</el-button>
+        </div>
+      </template>
+    </el-dialog>
+
   </div>
 </template>
 
@@ -1172,7 +1365,9 @@ import {
   finalizeRepairOrder,
   finalizeWorkOrder,
   approveRepairOrder,
-  approveWorkOrder
+  approveWorkOrder,
+  restartRepairOrder,
+  restartWorkOrder,
 } from "@/api/gxt/orderMine.js";
 import { listUserNoPermi } from "@/api/system/user.js";
 import { listMaintenanceCenters, listStationsByMaintenanceCenter } from "@/api/gxt/equipment.js";
@@ -1217,6 +1412,11 @@ const finalizeWorkDialogVisible = ref(false);
 const approveRepairDialogVisible = ref(false);
 const approveWorkDialogVisible = ref(false);
 
+// 复运对话框可见性
+const restartRepairDialogVisible = ref(false);
+const restartWorkDialogVisible = ref(false);
+
+
 // 维保中心选项
 const maintenanceCenterOptions = ref([]);
 
@@ -1247,6 +1447,11 @@ const getMisDataConfig = ref("0"); // 默认值为"0",表示可以手动输入
 const approveRepairForm = ref({});
 const approveWorkForm = ref({});
 
+// 复运表单数据
+const restartRepairForm = ref({});
+const restartWorkForm = ref({});
+
+
 // 工作负责人快速检索相关响应式数据
 const showTeamLeaderQuickSelect = ref(false);
 const quickTeamLeaderList = ref([]);
@@ -1342,6 +1547,45 @@ const approveWorkRules = ref({
   ]
 });
 
+// 复运表单验证规则
+const restartRepairRules = ref({
+  restartTime: [
+    { required: true, message: "请选择恢复运行时间", trigger: "change" },
+    {
+      validator: (rule, value, callback) => {
+        debugger
+        if (value && new Date(value) > new Date()) {
+          callback(new Error('恢复运行时间不能大于当前时间'));
+        } else if(value && new Date(value) < new Date(restartRepairForm.value.realEndTime)) {
+          callback(new Error('恢复运行时间不能小于结束时间'));
+        } else {
+          callback();
+        }
+      },
+      trigger: 'change'
+    }
+  ]
+});
+
+const restartWorkRules = ref({
+  restartTime: [
+    { required: true, message: "请选择恢复运行时间", trigger: "change" },
+    {
+      validator: (rule, value, callback) => {
+        debugger
+        if (value && new Date(value) > new Date()) {
+          callback(new Error('恢复运行时间不能大于当前时间'));
+        } else if(value && new Date(value) < new Date(restartWorkForm.value.realEndTime)) {
+          callback(new Error('恢复运行时间不能小于结束时间'));
+        } else {
+          callback();
+        }
+      },
+      trigger: 'change'
+    }
+  ]
+});
+
 // 页面加载时执行
 onMounted(() => {
   getList();
@@ -1572,19 +1816,6 @@ function submitFinalizeRepair() {
           return;
         }
       }
-      
-      // 根据维修方式清除不需要的字段
-      /*const data = {
-        id: finalizeRepairForm.value.id,
-        repairMethod: finalizeRepairForm.value.repairMethod,
-        misOrderNo: finalizeRepairForm.value.misOrderNo,
-        realStartTime: finalizeRepairForm.value.realStartTime,
-        realEndTime: finalizeRepairForm.value.realEndTime,
-        resetMethod: finalizeRepairForm.value.resetMethod,
-        finalizationRemark: finalizeRepairForm.value.finalizationRemark,
-        attachmentUrls: finalizeRepairForm.value.attachmentUrls,
-        workOrderStatus: "completed" // 结单后工单状态变为已完成
-      };*/
 
       const data = finalizeRepairForm.value;
       // 根据维修方式清除不需要的字段
@@ -1679,13 +1910,6 @@ function submitApproveWork(approvalStatusValue) {
   approveWorkForm.value.workOrderStatus = approvalStatusValue
   proxy.$refs["approveWorkFormRef"].validate(valid => {
     if (valid) {
-      /*const data = {
-        id: approveWorkForm.value.id,
-        approvalStatus: approvalStatusValue,
-        rejectionReason: approveWorkForm.value.rejectionReason,
-        workOrderStatus: approvalStatusValue === "approved" ? "suspended" : "processing"
-      };*/
-      
       approveWorkOrder(approveWorkForm.value).then(response => {
         const msg = approveWorkForm.value.workOrderStatus === 'suspended' ? '挂起审批通过' : '挂起审批驳回'
         proxy.$modal.msgSuccess(msg + "成功")
@@ -1958,6 +2182,52 @@ function handleRepairMethodChange(value) {
     finalizeRepairForm.value.realEndTime = undefined;
   }
 }
+
+// 处理复运
+function handleRestart(row) {
+  getOrderInfo(row.orderType, row.id).then(response => {
+    if (row.orderType === 1) {
+      // 维修工单
+      restartRepairForm.value = response.data;
+      restartRepairDialogVisible.value = true;
+    } else {
+      // 维保工单
+      restartWorkForm.value = response.data;
+      restartWorkDialogVisible.value = true;
+    }
+  });
+}
+
+// 提交维修工单复运
+function submitRestartRepair() {
+  proxy.$refs["restartRepairFormRef"].validate(valid => {
+    if (valid) {
+      restartRepairOrder(restartRepairForm.value).then(response => {
+        proxy.$modal.msgSuccess("复运成功");
+        restartRepairDialogVisible.value = false;
+        getList();
+      }).catch(error => {
+        proxy.$modal.msgError("复运失败: " + error.message);
+      });
+    }
+  });
+}
+
+// 提交维保工单复运
+function submitRestartWork() {
+  proxy.$refs["restartWorkFormRef"].validate(valid => {
+    if (valid) {
+      restartWorkForm.value.workOrderStatus = 'restarted'
+      restartWorkOrder(restartWorkForm.value).then(response => {
+        restartWorkDialogVisible.value = false
+        proxy.$modal.msgSuccess("复运成功")
+        getList()
+      }).catch(error => {
+        proxy.$modal.msgError("复运失败:" + (error?.response?.data?.msg || "未知错误"))
+      })
+    }
+  })
+}
 </script>
 
 <style scoped>