From 1e1e5f612f252d66b0d0386cf52873bb1f3f7d7b Mon Sep 17 00:00:00 2001
From: haoxuan <haoxuan>
Date: 星期五, 01 九月 2023 16:10:37 +0800
Subject: [PATCH] 系统维护+系统监控器+调试工具的app 增加

---
 src/pages/desktop/index/components/ToolsEntry.vue |  334 +++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 284 insertions(+), 50 deletions(-)

diff --git a/src/pages/desktop/index/components/ToolsEntry.vue b/src/pages/desktop/index/components/ToolsEntry.vue
index 36a0fc3..4e9b703 100644
--- a/src/pages/desktop/index/components/ToolsEntry.vue
+++ b/src/pages/desktop/index/components/ToolsEntry.vue
@@ -1,39 +1,143 @@
 <template>
   <div class="tools-entry">
     <div class="entry-wrap">
-      <div class="app-list clearFix">
-        <div
-          class="app"
-          v-for="dock in this.$store.state.desktop.docks"
-          :key="dock.id"
-          @click="dockClick(dock)"
-        >
-          <div class="wrap">
-            <div class="app-icon">
-              <img :src="dock.src" :alt="dock.alt" />
+      <el-carousel
+        :height="rowSize == 3 ? '600px' : '770px'"
+        :autoplay="false"
+        arrow="never"
+        :indicator-position="carousels.length == 1 ? 'none' : ''"
+      >
+        <el-carousel-item v-for="(carousel, index) in carousels" :key="index">
+          <div class="app-list clearFix sdk-list">
+            <!-- <draggable v-model="carousel" @start="drag=true" @end="drag=false"> -->
+            <div v-for="item in carousel" :key="item.id">
+              <div
+                class="app"
+                v-if="item.url && !item.sdk_name"
+                @click="dockClick(item)"
+              >
+                <div class="wrap">
+                  <div class="app-icon">
+                    <div
+                      class="badge"
+                      v-if="item.name == 'algorithmManage' && badgeNum > 0"
+                    >
+                      {{ badgeNum }}
+                    </div>
+                    <img :src="item.src" :alt="item.alt" />
+                  </div>
+                  <div class="app-name">{{ item.title }}</div>
+                </div>
+              </div>
+              <div
+                class="app sdk"
+                v-if="item.sdk_name"
+                @click="openSdkVideo(item)"
+              >
+                <div class="wrap">
+                  <div class="app-icon">
+                    <img
+                      :src="
+                        item.iconBlob.indexOf(',') > 0
+                          ? item.iconBlob
+                          : `data:image/png;base64,${item.iconBlob}`
+                      "
+                    />
+                  </div>
+                  <div class="app-name">{{ item.sdk_name }}</div>
+                </div>
+              </div>
             </div>
-            <div class="app-name">{{dock.title}}</div>
           </div>
-        </div>
-      </div>
+        </el-carousel-item>
+      </el-carousel>
+
       <div class="logo">
-        <img :src="`${publicPath}images/desktop/desk-logo.png`" alt="">
+        <img :src="`${publicPath}images/desktop/desk-logo.png`" alt />
+      </div>
+    </div>
+
+    <div class="videolist_appbox" v-if="showVideo">
+      <div class="video_t">
+        <video
+          width="1164"
+          height="655"
+          :src="videoUrl"
+          type="video/mp4"
+          poster=""
+          controls="controls"
+          preload="none"
+          autoplay="autoplay"
+          controlslist="nodownload"
+        ></video>
+      </div>
+      <!-- <div class="mask"></div> -->
+      <div class="video_close" @click="showVideo = false">
+        <!-- <img src="../../assets/img/about_dot18.png"> -->
+        <!-- <span class="icon iconfont">&#xe70b;</span> -->
+        <i class="el-icon-close"></i>
+
+        
       </div>
     </div>
   </div>
 </template>
 
 <script>
+import draggable from "vuedraggable";
+import { findAllSdk } from "@/api/taskMange";
+import { chunkArr } from "@/scripts/util";
+import bus from "@/plugin/bus";
 export default {
-  name: 'toolsEntry',
+  name: "toolsEntry",
   data() {
     return {
       publicPath: process.env.BASE_URL,
-    }
+      loading: true,
+      showVideo: false,
+      localApps: [],
+      installedSdk: [],
+      videoUrl: "",
+      sdkList: [
+        
+      ],
+    };
+  },
+  computed: {
+    stateDocks() {
+      return this.$store.state.desktop.docks;
+    },
+    carousels() {
+      let pages = 0;
+      let tempArr = this.stateDocks.concat(this.installedSdk);
+      let upgradeArr = tempArr.filter((item) => item.isUpgrade);
+      let arr = null;
+      //鏍规嵁灞忓箷楂樺害鏉ュ垽鏂槸灞曠ず3鎺掕繕鏄�4鎺� 闃堝��:970
+      if (window.innerHeight >= 930) {
+        //this.rowSize = 4;
+        arr = this.chunk(tempArr, 24);
+      } else {
+        //this.rowSize = 3;
+        arr = this.chunk(tempArr, 18);
+      }
+      return arr;
+    },
+    badgeNum() {
+      let tempArr = this.stateDocks.concat(this.installedSdk);
+      return tempArr.filter((item) => item.isUpgrade).length;
+    },
+    rowSize() {
+      if (window.innerHeight >= 930) {
+        return 4;
+      } else {
+        return 3;
+      }
+    },
   },
   mounted() {
-    window.addEventListener('message', e => {
-      console.log('msg')
+    this.getAllSdk();
+    //this.carousels =
+    window.addEventListener("message", (e) => {
       if (e.data && e.data.msg) {
         let msg = e.data.msg;
         // token 涓嶅悎娉�, 閫�鍑�
@@ -41,91 +145,151 @@
           location.assign("/");
           return;
         }
-
-        // 鎵撳紑妫�绱�, toSearch?showType=findByPic&targetId=108ba0bc-b0a1-433d-8e1e-d5d2e712b53b&picSmUrl=192.168.20.10:6700/47628,7cc869f3a9c714&compType=1
         if (msg.indexOf("toSearch") >= 0) {
-          console.log('msg,search')
           let params = msg.substring(7);
-          this.addFrameByName("search", params)
+          this.addFrameByName("search", params);
+        }
+        if (msg.indexOf("toCluster") >= 0) {
+          let params = msg.substring(8);
+          this.addFrameByName("searchForCluster", params);
+        }
+
+        if (msg.indexOf("toOpenApp") >= 0) {
+          let id = msg.substring(10);
+          console.log(id);
+          this.addFrameByID(id);
         }
       }
-    })
+    });
   },
   methods: {
+    chunk(arr, size) {
+      size = Math.max(size, 0);
+      const len = arr == null ? 0 : arr.length;
+      if (!len || size < 1) {
+        return [];
+      }
+      let index = 0;
+      let resIndex = 0;
+      const result = new Array(Math.ceil(len / size));
+      while (index < len) {
+        result[resIndex++] = arr.slice(index, (index += size));
+      }
+      return result;
+    },
+    getAllSdk() {
+      findAllSdk()
+        .then((res) => {
+          this.installedSdk = res.data.filter((item) => item.installed);
+        })
+        .catch((e) => {
+          console.log(e);
+        });
+    },
     dockClick(dock) {
-      if (dock.type === '1') {
+      if (dock.type === "1") {
         window.open(dock.url);
-      } else if (dock.type === '2' && !dock.isOpen) {
-        
-        this.$store.dispatch('desktop/addFrame', {
+      } else if (dock.type === "2" && !dock.isOpen) {
+        if(dock.url== "/view/debuggTool/"){
+          return true;
+        }
+        this.$store.dispatch("desktop/addFrame", {
           id: dock.id,
           icon: dock.src,
           title: dock.title,
-          url: dock.url
+          url: dock.url,
         });
-        this.$store.commit('desktop/addMinDock', {
+        this.$store.commit("desktop/addMinDock", {
           id: dock.id,
           src: dock.src,
           alt: dock.title,
           type: "3",
           highlight: true,
           url: dock.url,
-          screenshot: ''
+          screenshot: "",
         });
         //鎵撳紑搴旂敤鍚庡紓姝ユ姄鎷�,涔嬪悗鐨勬姄鎷嶉噰鐢ㄨ繖寮犲浐瀹氱殑
         //if(dock.name=='cameraVideo'||dock.name=='search'||dock.name=='library'||dock.name=='cameraAccess'||dock.name=='dataStack'){
-          setTimeout(()=>{
-            this.$parent.screenShot(dock);
-          },1500)
+        setTimeout(() => {
+          this.$parent.screenShot(dock);
+        }, 1500);
         //}
-      } else if (dock.type === '2' && dock.isOpen) {
-        this.$store.commit('desktop/resetMinFrame', dock.id);
+      } else if (dock.type === "2" && dock.isOpen) {
+        this.$store.commit("desktop/resetMinFrame", dock.id);
+      }
+    },
+    openSdkVideo(dock) {
+      if (dock.url && dock.sdk_name) {
+        this.videoUrl = dock.url;
+        this.showVideo = true;
       }
     },
     resetDockItem() {
-      const dockItems = document.getElementsByClassName('dock-item');
-      const dockMask = document.getElementsByClassName('dock-mask')[0];
+      const dockItems = document.getElementsByClassName("dock-item");
+      const dockMask = document.getElementsByClassName("dock-mask")[0];
       for (let i = 0; i < dockItems.length; i++) {
         dockItems[i].width = 60;
         if (dockItems[i].parentNode.nextElementSibling) {
           dockItems[i].parentNode.nextElementSibling.style.marginLeft = "-35px";
         }
       }
-      dockMask.style.width = dockItems.length * 60 + 40 + 'px';
+      dockMask.style.width = dockItems.length * 60 + 40 + "px";
     },
     addFrameByName(name, params) {
-      
       let dock = null;
-      this.$store.state.desktop.docks.forEach(app => {
+      this.$store.state.desktop.docks.forEach((app) => {
         if (app.name === name) {
           dock = app;
         }
       });
-
       if (dock.isOpen) {
-        this.$store.dispatch('desktop/closeFrame', dock);
+        this.$store.dispatch("desktop/closeFrame", dock);
       }
-      this.$store.dispatch('desktop/addFrame', {
+      this.$store.dispatch("desktop/addFrame", {
         id: dock.id,
         icon: dock.src,
         title: dock.title,
-        url: dock.url + "?" + params
+        url: dock.url + "?" + params,
       });
-      this.$store.commit('desktop/addMinDock', {
+      this.$store.commit("desktop/addMinDock", {
         id: dock.id,
         src: dock.src,
         alt: dock.title,
         type: "3",
         highlight: true,
         url: dock.url,
-        screenshot: ''
+        screenshot: "",
       });
-    }
-  }
+    },
+    addFrameByID(id, params) {
+      let dock = null;
+      let toClose = null;
+      this.$store.state.desktop.docks.forEach((app) => {
+        if (app.id == id) {
+          dock = app;
+        }
+        if (app.name == "algorithmManage") {
+          toClose = app;
+        }
+      });
+      this.dockClick(dock);
+    },
+  },
 };
 </script>
 
 <style lang="scss">
+.el-carousel__arrow--left {
+  left: 0 !important;
+}
+.el-carousel__arrow--right {
+  right: 0 !important;
+}
+.el-carousel__button {
+  width: 12px !important;
+  height: 12px !important;
+  border-radius: 50% !important;
+}
 .tools-entry {
   //margin-top: 130px;
   position: absolute;
@@ -148,10 +312,41 @@
             width: 110px;
             height: 110px;
             margin: auto;
+            position: relative;
+            border-radius: 10px;
             img {
               vertical-align: middle;
               margin-right: -3px;
+              width: 82px;
+              // height: 82px;
             }
+            .badge {
+              position: absolute;
+              top: 13px;
+              right: 8px;
+              width: 22px;
+              height: 22px;
+              font-size: 14px;
+              background-color: red;
+              border-radius: 50%;
+              color: #fff;
+              line-height: 22px;
+              text-align: center;
+            }
+          }
+          .el-loading-mask {
+            border-radius: 8px;
+          }
+          .el-loading-spinner {
+            top: 20px;
+          }
+          .el-loading-spinner .path {
+            stroke: #78adf7;
+          }
+          .el-loading-spinner .el-loading-text {
+            line-height: 1;
+            margin-top: -30px;
+            color: #78adf7;
           }
           .app-name {
             padding-top: 10px;
@@ -168,15 +363,54 @@
         }
       }
     }
-    .logo{
+    .logo {
       text-align: right;
       padding-right: 50px;
       user-select: none;
-      img{
+      margin-top: -74px;
+      img {
         user-select: none;
         -webkit-user-drag: none;
       }
     }
   }
+  .videolist_appbox {
+    position: fixed;
+    width: 100%;
+    height: 100%;
+    top: 0;
+    left: 0;
+    z-index: 9999999;
+  }
+
+  .videolist_appbox .video_t {
+    z-index: 2;
+
+  }
+
+  .videolist_appbox .mask {
+    position: absolute;
+    z-index: 1;
+    left: 0;
+    top: 0;
+    width: 100%;
+    height: 100%;
+    background: rgba(0, 0, 0, 0.5);
+  }
+
+  .video_close {
+    position: absolute;
+    top: 0;
+    right: 0;
+    cursor: pointer;
+    z-index: 3;
+    color: #fff;
+    background: lightgray;
+    padding: 10px;
+    border-radius: 20px;
+    i{
+          font-size: 20px;
+    }
+  }
 }
 </style>
\ No newline at end of file

--
Gitblit v1.8.0