From 6dfb5e44a7072d78ca6c04d21b7ed8ad126b874f Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 01 七月 2025 14:05:44 +0800
Subject: [PATCH] 1.巡检管理频次选择逻辑修改

---
 src/api/inspectionManagement/index.js                 |   24 ++++
 src/views/inspectionManagement/components/formDia.vue |  121 ++++++++++++++++++++---
 src/views/inspectionManagement/index.vue              |  113 ++++++++++++++-------
 3 files changed, 200 insertions(+), 58 deletions(-)

diff --git a/src/api/inspectionManagement/index.js b/src/api/inspectionManagement/index.js
index a33c185..d0c444a 100644
--- a/src/api/inspectionManagement/index.js
+++ b/src/api/inspectionManagement/index.js
@@ -25,6 +25,14 @@
         data: query
     })
 }
+// 瀹氭椂宸℃浠诲姟琛ㄥ垹闄�
+export function delTimingTask(query) {
+    return request({
+        url: '/timingTask/delTimingTask',
+        method: 'delete',
+        data: query
+    })
+}
 
 // /inspectionTask/addOrEditInspectionTask
 // 宸℃涓婁紶
@@ -34,4 +42,20 @@
         method: 'post',
         data: query
     })
+}
+// 瀹氭椂宸℃浠诲姟琛ㄦ煡璇�
+export function timingTaskList(query) {
+    return request({
+        url: '/timingTask/list',
+        method: 'get',
+        params: query
+    })
+}
+// 瀹氭椂宸℃浠诲姟琛ㄦ柊澧炰慨鏀�
+export function addOrEditTimingTask(query) {
+    return request({
+        url: '/timingTask/addOrEditTimingTask',
+        method: 'post',
+        data: query
+    })
 }
\ No newline at end of file
diff --git a/src/views/inspectionManagement/components/formDia.vue b/src/views/inspectionManagement/components/formDia.vue
index 8da91ef..91e9c5c 100644
--- a/src/views/inspectionManagement/components/formDia.vue
+++ b/src/views/inspectionManagement/components/formDia.vue
@@ -10,20 +10,79 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="鍦扮偣" prop="port">
-              <el-input v-model="form.port" placeholder="璇疯緭鍏ュ湴鐐�" maxlength="30" />
+            <el-form-item label="鍦扮偣" prop="inspectionLocation">
+              <el-input v-model="form.inspectionLocation" placeholder="璇疯緭鍏ュ湴鐐�" maxlength="30" />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
             <el-form-item label="宸℃浜�" prop="inspector">
-              <el-input v-model="form.inspector" placeholder="宸℃浜�" maxlength="30" />
+              <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-col :span="12">
             <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"
+                              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-select>
+              <el-time-picker v-model="form.frequencyDetail" 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-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-form-item>
           </el-col>
         </el-row>
@@ -39,9 +98,10 @@
 </template>
 
 <script setup>
-import {reactive, ref} from "vue";
+import {reactive, ref, computed} from "vue";
 import useUserStore from '@/store/modules/user'
-import {addOrEditInspectionTask} from "@/api/inspectionManagement/index.js";
+import {addOrEditTimingTask} from "@/api/inspectionManagement/index.js";
+import {userListAll} from "@/api/publicApi/index.js";
 
 const { proxy } = getCurrentInstance()
 const emit = defineEmits()
@@ -51,43 +111,66 @@
 const data = reactive({
   form: {
     taskName: '',
-    port: '',
+    inspectionLocation: '',
     inspector: '',
+    inspectorIds: '',
     remarks: '',
+    frequencyType: '',
+    frequencyDetail: '',
   },
   rules: {
     taskName: [{ required: true, message: "璇疯緭鍏ヤ换鍔″悕绉�", trigger: "blur" },],
-    port: [{ required: true, message: "璇疯緭鍏ュ湴鐐�", trigger: "blur" },],
+    inspectionLocation: [{ required: true, message: "璇疯緭鍏ュ湴鐐�", trigger: "blur" },],
     inspector: [{ required: true, message: "璇疯緭鍏ュ贰妫�浜�", trigger: "blur" },],
   }
 })
-
 const { form, rules } = toRefs(data)
+const userList = ref([])
 
 // 鎵撳紑寮规
 const openDialog = async (type, row) => {
   dialogVisitable.value = true
+  userListAll().then(res => {
+    userList.value = res.data
+  })
   if (type === 'edit') {
     form.value = {...row}
   }
 }
-// 鎻愪氦鍚堝苟琛ㄥ崟
-const submitForm = () => {
-  proxy.$refs["formRef"].validate(valid => {
-    if (valid) {
-      addOrEditInspectionTask(form.value).then(() => {
-        cancel()
-        proxy.$modal.msgSuccess('鎻愪氦鎴愬姛')
-      })
-    }
-  })
-}
+
 // 鍏抽棴鍚堝苟琛ㄥ崟
 const cancel = () => {
   proxy.resetForm("formRef")
   dialogVisitable.value = false
   emit('closeDia')
 }
+const selectedDateTime = ref(null)
+
+// 璁$畻鏄熸湡鍑�
+const dayOfWeek = computed(() => {
+  if (!selectedDateTime.value) return ''
+  
+  const date = new Date(selectedDateTime.value)
+  const dayIndex = date.getDay()
+  
+  const weekDays = ['鏄熸湡鏃�', '鏄熸湡涓�', '鏄熸湡浜�', '鏄熸湡涓�', '鏄熸湡鍥�', '鏄熸湡浜�', '鏄熸湡鍏�']
+  return weekDays[dayIndex]
+})
+// 鎻愪氦鍚堝苟琛ㄥ崟
+const submitForm = () => {
+  proxy.$refs["formRef"].validate(valid => {
+    if (valid) {
+      form.value.inspectorIds = form.value.inspector.join(',')
+      if (form.value.frequencyType === 'WEEKLY') {
+        form.value.frequencyDetail = form.value.week + ',' + form.value.frequencyDetail
+      }
+      addOrEditTimingTask(form.value).then(() => {
+        cancel()
+        proxy.$modal.msgSuccess('鎻愪氦鎴愬姛')
+      })
+    }
+  })
+}
 defineExpose({ openDialog })
 </script>
 
diff --git a/src/views/inspectionManagement/index.vue b/src/views/inspectionManagement/index.vue
index c967f7b..e0ba31f 100644
--- a/src/views/inspectionManagement/index.vue
+++ b/src/views/inspectionManagement/index.vue
@@ -1,7 +1,7 @@
 <template>
   <div class="app-container">
     <el-form :inline="true" :model="queryParams" class="search-form">
-      <el-form-item label="渚涘簲鍟嗗悕绉�">
+      <el-form-item label="鏃堕棿">
         <el-input
             v-model="queryParams.supplierName"
             placeholder="璇疯緭鍏�"
@@ -9,7 +9,7 @@
             :style="{ width: '100%' }"
         />
       </el-form-item>
-      <el-form-item label="鐓ょ">
+      <el-form-item label="璁惧鍚嶇О">
         <el-input
             v-model="queryParams.coal"
             placeholder="璇疯緭鍏�"
@@ -36,12 +36,20 @@
             :name="tab.name"
         />
       </el-tabs>
-      <!-- 鎿嶄綔鎸夐挳鍖� -->
-      <el-space v-if="tabName !== 'qrCodeScanRecord'">
-        <el-button type="primary" :icon="Plus" @click="handleAdd">鏂板缓</el-button>
-        <el-button type="danger" :icon="Delete" @click="handleDelete">鍒犻櫎</el-button>
-        <!-- <el-button type="info" plain :icon="Download">瀵煎嚭</el-button> -->
-      </el-space>
+      <div style="display: flex;flex-direction: row;justify-content: space-between;" v-if="tabName === 'task'">
+        <el-radio-group v-model="activeRadio" @change="radioChange">
+          <el-radio-button v-for="tab in radios"
+                           :key="tab.name"
+                           :label="tab.label"
+                           :value="tab.name"/>
+        </el-radio-group>
+        <!-- 鎿嶄綔鎸夐挳鍖� -->
+        <el-space v-if="activeRadio !== 'task'">
+          <el-button type="primary" :icon="Plus" @click="handleAdd">鏂板缓</el-button>
+          <el-button type="danger" :icon="Delete" @click="handleDelete">鍒犻櫎</el-button>
+          <!-- <el-button type="info" plain :icon="Download">瀵煎嚭</el-button> -->
+        </el-space>
+      </div>
       <div>
         <div>
           <ETable :loading="tableLoading"
@@ -55,9 +63,9 @@
                   :operations="operationsArr"
                   @edit="handleAdd"
                   @viewFile="viewFile"
-                  v-if="tabName !== 'qrCodeScanRecord'"
+                  v-if="tabName === 'task'"
           ></ETable>
-          <el-table ref="table" :data="tableData" height="480" v-loading="tableLoading" border v-else style="width: 100%;height: calc(100vh - 27em)">
+          <el-table ref="table" :data="tableData" height="480" v-loading="tableLoading" border v-else style="width: 100%;height: calc(100vh - 25em)">
             <el-table-column label="搴忓彿" type="index" width="60" align="center" />
             <el-table-column prop="deviceName" label="璁惧鍚嶇О" :show-overflow-tooltip="true">
               <template #default="scope">
@@ -103,7 +111,12 @@
 import ETable from "@/components/Table/ETable.vue";
 import FormDia from "@/views/inspectionManagement/components/formDia.vue";
 import QrCodeDia from "@/views/inspectionManagement/components/qrCodeDia.vue";
-import {delInspectionTask, inspectionTaskList} from "@/api/inspectionManagement/index.js";
+import {
+  delInspectionTask,
+  delTimingTask,
+  inspectionTaskList,
+  timingTaskList
+} from "@/api/inspectionManagement/index.js";
 import ViewFiles from "@/views/inspectionManagement/components/viewFiles.vue";
 import {delQrCode, qrCodeList, qrCodeScanRecordList} from "@/api/inspectionUpload/index.js";
 import ViewQrCodeFiles from "@/views/inspectionManagement/components/viewQrCodeFiles.vue";
@@ -122,9 +135,15 @@
 const tabName = ref("task");
 // 鏍囩椤垫暟鎹�
 const tabs = reactive([
-  { name: "task", label: "浠诲姟涓嬪彂" },
-  { name: "qrCode", label: "浜岀淮鐮佺鐞�" },
+  { name: "task", label: "鐢熶骇宸℃" },
   { name: "qrCodeScanRecord", label: "鐜板満宸℃璁板綍" },
+]);
+// 鍗曢�夋
+const activeRadio = ref("taskManage");
+const radios = reactive([
+  { name: "taskManage", label: "瀹氭椂浠诲姟绠$悊" },
+  { name: "task", label: "瀹氭椂浠诲姟璁板綍" },
+  { name: "qrCode", label: "浜岀淮鐮佺鐞�" },
 ]);
 // 琛ㄦ牸
 const selectedRows = ref([]);
@@ -140,6 +159,8 @@
   { prop: "port", label: "鍦扮偣", minWidth: 120 },
   { prop: "remarks", label: "澶囨敞", minWidth: 150 },
   { prop: "inspector", label: "鎵ц宸℃浜�", minWidth: 150 },
+  { prop: "inspector", label: "棰戞", minWidth: 150 },
+  { prop: "inspector", label: "寮�濮嬫棩鏈�", minWidth: 150 },
   { prop: "registrant", label: "鐧昏浜�", minWidth: 100 },
   { prop: "createTime", label: "鐧昏鏃ユ湡", minWidth: 100 },
 ]);
@@ -151,21 +172,24 @@
 ]);
 
 onMounted(() => {
-  handleTabClick({ props: { name: "task" } });
+  radioChange('taskManage');
 });
 // 鏍囩椤电偣鍑�
 const handleTabClick = (tab) => {
   tabName.value = tab.props.name;
   tableData.value = [];
-  if (tabName.value === "task") {
-    tableColumns.value = columns.value;
-    operationsArr.value = ['edit', 'viewFile']
-  } else {
-    tableColumns.value = columns1.value;
-    operationsArr.value = ['edit']
-  }
   getList();
 };
+const radioChange = (value) => {
+  if (value !== "task") {
+    tableColumns.value = columns.value;
+    operationsArr.value = ['edit']
+  } else {
+    tableColumns.value = columns1.value;
+    operationsArr.value = ['viewFile']
+  }
+  getList();
+}
 // 鐐瑰嚮鏌ヨ
 const handleQuery = () => {
   pageNum.value = 1
@@ -174,18 +198,26 @@
 }
 const getList = () => {
   tableLoading.value = true;
-  if (tabName.value === "task") {
-    inspectionTaskList({...queryParams, size: pageSize.value, current: pageNum.value}).then(res => {
-      tableLoading.value = false;
-      tableData.value = res.data.records;
-      total.value = res.data.total;
-    })
-  } else if (tabName.value === "qrCode") {
-    qrCodeList({...queryParams, size: pageSize.value, current: pageNum.value}).then(res => {
-      tableLoading.value = false;
-      tableData.value = res.data.records;
-      total.value = res.data.total;
-    })
+  if (tabName.value === 'task') {
+    if (activeRadio.value === "task") {
+      inspectionTaskList({...queryParams, size: pageSize.value, current: pageNum.value}).then(res => {
+        tableLoading.value = false;
+        tableData.value = res.data.records;
+        total.value = res.data.total;
+      })
+    } else if (activeRadio.value === "qrCode") {
+      qrCodeList({...queryParams, size: pageSize.value, current: pageNum.value}).then(res => {
+        tableLoading.value = false;
+        tableData.value = res.data.records;
+        total.value = res.data.total;
+      })
+    } else {
+      timingTaskList({...queryParams, size: pageSize.value, current: pageNum.value}).then(res => {
+        tableLoading.value = false;
+        tableData.value = res.data.records;
+        total.value = res.data.total;
+      })
+    }
   } else {
     qrCodeScanRecordList({size: pageSize.value, current: pageNum.value}).then(res => {
       tableLoading.value = false;
@@ -193,6 +225,7 @@
       total.value = res.data.total;
     })
   }
+  
   
 };
 // 閲嶇疆鏌ヨ
@@ -209,10 +242,12 @@
 const handleAdd = (row) => {
   const type = row === undefined ? 'add' : 'edit'
   nextTick(() => {
-    if (tabName.value === "task") {
-      formDia.value?.openDialog(type, row)
-    } else if (tabName.value === "qrCode") {
-      qrCodeDia.value?.openDialog(type, row)
+    if (tabName.value === 'task') {
+      if (activeRadio.value === "taskManage") {
+        formDia.value?.openDialog(type, row)
+      } else if (activeRadio.value === "qrCode") {
+        qrCodeDia.value?.openDialog(type, row)
+      }
     } else {
       viewQrCodeFiles.value?.openDialog(row)
     }
@@ -232,8 +267,8 @@
   }
   const deleteIds = selectedRows.value.map(item => item.id);
   proxy.$modal.confirm('鏄惁纭鍒犻櫎鎵�閫夋暟鎹」锛�').then(function() {
-    if (tabName.value === "task") {
-      return delInspectionTask(deleteIds)
+    if (activeRadio.value === "taskManage") {
+      return delTimingTask(deleteIds)
     } else {
       return delQrCode(deleteIds)
     }

--
Gitblit v1.9.3