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