From 45c217996d025d256fdd0ed5cb744750e68dd36d Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期二, 17 三月 2026 16:43:04 +0800
Subject: [PATCH] 2026.3.17

---
 src/views/inspection/MonitorControl.vue                            |    1 
 src/api/fytz/creditApi.js                                          |   32 ++-
 src/views/inspection/scenenew/components/CompUserInfo.vue          |  116 +++++++-------
 src/views/inspection/scenenew/UserInfo.vue                         |  178 +++++++++++-----------
 src/views/inspection/scenenew/components/CompUserInfoAddDrawer.vue |   24 +-
 src/constants/index.js                                             |    1 
 src/views/inspection/task/TaskManage.vue                           |   53 ++++--
 src/constants/menu.js                                              |   16 +
 src/components/core/AppAside.vue                                   |    2 
 src/router/index.js                                                |    5 
 10 files changed, 231 insertions(+), 197 deletions(-)

diff --git a/src/api/fytz/creditApi.js b/src/api/fytz/creditApi.js
index 6c0dec0..12ff2a8 100644
--- a/src/api/fytz/creditApi.js
+++ b/src/api/fytz/creditApi.js
@@ -1,5 +1,5 @@
-import { Base64 } from 'js-base64';
-import { $fytz } from '../index';
+import { Base64 } from 'js-base64'
+import { $fytz } from '../index'
 
 /**
  * 淇$敤璇勪及API鎺ュ彛
@@ -8,20 +8,22 @@
   /**
    * 涓嬭浇鐢ㄦ埛鐜俊鐮�
    * @param {*} userId
+   * @param {*} userName
    */
-  downloadCode(userId) {
+  downloadCode(userId, userName) {
     return $fytz
       .get(`credit/ecCode/download?userId=${userId}`, { responseType: 'blob' })
       .then((res) => {
-        const name = Base64.decode(res.headers.get('fileName'));
-        const url = window.URL.createObjectURL(res.data);
-        const link = document.createElement('a');
-        link.href = url;
-        link.setAttribute('download', name);
-        document.body.appendChild(link);
-        link.click();
-        document.body.removeChild(link);
-        window.URL.revokeObjectURL(url);
-      });
-  }
-};
+        const name = res.headers.get('fileName') || userName
+        const fileName = Base64.decode(name)
+        const url = window.URL.createObjectURL(res.data)
+        const link = document.createElement('a')
+        link.href = url
+        link.setAttribute('download', fileName)
+        document.body.appendChild(link)
+        link.click()
+        document.body.removeChild(link)
+        window.URL.revokeObjectURL(url)
+      })
+  },
+}
diff --git a/src/components/core/AppAside.vue b/src/components/core/AppAside.vue
index 846369c..e7a1501 100644
--- a/src/components/core/AppAside.vue
+++ b/src/components/core/AppAside.vue
@@ -55,7 +55,7 @@
     return {
       // collapse: false,
       menuHeight: '80vh',
-      title: '娌圭儫鏅鸿兘涓�浣撳寲骞冲彴',
+      title: '娌圭儫鏅鸿兘鐩戞祴涓庣洃绠�',
       subTitle: '漏涓婃捣椋炵窘鐜繚绉戞妧鏈夐檺鍏徃',
       appIcon: AppIcon,
     }
diff --git a/src/constants/index.js b/src/constants/index.js
index 3cf1b46..f232180 100644
--- a/src/constants/index.js
+++ b/src/constants/index.js
@@ -1 +1,2 @@
 export { MENU } from './menu'
+export { envCreditCode } from './envCreditCode'
diff --git a/src/constants/menu.js b/src/constants/menu.js
index 0d87fdf..fc263a2 100644
--- a/src/constants/menu.js
+++ b/src/constants/menu.js
@@ -74,15 +74,16 @@
     name: '鐩戠宸℃煡',
     children: [
       {
+        path: '/index/inspection/monitor-control',
+        icon: 'solar:eye-scan-line-duotone',
+        name: '鐩戠鐩戞帶',
+      },
+      {
         path: '/index/inspection/task-manage',
         icon: 'solar:file-text-line-duotone',
         name: '浠诲姟绠$悊',
       },
-      {
-        path: '/index/inspection/scene-info',
-        icon: 'solar:shop-2-line-duotone',
-        name: '搴楅摵绠$悊',
-      },
+
       {
         path: '/index/inspection/pro-check',
         icon: 'solar:checklist-minimalistic-line-duotone',
@@ -109,6 +110,11 @@
         icon: 'solar:folder-favourite-bookmark-line-duotone',
         name: '璇勪及鎶ュ憡',
       },
+      {
+        path: '/index/inspection/scene-info',
+        icon: 'solar:shop-2-line-duotone',
+        name: '搴楅摵绠$悊',
+      },
       // {
       //   path: '/index/analysis/data-product',
       //   icon: 'solar:document-add-line-duotone',
diff --git a/src/router/index.js b/src/router/index.js
index 40a5b63..034c6ca 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -105,6 +105,11 @@
               path: 'report-manage',
               component: () => import('@/views/inspection/report/ReportManage.vue'),
             },
+            {
+              name: 'monitor-control',
+              path: 'monitor-control',
+              component: () => import('@/views/inspection/MonitorControl.vue'),
+            },
           ],
         },
         {
diff --git a/src/views/inspection/MonitorControl.vue b/src/views/inspection/MonitorControl.vue
new file mode 100644
index 0000000..50ede86
--- /dev/null
+++ b/src/views/inspection/MonitorControl.vue
@@ -0,0 +1 @@
+<template>s</template>
diff --git a/src/views/inspection/scenenew/UserInfo.vue b/src/views/inspection/scenenew/UserInfo.vue
index 73dbfb2..cf122c0 100644
--- a/src/views/inspection/scenenew/UserInfo.vue
+++ b/src/views/inspection/scenenew/UserInfo.vue
@@ -1,88 +1,89 @@
 <template>
-  <FYTable @search="onSearch" :row-class-name="tableRowClassName">
-    <template #options>
-      <FYOptionLocation
-        :allOption="true"
-        :level="5"
-        v-model:value="formSearch._locations"
-      ></FYOptionLocation>
-      <FYOptionText
-        label="鍦烘櫙鍚嶇О"
-        placeholder="杈撳叆鍚嶇О鍏抽敭瀛�"
-        v-model:value="formSearch.searchText"
-      ></FYOptionText>
-      <FYOptionScene
-        :allOption="true"
-        :type="1"
-        :initValue="false"
-        v-model:value="formSearch.scensetype"
-      ></FYOptionScene>
-      <FYOptionOnlineStatus
-        :allOption="true"
-        v-model:value="formSearch.online"
-      ></FYOptionOnlineStatus>
-    </template>
+  <div class="p-h-8">
+    <FYTable @search="onSearch" :row-class-name="tableRowClassName">
+      <template #options>
+        <FYOptionLocation
+          :allOption="true"
+          :level="5"
+          v-model:value="formSearch._locations"
+        ></FYOptionLocation>
+        <FYOptionText
+          label="鍦烘櫙鍚嶇О"
+          placeholder="杈撳叆鍚嶇О鍏抽敭瀛�"
+          v-model:value="formSearch.searchText"
+        ></FYOptionText>
+        <FYOptionScene
+          :allOption="true"
+          :type="1"
+          :initValue="false"
+          v-model:value="formSearch.scensetype"
+        ></FYOptionScene>
+        <FYOptionOnlineStatus
+          :allOption="true"
+          v-model:value="formSearch.online"
+        ></FYOptionOnlineStatus>
+      </template>
 
-    <template #table-column>
-      <el-table-column
-        fixed="left"
-        prop="userInfo.realname"
-        label="鍚嶇О"
-        :show-overflow-tooltip="true"
-        width="400"
-      >
-      </el-table-column>
-      <el-table-column prop="userInfo.acountname" label="璐﹀彿" width="110" />
-      <el-table-column prop="sceneTypeName" label="绫诲瀷" width="100" />
-      <el-table-column prop="biProvinceName" label="鐪�" width="80" />
-      <el-table-column prop="biCityName" label="甯�" width="80" />
-      <!-- <el-table-column prop="districtname" label="鍖哄幙" width="90" /> -->
-      <el-table-column prop="userInfo.extension1" label="鍖哄幙" width="80" />
-      <el-table-column prop="biTownName" label="琛楅亾" width="110" />
-      <el-table-column prop="biArea" label="闆嗕腑鍖�" width="110" />
-      <el-table-column prop="biManagementCompany" label="鐗╀笟" min-width="110" />
-      <el-table-column prop="userInfo.isenable" label="鐘舵��" width="90">
-        <template #default="{ row }">
-          {{ row.userInfo.isenable ? '涓婄嚎涓�' : '宸蹭笅绾�' }}
-        </template>
-      </el-table-column>
-      <el-table-column prop="userInfo.usertype" label="鐢ㄦ埛绫诲瀷" width="90" />
-      <el-table-column fixed="right" align="right" label="鎿嶄綔" width="190">
-        <template #header>
-          <el-button icon="DocumentAdd" size="default" type="success" @click="drawer = true"
-            >鏂板鐢ㄦ埛</el-button
-          >
-        </template>
-        <template #default="{ row }">
-          <el-space>
-            <el-button
-              :loading="row.loading2"
-              :type="row.userInfo.isenable != '0' ? 'danger' : 'primary'"
-              size="small"
-              @click="itemActive(row)"
-              >{{ row.userInfo.isenable != '0' ? '涓嬬嚎' : '涓婄嚎' }}</el-button
+      <template #table-column>
+        <el-table-column
+          fixed="left"
+          prop="userInfo.realname"
+          label="鍚嶇О"
+          :show-overflow-tooltip="true"
+          width="400"
+        >
+        </el-table-column>
+        <el-table-column prop="userInfo.acountname" label="璐﹀彿" width="110" />
+        <el-table-column prop="sceneTypeName" label="绫诲瀷" width="100" />
+        <el-table-column prop="biProvinceName" label="鐪�" width="80" />
+        <el-table-column prop="biCityName" label="甯�" width="80" />
+        <!-- <el-table-column prop="districtname" label="鍖哄幙" width="90" /> -->
+        <el-table-column prop="userInfo.extension1" label="鍖哄幙" width="80" />
+        <el-table-column prop="biTownName" label="琛楅亾" width="110" />
+        <el-table-column prop="biArea" label="闆嗕腑鍖�" width="110" />
+        <el-table-column prop="biManagementCompany" label="鐗╀笟" min-width="110" />
+        <el-table-column prop="userInfo.isenable" label="鐘舵��" width="90">
+          <template #default="{ row }">
+            {{ row.userInfo.isenable ? '涓婄嚎涓�' : '宸蹭笅绾�' }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="userInfo.usertype" label="鐢ㄦ埛绫诲瀷" width="90" />
+        <el-table-column fixed="right" align="right" label="鎿嶄綔" width="190">
+          <template #header>
+            <el-button icon="DocumentAdd" size="default" type="success" @click="drawer = true"
+              >鏂板搴楅摵</el-button
             >
-            <el-button-group>
-              <el-button type="primary" :loading="row.loading1" size="small" @click="editRow(row)"
-                >鏌ョ湅</el-button
+          </template>
+          <template #default="{ row }">
+            <el-space>
+              <el-button
+                :loading="row.loading2"
+                :type="row.userInfo.isenable != '0' ? 'danger' : 'primary'"
+                size="small"
+                @click="itemActive(row)"
+                >{{ row.userInfo.isenable != '0' ? '涓嬬嚎' : '涓婄嚎' }}</el-button
               >
-              <el-dropdown @command="handleCommand" trigger="click">
-                <el-button
-                  type="primary"
-                  :loading="row.downloadLoading"
-                  size="small"
-                  :icon="row.downloadLoading ? '' : 'ArrowDown'"
-                ></el-button>
-                <template #dropdown>
-                  <el-dropdown-menu>
-                    <el-dropdown-item icon="Download" :command="{ c: 1, p: row }"
-                      >涓嬭浇鐜俊鐮�</el-dropdown-item
-                    >
-                  </el-dropdown-menu>
-                </template>
-              </el-dropdown>
-            </el-button-group>
-            <!-- <el-dropdown
+              <el-button-group>
+                <el-button type="primary" :loading="row.loading1" size="small" @click="editRow(row)"
+                  >鏌ョ湅</el-button
+                >
+                <el-dropdown @command="handleCommand" trigger="click">
+                  <el-button
+                    type="primary"
+                    :loading="row.downloadLoading"
+                    size="small"
+                    :icon="row.downloadLoading ? '' : 'ArrowDown'"
+                  ></el-button>
+                  <template #dropdown>
+                    <el-dropdown-menu>
+                      <el-dropdown-item icon="Download" :command="{ c: 1, p: row }"
+                        >涓嬭浇鐜俊鐮�</el-dropdown-item
+                      >
+                    </el-dropdown-menu>
+                  </template>
+                </el-dropdown>
+              </el-button-group>
+              <!-- <el-dropdown
               split-button
               :loading="row.loading1"
               size="small"
@@ -100,11 +101,12 @@
                 </el-dropdown-menu>
               </template>
             </el-dropdown> -->
-          </el-space>
-        </template>
-      </el-table-column>
-    </template>
-  </FYTable>
+            </el-space>
+          </template>
+        </el-table-column>
+      </template>
+    </FYTable>
+  </div>
   <CompUserInfoAddDrawer v-model="drawer"></CompUserInfoAddDrawer>
 </template>
 
@@ -206,12 +208,12 @@
       return row.userInfo.isenable ? 'online-row' : 'offline-row'
     },
     handleCommand(e) {
-      const userId = e.p.userInfo.guid
+      const { guid: userId, realname: userName } = e.p.userInfo
       switch (e.c) {
         // 涓嬭浇鐜俊鐮�
         case 1:
           e.p.downloadLoading = true
-          creditApi.downloadCode(userId).finally(() => {
+          creditApi.downloadCode(userId, userName).finally(() => {
             e.p.downloadLoading = false
           })
           break
diff --git a/src/views/inspection/scenenew/components/CompUserInfo.vue b/src/views/inspection/scenenew/components/CompUserInfo.vue
index aece522..927cb9a 100644
--- a/src/views/inspection/scenenew/components/CompUserInfo.vue
+++ b/src/views/inspection/scenenew/components/CompUserInfo.vue
@@ -17,11 +17,11 @@
           placeholder="澶村儚url"
         />
       </el-form-item> -->
-      <el-form-item label="璐︽埛鍚�" prop="acountname">
-        <el-input clearable v-model="formObj.acountname" placeholder="璐︽埛鍚�" />
+      <el-form-item label="搴楅摵鍚�" prop="acountname">
+        <el-input clearable v-model="formObj.acountname" placeholder="搴楅摵鍚�" />
       </el-form-item>
-      <el-form-item label="鐢ㄦ埛鏄电О" prop="realname">
-        <el-input clearable v-model="formObj.realname" placeholder="鐢ㄦ埛鏄电О" />
+      <el-form-item label="鏄电О" prop="realname">
+        <el-input clearable v-model="formObj.realname" placeholder="鏄电О" />
       </el-form-item>
       <el-form-item label="瀵嗙爜" prop="password">
         <el-col :span="18">
@@ -76,7 +76,7 @@
         prop="_scenetype"
         :allOption="false"
         :type="1"
-        :initValue="false"
+        :initValue="true"
         v-model:value="formObj._scenetype"
       ></FYOptionScene>
     </template>
@@ -84,55 +84,55 @@
 </template>
 
 <script setup>
-import { defineProps, defineEmits, reactive, ref, watch, computed } from 'vue';
-import { getSceneName } from '@/enum/scene';
-import userApi from '@/api/fytz/userApi';
-import { useMessageBoxTip } from '@/composables/messageBox';
+import { defineProps, defineEmits, reactive, ref, watch, computed } from 'vue'
+import { getSceneName } from '@/enum/scene'
+import userApi from '@/api/fytz/userApi'
+import { useMessageBoxTip } from '@/composables/messageBox'
 
 const props = defineProps({
   //鍩烘湰淇℃伅
   model: {
-    type: Object
+    type: Object,
     // default: () => {
     //   return { isenable: true };
     // }
   },
   create: {
     type: Boolean,
-    default: false
+    default: false,
   },
   active: {
     type: Boolean,
-    default: false
-  }
-});
+    default: false,
+  },
+})
 
-const formInfo = ref({ isenable: true });
+const formInfo = ref({ isenable: true })
 
 watch(
   () => props.model,
   (nValue) => {
-    formInfo.value = parseUserInfo(nValue);
-  }
-);
+    formInfo.value = parseUserInfo(nValue)
+  },
+)
 
-const emit = defineEmits(['onSubmit', 'onCancel', 'updateEdit']);
+const emit = defineEmits(['onSubmit', 'onCancel', 'updateEdit'])
 
 const rules = reactive({
   acountname: [
     {
       required: true,
       message: '璐︽埛鍚嶄笉鑳戒负绌�',
-      trigger: 'blur'
-    }
+      trigger: 'blur',
+    },
   ],
   realname: [
     {
       required: true,
       message: '鐢ㄦ埛鏄电О涓嶈兘涓虹┖',
-      trigger: 'blur'
-    }
-  ]
+      trigger: 'blur',
+    },
+  ],
   // password: [
   //   {
   //     required: props.create,
@@ -140,44 +140,44 @@
   //     trigger: 'blur',
   //   },
   // ],
-});
+})
 
 // 鐢ㄦ埛鍩烘湰淇℃伅鏍煎紡鍖�
 function parseUserInfo(s) {
   if (s.usertype && s.usertypeid) {
     s._usertype = {
       label: s.usertype,
-      value: s.usertypeid + ''
-    };
+      value: s.usertypeid + '',
+    }
   }
 
   if (s.extension2) {
-    s._scenetype = getSceneName(s.extension2, 1);
+    s._scenetype = getSceneName(s.extension2, 1)
   }
 
-  s._locations = {};
+  s._locations = {}
 
-  return s;
+  return s
 }
 
 function parseUserInfoReverse(v) {
   // 琛屾斂鍖哄垝淇℃伅濉厖
-  const a = v._locations;
-  v.extension1 = a.dName;
+  const a = v._locations
+  v.extension1 = a.dName
   // 鐢ㄦ埛绫诲瀷淇℃伅濉厖
-  const b = v._usertype;
-  v.usertypeid = b.value;
-  v.usertype = b.label;
+  const b = v._usertype
+  v.usertypeid = b.value
+  v.usertype = b.label
 
   // 鍦烘櫙绫诲瀷淇℃伅濉厖
-  const c = v._scenetype;
-  v.extension2 = c.value;
+  const c = v._scenetype
+  v.extension2 = c.value
 
-  return v;
+  return v
 }
 
 function createUser(v, success, fail) {
-  const l = v._locations;
+  const l = v._locations
   const params = {
     userInfo: v,
     baseInfo: {
@@ -190,41 +190,41 @@
       biTownCode: l.tCode,
       biTownName: l.tName,
       biAreaCode: l.aCode,
-      biArea: l.aName
+      biArea: l.aName,
       // biManagementCompanyId:
       // biManagementCompany:
       // biContact
       // biTelephone
       // biAddress
-    }
-  };
+    },
+  }
   return userApi
     .createUser(params)
     .then(() => {
-      emit('onSubmit', params);
-      success();
+      emit('onSubmit', params)
+      success()
     })
     .catch((err) => {
-      fail(err);
-    });
+      fail(err)
+    })
 }
 
 function updateUser(v, success, fail) {
   return userApi
     .updateUserInfo(v)
     .then(() => {
-      emit('onSubmit', v);
-      if (success) success();
+      emit('onSubmit', v)
+      if (success) success()
     })
     .catch((err) => {
-      if (fail) fail(err);
-    });
+      if (fail) fail(err)
+    })
 }
 
 function submit(v, success, fail) {
-  parseUserInfoReverse(v.value);
+  parseUserInfoReverse(v.value)
 
-  return props.create ? createUser(v.value, success, fail) : updateUser(v.value, success, fail);
+  return props.create ? createUser(v.value, success, fail) : updateUser(v.value, success, fail)
   // parseUserInfoReverse(props.formInfo);
 
   // return props.create
@@ -233,18 +233,18 @@
 }
 
 // 閲嶇疆瀵嗙爜
-const pwLoading = ref(false);
+const pwLoading = ref(false)
 
 function onResetPw() {
   useMessageBoxTip({
     confirmMsg: '鏄惁閲嶇疆璇ュ満鏅瘑鐮侊紵',
     confirmTitle: '閲嶇疆瀵嗙爜',
     onConfirm: async () => {
-      pwLoading.value = true;
+      pwLoading.value = true
       return userApi.resetPassword(formInfo.value.guid).finally(() => {
-        pwLoading.value = false;
-      });
-    }
-  });
+        pwLoading.value = false
+      })
+    },
+  })
 }
 </script>
diff --git a/src/views/inspection/scenenew/components/CompUserInfoAddDrawer.vue b/src/views/inspection/scenenew/components/CompUserInfoAddDrawer.vue
index 720a1a5..14b14ac 100644
--- a/src/views/inspection/scenenew/components/CompUserInfoAddDrawer.vue
+++ b/src/views/inspection/scenenew/components/CompUserInfoAddDrawer.vue
@@ -1,6 +1,6 @@
 <template>
   <el-drawer
-    title="鏂板鐢ㄦ埛"
+    title="鏂板搴楅摵"
     direction="rtl"
     :model-value="modelValue"
     @open="updateDrawer(true)"
@@ -18,8 +18,8 @@
 </template>
 
 <script>
-import CompUserInfo from './CompUserInfo.vue';
-import { useMessageBox } from '@/composables/messageBox';
+import CompUserInfo from './CompUserInfo.vue'
+import { useMessageBox } from '@/composables/messageBox'
 
 export default {
   components: { CompUserInfo },
@@ -27,12 +27,12 @@
   emits: ['update:modelValue'],
   data() {
     return {
-      drawerEdit: false
-    };
+      drawerEdit: false,
+    }
   },
   methods: {
     updateDrawer(status) {
-      this.$emit('update:modelValue', status);
+      this.$emit('update:modelValue', status)
     },
     onDrawerClose(done) {
       if (this.drawerEdit) {
@@ -41,14 +41,14 @@
           confirmMsg: '鏄惁鏀惧純宸茬紪杈戠殑鍐呭锛�',
           confirmTitle: '鍏抽棴寮瑰嚭妗�',
           onConfirm: () => {
-            done();
-          }
-        });
+            done()
+          },
+        })
       } else {
         // 鐩存帴鍏抽棴
-        done();
+        done()
       }
     },
-  }
-};
+  },
+}
 </script>
diff --git a/src/views/inspection/task/TaskManage.vue b/src/views/inspection/task/TaskManage.vue
index 0ba9fbc..15f6e31 100644
--- a/src/views/inspection/task/TaskManage.vue
+++ b/src/views/inspection/task/TaskManage.vue
@@ -1,19 +1,20 @@
 <template>
-  <BaseContentLayout>
+  <BaseContentLayout asideWidth="0">
     <template #header>
-      <!-- <FYSearchBar @search="search">
-        <template #options>
-          <FYOptionLocation
-            :allOption="true"
-            :level="3"
-            :checkStrictly="false"
-            v-model:value="formSearch.locations"
-          ></FYOptionLocation>
-        </template>
-      </FYSearchBar> -->
+      <div class="task-switcher">
+        <el-button @click="switchTask(-1)" icon="ArrowLeft">鍓嶄竴涓�</el-button>
+        <el-select
+          v-model="curTaskTitle"
+          @change="(t) => chooseTask(tasks.find((e) => e.title == t))"
+          style="width: 260px"
+        >
+          <el-option v-for="s in tasks" :key="s.title" :label="s.title" :value="s.title" />
+        </el-select>
+        <el-button @click="switchTask(1)" icon="ArrowRight">鍚庝竴涓�</el-button>
+      </div>
     </template>
     <template #aside>
-      <SideList :items="tasks" :loading="sideLoading" @item-click="chooseTask"></SideList>
+      <!-- <SideList :items="tasks" :loading="sideLoading" @item-click="chooseTask"></SideList> -->
     </template>
     <template #main>
       <ToolBar
@@ -24,12 +25,6 @@
         :loading="mainLoading"
       ></ToolBar>
       <div v-if="curMonitorObjList.length > 0" v-loading="mainLoading">
-        <!-- <div><el-text>鐩戠璁″垝</el-text></div>
-          <el-button type="warning" size="small" @click="editPlan"
-            >璁″垝璋冩暣</el-button
-          > -->
-        <!-- <el-tabs model-value="first">
-            <el-tab-pane label="宸℃煡璁″垝" name="first"> -->
         <el-space justify="" :size="30" style="padding: 16px 0px 16px 16px">
           <el-text size="large">宸℃煡璁″垝</el-text>
           <el-radio-group v-model="selectedSceneType" fill="#409eff">
@@ -186,7 +181,10 @@
       // 褰撳墠浠诲姟鐨勫睍绀轰腑鐨勭洃绠″璞�
       showMonitorObjList: [],
       //褰撳墠閫変腑鐨勪换鍔�
+      curTaskTitle: '',
       curTask: {},
+      // 褰撳墠浠诲姟绱㈠紩
+      currentTaskIndex: 0,
       //褰撳墠閫変腑鐨勬棩浠诲姟
       curDayTaskList: [],
       daytaskLoading: false,
@@ -304,8 +302,19 @@
         if (list.length == 0) {
           this.sideLoading = false
           this.mainLoading = false
+        } else {
+          this.curTaskTitle = this.tasks[this.currentTaskIndex].title
+          this.chooseTask(this.tasks[this.currentTaskIndex])
         }
       })
+    },
+    // 鍒囨崲浠诲姟
+    switchTask(direction) {
+      if (this.tasks.length === 0) return
+
+      this.currentTaskIndex =
+        (this.currentTaskIndex + direction + this.tasks.length) % this.tasks.length
+      this.chooseTask(this.tasks[this.currentTaskIndex])
     },
     //鑾峰彇浠诲姟鐨勫畬鎴愭儏鍐�
     getTaskType(s) {
@@ -327,6 +336,8 @@
       return type
     },
     chooseTask(task) {
+      // const task = this.tasks.find((e) => e.title == taskTitle)
+      this.curTaskTitle = task.title
       this.task = task
       this.sideLoading = false
       this.mainLoading = true
@@ -492,4 +503,10 @@
 .el-drawer__custom {
   padding: 0px !important;
 }
+.task-switcher {
+  display: flex;
+  align-items: center;
+  gap: 10px;
+  padding: 10px;
+}
 </style>

--
Gitblit v1.9.3