From f15c2ea99e9ede2a6e7ee3a206ba08d3172aa36d Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期六, 16 五月 2026 10:46:55 +0800
Subject: [PATCH] feat(equipment): 添加设备维保和巡检任务的启用状态功能

---
 src/views/equipmentManagement/inspectionManagement/index.vue |   66 ++++++++++++++++++++++++++++++++-
 1 files changed, 64 insertions(+), 2 deletions(-)

diff --git a/src/views/equipmentManagement/inspectionManagement/index.vue b/src/views/equipmentManagement/inspectionManagement/index.vue
index cd7369d..b0f4f58 100644
--- a/src/views/equipmentManagement/inspectionManagement/index.vue
+++ b/src/views/equipmentManagement/inspectionManagement/index.vue
@@ -23,6 +23,17 @@
           style="width: 220px"
         />
       </el-form-item>
+      <el-form-item v-show="activeRadio === 'taskManage'" label="鏄惁鍚敤">
+        <el-select
+          v-model="queryParams.isEnabled"
+          placeholder="璇烽�夋嫨"
+          clearable
+          style="width: 140px"
+        >
+          <el-option label="鍚敤" :value="1" />
+          <el-option label="绂佺敤" :value="0" />
+        </el-select>
+      </el-form-item>
       <el-form-item v-show="activeRadio === 'task'" label="鎵ц鏃ユ湡">
         <el-date-picker
           v-model="queryDate"
@@ -90,6 +101,15 @@
             <span v-else class="no-data">--</span>
           </div>
         </template>
+        <template #isEnabledSwitch="{ row }">
+          <el-switch
+            v-model="row.isEnabled"
+            :active-value="1"
+            :inactive-value="0"
+            :loading="row.enableSwitchLoading"
+            :before-change="() => handleTimingTaskEnableBeforeChange(row)"
+          />
+        </template>
       </PIMTable>
     </el-card>
     <form-dia ref="formDia" @closeDia="handleQuery" />
@@ -99,13 +119,14 @@
 
 <script setup>
 import { Delete, Plus } from "@element-plus/icons-vue";
-import { ElMessageBox } from "element-plus";
+import { ElMessage, ElMessageBox } from "element-plus";
 import { getCurrentInstance, nextTick, onMounted, reactive, ref } from "vue";
 import dayjs from "dayjs";
 import PIMTable from "@/components/PIMTable/PIMTable.vue";
 import FormDia from "@/views/equipmentManagement/inspectionManagement/components/formDia.vue";
 import ViewFiles from "@/views/equipmentManagement/inspectionManagement/components/viewFiles.vue";
 import {
+  changeTimingTaskEnable,
   delTimingTask,
   inspectionTaskList,
   timingTaskList,
@@ -119,6 +140,7 @@
 const queryParams = reactive({
   taskName: "",
   areaId: undefined,
+  isEnabled: undefined,
   createTimeStart: undefined,
   createTimeEnd: undefined,
 });
@@ -190,6 +212,14 @@
   { prop: "registrant", label: "鐧昏浜�", minWidth: 100 },
   { prop: "createTime", label: "鐧昏鏃ユ湡", width: 130 },
 ]);
+
+const isEnabledColumn = {
+  prop: "isEnabled",
+  label: "鏄惁鍚敤",
+  minWidth: 110,
+  dataType: "slot",
+  slot: "isEnabledSwitch",
+};
 
 // 宸℃鐘舵�佸垪锛堜粎瀹氭椂浠诲姟璁板綍鏄剧ず锛�
 const inspectionStatusColumn = {
@@ -271,13 +301,14 @@
 const radioChange = (value) => {
   if (value === "taskManage") {
     const operationColumn = getOperationColumn(["edit"]);
-    tableColumns.value = [...columns.value, ...(operationColumn ? [operationColumn] : [])];
+    tableColumns.value = [...columns.value, isEnabledColumn, ...(operationColumn ? [operationColumn] : [])];
   } else {
     const operationColumn = getOperationColumn(["viewFile"]);
     // 瀹氭椂浠诲姟璁板綍娣诲姞宸℃鐘舵�佸垪
     tableColumns.value = [...columns.value, inspectionStatusColumn, inspectionResultColumn, ...(operationColumn ? [operationColumn] : [])];
     // 鍒囨崲鍒板畾鏃朵换鍔¤褰曟椂锛岄粯璁ゆ煡璇㈠綋澶�
     queryDate.value = dayjs().format("YYYY-MM-DD");
+    queryParams.isEnabled = undefined;
   }
   pageNum.value = 1;
   pageSize.value = 10;
@@ -319,6 +350,12 @@
       const rawData = res?.data?.records || [];
       tableData.value = rawData.map((item) => {
         const processedItem = { ...item };
+        if (activeRadio.value === "taskManage") {
+          processedItem.isEnabled = Number(
+            processedItem.isEnabled ?? processedItem.status ?? 1
+          );
+          processedItem.enableSwitchLoading = false;
+        }
         if (processedItem.inspector) {
           if (typeof processedItem.inspector === "string") {
             processedItem.inspector = processedItem.inspector
@@ -343,6 +380,7 @@
 const resetQuery = () => {
   queryParams.taskName = "";
   queryParams.areaId = undefined;
+  queryParams.isEnabled = undefined;
   queryParams.createTimeStart = undefined;
   queryParams.createTimeEnd = undefined;
   // 瀹氭椂浠诲姟璁板綍鏃堕噸缃负褰撳ぉ
@@ -383,6 +421,30 @@
   selectedRows.value = selection;
 };
 
+const handleTimingTaskEnableBeforeChange = async (row) => {
+  if (row.enableSwitchLoading) {
+    return false;
+  }
+  const nextValue = Number(row.isEnabled) === 1 ? 0 : 1;
+  row.enableSwitchLoading = true;
+  try {
+    const res = await changeTimingTaskEnable({
+      id: row.id,
+      isEnabled: nextValue,
+    });
+    if (res?.code !== 200) {
+      throw new Error(res?.msg || "鏇存柊澶辫触");
+    }
+    ElMessage.success("鍚敤鐘舵�佸凡鏇存柊");
+    return true;
+  } catch (error) {
+    proxy.$modal.msgError(error?.message || "鍚敤鐘舵�佹洿鏂板け璐�");
+    return false;
+  } finally {
+    row.enableSwitchLoading = false;
+  }
+};
+
 const handleOut = () => {
   ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
     confirmButtonText: "纭",

--
Gitblit v1.9.3