From cc13825bb6b3f4185e3db8aa29e58990ee4e01c0 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期五, 27 二月 2026 17:49:36 +0800
Subject: [PATCH] 巡检模块流程更改

---
 src/views/equipmentManagement/upkeep/index.vue                              | 1160 +++++++++++++++--------------
 src/views/equipmentManagement/inspectionManagement/components/formDia.vue   |  573 ++++++++-----
 src/views/equipmentManagement/inspectionManagement/index.vue                |  137 +++
 src/views/equipmentManagement/inspectionManagement/components/viewFiles.vue |  462 +++++------
 4 files changed, 1,271 insertions(+), 1,061 deletions(-)

diff --git a/src/views/equipmentManagement/inspectionManagement/components/formDia.vue b/src/views/equipmentManagement/inspectionManagement/components/formDia.vue
index b048a9c..89d86ae 100644
--- a/src/views/equipmentManagement/inspectionManagement/components/formDia.vue
+++ b/src/views/equipmentManagement/inspectionManagement/components/formDia.vue
@@ -1,90 +1,185 @@
 <template>
   <div>
     <el-dialog :title="operationType === 'add' ? '鏂板宸℃浠诲姟' : '缂栬緫宸℃浠诲姟'"
-               v-model="dialogVisitable" width="800px" @close="cancel">
-      <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
+               v-model="dialogVisitable"
+               width="900px"
+               @close="cancel">
+      <el-form ref="formRef"
+               :model="form"
+               :rules="rules"
+               label-width="180px">
         <el-row>
           <el-col :span="12">
-            <el-form-item label="璁惧鍚嶇О" prop="taskId">
-              <el-select v-model="form.taskId" @change="setDeviceModel">
-                <el-option
-                  v-for="(item, index) in deviceOptions"
-                  :key="index"
-                  :label="item.deviceName"
-                  :value="item.id"
-                ></el-option>
-              </el-select>
+            <el-form-item label="宸℃浠诲姟鍚嶇О"
+                          prop="taskName">
+              <el-input v-model="form.taskName"
+                        placeholder="璇疯緭鍏ュ贰妫�浠诲姟鍚嶇О"
+                        type="textarea" />
+              <!-- <el-select v-model="form.taskId"
+                         @change="setDeviceModel">
+                <el-option v-for="(item, index) in deviceOptions"
+                           :key="index"
+                           :label="item.deviceName"
+                           :value="item.id"></el-option>
+              </el-select> -->
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="宸℃浜�" prop="inspector">
-              <el-select v-model="form.inspector" placeholder="璇烽�夋嫨" multiple clearable>
-                <el-option v-for="item in userList" :label="item.nickName" :value="item.userId" :key="item.userId"/>
+            <el-form-item label="宸℃浜�"
+                          prop="inspector">
+              <el-select v-model="form.inspector"
+                         placeholder="璇烽�夋嫨"
+                         multiple
+                         clearable>
+                <el-option v-for="item in userList"
+                           :label="item.nickName"
+                           :value="item.userId"
+                           :key="item.userId" />
               </el-select>
             </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 label="蹇呴』鎷嶇収瑙嗕负宸℃鎴愬姛"
+                          prop="takePhone">
+              <el-radio-group v-model="form.takePhone">
+                <el-radio :label="true">鏄�</el-radio>
+                <el-radio :label="false">鍚�</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="涓婁紶鐩稿唽鐓х墖"
+                          prop="takeAlbum">
+              <el-radio-group v-model="form.takeAlbum">
+                <el-radio :label="false">涓嶅彲</el-radio>
+                <el-radio :label="true">鍙�</el-radio>
+              </el-radio-group>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
-            <el-form-item label="浠诲姟棰戠巼" prop="frequencyType">
-              <el-select v-model="form.frequencyType" placeholder="璇烽�夋嫨" clearable>
-                <el-option label="姣忔棩" value="DAILY"/>
-                <el-option label="姣忓懆" value="WEEKLY"/>
-                <el-option label="姣忔湀" value="MONTHLY"/>
+            <el-form-item label="澶囨敞"
+                          prop="remarks">
+              <el-input v-model="form.remarks"
+                        placeholder="璇疯緭鍏ュ娉�"
+                        type="textarea" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="浠诲姟棰戠巼"
+                          prop="frequencyType">
+              <el-select v-model="form.frequencyType"
+                         placeholder="璇烽�夋嫨"
+                         clearable>
+                <el-option label="姣忔棩"
+                           value="DAILY" />
+                <el-option label="姣忓懆"
+                           value="WEEKLY" />
+                <el-option label="姣忔湀"
+                           value="MONTHLY" />
                 <!-- <el-option label="瀛e害" value="QUARTERLY"/> -->
               </el-select>
             </el-form-item>
           </el-col>
-          <el-col :span="12" v-if="form.frequencyType === 'DAILY' && form.frequencyType">
-            <el-form-item label="鏃ユ湡" prop="frequencyDetail">
-              <el-time-picker v-model="form.frequencyDetail" placeholder="閫夋嫨鏃堕棿" format="HH:mm"
+          <el-col :span="12"
+                  v-if="form.frequencyType === 'DAILY' && form.frequencyType">
+            <el-form-item label="鏃ユ湡"
+                          prop="frequencyDetail">
+              <el-time-picker v-model="form.frequencyDetail"
+                              placeholder="閫夋嫨鏃堕棿"
+                              format="HH:mm"
                               value-format="HH:mm" />
             </el-form-item>
           </el-col>
-          <el-col :span="12" v-if="form.frequencyType === 'WEEKLY' && form.frequencyType">
-            <el-form-item label="鏃ユ湡" prop="frequencyDetail">
-              <el-select v-model="form.week" placeholder="璇烽�夋嫨" clearable style="width: 50%">
-                <el-option label="鍛ㄤ竴" value="MON"/>
-                <el-option label="鍛ㄤ簩" value="TUE"/>
-                <el-option label="鍛ㄤ笁" value="WED"/>
-                <el-option label="鍛ㄥ洓" value="THU"/>
-                <el-option label="鍛ㄤ簲" value="FRI"/>
-                <el-option label="鍛ㄥ叚" value="SAT"/>
-                <el-option label="鍛ㄦ棩" value="SUN"/>
+          <el-col :span="12"
+                  v-if="form.frequencyType === 'WEEKLY' && form.frequencyType">
+            <el-form-item label="鏃ユ湡"
+                          prop="frequencyDetail">
+              <el-select v-model="form.week"
+                         placeholder="璇烽�夋嫨"
+                         clearable
+                         style="width: 50%">
+                <el-option label="鍛ㄤ竴"
+                           value="MON" />
+                <el-option label="鍛ㄤ簩"
+                           value="TUE" />
+                <el-option label="鍛ㄤ笁"
+                           value="WED" />
+                <el-option label="鍛ㄥ洓"
+                           value="THU" />
+                <el-option label="鍛ㄤ簲"
+                           value="FRI" />
+                <el-option label="鍛ㄥ叚"
+                           value="SAT" />
+                <el-option label="鍛ㄦ棩"
+                           value="SUN" />
               </el-select>
-              <el-time-picker v-model="form.time" placeholder="閫夋嫨鏃堕棿" format="HH:mm"
-                              value-format="HH:mm"  style="width: 50%"/>
+              <el-time-picker v-model="form.time"
+                              placeholder="閫夋嫨鏃堕棿"
+                              format="HH:mm"
+                              value-format="HH:mm"
+                              style="width: 50%" />
             </el-form-item>
           </el-col>
-          <el-col :span="12" v-if="form.frequencyType === 'MONTHLY' && form.frequencyType">
-            <el-form-item label="鏃ユ湡" prop="frequencyDetail">
-              <el-date-picker
-                  v-model="form.frequencyDetail"
-                  type="datetime"
-                  clearable
-                  placeholder="閫夋嫨寮�濮嬫棩鏈�"
-                  format="DD,HH:mm"
-                  value-format="DD,HH:mm"
-              />
+          <el-col :span="12"
+                  v-if="form.frequencyType === 'MONTHLY' && form.frequencyType">
+            <el-form-item label="鏃ユ湡"
+                          prop="frequencyDetail">
+              <el-date-picker v-model="form.frequencyDetail"
+                              type="datetime"
+                              clearable
+                              placeholder="閫夋嫨寮�濮嬫棩鏈�"
+                              format="DD,HH:mm"
+                              value-format="DD,HH:mm" />
             </el-form-item>
           </el-col>
-          <el-col :span="12" v-if="form.frequencyType === 'QUARTERLY' && form.frequencyType">
-            <el-form-item label="鏃ユ湡" prop="frequencyDetail">
-              <el-date-picker
-                  v-model="form.frequencyDetail"
-                  type="datetime"
-                  clearable
-                  placeholder="閫夋嫨寮�濮嬫棩鏈�"
-                  format="MM,DD,HH:mm"
-                  value-format="MM,DD,HH:mm"
-              />
+          <el-col :span="12"
+                  v-if="form.frequencyType === 'QUARTERLY' && form.frequencyType">
+            <el-form-item label="鏃ユ湡"
+                          prop="frequencyDetail">
+              <el-date-picker v-model="form.frequencyDetail"
+                              type="datetime"
+                              clearable
+                              placeholder="閫夋嫨寮�濮嬫棩鏈�"
+                              format="MM,DD,HH:mm"
+                              value-format="MM,DD,HH:mm" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12"
+                  v-if="form.frequencyType === 'DAILY' && form.frequencyType">
+            <el-form-item label="鏃堕檺(灏忔椂)"
+                          prop="inspectionDeadline">
+              <el-input v-model="form.inspectionDeadline"
+                        type="number"
+                        placeholder="璇疯緭鍏ュ娉�">
+              </el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12"
+                  v-if="form.frequencyType === 'WEEKLY' && form.frequencyType">
+            <el-form-item label="鏃堕檺(澶�)"
+                          prop="inspectionDeadline">
+              <el-input v-model="form.inspectionDeadline"
+                        placeholder="璇疯緭鍏ュ娉�"
+                        type="number">
+              </el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12"
+                  v-if="form.frequencyType === 'MONTHLY' && form.frequencyType">
+            <el-form-item label="鏃堕檺(澶�)"
+                          prop="inspectionDeadline">
+              <el-input v-model="form.inspectionDeadline"
+                        placeholder="璇疯緭鍏ュ娉�"
+                        type="number">
+              </el-input>
             </el-form-item>
           </el-col>
         </el-row>
@@ -92,7 +187,8 @@
       <template #footer>
         <div class="dialog-footer">
           <el-button @click="cancel">鍙栨秷</el-button>
-          <el-button type="primary" @click="submitForm">淇濆瓨</el-button>
+          <el-button type="primary"
+                     @click="submitForm">淇濆瓨</el-button>
         </div>
       </template>
     </el-dialog>
@@ -100,188 +196,205 @@
 </template>
 
 <script setup>
-import {reactive, ref, getCurrentInstance, toRefs} from "vue";
-import useUserStore from '@/store/modules/user'
-import {addOrEditTimingTask} from "@/api/inspectionManagement/index.js";
-import {userListNoPageByTenantId} from "@/api/system/user.js";
-import { getDeviceLedger } from "@/api/equipmentManagement/ledger";
+  import { reactive, ref, getCurrentInstance, toRefs } from "vue";
+  import useUserStore from "@/store/modules/user";
+  import { addOrEditTimingTask } from "@/api/inspectionManagement/index.js";
+  import { userListNoPageByTenantId } from "@/api/system/user.js";
+  import { getDeviceLedger } from "@/api/equipmentManagement/ledger";
 
-const { proxy } = getCurrentInstance()
-const emit = defineEmits()
-const userStore = useUserStore()
-const dialogVisitable = ref(false);
-const operationType = ref('add');
-const deviceOptions = ref([]);
-const data = reactive({
-  form: {
-    taskId: undefined,
-    taskName: undefined,
-    inspector: '',
-    inspectorIds: '',
-    remarks: '',
-    frequencyType: '',
-    frequencyDetail: '',
-    week: '',
-    time: ''
-  },
-	rules: {
-		taskId: [{ required: true, message: "璇烽�夋嫨璁惧", trigger: "change" },],
-		inspector: [{ required: true, message: "璇疯緭鍏ュ贰妫�浜�", trigger: "blur" },],
-		dateStr: [{ required: true, message: "璇烽�夋嫨鐧昏鏃堕棿", trigger: "change" }],
-		frequencyType: [{ required: true, message: "璇烽�夋嫨浠诲姟棰戠巼", trigger: "change" }],
-		frequencyDetail: [
-			{
-				required: true,
-				message: "璇烽�夋嫨鏃ユ湡",
-				trigger: "change",
-				validator: (rule, value, callback) => {
-					if (!form.value.frequencyType) {
-						callback()
-						return
-					}
-					if (form.value.frequencyType === 'WEEKLY') {
-						if (!form.value.week || !form.value.time) {
-							callback(new Error("璇烽�夋嫨鏃ユ湡鍜屾椂闂�"))
-						} else {
-							callback()
-						}
-					} else {
-						if (!value) {
-							callback(new Error("璇烽�夋嫨鏃ユ湡"))
-						} else {
-							callback()
-						}
-					}
-				}
-			}
-		],
-		week: [
-			{
-				required: true,
-				message: "璇烽�夋嫨鏄熸湡",
-				trigger: "change",
-				validator: (rule, value, callback) => {
-					if (form.value.frequencyType === 'WEEKLY' && !value) {
-						callback(new Error("璇烽�夋嫨鏄熸湡"))
-					} else {
-						callback()
-					}
-				}
-			}
-		],
-		time: [
-			{
-				required: true,
-				message: "璇烽�夋嫨鏃堕棿",
-				trigger: "change",
-				validator: (rule, value, callback) => {
-					if (form.value.frequencyType === 'WEEKLY' && !value) {
-						callback(new Error("璇烽�夋嫨鏃堕棿"))
-					} else {
-						callback()
-					}
-				}
-			}
-		]
-	}
-})
-const { form, rules } = toRefs(data)
-const userList = ref([])
-
-const loadDeviceName = async () => {
-  const { data } = await getDeviceLedger();
-  deviceOptions.value = data;
-};
-
-const setDeviceModel = (id) => {
-  const option = deviceOptions.value.find((item) => item.id === id);
-  if (option) {
-    form.value.taskName = option.deviceName;
-  }
-}
-
-// 鎵撳紑寮规
-const openDialog = async (type, row) => {
-  dialogVisitable.value = true
-  operationType.value = type
-  
-  // 閲嶇疆琛ㄥ崟
-  resetForm();
-  
-  // 鍔犺浇鐢ㄦ埛鍒楄〃
-  userListNoPageByTenantId().then((res) => {
-    userList.value = res.data;
+  const { proxy } = getCurrentInstance();
+  const emit = defineEmits();
+  const userStore = useUserStore();
+  const dialogVisitable = ref(false);
+  const operationType = ref("add");
+  const deviceOptions = ref([]);
+  const data = reactive({
+    form: {
+      taskId: undefined,
+      taskName: undefined,
+      inspector: "",
+      inspectorIds: "",
+      remarks: "",
+      frequencyType: "",
+      frequencyDetail: "",
+      week: "",
+      time: "",
+      takePhone: true,
+      takeAlbum: false,
+      inspectionDeadline: "",
+    },
+    rules: {
+      // taskId: [{ required: true, message: "璇烽�夋嫨璁惧", trigger: "change" }],
+      taskName: [
+        { required: true, message: "璇疯緭鍏ュ贰妫�浠诲姟鍚嶇О", trigger: "blur" },
+      ],
+      inspector: [{ required: true, message: "璇疯緭鍏ュ贰妫�浜�", trigger: "blur" }],
+      dateStr: [{ required: true, message: "璇烽�夋嫨鐧昏鏃堕棿", trigger: "change" }],
+      frequencyType: [
+        { required: true, message: "璇烽�夋嫨浠诲姟棰戠巼", trigger: "change" },
+      ],
+      frequencyDetail: [
+        {
+          required: true,
+          message: "璇烽�夋嫨鏃ユ湡",
+          trigger: "change",
+          validator: (rule, value, callback) => {
+            if (!form.value.frequencyType) {
+              callback();
+              return;
+            }
+            if (form.value.frequencyType === "WEEKLY") {
+              if (!form.value.week || !form.value.time) {
+                callback(new Error("璇烽�夋嫨鏃ユ湡鍜屾椂闂�"));
+              } else {
+                callback();
+              }
+            } else {
+              if (!value) {
+                callback(new Error("璇烽�夋嫨鏃ユ湡"));
+              } else {
+                callback();
+              }
+            }
+          },
+        },
+      ],
+      inspectionDeadline: [
+        {
+          required: true,
+          message: "璇疯緭鍏ユ椂闄�",
+          trigger: "blur",
+        },
+      ],
+      week: [
+        {
+          required: true,
+          message: "璇烽�夋嫨鏄熸湡",
+          trigger: "change",
+          validator: (rule, value, callback) => {
+            if (form.value.frequencyType === "WEEKLY" && !value) {
+              callback(new Error("璇烽�夋嫨鏄熸湡"));
+            } else {
+              callback();
+            }
+          },
+        },
+      ],
+      time: [
+        {
+          required: true,
+          message: "璇烽�夋嫨鏃堕棿",
+          trigger: "change",
+          validator: (rule, value, callback) => {
+            if (form.value.frequencyType === "WEEKLY" && !value) {
+              callback(new Error("璇烽�夋嫨鏃堕棿"));
+            } else {
+              callback();
+            }
+          },
+        },
+      ],
+    },
   });
-  
-  // 鍔犺浇璁惧鍒楄〃
-  await loadDeviceName();
-  
-  if (type === 'edit' && row) {
-    form.value = {...row}
-    form.value.inspector = form.value.inspectorIds.split(',').map(Number)
-    
-    // 濡傛灉鏈夎澶嘔D锛岃嚜鍔ㄨ缃澶囦俊鎭�
-    if (form.value.taskId) {
-      setDeviceModel(form.value.taskId);
+  const { form, rules } = toRefs(data);
+  const userList = ref([]);
+
+  const loadDeviceName = async () => {
+    const { data } = await getDeviceLedger();
+    deviceOptions.value = data;
+  };
+
+  const setDeviceModel = id => {
+    const option = deviceOptions.value.find(item => item.id === id);
+    if (option) {
+      form.value.taskName = option.deviceName;
     }
-  }
-}
+  };
 
-// 鍏抽棴瀵硅瘽妗�
-const cancel = () => {
-  resetForm()
-  dialogVisitable.value = false
-  emit('closeDia')
-}
+  // 鎵撳紑寮规
+  const openDialog = async (type, row) => {
+    dialogVisitable.value = true;
+    operationType.value = type;
 
-// 閲嶇疆琛ㄥ崟鍑芥暟
-const resetForm = () => {
-  if (proxy.$refs.formRef) {
-    proxy.$refs.formRef.resetFields()
-  }
-  // 閲嶇疆琛ㄥ崟鏁版嵁纭繚璁惧淇℃伅姝g‘閲嶇疆
-  form.value = {
-    taskId: undefined,
-    taskName: undefined,
-    inspector: '',
-    inspectorIds: '',
-    remarks: '',
-    frequencyType: '',
-    frequencyDetail: '',
-    week: '',
-    time: ''
-  }
-}
+    // 閲嶇疆琛ㄥ崟
+    resetForm();
 
-// 鎻愪氦琛ㄥ崟
-const submitForm = () => {
-  proxy.$refs["formRef"].validate(async valid => {
-    if (valid) {
-      try {
-        form.value.inspectorIds = form.value.inspector.join(',')
-        delete form.value.inspector
-        
-        if (form.value.frequencyType === 'WEEKLY') {
-          let frequencyDetail = ''
-          frequencyDetail = form.value.week + ',' + form.value.time
-          form.value.frequencyDetail = frequencyDetail
+    // 鍔犺浇鐢ㄦ埛鍒楄〃
+    userListNoPageByTenantId().then(res => {
+      userList.value = res.data;
+    });
+
+    // 鍔犺浇璁惧鍒楄〃
+    await loadDeviceName();
+
+    if (type === "edit" && row) {
+      form.value = { ...row };
+      form.value.inspector = form.value.inspectorIds.split(",").map(Number);
+
+      // 濡傛灉鏈夎澶嘔D锛岃嚜鍔ㄨ缃澶囦俊鎭�
+      // if (form.value.taskId) {
+      //   setDeviceModel(form.value.taskId);
+      // }
+    }
+  };
+
+  // 鍏抽棴瀵硅瘽妗�
+  const cancel = () => {
+    resetForm();
+    dialogVisitable.value = false;
+    emit("closeDia");
+  };
+
+  // 閲嶇疆琛ㄥ崟鍑芥暟
+  const resetForm = () => {
+    if (proxy.$refs.formRef) {
+      proxy.$refs.formRef.resetFields();
+    }
+    // 閲嶇疆琛ㄥ崟鏁版嵁纭繚璁惧淇℃伅姝g‘閲嶇疆
+    form.value = {
+      taskId: undefined,
+      taskName: undefined,
+      inspector: "",
+      inspectorIds: "",
+      remarks: "",
+      frequencyType: "",
+      frequencyDetail: "",
+      week: "",
+      time: "",
+      takePhone: true,
+      takeAlbum: false,
+      inspectionDeadline: "",
+    };
+  };
+
+  // 鎻愪氦琛ㄥ崟
+  const submitForm = () => {
+    proxy.$refs["formRef"].validate(async valid => {
+      if (valid) {
+        try {
+          form.value.inspectorIds = form.value.inspector.join(",");
+          delete form.value.inspector;
+
+          if (form.value.frequencyType === "WEEKLY") {
+            let frequencyDetail = "";
+            frequencyDetail = form.value.week + "," + form.value.time;
+            form.value.frequencyDetail = frequencyDetail;
+          }
+
+          let res = await userStore.getInfo();
+          form.value.registrantId = res.user.userId;
+
+          await addOrEditTimingTask(form.value);
+          cancel();
+          proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+        } catch (error) {
+          proxy.$modal.msgError("鎻愪氦澶辫触锛岃閲嶈瘯");
         }
-        
-        let res = await userStore.getInfo()
-        form.value.registrantId = res.user.userId
-        
-        await addOrEditTimingTask(form.value)
-        cancel()
-        proxy.$modal.msgSuccess('鎻愪氦鎴愬姛')
-      } catch (error) {
-        proxy.$modal.msgError('鎻愪氦澶辫触锛岃閲嶈瘯')
       }
-    }
-  })
-}
-defineExpose({ openDialog })
+    });
+  };
+  defineExpose({ openDialog });
 </script>
 
 <style scoped>
-
 </style>
\ No newline at end of file
diff --git a/src/views/equipmentManagement/inspectionManagement/components/viewFiles.vue b/src/views/equipmentManagement/inspectionManagement/components/viewFiles.vue
index 27b4a59..5a45338 100644
--- a/src/views/equipmentManagement/inspectionManagement/components/viewFiles.vue
+++ b/src/views/equipmentManagement/inspectionManagement/components/viewFiles.vue
@@ -1,83 +1,32 @@
 <template>
   <div>
     <el-dialog title="鏌ョ湅闄勪欢"
-               v-model="dialogVisitable" width="800px" @close="cancel">
+               v-model="dialogVisitable"
+               width="800px"
+               @close="cancel">
       <div class="upload-container">
         <!-- 鐢熶骇鍓� -->
         <div class="form-container">
-          <div class="title">鐢熶骇鍓�</div>
-          
+          <div class="title">闄勪欢鍒楄〃</div>
           <!-- 鍥剧墖鍒楄〃 -->
           <div style="display: flex; flex-wrap: wrap;">
-            <img v-for="(item, index) in beforeProductionImgs" :key="index"
+            <img v-for="(item, index) in beforeProductionImgs"
+                 :key="index"
                  @click="showMedia(beforeProductionImgs, index, 'image')"
-                 :src="item" style="max-width: 100px; height: 100px; margin: 5px;" alt="">
+                 :src="item"
+                 style="max-width: 100px; height: 100px; margin: 5px;"
+                 alt="">
           </div>
-          
           <!-- 瑙嗛鍒楄〃 -->
           <div style="display: flex; flex-wrap: wrap;">
-            <div
-                v-for="(videoUrl, index) in beforeProductionVideos"
-                :key="index"
-                @click="showMedia(beforeProductionVideos, index, 'video')"
-                style="position: relative; margin: 10px; cursor: pointer;"
-            >
+            <div v-for="(videoUrl, index) in beforeProductionVideos"
+                 :key="index"
+                 @click="showMedia(beforeProductionVideos, index, 'video')"
+                 style="position: relative; margin: 10px; cursor: pointer;">
               <div style="width: 160px; height: 90px; background-color: #333; display: flex; align-items: center; justify-content: center;">
-                <img src="@/assets/images/video.png" alt="鎾斁" style="width: 30px; height: 30px; opacity: 0.8;" />
-              </div>
-              <div style="text-align: center; font-size: 12px; color: #666;">鐐瑰嚮鎾斁</div>
-            </div>
-          </div>
-        </div>
-        
-        <!-- 鐢熶骇鍚� -->
-        <div class="form-container">
-          <div class="title">鐢熶骇鍚�</div>
-          
-          <!-- 鍥剧墖鍒楄〃 -->
-          <div style="display: flex; flex-wrap: wrap;">
-            <img v-for="(item, index) in afterProductionImgs" :key="index"
-                 @click="showMedia(afterProductionImgs, index, 'image')"
-                 :src="item" style="max-width: 100px; height: 100px; margin: 5px;" alt="">
-          </div>
-          
-          <!-- 瑙嗛鍒楄〃 -->
-          <div style="display: flex; flex-wrap: wrap;">
-            <div
-                v-for="(videoUrl, index) in afterProductionVideos"
-                :key="index"
-                @click="showMedia(afterProductionVideos, index, 'video')"
-                style="position: relative; margin: 10px; cursor: pointer;"
-            >
-              <div style="width: 160px; height: 90px; background-color: #333; display: flex; align-items: center; justify-content: center;">
-                <img src="@/assets/images/video.png" alt="鎾斁" style="width: 30px; height: 30px; opacity: 0.8;" />
-              </div>
-              <div style="text-align: center; font-size: 12px; color: #666;">鐐瑰嚮鎾斁</div>
-            </div>
-          </div>
-        </div>
-        
-        <!-- 鐢熶骇闂 -->
-        <div class="form-container">
-          <div class="title">鐢熶骇闂</div>
-          
-          <!-- 鍥剧墖鍒楄〃 -->
-          <div style="display: flex; flex-wrap: wrap;">
-            <img v-for="(item, index) in productionIssuesImgs" :key="index"
-                 @click="showMedia(productionIssuesImgs, index, 'image')"
-                 :src="item" style="max-width: 100px; height: 100px; margin: 5px;" alt="">
-          </div>
-          
-          <!-- 瑙嗛鍒楄〃 -->
-          <div style="display: flex; flex-wrap: wrap;">
-            <div
-                v-for="(videoUrl, index) in productionIssuesVideos"
-                :key="index"
-                @click="showMedia(productionIssuesVideos, index, 'video')"
-                style="position: relative; margin: 10px; cursor: pointer;"
-            >
-              <div style="width: 160px; height: 90px; background-color: #333; display: flex; align-items: center; justify-content: center;">
-                <img src="@/assets/images/video.png" alt="鎾斁" style="width: 30px; height: 30px; opacity: 0.8;" />
+                <img src="@/assets/images/video.png"
+                     alt="鎾斁"
+                     style="width: 30px; height: 30px; opacity: 0.8;" />
               </div>
               <div style="text-align: center; font-size: 12px; color: #666;">鐐瑰嚮鎾斁</div>
             </div>
@@ -85,220 +34,225 @@
         </div>
       </div>
     </el-dialog>
-    
     <!-- 缁熶竴濯掍綋鏌ョ湅鍣� -->
-    <div v-if="isMediaViewerVisible" class="media-viewer-overlay" @click.self="closeMediaViewer">
-      <div class="media-viewer-content" @click.stop>
+    <div v-if="isMediaViewerVisible"
+         class="media-viewer-overlay"
+         @click.self="closeMediaViewer">
+      <div class="media-viewer-content"
+           @click.stop>
         <!-- 鍥剧墖 -->
-        <vue-easy-lightbox
-            v-if="mediaType === 'image'"
-            :visible="isMediaViewerVisible"
-            :imgs="mediaList"
-            :index="currentMediaIndex"
-            @hide="closeMediaViewer"
-        ></vue-easy-lightbox>
-        
+        <vue-easy-lightbox v-if="mediaType === 'image'"
+                           :visible="isMediaViewerVisible"
+                           :imgs="mediaList"
+                           :index="currentMediaIndex"
+                           @hide="closeMediaViewer"></vue-easy-lightbox>
         <!-- 瑙嗛 -->
-        <div v-else-if="mediaType === 'video'" style="position: relative;">
-          <video
-              :src="mediaList[currentMediaIndex]"
-              autoplay
-              controls
-              style="max-width: 90vw; max-height: 80vh;"
-          />
+        <div v-else-if="mediaType === 'video'"
+             style="position: relative;">
+          <video :src="mediaList[currentMediaIndex]"
+                 autoplay
+                 controls
+                 style="max-width: 90vw; max-height: 80vh;" />
         </div>
       </div>
     </div>
   </div>
 </template>
 <script setup>
-import { ref } from 'vue';
-import VueEasyLightbox from 'vue-easy-lightbox';
-const { proxy } = getCurrentInstance();
+  import { ref } from "vue";
+  import VueEasyLightbox from "vue-easy-lightbox";
+  const { proxy } = getCurrentInstance();
 
-// 鎺у埗寮圭獥鏄剧ず
-const dialogVisitable = ref(false);
+  // 鎺у埗寮圭獥鏄剧ず
+  const dialogVisitable = ref(false);
 
-// 鍥剧墖鏁扮粍
-const beforeProductionImgs = ref([]);
-const afterProductionImgs = ref([]);
-const productionIssuesImgs = ref([]);
+  // 鍥剧墖鏁扮粍
+  const beforeProductionImgs = ref([]);
+  const afterProductionImgs = ref([]);
+  const productionIssuesImgs = ref([]);
 
-// 瑙嗛鏁扮粍
-const beforeProductionVideos = ref([]);
-const afterProductionVideos = ref([]);
-const productionIssuesVideos = ref([]);
+  // 瑙嗛鏁扮粍
+  const beforeProductionVideos = ref([]);
+  const afterProductionVideos = ref([]);
+  const productionIssuesVideos = ref([]);
 
-// 濯掍綋鏌ョ湅鍣ㄧ姸鎬�
-const isMediaViewerVisible = ref(false);
-const currentMediaIndex = ref(0);
-const mediaList = ref([]); // 瀛樺偍褰撳墠瑕佹煡鐪嬬殑濯掍綋鍒楄〃锛堝惈鍥剧墖鍜岃棰戝璞★級
-const mediaType = ref('image'); // image | video
-const javaApi = proxy.javaApi;
+  // 濯掍綋鏌ョ湅鍣ㄧ姸鎬�
+  const isMediaViewerVisible = ref(false);
+  const currentMediaIndex = ref(0);
+  const mediaList = ref([]); // 瀛樺偍褰撳墠瑕佹煡鐪嬬殑濯掍綋鍒楄〃锛堝惈鍥剧墖鍜岃棰戝璞★級
+  const mediaType = ref("image"); // image | video
+  const javaApi = proxy.javaApi;
 
-// 澶勭悊 URL锛氬皢 Windows 璺緞杞崲涓哄彲璁块棶鐨� URL
-function processFileUrl(fileUrl) {
-  if (!fileUrl) return '';
-  
-  // 濡傛灉 URL 鏄� Windows 璺緞鏍煎紡锛堝寘鍚弽鏂滄潬锛夛紝闇�瑕佽浆鎹�
-  if (fileUrl && fileUrl.indexOf('\\') > -1) {
-    // 鏌ユ壘 uploads 鍏抽敭瀛楃殑浣嶇疆锛屼粠閭i噷寮�濮嬫彁鍙栫浉瀵硅矾寰�
-    const uploadsIndex = fileUrl.toLowerCase().indexOf('uploads');
-    if (uploadsIndex > -1) {
-      // 浠� uploads 寮�濮嬫彁鍙栬矾寰勶紝骞跺皢鍙嶆枩鏉犳浛鎹负姝f枩鏉�
-      const relativePath = fileUrl.substring(uploadsIndex).replace(/\\/g, '/');
-      fileUrl = '/' + relativePath;
-    } else {
-      // 濡傛灉娌℃湁鎵惧埌 uploads锛屾彁鍙栨渶鍚庝竴涓洰褰曞拰鏂囦欢鍚�
-      const parts = fileUrl.split('\\');
-      const fileName = parts[parts.length - 1];
-      fileUrl = '/uploads/' + fileName;
-    }
-  }
-  
-  // 纭繚鎵�鏈夐潪 http 寮�澶寸殑 URL 閮芥嫾鎺� baseUrl
-  if (fileUrl && !fileUrl.startsWith('http')) {
-    // 纭繚璺緞浠� / 寮�澶�
-    if (!fileUrl.startsWith('/')) {
-      fileUrl = '/' + fileUrl;
-    }
-    // 鎷兼帴 baseUrl
-    fileUrl = javaApi + fileUrl;
-  }
-  
-  return fileUrl;
-}
+  // 澶勭悊 URL锛氬皢 Windows 璺緞杞崲涓哄彲璁块棶鐨� URL
+  function processFileUrl(fileUrl) {
+    if (!fileUrl) return "";
 
-// 澶勭悊姣忎竴绫绘暟鎹細鍒嗙鍥剧墖鍜岃棰�
-function processItems(items) {
-  const images = [];
-  const videos = [];
-  
-  // 妫�鏌� items 鏄惁瀛樺湪涓斾负鏁扮粍
-  if (!items || !Array.isArray(items)) {
-    return { images, videos };
-  }
-  
-  items.forEach(item => {
-    if (!item || !item.url) return;
-    
-    // 澶勭悊鏂囦欢 URL
-    const fileUrl = processFileUrl(item.url);
-    
-    // 鏍规嵁鏂囦欢鎵╁睍鍚嶅垽鏂槸鍥剧墖杩樻槸瑙嗛
-    const urlLower = fileUrl.toLowerCase();
-    if (urlLower.match(/\.(jpg|jpeg|png|gif|bmp|webp)$/)) {
-      images.push(fileUrl);
-    } else if (urlLower.match(/\.(mp4|avi|mov|wmv|flv|mkv|webm)$/)) {
-      videos.push(fileUrl);
-    } else if (item.contentType) {
-      // 濡傛灉鏈� contentType锛屼娇鐢� contentType 鍒ゆ柇
-      if (item.contentType.startsWith('image/')) {
-        images.push(fileUrl);
-      } else if (item.contentType.startsWith('video/')) {
-        videos.push(fileUrl);
+    // 濡傛灉 URL 鏄� Windows 璺緞鏍煎紡锛堝寘鍚弽鏂滄潬锛夛紝闇�瑕佽浆鎹�
+    if (fileUrl && fileUrl.indexOf("\\") > -1) {
+      // 鏌ユ壘 uploads 鍏抽敭瀛楃殑浣嶇疆锛屼粠閭i噷寮�濮嬫彁鍙栫浉瀵硅矾寰�
+      const uploadsIndex = fileUrl.toLowerCase().indexOf("uploads");
+      if (uploadsIndex > -1) {
+        // 浠� uploads 寮�濮嬫彁鍙栬矾寰勶紝骞跺皢鍙嶆枩鏉犳浛鎹负姝f枩鏉�
+        const relativePath = fileUrl.substring(uploadsIndex).replace(/\\/g, "/");
+        fileUrl = "/" + relativePath;
+      } else {
+        // 濡傛灉娌℃湁鎵惧埌 uploads锛屾彁鍙栨渶鍚庝竴涓洰褰曞拰鏂囦欢鍚�
+        const parts = fileUrl.split("\\");
+        const fileName = parts[parts.length - 1];
+        fileUrl = "/uploads/" + fileName;
       }
     }
-  });
-  
-  return { images, videos };
-}
 
-// 鎵撳紑寮圭獥骞跺姞杞芥暟鎹�
-const openDialog = async (row) => {
-  // 浣跨敤姝g‘鐨勫瓧娈靛悕锛歝ommonFileListBefore, commonFileListAfter
-  // productionIssues 鍙兘涓嶅瓨鍦紝浣跨敤绌烘暟缁�
-  const { images: beforeImgs, videos: beforeVids } = processItems(row.commonFileListBefore || []);
-  const { images: afterImgs, videos: afterVids } = processItems(row.commonFileListAfter || []);
-  const { images: issueImgs, videos: issueVids } = processItems(row.productionIssues || []);
-  
-  beforeProductionImgs.value = beforeImgs;
-  beforeProductionVideos.value = beforeVids;
-  
-  afterProductionImgs.value = afterImgs;
-  afterProductionVideos.value = afterVids;
-  
-  productionIssuesImgs.value = issueImgs;
-  productionIssuesVideos.value = issueVids;
-  
-  dialogVisitable.value = true;
-};
+    // 纭繚鎵�鏈夐潪 http 寮�澶寸殑 URL 閮芥嫾鎺� baseUrl
+    if (fileUrl && !fileUrl.startsWith("http")) {
+      // 纭繚璺緞浠� / 寮�澶�
+      if (!fileUrl.startsWith("/")) {
+        fileUrl = "/" + fileUrl;
+      }
+      // 鎷兼帴 baseUrl
+      fileUrl = javaApi + fileUrl;
+    }
 
-// 鏄剧ず濯掍綋锛堝浘鐗� or 瑙嗛锛�
-function showMedia(mediaArray, index, type) {
-  mediaList.value = mediaArray;
-  currentMediaIndex.value = index;
-  mediaType.value = type;
-  isMediaViewerVisible.value = true;
-}
+    return fileUrl;
+  }
 
-// 鍏抽棴濯掍綋鏌ョ湅鍣�
-function closeMediaViewer() {
-  isMediaViewerVisible.value = false;
-  mediaList.value = [];
-  mediaType.value = 'image';
-}
+  // 澶勭悊姣忎竴绫绘暟鎹細鍒嗙鍥剧墖鍜岃棰�
+  function processItems(items) {
+    const images = [];
+    const videos = [];
 
-// 琛ㄥ崟鍏抽棴鏂规硶
-const cancel = () => {
-  dialogVisitable.value = false;
-};
+    // 妫�鏌� items 鏄惁瀛樺湪涓斾负鏁扮粍
+    if (!items || !Array.isArray(items)) {
+      return { images, videos };
+    }
 
-defineExpose({ openDialog });
+    items.forEach(item => {
+      if (!item || !item.url) return;
+
+      // 澶勭悊鏂囦欢 URL
+      const fileUrl = processFileUrl(item.url);
+
+      // 鏍规嵁鏂囦欢鎵╁睍鍚嶅垽鏂槸鍥剧墖杩樻槸瑙嗛
+      const urlLower = fileUrl.toLowerCase();
+      if (urlLower.match(/\.(jpg|jpeg|png|gif|bmp|webp)$/)) {
+        images.push(fileUrl);
+      } else if (urlLower.match(/\.(mp4|avi|mov|wmv|flv|mkv|webm)$/)) {
+        videos.push(fileUrl);
+      } else if (item.contentType) {
+        // 濡傛灉鏈� contentType锛屼娇鐢� contentType 鍒ゆ柇
+        if (item.contentType.startsWith("image/")) {
+          images.push(fileUrl);
+        } else if (item.contentType.startsWith("video/")) {
+          videos.push(fileUrl);
+        }
+      }
+    });
+
+    return { images, videos };
+  }
+
+  // 鎵撳紑寮圭獥骞跺姞杞芥暟鎹�
+  const openDialog = async row => {
+    // 浣跨敤姝g‘鐨勫瓧娈靛悕锛歝ommonFileListBefore, commonFileListAfter
+    // productionIssues 鍙兘涓嶅瓨鍦紝浣跨敤绌烘暟缁�
+    const { images: beforeImgs, videos: beforeVids } = processItems(
+      row.commonFileListBefore || []
+    );
+    const { images: afterImgs, videos: afterVids } = processItems(
+      row.commonFileListAfter || []
+    );
+    const { images: issueImgs, videos: issueVids } = processItems(
+      row.productionIssues || []
+    );
+
+    beforeProductionImgs.value = beforeImgs;
+    beforeProductionVideos.value = beforeVids;
+
+    afterProductionImgs.value = afterImgs;
+    afterProductionVideos.value = afterVids;
+
+    productionIssuesImgs.value = issueImgs;
+    productionIssuesVideos.value = issueVids;
+
+    dialogVisitable.value = true;
+  };
+
+  // 鏄剧ず濯掍綋锛堝浘鐗� or 瑙嗛锛�
+  function showMedia(mediaArray, index, type) {
+    mediaList.value = mediaArray;
+    currentMediaIndex.value = index;
+    mediaType.value = type;
+    isMediaViewerVisible.value = true;
+  }
+
+  // 鍏抽棴濯掍綋鏌ョ湅鍣�
+  function closeMediaViewer() {
+    isMediaViewerVisible.value = false;
+    mediaList.value = [];
+    mediaType.value = "image";
+  }
+
+  // 琛ㄥ崟鍏抽棴鏂规硶
+  const cancel = () => {
+    dialogVisitable.value = false;
+  };
+
+  defineExpose({ openDialog });
 </script>
 <style scoped lang="scss">
-.upload-container {
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  padding: 20px;
-  border: 1px solid #dcdfe6;
-  box-sizing: border-box;
-  
-  .form-container {
-    flex: 1;
-    width: 100%;
+  .upload-container {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    padding: 20px;
+    border: 1px solid #dcdfe6;
+    box-sizing: border-box;
     margin-bottom: 20px;
-  }
-}
 
-.title {
-  font-size: 14px;
-  color: #165dff;
-  line-height: 20px;
-  font-weight: 600;
-  padding-left: 10px;
-  position: relative;
-  margin: 6px 0;
-  
-  &::before {
-    content: "";
-    position: absolute;
+    .form-container {
+      flex: 1;
+      width: 100%;
+      margin-bottom: 20px;
+    }
+  }
+
+  .title {
+    font-size: 14px;
+    color: #165dff;
+    line-height: 20px;
+    font-weight: 600;
+    padding-left: 10px;
+    position: relative;
+    margin: 6px 0;
+
+    &::before {
+      content: "";
+      position: absolute;
+      left: 0;
+      top: 3px;
+      width: 4px;
+      height: 14px;
+      background-color: #165dff;
+    }
+  }
+
+  .media-viewer-overlay {
+    position: fixed;
+    top: 0;
     left: 0;
-    top: 3px;
-    width: 4px;
-    height: 14px;
-    background-color: #165dff;
+    right: 0;
+    bottom: 0;
+    background-color: rgba(0, 0, 0, 0.8);
+    z-index: 9999;
+    display: flex;
+    align-items: center;
+    justify-content: center;
   }
-}
 
-.media-viewer-overlay {
-  position: fixed;
-  top: 0;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  background-color: rgba(0, 0, 0, 0.8);
-  z-index: 9999;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-}
-
-.media-viewer-content {
-  position: relative;
-  max-width: 90vw;
-  max-height: 90vh;
-  overflow: hidden;
-}
+  .media-viewer-content {
+    position: relative;
+    max-width: 90vw;
+    max-height: 90vh;
+    overflow: hidden;
+  }
 </style>
\ No newline at end of file
diff --git a/src/views/equipmentManagement/inspectionManagement/index.vue b/src/views/equipmentManagement/inspectionManagement/index.vue
index 35f82d5..53f9345 100644
--- a/src/views/equipmentManagement/inspectionManagement/index.vue
+++ b/src/views/equipmentManagement/inspectionManagement/index.vue
@@ -151,6 +151,78 @@
       },
     },
     {
+      prop: "inspectionDeadlinetxt",
+      label: "鏈熼檺",
+      minWidth: 150,
+    },
+    {
+      prop: "inspectionStatus",
+      label: "宸℃鐘舵��",
+      minWidth: 150,
+      dataType: "tag",
+      formatType: params => {
+        const typeMap = {
+          宸插畬鎴�: "info",
+          鏈贰妫�: "warning",
+          瓒呮湡: "danger",
+        };
+        return typeMap[params] || "info";
+      },
+    },
+    {
+      prop: "frequencyDetail",
+      label: "寮�濮嬫棩鏈熶笌鏃堕棿",
+      minWidth: 150,
+      formatter: (row, column, cellValue) => {
+        // 鍏堝垽鏂槸鍚︽槸瀛楃涓�
+        if (typeof cellValue !== "string") return "";
+        let val = cellValue;
+        const replacements = {
+          MON: "鍛ㄤ竴",
+          TUE: "鍛ㄤ簩",
+          WED: "鍛ㄤ笁",
+          THU: "鍛ㄥ洓",
+          FRI: "鍛ㄤ簲",
+          SAT: "鍛ㄥ叚",
+          SUN: "鍛ㄦ棩",
+        };
+        // 浣跨敤姝e垯涓�娆℃�ф浛鎹㈡墍鏈夊尮閰嶉」
+        return val.replace(
+          /MON|TUE|WED|THU|FRI|SAT|SUN/g,
+          match => replacements[match]
+        );
+      },
+    },
+    { prop: "registrant", label: "鐧昏浜�", minWidth: 100 },
+    { prop: "createTime", label: "鐧昏鏃ユ湡", minWidth: 100 },
+  ]);
+  const columns1 = ref([
+    { prop: "taskName", label: "宸℃浠诲姟鍚嶇О", minWidth: 160 },
+    { prop: "remarks", label: "澶囨敞", minWidth: 150 },
+    { prop: "inspector", label: "鎵ц宸℃浜�", minWidth: 150, slot: "inspector" },
+    {
+      prop: "frequencyType",
+      label: "棰戞",
+      minWidth: 150,
+      // formatter: (_, __, val) => ({
+      //   DAILY: "姣忔棩",
+      //   WEEKLY: "姣忓懆",
+      //   MONTHLY: "姣忔湀",
+      //   QUARTERLY: "瀛e害"
+      // }[val] || "")
+      formatData: params => {
+        return params === "DAILY"
+          ? "姣忔棩"
+          : params === "WEEKLY"
+          ? "姣忓懆"
+          : params === "MONTHLY"
+          ? "姣忔湀"
+          : params === "QUARTERLY"
+          ? "瀛e害"
+          : "";
+      },
+    },
+    {
       prop: "frequencyDetail",
       label: "寮�濮嬫棩鏈熶笌鏃堕棿",
       minWidth: 150,
@@ -221,7 +293,7 @@
     if (value === "taskManage") {
       const operationColumn = getOperationColumn(["edit"]);
       tableColumns.value = [
-        ...columns.value,
+        ...columns1.value,
         ...(operationColumn ? [operationColumn] : []),
       ];
       operationsArr.value = ["edit"];
@@ -293,6 +365,13 @@
 
           return processedItem;
         });
+        tableData.value.forEach(item => {
+          item.inspectionStatus = getFileStatus(item);
+          item.inspectionDeadlinetxt =
+            item.frequencyType === "DAILY"
+              ? item.inspectionDeadline + "灏忔椂"
+              : item.inspectionDeadline + "澶�";
+        });
         total.value = res.data.total || 0;
       })
       .finally(() => {
@@ -345,7 +424,61 @@
       })
       .catch(() => {});
   };
-
+  const getFileStatus = record => {
+    console.log(record);
+    if (record.takePhone) {
+      if (record.commonFileListBefore && record.commonFileListBefore.length) {
+        return "宸插畬鎴�";
+      }
+      if (record.frequencyType == "DAILY") {
+        if (Number(record.inspectionDeadline) && record.createTime) {
+          // 璁$畻鏃堕棿宸紙灏忔椂锛�
+          const now = new Date().getTime();
+          const createTime = new Date(record.createTime).getTime();
+          const hoursDiff = (now - createTime) / (1000 * 60 * 60);
+          if (hoursDiff > Number(record.inspectionDeadline)) {
+            return "瓒呮湡";
+          }
+        }
+      } else {
+        if (Number(record.inspectionDeadline) && record.createTime) {
+          // 璁$畻鏃堕棿宸紙澶╋級
+          const now = new Date().getTime();
+          const createTime = new Date(record.createTime).getTime();
+          const daysDiff = (now - createTime) / (1000 * 60 * 60 * 24);
+          if (daysDiff > Number(record.inspectionDeadline)) {
+            return "瓒呮湡";
+          }
+        }
+      }
+      return "鏈贰妫�";
+    } else if (record.inspectionSubmitted) {
+      return "宸插畬鎴�";
+    } else {
+      if (record.frequencyType == "DAILY") {
+        if (Number(record.inspectionDeadline) && record.createTime) {
+          // 璁$畻鏃堕棿宸紙灏忔椂锛�
+          const now = new Date().getTime();
+          const createTime = new Date(record.createTime).getTime();
+          const hoursDiff = (now - createTime) / (1000 * 60 * 60);
+          if (hoursDiff > Number(record.inspectionDeadline)) {
+            return "瓒呮湡";
+          }
+        }
+      } else {
+        if (Number(record.inspectionDeadline) && record.createTime) {
+          // 璁$畻鏃堕棿宸紙澶╋級
+          const now = new Date().getTime();
+          const createTime = new Date(record.createTime).getTime();
+          const daysDiff = (now - createTime) / (1000 * 60 * 60 * 24);
+          if (daysDiff > Number(record.inspectionDeadline)) {
+            return "瓒呮湡";
+          }
+        }
+      }
+      return "鏈贰妫�";
+    }
+  };
   // 澶氶�夊彉鏇�
   const handleSelectionChange = selection => {
     selectedRows.value = selection;
diff --git a/src/views/equipmentManagement/upkeep/index.vue b/src/views/equipmentManagement/upkeep/index.vue
index 543e37b..327f83c 100644
--- a/src/views/equipmentManagement/upkeep/index.vue
+++ b/src/views/equipmentManagement/upkeep/index.vue
@@ -1,694 +1,704 @@
 <template>
   <div class="app-container">
-    <el-tabs v-model="activeTab" @tab-change="handleTabChange">
+    <el-tabs v-model="activeTab"
+             @tab-change="handleTabChange">
       <!-- 瀹氭椂浠诲姟绠$悊tab -->
-      <el-tab-pane label="瀹氭椂浠诲姟绠$悊" name="scheduled">
+      <el-tab-pane label="瀹氭椂浠诲姟绠$悊"
+                   name="scheduled">
         <div class="search_form">
-          <el-form :model="scheduledFilters" :inline="true">
+          <el-form :model="scheduledFilters"
+                   :inline="true">
             <el-form-item label="浠诲姟鍚嶇О">
-              <el-input
-                  v-model="scheduledFilters.taskName"
-                  style="width: 240px"
-                  placeholder="璇疯緭鍏ヤ换鍔″悕绉�"
-                  clearable
-                  :prefix-icon="Search"
-                  @change="getScheduledTableData"
-              />
+              <el-input v-model="scheduledFilters.taskName"
+                        style="width: 240px"
+                        placeholder="璇疯緭鍏ヤ换鍔″悕绉�"
+                        clearable
+                        :prefix-icon="Search"
+                        @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-select v-model="scheduledFilters.status"
+                         placeholder="璇烽�夋嫨浠诲姟鐘舵��"
+                         clearable
+                         style="width: 200px">
+                <el-option label="鍚敤"
+                           value="1" />
+                <el-option label="鍋滅敤"
+                           value="0" />
               </el-select>
             </el-form-item>
             <el-form-item>
-              <el-button type="primary" @click="getScheduledTableData">鎼滅储</el-button>
+              <el-button type="primary"
+                         @click="getScheduledTableData">鎼滅储</el-button>
               <el-button @click="resetScheduledFilters">閲嶇疆</el-button>
             </el-form-item>
           </el-form>
         </div>
         <div class="table_list">
           <div class="actions">
-            <el-text class="mx-1" size="large">瀹氭椂浠诲姟绠$悊</el-text>
+            <el-text class="mx-1"
+                     size="large">瀹氭椂浠诲姟绠$悊</el-text>
             <div>
-              <el-button type="primary" icon="Plus" @click="addScheduledTask">
+              <el-button type="primary"
+                         icon="Plus"
+                         @click="addScheduledTask">
                 鏂板浠诲姟
               </el-button>
-              <el-button
-                type="danger"
-                icon="Delete"
-                :disabled="scheduledMultipleList.length <= 0"
-                @click="delScheduledTaskByIds(scheduledMultipleList.map((item) => item.id))"
-              >
+              <el-button type="danger"
+                         icon="Delete"
+                         :disabled="scheduledMultipleList.length <= 0"
+                         @click="delScheduledTaskByIds(scheduledMultipleList.map((item) => item.id))">
                 鎵归噺鍒犻櫎
               </el-button>
             </div>
           </div>
-          <PIMTable
-            rowKey="id"
-            isSelection
-            :column="scheduledColumns"
-            :tableData="scheduledDataList"
-            :page="{
+          <PIMTable rowKey="id"
+                    isSelection
+                    :column="scheduledColumns"
+                    :tableData="scheduledDataList"
+                    :page="{
               current: scheduledPagination.currentPage,
               size: scheduledPagination.pageSize,
               total: scheduledPagination.total,
             }"
-            @selection-change="handleScheduledSelectionChange"
-            @pagination="changeScheduledPage"
-          >
+                    @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>
+              <el-tag v-if="row.status === 1"
+                      type="success">鍚敤</el-tag>
+              <el-tag v-if="row.status === 0"
+                      type="danger">鍋滅敤</el-tag>
             </template>
             <template #operation="{ row }">
-              <el-button
-                type="primary"
-                link
-                @click="editScheduledTask(row)"
-              >
+              <el-button type="primary"
+                         link
+                         @click="editScheduledTask(row)">
                 缂栬緫
               </el-button>
-              <el-button
-                type="danger"
-                link
-                @click="delScheduledTaskByIds(row.id)"
-              >
+              <el-button type="danger"
+                         link
+                         @click="delScheduledTaskByIds(row.id)">
                 鍒犻櫎
               </el-button>
             </template>
           </PIMTable>
         </div>
       </el-tab-pane>
-
       <!-- 浠诲姟璁板綍tab锛堝師璁惧淇濆吇椤甸潰锛� -->
-      <el-tab-pane label="浠诲姟璁板綍" name="record">
+      <el-tab-pane label="浠诲姟璁板綍"
+                   name="record">
         <div class="search_form">
-          <el-form :model="filters" :inline="true">
+          <el-form :model="filters"
+                   :inline="true">
             <el-form-item label="璁惧鍚嶇О">
-              <el-input
-                  v-model="filters.deviceName"
-                  style="width: 240px"
-                  placeholder="璇疯緭鍏ヨ澶囧悕绉�"
-                  clearable
-                  :prefix-icon="Search"
-                  @change="getTableData"
-              />
+              <el-input v-model="filters.deviceName"
+                        style="width: 240px"
+                        placeholder="璇疯緭鍏ヨ澶囧悕绉�"
+                        clearable
+                        :prefix-icon="Search"
+                        @change="getTableData" />
             </el-form-item>
             <el-form-item label="璁″垝淇濆吇鏃ユ湡">
-              <el-date-picker
-                  v-model="filters.maintenancePlanTime"
-                  type="date"
-                  placeholder="璇烽�夋嫨璁″垝淇濆吇鏃ユ湡"
-                  size="default"
-                  @change="(date) => handleDateChange(date,2)"
-              />
+              <el-date-picker v-model="filters.maintenancePlanTime"
+                              type="date"
+                              placeholder="璇烽�夋嫨璁″垝淇濆吇鏃ユ湡"
+                              size="default"
+                              @change="(date) => handleDateChange(date,2)" />
             </el-form-item>
             <el-form-item label="瀹為檯淇濆吇鏃ユ湡">
-              <el-date-picker
-                  v-model="filters.maintenanceActuallyTime"
-                  type="date"
-                  placeholder="璇烽�夋嫨瀹為檯淇濆吇鏃ユ湡"
-                  size="default"
-                  @change="(date) => handleDateChange(date,1)"
-              />
+              <el-date-picker v-model="filters.maintenanceActuallyTime"
+                              type="date"
+                              placeholder="璇烽�夋嫨瀹為檯淇濆吇鏃ユ湡"
+                              size="default"
+                              @change="(date) => handleDateChange(date,1)" />
             </el-form-item>
             <el-form-item label="瀹為檯淇濆吇浜�">
-              <el-input
-                  v-model="filters.maintenanceActuallyName"
-                  style="width: 240px"
-                  placeholder="璇疯緭鍏ュ疄闄呬繚鍏讳汉"
-                  clearable
-                  :prefix-icon="Search"
-                  @change="getTableData"
-              />
+              <el-input v-model="filters.maintenanceActuallyName"
+                        style="width: 240px"
+                        placeholder="璇疯緭鍏ュ疄闄呬繚鍏讳汉"
+                        clearable
+                        :prefix-icon="Search"
+                        @change="getTableData" />
             </el-form-item>
             <el-form-item>
-              <el-button type="primary" @click="getTableData">鎼滅储</el-button>
+              <el-button type="primary"
+                         @click="getTableData">鎼滅储</el-button>
               <el-button @click="resetFilters">閲嶇疆</el-button>
             </el-form-item>
           </el-form>
         </div>
         <div class="table_list">
           <div class="actions">
-            <el-text class="mx-1" size="large">浠诲姟璁板綍</el-text>
+            <el-text class="mx-1"
+                     size="large">浠诲姟璁板綍</el-text>
             <div>
-              <el-button type="success" icon="Van" @click="addPlan">
+              <el-button type="success"
+                         icon="Van"
+                         @click="addPlan">
                 鏂板璁″垝
               </el-button>
               <el-button @click="handleOut">
                 瀵煎嚭
               </el-button>
-              <el-button
-                type="danger"
-                icon="Delete"
-                :disabled="multipleList.length <= 0 || hasFinishedStatus"
-                @click="delRepairByIds(multipleList.map((item) => item.id))"
-              >
+              <el-button type="danger"
+                         icon="Delete"
+                         :disabled="multipleList.length <= 0 || hasFinishedStatus"
+                         @click="delRepairByIds(multipleList.map((item) => item.id))">
                 鎵归噺鍒犻櫎
               </el-button>
             </div>
           </div>
-         <PIMTable
-        rowKey="id"
-        isSelection
-        :column="columns"
-        :tableData="dataList"
-        :page="{
+          <PIMTable rowKey="id"
+                    isSelection
+                    :column="columns"
+                    :tableData="dataList"
+                    :page="{
           current: pagination.currentPage,
           size: pagination.pageSize,
           total: pagination.total,
         }"
-        @selection-change="handleSelectionChange"
-        @pagination="changePage"
-      >
-        <template #maintenanceResultRef="{ row }">
-          <div>{{ row.maintenanceResult || '-' }}</div>
-        </template>
-        <template #statusRef="{ row }">
-          <el-tag v-if="row.status === 2" type="danger">澶辫触</el-tag>
-          <el-tag v-if="row.status === 1" type="success">瀹岀粨</el-tag>
-          <el-tag v-if="row.status === 0" type="warning">寰呬繚鍏�</el-tag>
-        </template>
-        <template #operation="{ row }">
-          <!-- 杩欎釜鍔熻兘璺熸柊澧炰繚鍏诲姛鑳戒竴妯′竴鏍凤紝鏈夊暐鎰忎箟锛� -->
-          <!-- <el-button
+                    @selection-change="handleSelectionChange"
+                    @pagination="changePage">
+            <template #maintenanceResultRef="{ row }">
+              <div>{{ row.maintenanceResult || '-' }}</div>
+            </template>
+            <template #statusRef="{ row }">
+              <el-tag v-if="row.status === 2"
+                      type="danger">澶辫触</el-tag>
+              <el-tag v-if="row.status === 1"
+                      type="success">瀹岀粨</el-tag>
+              <el-tag v-if="row.status === 0"
+                      type="warning">寰呬繚鍏�</el-tag>
+            </template>
+            <template #operation="{ row }">
+              <!-- 杩欎釜鍔熻兘璺熸柊澧炰繚鍏诲姛鑳戒竴妯′竴鏍凤紝鏈夊暐鎰忎箟锛� -->
+              <!-- <el-button
               type="primary"
               text
               @click="addMaintain(row)"
           >
             鏂板淇濆吇
           </el-button> -->
-          <el-button
-            type="primary"
-            link
-            :disabled="row.status === 1"
-            @click="editPlan(row.id)"
-          >
-            缂栬緫
-          </el-button>
-          <el-button
-            type="success"
-            link
-            :disabled="row.status === 1"
-            @click="addMaintain(row)"
-          >
-            淇濆吇
-          </el-button>
-          <el-button
-            type="danger"
-            link
-            :disabled="row.status === 1"
-            @click="delRepairByIds(row.id)"
-          >
-            鍒犻櫎
-          </el-button>
-          <el-button
-            type="primary"
-            link
-            @click="openFileDialog(row)"
-          >
-            闄勪欢
-          </el-button>
-        </template>
-      </PIMTable>
+              <el-button type="primary"
+                         link
+                         :disabled="row.status === 1"
+                         @click="editPlan(row.id)">
+                缂栬緫
+              </el-button>
+              <el-button type="success"
+                         link
+                         :disabled="row.status === 1"
+                         @click="addMaintain(row)">
+                淇濆吇
+              </el-button>
+              <el-button type="danger"
+                         link
+                         :disabled="row.status === 1"
+                         @click="delRepairByIds(row.id)">
+                鍒犻櫎
+              </el-button>
+              <el-button type="primary"
+                         link
+                         @click="openFileDialog(row)">
+                闄勪欢
+              </el-button>
+            </template>
+          </PIMTable>
         </div>
       </el-tab-pane>
     </el-tabs>
-    <PlanModal ref="planModalRef" @ok="getTableData" />
-        <MaintenanceModal ref="maintainModalRef" @ok="getTableData" />
-        <FormDia ref="formDiaRef" @closeDia="getScheduledTableData" />
-    <FileListDialog 
-      ref="fileListDialogRef"
-      v-model="fileDialogVisible"
-      :show-upload-button="true"
-      :show-delete-button="true"
-      :delete-method="handleAttachmentDelete"
-      :name-column-label="'闄勪欢鍚嶇О'"
-      :rulesRegulationsManagementId="currentMaintenanceTaskId"
-      @upload="handleAttachmentUpload" />
+    <PlanModal ref="planModalRef"
+               @ok="getTableData" />
+    <MaintenanceModal ref="maintainModalRef"
+                      @ok="getTableData" />
+    <FormDia ref="formDiaRef"
+             @closeDia="getScheduledTableData" />
+    <FileListDialog ref="fileListDialogRef"
+                    v-model="fileDialogVisible"
+                    :show-upload-button="true"
+                    :show-delete-button="true"
+                    :delete-method="handleAttachmentDelete"
+                    :name-column-label="'闄勪欢鍚嶇О'"
+                    :rulesRegulationsManagementId="currentMaintenanceTaskId"
+                    @upload="handleAttachmentUpload" />
   </div>
 </template>
 
 <script setup>
-import { ref, onMounted, reactive, getCurrentInstance, nextTick, computed } from 'vue'
-import { Search } from '@element-plus/icons-vue'
-import { ElMessage, ElMessageBox } from 'element-plus'
-import PlanModal from './Form/PlanModal.vue'
-import MaintenanceModal from './Form/MaintenanceModal.vue'
-import FormDia from './Form/formDia.vue'
-import FileListDialog from '@/components/Dialog/FileListDialog.vue'
-import {
-  getUpkeepPage,
-  delUpkeep,
-  deviceMaintenanceTaskList,
-  deviceMaintenanceTaskDel,
-} from '@/api/equipmentManagement/upkeep'
-import {
-  listMaintenanceTaskFiles,
-  addMaintenanceTaskFile,
-  delMaintenanceTaskFile,
-} from '@/api/equipmentManagement/maintenanceTaskFile'
-import dayjs from 'dayjs'
+  import {
+    ref,
+    onMounted,
+    reactive,
+    getCurrentInstance,
+    nextTick,
+    computed,
+  } from "vue";
+  import { Search } from "@element-plus/icons-vue";
+  import { ElMessage, ElMessageBox } from "element-plus";
+  import PlanModal from "./Form/PlanModal.vue";
+  import MaintenanceModal from "./Form/MaintenanceModal.vue";
+  import FormDia from "./Form/formDia.vue";
+  import FileListDialog from "@/components/Dialog/FileListDialog.vue";
+  import {
+    getUpkeepPage,
+    delUpkeep,
+    deviceMaintenanceTaskList,
+    deviceMaintenanceTaskDel,
+  } from "@/api/equipmentManagement/upkeep";
+  import {
+    listMaintenanceTaskFiles,
+    addMaintenanceTaskFile,
+    delMaintenanceTaskFile,
+  } from "@/api/equipmentManagement/maintenanceTaskFile";
+  import dayjs from "dayjs";
 
-const { proxy } = getCurrentInstance()
+  const { proxy } = getCurrentInstance();
 
-// Tab鐩稿叧
-const activeTab = ref('scheduled')
+  // Tab鐩稿叧
+  const activeTab = ref("scheduled");
 
-// 璁″垝寮圭獥鎺у埗鍣�
-const planModalRef = ref()
-// 淇濆吇寮圭獥鎺у埗鍣�
-const maintainModalRef = ref()
-// 瀹氭椂浠诲姟寮圭獥鎺у埗鍣�
-const formDiaRef = ref()
-// 闄勪欢寮圭獥
-const fileListDialogRef = ref(null)
-const fileDialogVisible = ref(false)
-const currentMaintenanceTaskId = ref(null)
+  // 璁″垝寮圭獥鎺у埗鍣�
+  const planModalRef = ref();
+  // 淇濆吇寮圭獥鎺у埗鍣�
+  const maintainModalRef = ref();
+  // 瀹氭椂浠诲姟寮圭獥鎺у埗鍣�
+  const formDiaRef = ref();
+  // 闄勪欢寮圭獥
+  const fileListDialogRef = ref(null);
+  const fileDialogVisible = ref(false);
+  const currentMaintenanceTaskId = ref(null);
 
-// 浠诲姟璁板綍tab锛堝師璁惧淇濆吇椤甸潰锛夌浉鍏冲彉閲�
-const filters = reactive({
-  deviceName: '',
-  maintenancePlanTime: '',
-  maintenanceActuallyTime: '',
-  maintenanceActuallyName: '',
-})
+  // 浠诲姟璁板綍tab锛堝師璁惧淇濆吇椤甸潰锛夌浉鍏冲彉閲�
+  const filters = reactive({
+    deviceName: "",
+    maintenancePlanTime: "",
+    maintenanceActuallyTime: "",
+    maintenanceActuallyName: "",
+  });
 
-const dataList = ref([])
-const pagination = ref({
-  currentPage: 1,
-  pageSize: 10,
-  total: 0,
-})
-const multipleList = ref([])
+  const dataList = ref([]);
+  const pagination = ref({
+    currentPage: 1,
+    pageSize: 10,
+    total: 0,
+  });
+  const multipleList = ref([]);
 
-// 瀹氭椂浠诲姟绠$悊tab鐩稿叧鍙橀噺
-const scheduledFilters = reactive({
-  taskName: '',
-  status: '',
-})
+  // 瀹氭椂浠诲姟绠$悊tab鐩稿叧鍙橀噺
+  const scheduledFilters = reactive({
+    taskName: "",
+    status: "",
+  });
 
-const scheduledDataList = ref([])
-const scheduledPagination = reactive({
-  currentPage: 1,
-  pageSize: 10,
-  total: 0,
-})
-const scheduledMultipleList = ref([])
+  const scheduledDataList = ref([]);
+  const scheduledPagination = reactive({
+    currentPage: 1,
+    pageSize: 10,
+    total: 0,
+  });
+  const scheduledMultipleList = ref([]);
 
-// 瀹氭椂浠诲姟绠$悊琛ㄦ牸鍒楅厤缃�
-const scheduledColumns = ref([
-	{ prop: "taskName", label: "璁惧鍚嶇О"},
-	{
-		label: "瑙勬牸鍨嬪彿",
-		prop: "deviceModel",
-	},
-	{
-		prop: "frequencyType",
-		label: "棰戞",
-		minWidth: 150,
-		// PIMTable 浣跨敤鐨勬槸 formatData锛岃�屼笉鏄� Element-Plus 鐨� formatter
-		formatData: (cell) => ({
-			DAILY: "姣忔棩",
-			WEEKLY: "姣忓懆",
-			MONTHLY: "姣忔湀",
-			QUARTERLY: "瀛e害"
-		}[cell] || "")
-	},
-	{
-		prop: "frequencyDetail",
-		label: "寮�濮嬫棩鏈熶笌鏃堕棿",
-		minWidth: 150,
-		// 鍚屾牱鏀圭敤 formatData锛孭IMTable 鍐呴儴浼氭妸鍗曞厓鏍煎�间紶杩涙潵
-		formatData: (cell) => {
-			if (typeof cell !== 'string') return '';
-			let val = cell;
-			const replacements = {
-				MON: '鍛ㄤ竴',
-				TUE: '鍛ㄤ簩',
-				WED: '鍛ㄤ笁',
-				THU: '鍛ㄥ洓',
-				FRI: '鍛ㄤ簲',
-				SAT: '鍛ㄥ叚',
-				SUN: '鍛ㄦ棩'
-			};
-			// 浣跨敤姝e垯涓�娆℃�ф浛鎹㈡墍鏈夊尮閰嶉」
-			return val.replace(/MON|TUE|WED|THU|FRI|SAT|SUN/g, match => replacements[match]);
-		}
-	},
-	{ prop: "registrant", label: "鐧昏浜�", minWidth: 100 },
-	{ prop: "registrationDate", label: "鐧昏鏃ユ湡", minWidth: 100 },
-	{
-		fixed: "right",
-		label: "鎿嶄綔",
-		dataType: "slot",
-		slot: "operation",
-		align: "center",
-		width: "200px",
-	},
-])
+  // 瀹氭椂浠诲姟绠$悊琛ㄦ牸鍒楅厤缃�
+  const scheduledColumns = ref([
+    { prop: "taskName", label: "璁惧鍚嶇О" },
+    {
+      label: "瑙勬牸鍨嬪彿",
+      prop: "deviceModel",
+    },
+    {
+      prop: "frequencyType",
+      label: "棰戞",
+      minWidth: 150,
+      // PIMTable 浣跨敤鐨勬槸 formatData锛岃�屼笉鏄� Element-Plus 鐨� formatter
+      formatData: cell =>
+        ({
+          DAILY: "姣忔棩",
+          WEEKLY: "姣忓懆",
+          MONTHLY: "姣忔湀",
+          QUARTERLY: "瀛e害",
+        }[cell] || ""),
+    },
+    {
+      prop: "frequencyDetail",
+      label: "寮�濮嬫棩鏈熶笌鏃堕棿",
+      minWidth: 150,
+      // 鍚屾牱鏀圭敤 formatData锛孭IMTable 鍐呴儴浼氭妸鍗曞厓鏍煎�间紶杩涙潵
+      formatData: cell => {
+        if (typeof cell !== "string") return "";
+        let val = cell;
+        const replacements = {
+          MON: "鍛ㄤ竴",
+          TUE: "鍛ㄤ簩",
+          WED: "鍛ㄤ笁",
+          THU: "鍛ㄥ洓",
+          FRI: "鍛ㄤ簲",
+          SAT: "鍛ㄥ叚",
+          SUN: "鍛ㄦ棩",
+        };
+        // 浣跨敤姝e垯涓�娆℃�ф浛鎹㈡墍鏈夊尮閰嶉」
+        return val.replace(
+          /MON|TUE|WED|THU|FRI|SAT|SUN/g,
+          match => replacements[match]
+        );
+      },
+    },
+    { prop: "registrant", label: "鐧昏浜�", minWidth: 100 },
+    { prop: "registrationDate", label: "鐧昏鏃ユ湡", minWidth: 100 },
+    {
+      fixed: "right",
+      label: "鎿嶄綔",
+      dataType: "slot",
+      slot: "operation",
+      align: "center",
+      width: "200px",
+    },
+  ]);
 
-// 浠诲姟璁板綍琛ㄦ牸鍒楅厤缃紙鍘熻澶囦繚鍏昏〃鏍煎垪锛�
-const columns = ref([
-	{
-		label: "璁惧鍚嶇О",
-		align: "center",
-		prop: "deviceName",
-	},
-	{
-		label: "瑙勬牸鍨嬪彿",
-		align: "center",
-		prop: "deviceModel",
-	},
-	{
-		label: "璁″垝淇濆吇鏃ユ湡",
-		align: "center",
-		prop: "maintenancePlanTime",
-		formatData: (cell) => dayjs(cell).format("YYYY-MM-DD"),
-	},
-	{
-		label: "褰曞叆浜�",
-		align: "center",
-		prop: "createUserName",
-	},
-	// {
-	//   label: "褰曞叆鏃ユ湡",
-	//   align: "center",
-	//   prop: "createTime",
-	//   formatData: (cell) => dayjs(cell).format("YYYY-MM-DD HH:mm:ss"),
-	//   width: 200,
-	// },
-	{
-		label: "瀹為檯淇濆吇浜�",
-		align: "center",
-		prop: "maintenanceActuallyName",
-	},
-	{
-		label: "瀹為檯淇濆吇鏃ユ湡",
-		align: "center",
-		prop: "maintenanceActuallyTime",
-		formatData: (cell) =>
-			cell ? dayjs(cell).format("YYYY-MM-DD HH:mm:ss") : "-",
-	},
-	{
-		label: "淇濆吇缁撴灉",
-		align: "center",
-		prop: "maintenanceResult",
-		dataType: "slot",
-		slot: "maintenanceResultRef",
-	},
-	{
-		label: "鐘舵��",
-		align: "center",
-		prop: "status",
-		dataType: "slot",
-		slot: "statusRef",
-	},
-	{
-		fixed: "right",
-		label: "鎿嶄綔",
-		dataType: "slot",
-		slot: "operation",
-		align: "center",
-		width: "350px",
-	},
-])
+  // 浠诲姟璁板綍琛ㄦ牸鍒楅厤缃紙鍘熻澶囦繚鍏昏〃鏍煎垪锛�
+  const columns = ref([
+    {
+      label: "璁惧鍚嶇О",
+      align: "center",
+      prop: "deviceName",
+    },
+    {
+      label: "瑙勬牸鍨嬪彿",
+      align: "center",
+      prop: "deviceModel",
+    },
+    {
+      label: "璁″垝淇濆吇鏃ユ湡",
+      align: "center",
+      prop: "maintenancePlanTime",
+      formatData: cell => dayjs(cell).format("YYYY-MM-DD"),
+    },
+    {
+      label: "褰曞叆浜�",
+      align: "center",
+      prop: "createUserName",
+    },
+    // {
+    //   label: "褰曞叆鏃ユ湡",
+    //   align: "center",
+    //   prop: "createTime",
+    //   formatData: (cell) => dayjs(cell).format("YYYY-MM-DD HH:mm:ss"),
+    //   width: 200,
+    // },
+    {
+      label: "瀹為檯淇濆吇浜�",
+      align: "center",
+      prop: "maintenanceActuallyName",
+    },
+    {
+      label: "瀹為檯淇濆吇鏃ユ湡",
+      align: "center",
+      prop: "maintenanceActuallyTime",
+      formatData: cell =>
+        cell ? dayjs(cell).format("YYYY-MM-DD HH:mm:ss") : "-",
+    },
+    {
+      label: "淇濆吇缁撴灉",
+      align: "center",
+      prop: "maintenanceResult",
+      dataType: "slot",
+      slot: "maintenanceResultRef",
+    },
+    {
+      label: "鐘舵��",
+      align: "center",
+      prop: "status",
+      dataType: "slot",
+      slot: "statusRef",
+    },
+    {
+      fixed: "right",
+      label: "鎿嶄綔",
+      dataType: "slot",
+      slot: "operation",
+      align: "center",
+      width: "350px",
+    },
+  ]);
 
-// Tab鍒囨崲澶勭悊
-const handleTabChange = (tabName) => {
-  if (tabName === 'record') {
-    getTableData()
-  } else if (tabName === 'scheduled') {
-    getScheduledTableData()
-  }
-}
-
-// 瀹氭椂浠诲姟绠$悊鐩稿叧鏂规硶
-const getScheduledTableData = async () => {
-  try {
-    const params = {
-      current: scheduledPagination.currentPage,
-      size: scheduledPagination.pageSize,
-      taskName: scheduledFilters.taskName || undefined,
-      status: scheduledFilters.status || undefined,
+  // Tab鍒囨崲澶勭悊
+  const handleTabChange = tabName => {
+    if (tabName === "record") {
+      getTableData();
+    } else if (tabName === "scheduled") {
+      getScheduledTableData();
     }
-    const { code, data } = await deviceMaintenanceTaskList(params)
-    if (code === 200) {
-      scheduledDataList.value = data?.records || []
-      scheduledPagination.total = data?.total || 0
+  };
+
+  // 瀹氭椂浠诲姟绠$悊鐩稿叧鏂规硶
+  const getScheduledTableData = async () => {
+    try {
+      const params = {
+        current: scheduledPagination.currentPage,
+        size: scheduledPagination.pageSize,
+        taskName: scheduledFilters.taskName || undefined,
+        status: scheduledFilters.status || undefined,
+      };
+      const { code, data } = await deviceMaintenanceTaskList(params);
+      if (code === 200) {
+        scheduledDataList.value = data?.records || [];
+        scheduledPagination.total = data?.total || 0;
+      }
+    } catch (error) {
+      ElMessage.error("鑾峰彇瀹氭椂浠诲姟鍒楄〃澶辫触");
     }
-  } catch (error) {
-    ElMessage.error('鑾峰彇瀹氭椂浠诲姟鍒楄〃澶辫触')
-  }
-}
+  };
 
-const resetScheduledFilters = () => {
-  scheduledFilters.taskName = ''
-  scheduledFilters.status = ''
-  getScheduledTableData()
-}
+  const resetScheduledFilters = () => {
+    scheduledFilters.taskName = "";
+    scheduledFilters.status = "";
+    getScheduledTableData();
+  };
 
-const handleScheduledSelectionChange = (selection) => {
-  scheduledMultipleList.value = selection
-}
+  const handleScheduledSelectionChange = selection => {
+    scheduledMultipleList.value = selection;
+  };
 
-const changeScheduledPage = (page) => {
-  scheduledPagination.currentPage = page.page
-  scheduledPagination.pageSize = page.limit
-  getScheduledTableData()
-}
+  const changeScheduledPage = page => {
+    scheduledPagination.currentPage = page.page;
+    scheduledPagination.pageSize = page.limit;
+    getScheduledTableData();
+  };
 
-const addScheduledTask = () => {
-  nextTick(() => {
-		formDiaRef.value?.openDialog('add');
-	});
-}
+  const addScheduledTask = () => {
+    nextTick(() => {
+      formDiaRef.value?.openDialog("add");
+    });
+  };
 
-const editScheduledTask = (row) => {
-  if (row) {
-		nextTick(() => {
-			formDiaRef.value?.openDialog('edit', row);
-		});
-  }
-}
+  const editScheduledTask = row => {
+    if (row) {
+      nextTick(() => {
+        formDiaRef.value?.openDialog("edit", row);
+      });
+    }
+  };
 
-const delScheduledTaskByIds = async (ids) => {
-  try {
-    await ElMessageBox.confirm('纭畾鍒犻櫎閫変腑鐨勫畾鏃朵换鍔″悧锛�', '鎻愮ず', {
-      type: 'warning',
+  const delScheduledTaskByIds = async ids => {
+    try {
+      await ElMessageBox.confirm("纭畾鍒犻櫎閫変腑鐨勫畾鏃朵换鍔″悧锛�", "鎻愮ず", {
+        type: "warning",
+      });
+      const payload = Array.isArray(ids) ? ids : [ids];
+      await deviceMaintenanceTaskDel(payload);
+      ElMessage.success("鍒犻櫎瀹氭椂浠诲姟鎴愬姛");
+      getScheduledTableData();
+    } catch (error) {
+      // 鐢ㄦ埛鍙栨秷鍒犻櫎
+    }
+  };
+
+  const handleScheduledOut = () => {
+    ElMessage.info("瀵煎嚭瀹氭椂浠诲姟鍔熻兘寰呭疄鐜�");
+  };
+
+  // 浠诲姟璁板綍鐩稿叧鏂规硶锛堝師璁惧淇濆吇椤甸潰鏂规硶锛�
+  const getTableData = async () => {
+    try {
+      const params = {
+        current: pagination.value.currentPage,
+        size: pagination.value.pageSize,
+        deviceName: filters.deviceName || undefined,
+        maintenancePlanTime: filters.maintenancePlanTime
+          ? dayjs(filters.maintenancePlanTime).format("YYYY-MM-DD")
+          : undefined,
+        maintenanceActuallyTime: filters.maintenanceActuallyTime
+          ? dayjs(filters.maintenanceActuallyTime).format("YYYY-MM-DD")
+          : undefined,
+        maintenanceActuallyName: filters.maintenanceActuallyName || undefined,
+      };
+
+      const { code, data } = await getUpkeepPage(params);
+      if (code === 200) {
+        dataList.value = data.records;
+        pagination.value.total = data.total;
+      }
+    } catch (error) {
+      console.log(error);
+    }
+  };
+
+  const resetFilters = () => {
+    filters.deviceName = "";
+    filters.maintenancePlanTime = "";
+    filters.maintenanceActuallyTime = "";
+    filters.maintenanceActuallyName = "";
+    getTableData();
+  };
+
+  const handleSelectionChange = selection => {
+    multipleList.value = selection;
+  };
+
+  // 妫�鏌ラ�変腑鐨勮褰曚腑鏄惁鏈夊畬缁撶姸鎬佺殑
+  const hasFinishedStatus = computed(() => {
+    return multipleList.value.some(item => item.status === 1);
+  });
+
+  const changePage = page => {
+    pagination.value.currentPage = page.page;
+    pagination.value.pageSize = page.limit;
+    getTableData();
+  };
+
+  const addMaintain = row => {
+    maintainModalRef.value.open(row.id, row);
+  };
+
+  const addPlan = () => {
+    planModalRef.value.openModal();
+  };
+
+  const editPlan = id => {
+    planModalRef.value.openEdit(id);
+  };
+
+  const delRepairByIds = async ids => {
+    // 妫�鏌ユ槸鍚︽湁瀹岀粨鐘舵�佺殑璁板綍
+    const hasFinished = multipleList.value.some(item => item.status === 1);
+    if (hasFinished) {
+      ElMessage.warning("涓嶈兘鍒犻櫎鐘舵�佷负瀹岀粨鐨勮褰�");
+      return;
+    }
+
+    try {
+      await ElMessageBox.confirm("纭鍒犻櫎淇濆吇鏁版嵁, 姝ゆ搷浣滀笉鍙��?", "璀﹀憡", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning",
+      });
+
+      const { code } = await delUpkeep(ids);
+      if (code === 200) {
+        ElMessage.success("鍒犻櫎鎴愬姛");
+        getTableData();
+      }
+    } catch (error) {
+      // 鐢ㄦ埛鍙栨秷鍒犻櫎
+    }
+  };
+
+  const handleOut = () => {
+    ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
+      confirmButtonText: "纭",
+      cancelButtonText: "鍙栨秷",
+      type: "warning",
     })
-    const payload = Array.isArray(ids) ? ids : [ids]
-    await deviceMaintenanceTaskDel(payload)
-    ElMessage.success('鍒犻櫎瀹氭椂浠诲姟鎴愬姛')
-    getScheduledTableData()
-  } catch (error) {
-    // 鐢ㄦ埛鍙栨秷鍒犻櫎
-  }
-}
+      .then(() => {
+        proxy.download("/device/maintenance/export", {}, "璁惧淇濆吇.xlsx");
+      })
+      .catch(() => {
+        ElMessage.info("宸插彇娑�");
+      });
+  };
 
-const handleScheduledOut = () => {
-  ElMessage.info('瀵煎嚭瀹氭椂浠诲姟鍔熻兘寰呭疄鐜�')
-}
-
-// 浠诲姟璁板綍鐩稿叧鏂规硶锛堝師璁惧淇濆吇椤甸潰鏂规硶锛�
-const getTableData = async () => {
-  try {
-    const params = {
-      current: pagination.value.currentPage,
-      size: pagination.value.pageSize,
-      deviceName: filters.deviceName || undefined,
-      maintenancePlanTime: filters.maintenancePlanTime ? dayjs(filters.maintenancePlanTime).format('YYYY-MM-DD') : undefined,
-      maintenanceActuallyTime: filters.maintenanceActuallyTime ? dayjs(filters.maintenanceActuallyTime).format('YYYY-MM-DD') : undefined,
-      maintenanceActuallyName: filters.maintenanceActuallyName || undefined,
+  const handleDateChange = (date, type) => {
+    if (type === 1) {
+      filters.maintenanceActuallyTime = date
+        ? dayjs(date).format("YYYY-MM-DD")
+        : "";
+    } else {
+      filters.maintenancePlanTime = date ? dayjs(date).format("YYYY-MM-DD") : "";
     }
+    getTableData();
+  };
 
-    const { code, data } = await getUpkeepPage(params)
-    if (code === 200) {
-      dataList.value = data.records
-      pagination.value.total = data.total
+  // 闄勪欢鐩稿叧鏂规硶
+  // 鏌ヨ闄勪欢鍒楄〃
+  const fetchMaintenanceTaskFiles = async deviceMaintenanceId => {
+    try {
+      const params = {
+        current: 1,
+        size: 100,
+        deviceMaintenanceId,
+        rulesRegulationsManagementId: deviceMaintenanceId,
+      };
+      const res = await listMaintenanceTaskFiles(params);
+      const records = res?.data?.records || [];
+      const mapped = records.map(item => ({
+        id: item.id,
+        name: item.fileName || item.name,
+        url: item.fileUrl || item.url,
+        raw: item,
+      }));
+      fileListDialogRef.value?.setList(mapped);
+    } catch (error) {
+      ElMessage.error("鑾峰彇闄勪欢鍒楄〃澶辫触");
     }
-  } catch (error) {
-    console.log(error);
-    
-  }
-}
+  };
 
-const resetFilters = () => {
-  filters.deviceName = ''
-  filters.maintenancePlanTime = ''
-  filters.maintenanceActuallyTime = ''
-  filters.maintenanceActuallyName = ''
-  getTableData()
-}
+  // 鎵撳紑闄勪欢寮圭獥
+  const openFileDialog = async row => {
+    currentMaintenanceTaskId.value = row.id;
+    fileDialogVisible.value = true;
+    await fetchMaintenanceTaskFiles(row.id);
+  };
 
-const handleSelectionChange = (selection) => {
-  multipleList.value = selection
-}
+  // 鍒锋柊闄勪欢鍒楄〃
+  const refreshFileList = async () => {
+    if (!currentMaintenanceTaskId.value) return;
+    await fetchMaintenanceTaskFiles(currentMaintenanceTaskId.value);
+  };
 
-// 妫�鏌ラ�変腑鐨勮褰曚腑鏄惁鏈夊畬缁撶姸鎬佺殑
-const hasFinishedStatus = computed(() => {
-  return multipleList.value.some(item => item.status === 1)
-})
-
-const changePage = (page) => {
-  pagination.value.currentPage = page.page
-  pagination.value.pageSize = page.limit
-  getTableData()
-}
-
-const addMaintain = (row) => {
-  maintainModalRef.value.open(row.id, row)
-}
-
-const addPlan = () => {
-  planModalRef.value.openModal()
-}
-
-const editPlan = (id) => {
-  planModalRef.value.openEdit(id)
-}
-
-const delRepairByIds = async (ids) => {
-  // 妫�鏌ユ槸鍚︽湁瀹岀粨鐘舵�佺殑璁板綍
-  const hasFinished = multipleList.value.some(item => item.status === 1)
-  if (hasFinished) {
-    ElMessage.warning('涓嶈兘鍒犻櫎鐘舵�佷负瀹岀粨鐨勮褰�')
-    return
-  }
-  
-  try {
-    await ElMessageBox.confirm('纭鍒犻櫎淇濆吇鏁版嵁, 姝ゆ搷浣滀笉鍙��?', '璀﹀憡', {
-      confirmButtonText: '纭畾',
-      cancelButtonText: '鍙栨秷',
-      type: 'warning',
-    })
-    
-    const { code } = await delUpkeep(ids)
-    if (code === 200) {
-      ElMessage.success('鍒犻櫎鎴愬姛')
-      getTableData()
+  // 涓婁紶闄勪欢
+  const handleAttachmentUpload = async filePayload => {
+    if (!currentMaintenanceTaskId.value) return;
+    try {
+      const payload = {
+        name: filePayload?.fileName || filePayload?.name,
+        url: filePayload?.fileUrl || filePayload?.url,
+        deviceMaintenanceId: currentMaintenanceTaskId.value,
+      };
+      await addMaintenanceTaskFile(payload);
+      ElMessage.success("鏂囦欢涓婁紶鎴愬姛");
+      await refreshFileList();
+    } catch (error) {
+      ElMessage.error("鏂囦欢涓婁紶澶辫触");
     }
-  } catch (error) {
-    // 鐢ㄦ埛鍙栨秷鍒犻櫎
-  }
-}
+  };
 
-const handleOut = () => {
-  ElMessageBox.confirm('閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�', '瀵煎嚭', {
-    confirmButtonText: '纭',
-    cancelButtonText: '鍙栨秷',
-    type: 'warning',
-  })
-    .then(() => {
-      proxy.download('/device/maintenance/export', {}, '璁惧淇濆吇.xlsx')
-    })
-    .catch(() => {
-      ElMessage.info('宸插彇娑�')
-    })
-}
-
-const handleDateChange = (date, type) => {
-  if (type === 1) {
-    filters.maintenanceActuallyTime = date ? dayjs(date).format('YYYY-MM-DD') : ''
-  } else {
-    filters.maintenancePlanTime = date ? dayjs(date).format('YYYY-MM-DD') : ''
-  }
-  getTableData()
-}
-
-// 闄勪欢鐩稿叧鏂规硶
-// 鏌ヨ闄勪欢鍒楄〃
-const fetchMaintenanceTaskFiles = async (deviceMaintenanceId) => {
-  try {
-    const params = {
-      current: 1,
-      size: 100,
-      deviceMaintenanceId,
-      rulesRegulationsManagementId:deviceMaintenanceId
+  // 鍒犻櫎闄勪欢
+  const handleAttachmentDelete = async row => {
+    if (!row?.id) return false;
+    try {
+      await ElMessageBox.confirm("纭鍒犻櫎璇ラ檮浠讹紵", "鎻愮ず", { type: "warning" });
+    } catch {
+      return false;
     }
-    const res = await listMaintenanceTaskFiles(params)
-    const records = res?.data?.records || []
-    const mapped = records.map(item => ({
-      id: item.id,
-      name: item.fileName || item.name,
-      url: item.fileUrl || item.url,
-      raw: item,
-    }))
-    fileListDialogRef.value?.setList(mapped)
-  } catch (error) {
-    ElMessage.error('鑾峰彇闄勪欢鍒楄〃澶辫触')
-  }
-}
-
-// 鎵撳紑闄勪欢寮圭獥
-const openFileDialog = async (row) => {
-  currentMaintenanceTaskId.value = row.id
-  fileDialogVisible.value = true
-  await fetchMaintenanceTaskFiles(row.id)
-}
-
-// 鍒锋柊闄勪欢鍒楄〃
-const refreshFileList = async () => {
-  if (!currentMaintenanceTaskId.value) return
-  await fetchMaintenanceTaskFiles(currentMaintenanceTaskId.value)
-}
-
-// 涓婁紶闄勪欢
-const handleAttachmentUpload = async (filePayload) => {
-  if (!currentMaintenanceTaskId.value) return
-  try {
-    const payload = {
-      name: filePayload?.fileName || filePayload?.name,
-      url: filePayload?.fileUrl || filePayload?.url,
-      deviceMaintenanceId: currentMaintenanceTaskId.value,
+    try {
+      await delMaintenanceTaskFile(row.id);
+      ElMessage.success("鍒犻櫎鎴愬姛");
+      await refreshFileList();
+      return true;
+    } catch (error) {
+      ElMessage.error("鍒犻櫎澶辫触");
+      return false;
     }
-    await addMaintenanceTaskFile(payload)
-    ElMessage.success('鏂囦欢涓婁紶鎴愬姛')
-    await refreshFileList()
-  } catch (error) {
-    ElMessage.error('鏂囦欢涓婁紶澶辫触')
-  }
-}
+  };
 
-// 鍒犻櫎闄勪欢
-const handleAttachmentDelete = async (row) => {
-  if (!row?.id) return false
-  try {
-    await ElMessageBox.confirm('纭鍒犻櫎璇ラ檮浠讹紵', '鎻愮ず', { type: 'warning' })
-  } catch {
-    return false
-  }
-  try {
-    await delMaintenanceTaskFile(row.id)
-    ElMessage.success('鍒犻櫎鎴愬姛')
-    await refreshFileList()
-    return true
-  } catch (error) {
-    ElMessage.error('鍒犻櫎澶辫触')
-    return false
-  }
-}
-
-onMounted(() => {
-  // 鏍规嵁榛樿婵�娲荤殑 Tab 璋冪敤瀵瑰簲鐨勬煡璇㈡帴鍙�
-  if (activeTab.value === 'scheduled') {
-    getScheduledTableData()
-  } else {
-    getTableData()
-  }
-})
+  onMounted(() => {
+    // 鏍规嵁榛樿婵�娲荤殑 Tab 璋冪敤瀵瑰簲鐨勬煡璇㈡帴鍙�
+    if (activeTab.value === "scheduled") {
+      getScheduledTableData();
+    } else {
+      getTableData();
+    }
+  });
 </script>
 
 <style lang="scss" scoped>
-.table_list {
-  margin-top: unset;
-}
-.actions {
-  display: flex;
-  justify-content: space-between;
-  margin-bottom: 10px;
-}
+  .table_list {
+    margin-top: unset;
+  }
+  .actions {
+    display: flex;
+    justify-content: space-between;
+    margin-bottom: 10px;
+  }
 </style>
 
 

--
Gitblit v1.9.3