فهرست منبع

Merge branch 'all-v4-fjc' into 'all-v4'

feat: 设备管理-相机设备 移除共享相机功能,新增全部相机信息导出功能

See merge request skyeye/skyeye_frontend/skyeye-admin!399
楼航飞 1 سال پیش
والد
کامیت
3d48479192
1فایلهای تغییر یافته به همراه51 افزوده شده و 14 حذف شده
  1. 51 14
      src/views/cameras/overview/CamerasOverview.vue

+ 51 - 14
src/views/cameras/overview/CamerasOverview.vue

@@ -4,7 +4,10 @@
     <div class="camera-list">
       <div v-if="showActionBar" class="action-bar">
         <span class="num-text">已选{{ chooseNum }}项</span>
-        <el-button :class="isActiveExport ? 'btn-active' : 'btn-normal'" @click="handleBatchExport"
+        <el-button
+          :class="isActiveExport ? 'btn-active' : 'btn-normal'"
+          @click="handleBatchExport"
+          v-if="hasCameraViewPermission()"
           >导出</el-button
         >
         <el-button
@@ -78,7 +81,7 @@
             </template>
             批量修改
           </el-button>
-          <el-badge :value="totalRow" :hidden="totalRow < 1" class="item">
+          <!-- <el-badge :value="totalRow" :hidden="totalRow < 1" class="item">
             <el-button
               plain
               color="#1890FF"
@@ -86,7 +89,21 @@
               style="margin: 0 18px 0 0"
               >共享相机</el-button
             >
-          </el-badge>
+          </el-badge> -->
+          <el-button
+            v-if="hasCameraViewPermission()"
+            plain
+            color="#1890FF"
+            style="margin: 0 18px 0 0"
+            @click="handleExportALl"
+          >
+            <template #icon>
+              <el-icon>
+                <Tickets />
+              </el-icon>
+            </template>
+            全部相机信息导出
+          </el-button>
         </template>
         <template #empty>
           <div class="empty-content flex flex-col items-center">
@@ -113,11 +130,7 @@
     <EditSRSCamera class="add-popover" v-model="showEditSRSPopover" :edit-data="editCameraData" />
     <EditNVRCamera class="add-popover" v-model="showEditNVRPopover" :edit-data="editCameraData" />
     <ShareCamera class="add-popover" v-model="addSharedPopover" :share-data="shareCameraData" />
-    <EditSharedCamera
-      class="add-popover"
-      v-model="showSharedPopover"
-      @update-unadd="updateUnaddAmount"
-    />
+    <EditSharedCamera class="add-popover" v-model="showSharedPopover" @update-unadd="updateUnaddAmount" />
   </div>
 </template>
 
@@ -136,7 +149,7 @@
   import EditNVRCamera from './components/CameraEditNVRPopover.vue';
   import EditSharedCamera from './components/CameraSharedEdit.vue';
   import emptyImg from '@/assets/images/table/table-empty.png';
-  import { Plus, DocumentAdd, Edit } from '@element-plus/icons-vue';
+  import { Plus, DocumentAdd, Edit, Tickets } from '@element-plus/icons-vue';
   import shareIcon from '@/assets/images/table/table-share.png';
   import previewIcon from '@/assets/images/table/table-preview.png';
   import editIcon from '@/assets/images/table/table-edit.png';
@@ -166,6 +179,9 @@
   const hasCameraDeletePermission = () => {
     return userStore.checkPermission(PERM_DEVICE.CAMERA_DELETE);
   };
+  const hasCameraViewPermission = () => {
+    return userStore.checkPermission(PERM_DEVICE.CAMERA_VIEW);
+  };
 
   const sceneTemplateListInfo = useSceneTemplateList();
   const { getSceneTemplateList } = sceneTemplateListInfo;
@@ -271,6 +287,31 @@
     });
   };
 
+  const handleExportALl = async () => {
+    const requestBody = {};
+
+    const config: AxiosRequestConfig = {
+      headers: getHeaders(),
+      responseType: 'blob',
+    };
+
+    const response = await axios.post(urlPrefix + '/admin/cameraConfig/exportAllCameraList', requestBody, config);
+
+    const blob = new Blob([response.data], {
+      type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+    });
+
+    // 创建下载链接
+    let downloadLink: HTMLAnchorElement | null = document.createElement('a');
+    const url = window.URL.createObjectURL(blob);
+    downloadLink.href = url;
+    downloadLink.download = '全量相机导出信息.xlsx';
+    downloadLink.click();
+    // 移除下载链接
+    window.URL.revokeObjectURL(url);
+    downloadLink = null;
+  };
+
   const handleBatchExport = async () => {
     try {
       const requestBody = {
@@ -281,11 +322,7 @@
         headers: getHeaders(),
         responseType: 'blob',
       };
-      const response = await axios.post(
-        urlPrefix + '/admin/cameraConfig/exportCameraList',
-        requestBody,
-        config,
-      );
+      const response = await axios.post(urlPrefix + '/admin/cameraConfig/exportCameraList', requestBody, config);
       const blob = new Blob([response.data], {
         type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
       });