From aeabb6a019fbb7e60bd3b6c8cf3e4081abdff80c Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期一, 18 五月 2026 20:39:10 +0800
Subject: [PATCH] feat: 设备巡检任务添加启用/停用
---
src/views/equipmentManagement/inspectionManagement/components/formDia.vue | 40 +++++++++++--
src/components/PIMTable/PIMTable.vue | 5 +
src/views/equipmentManagement/inspectionManagement/index.vue | 109 +++++++++++++++++++++++++----------
3 files changed, 114 insertions(+), 40 deletions(-)
diff --git a/src/components/PIMTable/PIMTable.vue b/src/components/PIMTable/PIMTable.vue
index 8e22459..1cddb23 100644
--- a/src/components/PIMTable/PIMTable.vue
+++ b/src/components/PIMTable/PIMTable.vue
@@ -146,7 +146,7 @@
@click.stop="o.clickFun(scope.row)"
:key="key"
>
- {{ o.name }}
+ {{ typeof o.name === 'function' ? o.name(scope.row) : o.name }}
</el-button>
<el-upload
:action="
@@ -426,12 +426,13 @@
};
const getOperationColor = (operation, row) => {
+ const colorValue = typeof operation?.color === 'function' ? operation.color(row) : operation?.color;
const baseColor =
operation?.name === "鍒犻櫎" || operation?.name === "delete"
? "#D93025"
: operation?.name === "璇︽儏"
? "#67C23A"
- : operation?.color || "var(--el-color-primary)";
+ : colorValue || "var(--el-color-primary)";
if (isOperationDisabled(operation, row)) {
return fadeColor(baseColor, 0.35);
diff --git a/src/views/equipmentManagement/inspectionManagement/components/formDia.vue b/src/views/equipmentManagement/inspectionManagement/components/formDia.vue
index a2af3ad..264584f 100644
--- a/src/views/equipmentManagement/inspectionManagement/components/formDia.vue
+++ b/src/views/equipmentManagement/inspectionManagement/components/formDia.vue
@@ -30,6 +30,17 @@
<el-input v-model="form.remarks" placeholder="璇疯緭鍏ュ娉�" type="textarea" />
</el-form-item>
</el-col>
+ <el-col :span="12">
+ <el-form-item label="浠诲姟鐘舵��" prop="isActive">
+ <el-switch
+ v-model="form.isActive"
+ :active-value="1"
+ :inactive-value="0"
+ active-text="鍚敤"
+ inactive-text="鍋滅敤"
+ />
+ </el-form-item>
+ </el-col>
</el-row>
<el-row>
<el-col :span="12">
@@ -122,7 +133,8 @@
frequencyType: '',
frequencyDetail: '',
week: '',
- time: ''
+ time: '',
+ isActive: 1 // 榛樿鍚敤
},
rules: {
taskId: [{ required: true, message: "璇烽�夋嫨璁惧", trigger: "change" },],
@@ -217,8 +229,20 @@
await loadDeviceName();
if (type === 'edit' && row) {
- form.value = {...row}
- form.value.inspector = form.value.inspectorIds.split(',').map(Number)
+ form.value = {
+ ...data.form, // 鍏堝鍒堕粯璁よ〃鍗�
+ ...row, // 鍐嶈鐩� row 涓殑鍊�
+ }
+ // 纭繚 inspectorIds 瀛樺湪鎵嶈繘琛� split
+ if (form.value.inspectorIds) {
+ form.value.inspector = form.value.inspectorIds.split(',').map(Number)
+ } else {
+ form.value.inspector = []
+ }
+ // 纭繚 isActive 鏈夊�硷紝榛樿鍚敤
+ if (form.value.isActive === undefined || form.value.isActive === null) {
+ form.value.isActive = 1
+ }
if (row.frequencyDetail) {
if (row.frequencyType === 'WEEKLY') {
@@ -263,7 +287,8 @@
frequencyType: '',
frequencyDetail: '',
week: '',
- time: ''
+ time: '',
+ isActive: 1 // 榛樿鍚敤
}
}
@@ -272,8 +297,11 @@
proxy.$refs["formRef"].validate(async valid => {
if (valid) {
try {
- form.value.inspectorIds = form.value.inspector.join(',')
- delete form.value.inspector
+ // 纭繚 inspector 鏄暟缁勬墠杩涜 join
+ if (form.value.inspector && Array.isArray(form.value.inspector)) {
+ form.value.inspectorIds = form.value.inspector.join(',')
+ delete form.value.inspector
+ }
if (form.value.frequencyType === 'WEEKLY') {
let frequencyDetail = ''
diff --git a/src/views/equipmentManagement/inspectionManagement/index.vue b/src/views/equipmentManagement/inspectionManagement/index.vue
index c7efc7c..1be5ad9 100644
--- a/src/views/equipmentManagement/inspectionManagement/index.vue
+++ b/src/views/equipmentManagement/inspectionManagement/index.vue
@@ -55,8 +55,6 @@
:table-style="{ width: '100%', height: 'calc(100vh - 23em)' }">
<template #inspector="{ row }">
<div class="person-tags">
- <!-- 璋冭瘯淇℃伅锛屼笂绾挎椂鍒犻櫎 -->
- <!-- {{ console.log('inspector data:', row.inspector) }} -->
<template v-if="row.inspector && row.inspector.length > 0">
<el-tag v-for="(person, index) in row.inspector"
:key="index"
@@ -69,6 +67,10 @@
<span v-else
class="no-data">--</span>
</div>
+ </template>
+ <template #statusRef="{ row }">
+ <el-tag v-if="row.isActive === true || row.isActive === 1" type="success">鍚敤</el-tag>
+ <el-tag v-else type="danger">鍋滅敤</el-tag>
</template>
</PIMTable>
</div>
@@ -83,6 +85,7 @@
import { Delete, Plus } from "@element-plus/icons-vue";
import { onMounted, ref, reactive, getCurrentInstance, nextTick } from "vue";
import { ElMessageBox } from "element-plus";
+ import dayjs from "dayjs";
// 缁勪欢寮曞叆
import PIMTable from "@/components/PIMTable/PIMTable.vue";
@@ -94,6 +97,7 @@
delTimingTask,
inspectionTaskList,
timingTaskList,
+ addOrEditTimingTask,
} from "@/api/inspectionManagement/index.js";
// 鍏ㄥ眬鍙橀噺
@@ -132,12 +136,6 @@
prop: "frequencyType",
label: "棰戞",
minWidth: 150,
- // formatter: (_, __, val) => ({
- // DAILY: "姣忔棩",
- // WEEKLY: "姣忓懆",
- // MONTHLY: "姣忔湀",
- // QUARTERLY: "瀛e害"
- // }[val] || "")
formatData: params => {
return params === "DAILY"
? "姣忔棩"
@@ -175,38 +173,55 @@
},
},
{ prop: "registrant", label: "鐧昏浜�", minWidth: 100 },
- { prop: "createTime", label: "鐧昏鏃ユ湡", minWidth: 100 },
+ { prop: "createTime", label: "鐧昏鏃ユ湡", minWidth: 120, formatData: (cell) => cell ? dayjs(cell).format("YYYY-MM-DD HH:MM:ss") : "-" },
]);
+
+ const statusColumn = {
+ prop: "isActive",
+ label: "浠诲姟鐘舵��",
+ minWidth: 100,
+ align: "center",
+ dataType: "slot",
+ slot: "statusRef",
+ };
// 鎿嶄綔鍒楅厤缃�
const getOperationColumn = operations => {
if (!operations || operations.length === 0) return null;
+ const operationList = operations
+ .map(op => {
+ switch (op) {
+ case "edit":
+ return {
+ name: "缂栬緫",
+ clickFun: handleAdd,
+ color: "#409EFF",
+ };
+ case "viewFile":
+ return {
+ name: "鏌ョ湅闄勪欢",
+ clickFun: viewFile,
+ color: "#67C23A",
+ };
+ case "toggleActive":
+ return {
+ name: (row) => row.isActive === true || row.isActive === 1 ? "鍋滅敤" : "鍚敤",
+ clickFun: handleToggleActive,
+ color: (row) => row.isActive === true || row.isActive === 1 ? "#F56C6C" : "#67C23A",
+ };
+ default:
+ return null;
+ }
+ })
+ .filter(Boolean);
+
const operationConfig = {
label: "鎿嶄綔",
- width: 130,
+ width: 200,
fixed: "right",
dataType: "action",
- operation: operations
- .map(op => {
- switch (op) {
- case "edit":
- return {
- name: "缂栬緫",
- clickFun: handleAdd,
- color: "#409EFF",
- };
- case "viewFile":
- return {
- name: "鏌ョ湅闄勪欢",
- clickFun: viewFile,
- color: "#67C23A",
- };
- default:
- return null;
- }
- })
- .filter(Boolean),
+ operation: operationList,
};
return operationConfig;
@@ -219,12 +234,13 @@
// 鍗曢�夊彉鍖�
const radioChange = value => {
if (value === "taskManage") {
- const operationColumn = getOperationColumn(["edit"]);
+ const operationColumn = getOperationColumn(["edit", "toggleActive"]);
tableColumns.value = [
...columns.value,
+ statusColumn,
...(operationColumn ? [operationColumn] : []),
];
- operationsArr.value = ["edit"];
+ operationsArr.value = ["edit", "toggleActive"];
} else if (value === "task") {
const operationColumn = getOperationColumn(["viewFile"]);
tableColumns.value = [
@@ -346,6 +362,35 @@
.catch(() => {});
};
+ // 鍚敤/鍋滅敤鍒囨崲
+ const handleToggleActive = async (row) => {
+ const newStatus = row.isActive === true || row.isActive === 1 ? 0 : 1;
+ const actionText = newStatus === 1 ? "鍚敤" : "鍋滅敤";
+
+ try {
+ await proxy.$modal.confirm(`鏄惁纭${actionText}璇ヤ换鍔★紵`)
+ } catch {
+ return
+ }
+
+ try {
+ await addOrEditTimingTask({
+ id: row.id,
+ taskId: row.taskId,
+ taskName: row.taskName,
+ inspectorIds: row.inspectorIds,
+ remarks: row.remarks,
+ frequencyType: row.frequencyType,
+ frequencyDetail: row.frequencyDetail,
+ isActive: newStatus,
+ })
+ proxy.$modal.msgSuccess(`${actionText}鎴愬姛`)
+ handleQuery()
+ } catch (error) {
+ console.error(`${actionText}澶辫触:`, error)
+ }
+ };
+
// 澶氶�夊彉鏇�
const handleSelectionChange = selection => {
selectedRows.value = selection;
--
Gitblit v1.9.3