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/upkeep/index.vue | 65 +++++++++++++--
src/api/inspectionManagement/index.js | 11 ++
src/views/equipmentManagement/inspectionManagement/components/formDia.vue | 13 +++
src/api/equipmentManagement/upkeep.js | 9 ++
src/views/equipmentManagement/upkeep/Form/formDia.vue | 22 +++-
src/views/equipmentManagement/inspectionManagement/index.vue | 66 ++++++++++++++++
6 files changed, 165 insertions(+), 21 deletions(-)
diff --git a/src/api/equipmentManagement/upkeep.js b/src/api/equipmentManagement/upkeep.js
index 234d2a5..5774654 100644
--- a/src/api/equipmentManagement/upkeep.js
+++ b/src/api/equipmentManagement/upkeep.js
@@ -102,3 +102,12 @@
data: params,
});
};
+
+// 璁惧淇濆吇瀹氭椂浠诲姟鍚敤鐘舵�佸垏鎹�
+export const deviceMaintenanceTaskChangeEnable = (params) => {
+ return request({
+ url: '/deviceMaintenanceTask/changeEnable',
+ method: "post",
+ data: params,
+ });
+};
diff --git a/src/api/inspectionManagement/index.js b/src/api/inspectionManagement/index.js
index d0c444a..0a76c42 100644
--- a/src/api/inspectionManagement/index.js
+++ b/src/api/inspectionManagement/index.js
@@ -58,4 +58,13 @@
method: 'post',
data: query
})
-}
\ No newline at end of file
+}
+
+// 瀹氭椂宸℃浠诲姟鍚敤鐘舵�佸垏鎹�
+export function changeTimingTaskEnable(query) {
+ return request({
+ url: '/timingTask/changeEnable',
+ method: 'post',
+ data: query
+ })
+}
diff --git a/src/views/equipmentManagement/inspectionManagement/components/formDia.vue b/src/views/equipmentManagement/inspectionManagement/components/formDia.vue
index f4db821..c535a90 100644
--- a/src/views/equipmentManagement/inspectionManagement/components/formDia.vue
+++ b/src/views/equipmentManagement/inspectionManagement/components/formDia.vue
@@ -77,6 +77,15 @@
<el-input v-model="form.remarks" placeholder="璇疯緭鍏ュ娉�" type="textarea" />
</el-form-item>
</el-col>
+ <el-col :span="12">
+ <el-form-item label="鏄惁鍚敤" prop="isEnabled">
+ <el-switch
+ v-model="form.isEnabled"
+ :active-value="1"
+ :inactive-value="0"
+ />
+ </el-form-item>
+ </el-col>
</el-row>
<el-row>
<el-col :span="12">
@@ -191,6 +200,7 @@
inspector: [],
inspectorIds: "",
remarks: "",
+ isEnabled: 1,
frequencyType: "",
frequencyDetail: "",
week: "",
@@ -365,6 +375,7 @@
inspector: [],
inspectorIds: "",
remarks: "",
+ isEnabled: 1,
frequencyType: "",
frequencyDetail: "",
week: "",
@@ -387,6 +398,7 @@
form.value = {
...form.value,
...row,
+ isEnabled: Number(row.isEnabled ?? row.status ?? 1),
inspector: row.inspectorIds
? String(row.inspectorIds)
.split(",")
@@ -447,6 +459,7 @@
payload.deviceLedgerIdsStr = form.value.deviceLedgerIds.join(",");
payload.taskName = form.value.taskName;
payload.deviceModel = form.value.deviceModel || "-";
+ payload.isEnabled = Number(form.value.isEnabled ?? 1);
await addOrEditTimingTask(payload);
cancel();
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: "纭",
diff --git a/src/views/equipmentManagement/upkeep/Form/formDia.vue b/src/views/equipmentManagement/upkeep/Form/formDia.vue
index 01a2d6e..1460686 100644
--- a/src/views/equipmentManagement/upkeep/Form/formDia.vue
+++ b/src/views/equipmentManagement/upkeep/Form/formDia.vue
@@ -173,6 +173,17 @@
</el-row>
<el-row>
<el-col :span="12">
+ <el-form-item label="鏄惁鍚敤" prop="isEnabled">
+ <el-switch
+ v-model="form.isEnabled"
+ :active-value="1"
+ :inactive-value="0"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="12">
<el-form-item label="澶囨敞" prop="remarks">
<el-input v-model="form.remarks" placeholder="璇疯緭鍏ュ娉�" type="textarea" />
</el-form-item>
@@ -219,6 +230,7 @@
deviceLedgerIds: [],
deviceLedgerIdsStr: undefined,
taskName: undefined,
+ isEnabled: 1,
inspector: undefined,
remarks: "",
frequencyType: "",
@@ -368,6 +380,7 @@
deviceLedgerIds: [],
deviceLedgerIdsStr: undefined,
taskName: undefined,
+ isEnabled: 1,
inspector: undefined,
remarks: "",
frequencyType: "",
@@ -394,6 +407,7 @@
form.value = {
...form.value,
...row,
+ isEnabled: Number(row.isEnabled ?? row.status ?? 1),
inspector: row.registrantId || row.inspector,
};
form.value.deviceLedgerIds = normalizeIdList(
@@ -451,13 +465,7 @@
payload.frequencyDetail = `${payload.week},${payload.time}`;
}
- if (
- payload.status === undefined ||
- payload.status === null ||
- payload.status === ""
- ) {
- payload.status = "0";
- }
+ payload.isEnabled = Number(form.value.isEnabled ?? 1);
payload.deviceLedgerIds = [...form.value.deviceLedgerIds];
payload.deviceLedgerIdsStr = form.value.deviceLedgerIds.join(",");
diff --git a/src/views/equipmentManagement/upkeep/index.vue b/src/views/equipmentManagement/upkeep/index.vue
index 765a5c9..419e9aa 100644
--- a/src/views/equipmentManagement/upkeep/index.vue
+++ b/src/views/equipmentManagement/upkeep/index.vue
@@ -15,10 +15,10 @@
@change="getScheduledTableData"
/>
</el-form-item>
- <el-form-item label="浠诲姟鐘舵��">
- <el-select v-model="scheduledFilters.status" placeholder="璇烽�夋嫨浠诲姟鐘舵��" clearable style="width: 200px">
- <el-option label="鍚敤" value="1" />
- <el-option label="鍋滅敤" value="0" />
+ <el-form-item label="鏄惁鍚敤">
+ <el-select v-model="scheduledFilters.isEnabled" placeholder="璇烽�夋嫨鏄惁鍚敤" clearable style="width: 200px">
+ <el-option label="鍚敤" :value="1" />
+ <el-option label="绂佺敤" :value="0" />
</el-select>
</el-form-item>
<el-form-item>
@@ -57,9 +57,14 @@
@selection-change="handleScheduledSelectionChange"
@pagination="changeScheduledPage"
>
- <template #statusRef="{ row }">
- <el-tag v-if="row.status === 1" type="success">鍚敤</el-tag>
- <el-tag v-if="row.status === 0" type="danger">鍋滅敤</el-tag>
+ <template #isEnabledRef="{ row }">
+ <el-switch
+ v-model="row.isEnabled"
+ :active-value="1"
+ :inactive-value="0"
+ :loading="row.enableSwitchLoading"
+ :before-change="() => handleScheduledEnableBeforeChange(row)"
+ />
</template>
<template #operation="{ row }">
<el-button
@@ -243,6 +248,7 @@
delUpkeep,
deviceMaintenanceTaskList,
deviceMaintenanceTaskDel,
+ deviceMaintenanceTaskChangeEnable,
} from '@/api/equipmentManagement/upkeep'
import {
listMaintenanceTaskFiles,
@@ -286,7 +292,7 @@
// 瀹氭椂浠诲姟绠$悊tab鐩稿叧鍙橀噺
const scheduledFilters = reactive({
taskName: '',
- status: '',
+ isEnabled: undefined,
})
const scheduledDataList = ref([])
@@ -344,6 +350,14 @@
},
{ prop: "registrant", label: "鐧昏浜�", minWidth: 100 },
{ prop: "registrationDate", label: "鐧昏鏃ユ湡", minWidth: 100 },
+ {
+ label: "鏄惁鍚敤",
+ prop: "isEnabled",
+ dataType: "slot",
+ slot: "isEnabledRef",
+ align: "center",
+ width: "120px",
+ },
{
fixed: "right",
label: "鎿嶄綔",
@@ -440,11 +454,16 @@
current: scheduledPagination.currentPage,
size: scheduledPagination.pageSize,
taskName: scheduledFilters.taskName || undefined,
- status: scheduledFilters.status || undefined,
+ isEnabled: scheduledFilters.isEnabled,
}
const { code, data } = await deviceMaintenanceTaskList(params)
if (code === 200) {
- scheduledDataList.value = data?.records || []
+ const records = data?.records || []
+ scheduledDataList.value = records.map((item) => ({
+ ...item,
+ isEnabled: Number(item.isEnabled ?? item.status ?? 1),
+ enableSwitchLoading: false,
+ }))
scheduledPagination.total = data?.total || 0
}
} catch (error) {
@@ -454,7 +473,7 @@
const resetScheduledFilters = () => {
scheduledFilters.taskName = ''
- scheduledFilters.status = ''
+ scheduledFilters.isEnabled = undefined
getScheduledTableData()
}
@@ -496,6 +515,30 @@
}
}
+const handleScheduledEnableBeforeChange = async (row) => {
+ if (row.enableSwitchLoading) {
+ return false
+ }
+ const nextValue = Number(row.isEnabled) === 1 ? 0 : 1
+ row.enableSwitchLoading = true
+ try {
+ const res = await deviceMaintenanceTaskChangeEnable({
+ id: row.id,
+ isEnabled: nextValue,
+ })
+ if (res?.code !== 200) {
+ throw new Error(res?.msg || '鏇存柊澶辫触')
+ }
+ ElMessage.success('鍚敤鐘舵�佸凡鏇存柊')
+ return true
+ } catch (error) {
+ ElMessage.error(error?.message || '鍚敤鐘舵�佹洿鏂板け璐�')
+ return false
+ } finally {
+ row.enableSwitchLoading = false
+ }
+}
+
const handleScheduledOut = () => {
ElMessage.info('瀵煎嚭瀹氭椂浠诲姟鍔熻兘寰呭疄鐜�')
}
--
Gitblit v1.9.3