From 77ea6f71e7532e89b974bcb65ce5a6b67a680ddb Mon Sep 17 00:00:00 2001
From: hanbaoshan <hanbaoshan@aiotlink.com>
Date: 星期四, 25 二月 2021 17:35:12 +0800
Subject: [PATCH] 朔黄标注编辑后检索数据同步更新;头部模拟用户名头像

---
 src/pages/ai/index/App.vue |  412 +++++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 333 insertions(+), 79 deletions(-)

diff --git a/src/pages/ai/index/App.vue b/src/pages/ai/index/App.vue
index fd0c57f..dd61f65 100644
--- a/src/pages/ai/index/App.vue
+++ b/src/pages/ai/index/App.vue
@@ -19,7 +19,7 @@
               @tab-click="handleTabClick"
               style="height: calc(100% - 20px);"
             >
-              <el-tab-pane label="宸插畨瑁�" name="myAlgorithm">
+              <el-tab-pane label="宸叉縺娲�" name="myAlgorithm">
                 <div class="width-new-line task-list" v-show="activeName === 'myAlgorithm'">
                   <p class="src-title">绠楁硶杞欢</p>
                   <div class="flex-list">
@@ -74,25 +74,20 @@
                             :element-loading-text="item.progressMsg"
                             element-loading-background="rgba(0,0,0,.8)"
                           >
-                            <!-- <div class="mask flex-center">
-                              <div class="info-onmask">
-                                <div>褰撳墠鐗堟湰:{{item.version}}</div>
-                              </div>
-                            </div>-->
                             <i class="iconfont iconupdate" v-if="item.isUpgrade"></i>
                             <div class="mask" v-if="!item.isDefault || item.isUpgrade">
-                              <div class="info-onmask">
+                              <div class="left-top">
                                 <div>褰撳墠鐗堟湰:{{item.version}}</div>
                                 <div v-if="item.remoteVersion">鏈�鏂扮増鏈�:{{item.remoteVersion}}</div>
                               </div>
+                              <div class="info-onmask" @click="checkDetail(item)">鏌ョ湅璇︽儏</div>
                               <div class="mask-btn">
-                                <!-- <el-button
-                                  v-if="!item.isDefault"
-                                  @click="unLoad(item)"
+                                <el-button
+                                  @click="unLoadSdk(item)"
                                   type="primary"
                                   size="small"
                                   class="bot-btn"
-                                >鍗歌浇</el-button>-->
+                                >鍗歌浇</el-button>
                                 <el-button
                                   v-if="item.isUpgrade"
                                   @click="donwload(item)"
@@ -176,11 +171,12 @@
                             element-loading-background="rgba(0,0,0,.8)"
                           >
                             <i class="iconfont iconupdate" v-if="item.isUpgrade"></i>
-                            <div class="mask" v-if="!item.isDefault || item.isUpgrade">
-                              <div class="info-onmask">
+                            <div class="mask">
+                              <div class="left-top">
                                 <div>褰撳墠鐗堟湰:{{item.version}}</div>
                                 <div v-if="item.remoteVersion">鏈�鏂扮増鏈�:{{item.remoteVersion}}</div>
                               </div>
+                              <div class="info-onmask" @click="checkDetail(item)">鏌ョ湅璇︽儏</div>
                               <div class="mask-btn">
                                 <el-button
                                   v-if="!item.isDefault"
@@ -233,6 +229,7 @@
                           >
                             <div class="mask">
                               <el-button
+                                size="small"
                                 type="primary"
                                 class="bot-btn"
                                 @click="downloadApp(item)"
@@ -419,6 +416,134 @@
                   </div>
                 </el-drawer>
               </el-tab-pane>
+              <el-tab-pane name="update">
+                <span slot="label">
+                  <el-badge class="update-badge" :value="updateNum">鏇存柊</el-badge>
+                </span>
+                <div class="task-list">
+                  <div class="flex-title">
+                    <p class="src-title">绠楁硶杞欢</p>
+                    <el-button @click="batchUpdate('sdk')" size="mini" type="primary">鏇存柊鍏ㄩ儴</el-button>
+                  </div>
+                  <div class="flex-list">
+                    <div v-if="!hasNewVersionSdk.length" class="empty-tip">鏆傛棤鏁版嵁锛岃绋嶅悗閲嶈瘯...</div>
+                    <div class="wrap-box" v-for="item in hasNewVersionSdk" :key="item.id">
+                      <div class="list-choose-item-left">
+                        <div class="list-complete-item-handle">
+                          <div
+                            class="svg-wrap"
+                            :class="{willUpGrade:item.isUpgrade}"
+                            v-loading="item.upgradeLoading"
+                            :element-loading-text="item.progressMsg"
+                            element-loading-background="rgba(0,0,0,.8)"
+                          >
+                            <i class="iconfont iconupdate" v-if="item.isUpgrade"></i>
+                            <div class="mask" v-if="!item.isDefault || item.isUpgrade">
+                              <div class="left-top">
+                                <div>褰撳墠鐗堟湰:{{item.version}}</div>
+                                <div v-if="item.remoteVersion">鏈�鏂扮増鏈�:{{item.remoteVersion}}</div>
+                              </div>
+                              <div class="info-onmask" @click="checkDetail(item)">鏌ョ湅璇︽儏</div>
+                              <div class="mask-btn">
+                                <el-button
+                                  @click="unLoadSdk(item)"
+                                  type="primary"
+                                  size="small"
+                                  class="bot-btn"
+                                >鍗歌浇</el-button>
+                                <el-button
+                                  v-if="item.isUpgrade"
+                                  @click="donwload(item)"
+                                  type="warning"
+                                  size="small"
+                                  class="bot-btn"
+                                >鍗囩骇</el-button>
+                              </div>
+                            </div>
+                            <img
+                              v-if="item.iconBlob"
+                              class="baseImg"
+                              :src="item.iconBlob.indexOf(',')>0? item.iconBlob:`data:image/png;base64,${item.iconBlob}`"
+                              alt
+                            />
+                            <img v-else class="baseImg" :src="item.icon" alt />
+                          </div>
+                          <div class="alg-name">
+                            <div style="padding:0px 10px 0px 10px;">
+                              <span v-if="!item.isEdit">{{ item.sdk_name}}</span>
+                            </div>
+                          </div>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+                  <div class="flex-title">
+                    <p class="src-title">搴旂敤杞欢</p>
+                    <el-button @click="batchUpdate('app')" type="primary" size="mini">鏇存柊鍏ㄩ儴</el-button>
+                  </div>
+                  <div class="flex-list">
+                    <div v-if="!hasNewVersionApp.length" class="empty-tip">鏆傛棤鏁版嵁锛岃绋嶅悗閲嶈瘯...</div>
+                    <div class="wrap-box" v-for="item in hasNewVersionApp" :key="item.id">
+                      <div class="list-choose-item-left">
+                        <div class="list-complete-item-handle">
+                          <div
+                            class="svg-wrap"
+                            :class="{willUpGrade:item.isUpgrade}"
+                            v-loading="item.unloadLoading||item.upgradeLoading"
+                            :element-loading-text="item.progressMsg"
+                            element-loading-background="rgba(0,0,0,.8)"
+                          >
+                            <i class="iconfont iconupdate" v-if="item.isUpgrade"></i>
+                            <div class="mask">
+                              <div class="left-top">
+                                <div>褰撳墠鐗堟湰:{{item.version}}</div>
+                                <div v-if="item.remoteVersion">鏈�鏂扮増鏈�:{{item.remoteVersion}}</div>
+                              </div>
+                              <div class="info-onmask" @click="checkDetail(item)">鏌ョ湅璇︽儏</div>
+                              <div class="mask-btn">
+                                <el-button
+                                  v-if="!item.isDefault"
+                                  @click="unLoad(item)"
+                                  type="primary"
+                                  size="small"
+                                  class="bot-btn"
+                                >鍗歌浇</el-button>
+                                <el-button
+                                  v-if="item.isUpgrade"
+                                  @click="downloadApp(item,'upgrade')"
+                                  type="warning"
+                                  size="small"
+                                  class="bot-btn"
+                                >鍗囩骇</el-button>
+                              </div>
+                            </div>
+                            <img
+                              v-if="item.iconBlob"
+                              class="baseImg"
+                              :src="item.iconBlob.indexOf(',')>0? item.iconBlob:`data:image/png;base64,${item.iconBlob}`"
+                              alt
+                            />
+                            <img v-else class="baseImg" :src="item.icon" alt />
+                          </div>
+                          <div class="alg-name">
+                            <div style="padding:0px 10px 0px 10px;">
+                              <span v-if="!item.isEdit">{{ item.name }}</span>
+                              <el-input
+                                size="small"
+                                v-model="item.sdk_name"
+                                v-if="item.isEdit"
+                                v-focus
+                                :maxlength="15"
+                                @blur="inputBlur(item)"
+                              ></el-input>
+                            </div>
+                          </div>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+                </div>
+              </el-tab-pane>
             </el-tabs>
           </div>
         </div>
@@ -470,11 +595,75 @@
         <el-button type="primary" @click="offlineInstall">瀹� 瑁�</el-button>
       </div>
     </el-dialog>
+    <!-- <div class="dialog-content" v-if="productDetailVisible" > -->
+    <el-dialog
+      class="product-detail-dialog"
+      :visible="productDetailVisible"
+      @close="productDetailVisible=false"
+    >
+      <div class="dialog-title" slot="title">绠楁硶/搴旂敤璇︽儏</div>
+      <div class="dialog-content">
+        <div class="box-top">
+          <div class="top-left">
+            <div class="banner">
+              <!-- <el-carousel
+                ref="carousel"
+                :autoplay="false"
+                indicator-position="none"
+                :arrow="curCheckTarget.pics.length > 1 ? 'always' : 'never'"
+                @change="changeHandle"
+              >
+                <el-carousel-item v-for="(item, index) in curCheckTarget.pics" :key="index">
+                  <div class="imgwrap">
+                    <img
+                      v-if="item.type=='image'"
+                      :src="'/httpImage/'+item.url"
+                      class="cursor-pointer"
+                      preview
+                    />
+                    <video v-if="item.type=='video'" :src="'/httpImage/'+item.url" controls></video>
+                  </div>
+                </el-carousel-item>
+              </el-carousel>-->
+            </div>
+          </div>
+          <div class="top-right">
+            <div class="summary">
+              <div class="icon"></div>
+              <div class="name"></div>
+              <!-- <div class="tags">
+                <span
+                  class="tag"
+                  v-for="(id, index) in curCheckTarget.productLabelId"
+                  :key="index+'i'"
+                >{{showNameById(id)}}</span>
+              </div>-->
+              <div class="btns">
+                <el-button size="mini">鍗囩骇</el-button>
+                <el-button size="mini">鍗歌浇</el-button>
+                <el-button size="mini">鎵撳紑</el-button>
+              </div>
+            </div>
+            <div class="product-intruduction">
+              <div class="title">浜у搧绠�浠�</div>
+            </div>
+          </div>
+        </div>
+        <div class="box-bot">
+          <div class="bot-left">
+            <div class="part-title">鍔熻兘鐗圭偣</div>
+          </div>
+          <div class="bot-right">
+            <div class="part-title">鎺ㄨ崘绠楁硶</div>
+          </div>
+        </div>
+      </div>
+    </el-dialog>
   </div>
 </template>
 <script>
 
-import { findAllSdk, downloadSdk, installSdk, getInstallInfo } from "./api";
+import { findAllSdk, downloadSdk, installSdk, getInstallInfo, removeSdk } from "./api";
 import { getApps, installApp, removeApp, getUnActivedSdk, actPageAlg, getUnActivedApp, actApp } from "@/api/app";
 
 import FileUploader from "@/components/subComponents/FileUpload/index";
@@ -485,6 +674,9 @@
     FileUploader
   },
   computed: {
+    updateNum () {
+      return this.hasNewVersionApp.length + this.hasNewVersionSdk.length
+    },
     // notInstalledList () {
     //   return this.sdkList.filter(sdk => {
     //     return sdk.installed === false;
@@ -521,7 +713,8 @@
     return {
       sdkList: [],
       installedList: [],
-      ungradeList: [],
+      hasNewVersionSdk: [],
+      hasNewVersionApp: [],
       notInstalledList: [],
       buttonAuthority: sessionStorage.getItem("buttonAuthoritys") || [],
       activeName: "myAlgorithm",
@@ -557,8 +750,11 @@
       storeApps: [],
       installFile: {},
       freshTimer: null,
-      appUpgreading: false,
-      sdkUpgreading: false
+      appUpgreading: true,
+      sdkUpgreading: true,
+      autoRefresh: true,
+      curCheckTarget: {},
+      productDetailVisible: false,
     }
   },
   directives: {
@@ -570,15 +766,33 @@
   },
   mounted () {
     // 鑾峰彇鎵�鏈夊簲鐢�
-    this.getAllSdk();
-    this.getAllApps();
+    this.autoRefreshAppAndSdkState();
 
     this.getUnActivedList();
     this.getUnActivedAppList();
   },
+  beforeDestroy () {
+    this.autoRefresh = false;
+  },
   methods: {
     isShow (authority) {
       return this.isAdmin || this.buttonAuthority.indexOf("," + authority + ",") > -1
+    },
+    batchUpdate (type) {
+      if (type == "sdk") {
+        this.hasNewVersionSdk.forEach(sdk => {
+          this.donwload(sdk)
+        })
+      } else {
+        this.hasNewVersionApp.forEach(app => {
+          this.downloadApp(app, 'upgrade')
+        })
+      }
+    },
+    checkDetail (item) {
+      this.curCheckTarget = item;
+      debugger
+      this.productDetailVisible = true;
     },
     //绂荤嚎瀹夎
     offlineInstall () {
@@ -590,11 +804,10 @@
           this.isInstall = false;
           this.$message({
             type: 'success',
-            message: '瀹夎鎴愬姛,灏嗚烦杞嚦鎴戠殑绠楁硶涓煡鐪�'
+            message: '瀹夎鎴愬姛,灏嗚烦杞嚦"宸叉縺娲�"涓煡鐪�'
           });
           setTimeout(() => {
             this.getAllSdk();
-            this.getAllApps();
             window.parent.postMessage({
               msg: "AppUpdate"
             }, '*')
@@ -624,18 +837,18 @@
           setTimeout(() => {
             if (action == 'upgrade') {
               app.upgradeLoading = false;
-              _this.$notify({
-                type: 'success',
-                message: '鍗囩骇鎴愬姛'
-              });
+              // _this.$notify({
+              //   type: 'success',
+              //   message: '鍗囩骇鎴愬姛'
+              // });
             } else {
               app.installLoading = false;
-              _this.$notify({
-                type: 'success',
-                message: '瀹夎鎴愬姛'
-              });
+              // _this.$notify({
+              //   type: 'success',
+              //   message: '瀹夎鎴愬姛'
+              // });
             }
-            _this.getAllApps();
+            // _this.getAllApps();
             window.parent.postMessage({
               msg: "AppUpdate"
             }, '*')
@@ -652,12 +865,11 @@
 
       // 寮�鍚嚜鍔ㄥ埛鏂�
       this.appUpgreading = true;
-      this.startAutoFresh();
     },
     async getAllApps () {
       let iArry = []
       let sArry = []
-
+      let nArry = []
       let rsp = await getApps();
       if (rsp && rsp.success) {
         // 閬嶅巻app鐨勮繃绋嬮噸缃�
@@ -669,36 +881,56 @@
             obj.upgradeLoading = true;
 
             this.appUpgreading = true;
-            this.startAutoFresh();
           }
-
-          item.installed ? iArry.push(obj) : sArry.push(obj)
+          item.installed ? iArry.push(obj) : sArry.push(obj);
+          item.isUpgrade && nArry.push(obj)
         });
       }
-
       this.installedApps = iArry;
       this.storeApps = sArry;
+      this.hasNewVersionApp = nArry;
+    },
+    //鍗歌浇绠楁硶
+    unLoadSdk (sdk) {
+      let _this = this;
+      this.$confirm('纭畾瑕佸嵏杞借绠楁硶鍚�?', '鎻愮ず').then(() => {
+        sdk.unloadLoading = true;
+        removeSdk({ sdkId: sdk.id }).then(res => {
+          if (res && res.success) {
+            sdk.unloadLoading = false;
+            _this.getAllSdk();
+            window.parent.postMessage({
+              msg: "AppUpdate"
+            }, '*')
+          }
+        }).catch(e => {
+          console.log(e);
+          sdk.unloadLoading = false;
+        })
+      }).catch(e => {
+        console.log(e)
+      })
     },
     //鍗歌浇搴旂敤
     unLoad (app) {
-      app.unloadLoading = true;
       let _this = this;
-      removeApp({ appId: app.id }).then(res => {
-
-        if (res && res.success) {
-          //setTimeout(() => {
+      this.$confirm('纭畾瑕佸嵏杞借搴旂敤鍚�?', '鎻愮ず').then(() => {
+        app.unloadLoading = true;
+        removeApp({ appId: app.id }).then(res => {
+          if (res && res.success) {
+            app.unloadLoading = false;
+            _this.getAllApps();
+            window.parent.postMessage({
+              msg: "AppUpdate"
+            }, '*')
+          }
+        }).catch(e => {
+          console.log(e);
           app.unloadLoading = false;
-          _this.getAllApps();
-          window.parent.postMessage({
-            msg: "AppUpdate"
-          }, '*')
-          //}, 3000);
-        }
+        })
       }).catch(e => {
-        console.log(e);
-        app.unloadLoading = false;
+        console.log(e)
       })
-
     },
     // actSdk (id) {
     //   this.actSdkId = id;
@@ -794,7 +1026,6 @@
         _this.installFile = file;
         if (res.success) {
           _this.installDialogVisible = true;
-          debugger
           if (res.data.apps.length > 0) {
             _this.installAppPackage = {
               appId: res.data.apps[0].appId,
@@ -828,41 +1059,30 @@
     async getAllSdk () {
       let installedList = [];
       let unInstalledList = [];
+      let hasNewVersionList = [];
       let res = await findAllSdk();
       if (res && res.success) {
+        this.sdkUpgreading = false;
 
         res.data.forEach(item => {
           let obj = Object.assign({ unloadLoading: false, upgradeLoading: false }, item)
           if (obj.progressMsg !== "" && obj.progressMsg !== "宸插畨瑁�") {
             obj.upgradeLoading = true;
 
-            this.appUpgreading = true;
-            this.startAutoFresh();
+            this.sdkUpgreading = true;
           }
 
           //绠楁硶杞欢 宸插畨瑁呭叾涓寘鍚緟鍗囩骇 鏈畨瑁�
           item.installed ? installedList.push(obj) : unInstalledList.push(obj)
 
         });
-
-
-        // this.sdkList = res.data.map((i, index) => {
-        //   if (i.progressMsg !== "" && i.progressMsg !== "宸插畨瑁�") {
-        //     i.upgradeLoading = true;
-
-        //     this.appUpgreading = true;
-        //     this.startAutoFresh();
-        //   }
-        //   this.$set(i, "isEdit", false);
-        //   return i;
-        // });
       }
       this.installedList = installedList;
       this.notInstalledList = unInstalledList;
+      this.hasNewVersionSdk = hasNewVersionList;
     },
 
     donwload (item) {
-      debugger
       item.upgradeLoading = true;
       //this.downloading = true;
       this.downloadItem = item.id;
@@ -876,7 +1096,6 @@
           item.upgradeLoading = false;
           //this.downloading = false;
           this.downloadItem = "";
-          this.getAllSdk();
         })
         .catch(err => {
           this.$notify({
@@ -888,8 +1107,7 @@
           this.downloadItem = "";
         });
       // 寮�鍚嚜鍔ㄥ埛鏂�
-      this.appUpgreading = true;
-      this.startAutoFresh();
+      this.sdkUpgreading = true;
     },
     inputBlur (item) {
       // console.log(item, '淇敼鍚嶇О')
@@ -898,20 +1116,24 @@
     handleTabClick () {
 
     },
-    startAutoFresh () {
-      if (this.freshTimer) {
-        clearTimeout(this.freshTimer)
+    autoRefreshAppAndSdkState () {
+      // 鍏抽棴鍚庨��鍑�
+      if (!this.autoRefresh) {
+        return;
       }
 
-      if (!this.appUpgreading && !this.sdkUpgreading) {
-        this.freshTimer = -1
-        return
+      if (this.appUpgreading) {
+        this.getAllApps();
       }
 
-      this.getAllSdk()
-      this.getAllApps()
+      if (this.sdkUpgreading) {
+        this.getAllSdk();
+      }
 
-      this.freshTimer = setTimeout(this.startAutoFresh, 5 * 1000)
+      let _this = this
+      setTimeout(() => {
+        _this.autoRefreshAppAndSdkState();
+      }, 500)
     }
   }
 };
@@ -949,6 +1171,22 @@
     width: 100%;
     height: 100%;
   }
+  .product-detail-dialog {
+    .el-dialog__header {
+      text-align: center;
+    }
+    .dialog-content {
+      .box-top {
+      }
+      .box-bot {
+      }
+    }
+  }
+}
+.flex-title {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
 }
 
 .el-loading-mask .el-loading-spinner {
@@ -987,6 +1225,14 @@
   height: 36px;
   font-size: 15px;
   padding-left: 25px;
+}
+.update-badge .el-badge__content.is-fixed {
+  top: 10px;
+  right: 4px;
+}
+.empty-tip {
+  padding-left: 25px;
+  color: #ccc;
 }
 .task-manage {
   height: 100%;
@@ -1077,6 +1323,7 @@
           display: flex;
           flex-direction: row;
           flex-wrap: wrap;
+          min-height: 200px;
           .wrap-box {
             width: 16.66%;
           }
@@ -1236,7 +1483,14 @@
       border-radius: 3px;
       display: none;
       .info-onmask {
-        color: #8ecaff;
+        color: #fff;
+      }
+      .left-top {
+        position: absolute;
+        left: 5px;
+        top: 5px;
+        font-size: 12px;
+        color: #90d6ff;
       }
       .mask-btn {
         width: 100%;

--
Gitblit v1.8.0