From 7f37e751c1c9f98671bc3fc06216aeb7781dd386 Mon Sep 17 00:00:00 2001
From: hanbaoshan <hanbaoshan@aiotlink.com>
Date: 星期三, 24 二月 2021 07:25:58 +0800
Subject: [PATCH] 应用中心已激活板块版式更新,添加更新tab页,添加批量更新应用和sdk功能;朔黄标注时间点格式化
---
src/pages/ai/index/App.vue | 333 ++++++++++++++++++++++++++++++++++++++++-------
src/pages/shuohuangMonitorAnalyze/index/App.vue | 4
vue.config.js | 16 +-
public/apps.json | 4
src/pages/shuohuangMonitorAnalyze/components/leftNav.vue | 4
src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue | 7
6 files changed, 302 insertions(+), 66 deletions(-)
diff --git a/public/apps.json b/public/apps.json
index 140d262..a77785f 100644
--- a/public/apps.json
+++ b/public/apps.json
@@ -81,7 +81,7 @@
"height": 512,
"iconBlob": "",
"icon": "../../images/app-mid/data-push.png",
- "version": "1.0.0",
+ "version": "1.0.1",
"create_time": "2020-10-09 14:00:05",
"create_by": "",
"update_time": "",
@@ -90,7 +90,7 @@
"isDefault": true,
"remoteVersion": "",
"installed": true,
- "isUpgrade": false,
+ "isUpgrade": true,
"progressMsg": ""
},
{
diff --git a/src/pages/ai/index/App.vue b/src/pages/ai/index/App.vue
index faed1b4..95dfb60 100644
--- a/src/pages/ai/index/App.vue
+++ b/src/pages/ai/index/App.vue
@@ -74,17 +74,13 @@
: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
@click="unLoadSdk(item)"
@@ -175,11 +171,12 @@
element-loading-background="rgba(0,0,0,.8)"
>
<i class="iconfont iconupdate" v-if="item.isUpgrade"></i>
- <div class="mask" >
- <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">鏌ョ湅璇︽儏</div>
<div class="mask-btn">
<el-button
v-if="!item.isDefault"
@@ -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">鏌ョ湅璇︽儏</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">鏌ョ湅璇︽儏</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,62 @@
<el-button type="primary" @click="offlineInstall">瀹� 瑁�</el-button>
</div>
</el-dialog>
+ <!-- <div class="draggable-box" v-if="productDetailShow" > -->
+ <div class="draggable-box" v-if="false" >
+ <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 data.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>
+ </div>
</div>
</template>
<script>
-import { findAllSdk, downloadSdk, installSdk, getInstallInfo, removeSdk} 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 +661,9 @@
FileUploader
},
computed: {
+ updateNum(){
+ return this.hasNewVersionApp.length+this.hasNewVersionSdk.length
+ },
// notInstalledList () {
// return this.sdkList.filter(sdk => {
// return sdk.installed === false;
@@ -505,7 +684,7 @@
// });
// return arr;
// },
- isAdmin() {
+ isAdmin () {
if (
sessionStorage.getItem("userInfo") &&
sessionStorage.getItem("userInfo") !== ""
@@ -517,11 +696,13 @@
return false;
},
},
- data() {
+ data () {
return {
sdkList: [],
installedList: [],
- ungradeList: [],
+ hasNewVersionSdk: [],
+ updateNum: 0,
+ hasNewVersionApp: [],
notInstalledList: [],
buttonAuthority: sessionStorage.getItem("buttonAuthoritys") || [],
activeName: "myAlgorithm",
@@ -560,6 +741,8 @@
appUpgreading: true,
sdkUpgreading: true,
autoRefresh: true,
+ curCheckTarget: {},
+ productDetailShow: false,
}
},
directives: {
@@ -569,22 +752,37 @@
}
}
},
- mounted() {
+ mounted () {
// 鑾峰彇鎵�鏈夊簲鐢�
this.autoRefreshAppAndSdkState();
this.getUnActivedList();
this.getUnActivedAppList();
},
- beforeDestroy() {
+ beforeDestroy () {
this.autoRefresh = false;
},
methods: {
- isShow(authority) {
+ 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;
+ this.productDetailShow = true;
+ },
//绂荤嚎瀹夎
- offlineInstall() {
+ offlineInstall () {
this.installDialogVisible = false;
this.isInstall = true;
//瀹夎
@@ -613,7 +811,7 @@
});
})
},
- downloadApp(app, action) {
+ downloadApp (app, action) {
if (action == 'upgrade') {
app.upgradeLoading = true;
} else {
@@ -655,10 +853,10 @@
// 寮�鍚嚜鍔ㄥ埛鏂�
this.appUpgreading = true;
},
- async getAllApps() {
+ async getAllApps () {
let iArry = []
let sArry = []
-
+ let nArry = []
let rsp = await getApps();
if (rsp && rsp.success) {
// 閬嶅巻app鐨勮繃绋嬮噸缃�
@@ -671,19 +869,19 @@
this.appUpgreading = true;
}
-
- 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){
+ unLoadSdk (sdk) {
let _this = this;
- this.$confirm('纭畾瑕佸嵏杞借绠楁硶鍚�?','鎻愮ず').then(()=>{
- sdk.unloadLoading = true;
+ this.$confirm('纭畾瑕佸嵏杞借绠楁硶鍚�?', '鎻愮ず').then(() => {
+ sdk.unloadLoading = true;
removeSdk({ sdkId: sdk.id }).then(res => {
if (res && res.success) {
sdk.unloadLoading = false;
@@ -696,15 +894,15 @@
console.log(e);
sdk.unloadLoading = false;
})
- }).catch( e => {
+ }).catch(e => {
console.log(e)
})
},
//鍗歌浇搴旂敤
- unLoad(app) {
+ unLoad (app) {
let _this = this;
- this.$confirm('纭畾瑕佸嵏杞借搴旂敤鍚�?','鎻愮ず').then(()=>{
- app.unloadLoading = true;
+ this.$confirm('纭畾瑕佸嵏杞借搴旂敤鍚�?', '鎻愮ず').then(() => {
+ app.unloadLoading = true;
removeApp({ appId: app.id }).then(res => {
if (res && res.success) {
app.unloadLoading = false;
@@ -717,7 +915,7 @@
console.log(e);
app.unloadLoading = false;
})
- }).catch( e => {
+ }).catch(e => {
console.log(e)
})
},
@@ -728,7 +926,7 @@
// this.activeCode = '';
// this.activedSdkOrApp = this.newActInfo()
// },
- actSdkOrApp(id, type = 'sdk') {
+ actSdkOrApp (id, type = 'sdk') {
this.actType = type;
this.actId = id;
this.actDrawerShow = true;
@@ -736,7 +934,7 @@
this.activeCode = '';
this.activedSdkOrApp = this.newActInfo()
},
- newActInfo() {
+ newActInfo () {
return {
activateCode: '',
productName: '',
@@ -746,7 +944,7 @@
devIds: ''
}
},
- getUnActivedList() {
+ getUnActivedList () {
getUnActivedSdk().then(res => {
if (res.code == 200) {
this.unActivedSDKList = res.data;
@@ -754,14 +952,14 @@
})
},
- getUnActivedAppList() {
+ getUnActivedAppList () {
getUnActivedApp().then(res => {
if (res.code == 200) {
this.unActivedAppList = res.data;
}
});
},
- actived() {
+ actived () {
let _this = this;
if (this.actType == 'sdk') {
//婵�娲荤畻娉�
@@ -799,12 +997,12 @@
});
}
},
- getCodeDetail() { },
- checkMyAlgorith() {
+ getCodeDetail () { },
+ checkMyAlgorith () {
this.actDrawerShow = false;
this.activeName = "myAlgorithm";
},
- onFileUpload(file) {
+ onFileUpload (file) {
//this.patchUpdateStatus = `<span style="color:green">涓婁紶鎴愬姛, 鐐瑰嚮鍗囩骇鎸夐挳寮�濮嬪畨瑁�</span>`;
this.patchFile = { ...file };
this.fileAdded = true;
@@ -841,13 +1039,14 @@
},
- onFileAdded(f) {
+ onFileAdded (f) {
this.patchUpdateStatus = "";
},
- async getAllSdk() {
+ async getAllSdk () {
let installedList = [];
let unInstalledList = [];
+ let hasNewVersionList = [];
let res = await findAllSdk();
if (res && res.success) {
this.sdkUpgreading = false;
@@ -867,9 +1066,10 @@
}
this.installedList = installedList;
this.notInstalledList = unInstalledList;
+ this.hasNewVersionSdk = hasNewVersionList;
},
- donwload(item) {
+ donwload (item) {
item.upgradeLoading = true;
//this.downloading = true;
this.downloadItem = item.id;
@@ -896,14 +1096,14 @@
// 寮�鍚嚜鍔ㄥ埛鏂�
this.sdkUpgreading = true;
},
- inputBlur(item) {
+ inputBlur (item) {
// console.log(item, '淇敼鍚嶇О')
this.$set(item, "isEdit", false);
},
- handleTabClick() {
+ handleTabClick () {
},
- autoRefreshAppAndSdkState() {
+ autoRefreshAppAndSdkState () {
// 鍏抽棴鍚庨��鍑�
if (!this.autoRefresh) {
return;
@@ -959,7 +1159,22 @@
height: 100%;
}
}
-
+.flex-title{
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+.draggable-box{
+ width: 1000px;
+ height: 600px;
+ background: aqua;
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ margin: auto;
+}
.el-loading-mask .el-loading-spinner {
top: 40px !important;
}
@@ -990,12 +1205,20 @@
.src-title {
//color: #bfbfbf;
color: #bbcee8;
- font-family: "PingFangSC-Semibold", "PingFang SC Semibold", "PingFang SC";
+ font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC';
font-weight: 650;
font-style: normal;
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%;
@@ -1015,7 +1238,7 @@
position: absolute;
top: 50%;
left: 50%;
- background: url("/images/algo/green.gif");
+ background: url('/images/algo/green.gif');
overflow: hidden;
transform: translate(-50%, -50%);
.inner-bar {
@@ -1086,6 +1309,7 @@
display: flex;
flex-direction: row;
flex-wrap: wrap;
+ min-height: 200px;
.wrap-box {
width: 16.66%;
}
@@ -1177,16 +1401,16 @@
}
}
.drawer-content {
- font-family: "PingFangSC-Regular";
+ font-family: 'PingFangSC-Regular';
.el-step__title.is-process {
border-color: #3d68e1 !important;
color: #3d68e1 !important;
- font-family: Tahoma, Helvetica, Arial, "\5B8B\4F53", sans-serif;
+ font-family: Tahoma, Helvetica, Arial, '\5B8B\4F53', sans-serif;
}
.el-step__head.is-process {
border-color: #3d68e1 !important;
color: #3d68e1 !important;
- font-family: Tahoma, Helvetica, Arial, "\5B8B\4F53", sans-serif;
+ font-family: Tahoma, Helvetica, Arial, '\5B8B\4F53', sans-serif;
}
.el-input {
width: 100%;
@@ -1245,7 +1469,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%;
diff --git a/src/pages/shuohuangMonitorAnalyze/components/leftNav.vue b/src/pages/shuohuangMonitorAnalyze/components/leftNav.vue
index 15ceb0c..35b18ac 100644
--- a/src/pages/shuohuangMonitorAnalyze/components/leftNav.vue
+++ b/src/pages/shuohuangMonitorAnalyze/components/leftNav.vue
@@ -46,8 +46,8 @@
<i class="iconfont iconkeshihua"></i>
<span slot="title">鍙鍖栧ぇ灞�</span>
</template>
- <el-menu-item index="7-1">浠诲姟澶у睆</el-menu-item>
- <el-menu-item index="7-2">闅愭偅澶у睆</el-menu-item>
+ <el-menu-item index="taskscreen">浠诲姟澶у睆</el-menu-item>
+ <el-menu-item index="hiddendangerscreen">闅愭偅澶у睆</el-menu-item>
</el-submenu>
</el-menu>
</div>
diff --git a/src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue b/src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue
index 6572fe8..4153b48 100644
--- a/src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue
+++ b/src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue
@@ -111,7 +111,7 @@
<div class="mark-list">
<div class="mark" v-for="mark in curVideo.LableLst" :key="mark.ID">
<div class="time">
- <span>{{mark.Time}}</span>
+ <span>{{ zeroize(Math.floor(mark.Time/60)) }}:{{ zeroize(mark.Time%60) }}</span>
<i class="el-icon-edit" @click="editCurLabel(mark)"></i>
<i class="el-icon-delete" @click="removeCurLabel(mark)"></i>
</div>
@@ -192,7 +192,7 @@
guid: 1,
labelDialogVisible: false,
curVideo: {},
- isUnusual: 0,
+ isUnusual:'',
videoArrs: [],
relativeVideos: [],
labelCheckedList: [],
@@ -228,6 +228,9 @@
this.getVideos(this.videoDetails);
},
methods: {
+ zeroize(val){
+ return val<10?'0'+val:val
+ },
checkCurVideo (index) {
if (this.relativeVideos[index]) {
this.curVideo = this.relativeVideos[index];
diff --git a/src/pages/shuohuangMonitorAnalyze/index/App.vue b/src/pages/shuohuangMonitorAnalyze/index/App.vue
index ca5e74a..5f9eab7 100644
--- a/src/pages/shuohuangMonitorAnalyze/index/App.vue
+++ b/src/pages/shuohuangMonitorAnalyze/index/App.vue
@@ -46,7 +46,6 @@
},
methods: {
markNav () {
- debugger
sessionStorage.setItem('actPage', this.actPage);
this.menuChange(this.actPage);
},
@@ -55,6 +54,9 @@
//閫氱煡褰撳墠娲诲姩椤祎able(濡傛灉鏈�) doLayout
},
menuChange (path) {
+ // if(path == 'taskscreen'){
+ // window.location.href = window.location.href+'taskscreen/index.html'
+ // }
this.actPage = path;
}
}
diff --git a/vue.config.js b/vue.config.js
index c5faf7a..254db78 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -78,14 +78,14 @@
// ws: true,
changeOrigin: true,
},
- "/data/api-v/app/findAllApp": {
- // target: '/',
- target: 'http://localhost:8080/',
- changeOrigin: true,
- pathRewrite: {
- '^/data/api-v/app/findAllApp': 'apps.json'
- }
- },
+ // "/data/api-v/app/findAllApp": {
+ // // target: '/',
+ // target: 'http://localhost:8080/',
+ // changeOrigin: true,
+ // pathRewrite: {
+ // '^/data/api-v/app/findAllApp': 'apps.json'
+ // }
+ // },
"/api-c": {
target: 'http://192.168.20.10:8004',
changeOrigin: true
--
Gitblit v1.8.0