From ae2d855c89ca722ac7309fdf1aa6ceed370e3b95 Mon Sep 17 00:00:00 2001 From: heyujie <516346543@qq.com> Date: 星期一, 11 十月 2021 20:22:30 +0800 Subject: [PATCH] 监控ui --- src/pages/desktop/index/components/Tools.vue | 499 +++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 412 insertions(+), 87 deletions(-) diff --git a/src/pages/desktop/index/components/Tools.vue b/src/pages/desktop/index/components/Tools.vue index 5217034..04fc852 100644 --- a/src/pages/desktop/index/components/Tools.vue +++ b/src/pages/desktop/index/components/Tools.vue @@ -15,23 +15,37 @@ /> </div> - <div class="fast-path" :class="showFastPath?'fast-path-show':''" @click.stop> + <div + class="fast-path" + :class="showFastPath ? 'fast-path-show' : ''" + @click.stop + > <div class="top"> - <img src="" alt="" /> - <span class="username">{{userInfo.username}}</span> + <img + v-if="userInfo" + :src="`data:image/png;base64,${userInfo.headpic}`" + alt="" + /> + + <span class="username">{{ userInfo && userInfo.username }}</span> </div> <div class="link-list"> - <div class="list-item" v-for="(x, i) in linkList" :key="i" @click="clickFastPath(x.name)"> + <div + class="list-item" + v-for="(x, i) in linkList" + :key="i" + @click="clickFastPath(x.name)" + > {{ x.name }} </div> </div> <div class="bot"> - <div class="set" @click="gotoSet"> - <span class="icon iconfont">{{"\ue60f"}}</span> + <div class="set" @click="clickFastPath('绯荤粺璁剧疆')"> + <span class="icon iconfont">{{ "\ue60f" }}</span> <span>璁剧疆</span> </div> <div class="exit" @click="toLogout"> - <span class="icon iconfont">{{"\ue60f"}}</span> + <span class="icon iconfont">{{ "\ue60f" }}</span> <span>閫�鍑�</span> </div> </div> @@ -39,7 +53,7 @@ <div class="tools-icon no-hover-style"> <img class="smart-ai" - :src="`${publicPath}images/desktop/header-icon/SmartAI.png`" + :src="`${publicPath}images/desktop/header-icon/SmartAI-鏂�.png`" alt /> </div> @@ -63,6 +77,12 @@ </div> </div> <div class="tools-right"> + <div class="tools-icon my-tools-icon" @click="goToWireSet"> + <span class="icon iconfont"></span> + </div> + <div class="tools-icon my-tools-icon" @click.stop="toggleShowWifi"> + <span class="icon iconfont"></span> + </div> <div class="tools-icon"> <img :src="`${publicPath}images/desktop/header-icon/search.png`" alt /> </div> @@ -83,7 +103,7 @@ </span> <el-dropdown-menu slot="dropdown" style="top: 44px"> <el-dropdown-item style="text-align: left"> - <b>Hi {{ userInfo.username }}</b> + <b>Hi {{ userInfo && userInfo.username }}</b> </el-dropdown-item> <el-dropdown-item @click.native="showPasswdForm = true" >淇敼瀵嗙爜</el-dropdown-item @@ -141,12 +161,106 @@ > </div> </el-dialog> + + <div class="sys-remind" v-if="showSysRemind"> + <!-- --> + <div class="remind-title">绯荤粺鏇存柊鎻愰啋</div> + + <div class="remind-content"> + 宸插仛濂�<b>绯荤粺鏇存柊</b>鐨勫噯澶囷紝<span style="color: red" + >鏇存柊棰勮闇�瑕佷竴瀹氱殑鏃堕棿</span + >锛屽鏋滄偍鏈噯澶囧ソ锛屾垜浠皢鍦ㄤ竴灏忔椂鍚庡啀娆″悜鎮ㄧ‘璁ゃ�� + </div> + + <div class="btns"> + <el-button size="mini" type="primary" @click="delaySysRemind(3600 * 24)" + >鍏抽棴姝ゆ鎻愰啋</el-button + > + <el-button size="mini" type="primary" @click="delaySysRemind(60 * 60)" + >1灏忔椂鍚庢彁閱�</el-button + > + <el-button + :loading="upgrading" + size="mini" + type="primary" + @click="updateSysNow" + > + {{ upgrading ? "鏇存柊涓�" : "绔嬪嵆鏇存柊" }}</el-button + > + </div> + </div> + + <div class="sys-remind" v-if="showAppRemind"> + <!-- --> + <div class="remind-title">绠楁硶/搴旂敤鏇存柊鎻愰啋</div> + + <div class="remind-content"> + 鍙戠幇 <b>绠楁硶/搴旂敤 </b>鏇存柊锛�<span style="color: red" + >璇峰墠寰�鏌ョ湅鏇存柊</span + >銆傚鏋滄偍鏈噯澶囧ソ锛屾垜浠皢鍦ㄤ竴灏忔椂鍚庡啀娆″悜鎮ㄧ‘璁ゃ�� + </div> + + <div class="btns"> + <el-button size="mini" type="primary" @click="delayAppRemind(3600 * 24)" + >鍏抽棴姝ゆ鎻愰啋</el-button + > + <el-button size="mini" type="primary" @click="delayAppRemind(60 * 60)" + >1灏忔椂鍚庢彁閱�</el-button + > + <el-button + :loading="upgrading" + size="mini" + type="primary" + @click="goToUpdate" + > + 鍓嶅線鏇存柊</el-button + > + </div> + </div> + + <div class="wifi-pop" :class="showWifi ? 'wifi-pop-show' : ''"> + <div class="top-title"> + <div class="text">鏃犵嚎缃戠粶</div> + <el-switch v-model="isOpenWifi" active-color="rgba(61, 104, 225, 1)"> + </el-switch> + </div> + + <div class="wifi-list"> + <div + class="item" + :class="i == activeWifi ? 'item-active' : ''" + v-for="(x, i) in wifiList" + :key="i" + @click="pickWifi(x, i)" + > + <!-- --> + <div class="top"> + <span class="icon iconfont"></span> + <div class="name"> + <span style="font-size: 14px">{{ x.name }}</span> + <span>瀹夊叏</span> + </div> + </div> + <div class="bot" v-if="x.showBottom"> + <el-checkbox v-model="x.checked">鑷姩杩炴帴</el-checkbox> + <el-button size="mini">杩炴帴</el-button> + </div> + </div> + </div> + </div> </div> </template> <script> -import html2canvas from "html2canvas"; import { logout, updatePwd } from "@/api/login"; + +import { + getUpgradeNotice, + delayUpgradeNotice, + getAppUpgradeNotice, + upgradeNewVersion, + delayAppNotice, +} from "@/api/system"; export default { name: "Tools", data() { @@ -174,8 +288,19 @@ notificationCenterVisible: false, notificationCenterMessageCount: 0, userInfo: {}, - linkList: [{name: "鏂囨。涓績"}, {name: "绯荤粺鐩戞帶鍣�"}, { name: "鏃ュ織绠$悊" }], + activeWifi: null, + wifiList: [ + { name: "缃戠粶1", connected: false, showBottom: false, checked: false }, + { name: "缃戠粶2", connected: false, showBottom: false, checked: false }, + { name: "缃戠粶3", connected: true, showBottom: false, checked: false }, + ], + linkList: [ + { name: "鏂囨。涓績" }, + { name: "绯荤粺鐩戞帶鍣�" }, + { name: "鏃ュ織绠$悊" }, + ], showPasswdForm: false, + showWifi: false, rules: { oldPwd: [{ required: true, message: "璇疯緭鍏ユ棫瀵嗙爜", trigger: "blur" }], newPwd: [{ required: true, validator: validatePass, trigger: "blur" }], @@ -183,7 +308,14 @@ { required: true, validator: validatePass2, trigger: "blur" }, ], }, - showFastPath:false, + showFastPath: false, + showSysRemind: false, + showAppRemind: false, + sysTimeout: 60 * 60 * 1000, + sysTimer: null, + appTimeout: 60 * 60 * 1000, + upgrading: false, + isOpenWifi: false, passwdForm: { oldPwd: "", newPwd: "", @@ -196,7 +328,6 @@ this.userInfo = sessionStorage.getItem("userInfo") && JSON.parse(sessionStorage.getItem("userInfo")); - console.log(this.userInfo); if (window.toolIntervalArr) { window.toolIntervalArr.forEach((item) => clearInterval(item)); } @@ -206,16 +337,109 @@ }, 600), ]; }, + beforeDestroy() { + clearTimeout(this.sysTimer); + this.sysTimer = null; + }, mounted() { - document.addEventListener("click",(e) => { - // debugger - // this.showFastPath=false - if (this.showFastPath) { - this.showFastPath=false + document.addEventListener("click", (e) => { + if (this.showFastPath||this.showWifi) { + this.showFastPath = false; + this.showWifi = false; } - }) + }); + this.askSysUpdate(); + this.askAppUpdate(); + + }, methods: { + askAppUpdate() { + getAppUpgradeNotice().then((res) => { + if (res.code == 200) { + if (res.data.NeedUpdate && res.data.NoticeStatus) { + if (res.data.LastNoticeTime == 0) { + this.showAppRemind = true; + } else { + this.appTimeout = res.data.LastNoticeTime * 1000; + this.delayAppAsk(); + } + } + } + }); + }, + pickWifi(x, i) { + this.wifiList.forEach((x) => { + x.showBottom = false; + }); + x.showBottom = !x.showBottom; + this.activeWifi = i; + }, + goToUpdate() { + this.showAppRemind = false; + window.parent.postMessage({ msg: `toAI?activeName=鏇存柊` }, "*"); + }, + goToWireSet() { + window.parent.postMessage( + { msg: `toSetting?menu=缃戠粶璁剧疆&subMenu=鏈夌嚎缃戠粶` }, + "*" + ); + }, + updateSysNow() { + window.parent.postMessage( + { msg: `toVindicate?autoUpdate=1` }, + "*" + ); + }, + delaySysRemind(sec) { + delayUpgradeNotice({ + delaySecond: sec, + }).then((res) => { + if (res.code == 200) { + this.$notify.success("璁剧疆鎴愬姛"); + this.showSysRemind = false; + this.sysTimeout = res.data.LastNoticeTime * 1000; + this.delaySysAsk(); + } + }); + }, + delayAppRemind(sec) { + delayAppNotice({ + delay: sec, + }).then((res) => { + if (res.code == 200) { + this.$notify.success("璁剧疆鎴愬姛"); + this.showAppRemind = false; + this.appTimeout = res.data.LastNoticeTime * 1000; + this.delayAppAsk(); + } + }); + }, + delaySysAsk() { + this.sysTimer = setTimeout(() => { + this.askSysUpdate(); + }, this.sysTimeout); + }, + delayAppAsk() { + this.appTimer = setTimeout(() => { + this.askAppUpdate(); + }, this.appTimeout); + }, + askSysUpdate() { + getUpgradeNotice().then((res) => { + if (res.data.HaveNewVersion > 0 && res.data.NoticeStatus) { + if (res.data.LastNoticeTime == 0) { + this.showSysRemind = true; + } else { + this.sysTimeout = res.data.LastNoticeTime * 1000; + this.delaySysAsk(); + } + } + }); + }, + toggleShowWifi() { + this.showWifi = !this.showWifi; + }, submitForm(formName) { this.$refs[formName].validate((valid) => { if (valid) { @@ -224,16 +448,12 @@ newPwd: this.passwdForm.checkPwd, }; updatePwd(json).then((res) => { - console.log(res, "淇敼瀵嗙爜"); this.$notify({ type: res.success ? "success" : "error", message: res.msg, }); if (res.success) { this.showPasswdForm = false; - // this.$nextTick(_=>{ - // this.toLogout('淇敼瀵嗙爜鎴愬姛锛岃閲嶆柊鐧诲綍锛�') - // }) } }); } else { @@ -260,7 +480,7 @@ }, togglePreference() { - this.showFastPath = !this.showFastPath + this.showFastPath = !this.showFastPath; this.$store.state.desktop.frames.forEach((frame) => { this.$store.commit("desktop/addMinDock", { id: frame.id, @@ -287,23 +507,13 @@ this.$store.commit("desktop/refreshFrame", dock); } }, - clickFastPath(name){ - debugger - this.$emit("jumpToDock", name) - - }, - gotoSet(){ - this.$emit("jumpToDock", "绯荤粺璁剧疆") - - }, - toolHover(dock) { - //this.$parent.screenShot(dock) + clickFastPath(name) { + this.$emit("jumpToDock", name); }, toLogout() { let _this = this; - this.$confirm("纭畾閫�鍑虹櫥褰曞悧锛�","鎻愮ず", { - // center: true, - type:"warning", + this.$confirm("纭畾閫�鍑虹櫥褰曞悧锛�", "鎻愮ず", { + type: "warning", cancelButtonClass: "comfirm-class-cancle", confirmButtonClass: "comfirm-class-sure", }) @@ -351,7 +561,7 @@ margin: auto; } .tools .tools-left { - width: 200px; + width: 275px; height: 100%; float: left; margin-left: 14px; @@ -410,10 +620,16 @@ text-align: center; height: 100%; display: inline-block; - vertical-align: top; + vertical-align: bottom; + line-height: 56px; padding: 0 15px; position: relative; + .iconfont { + display: block; + line-height: 42px; + font-size: 25px; + } } @keyframes move { 0% { @@ -430,74 +646,96 @@ top: 55px; border-radius: 6px; background-color: rgba(255, 255, 255, 1); - transition: .2s; + transition: 0.2s; display: none; - .top{ - display: -webkit-box; - display: -ms-flexbox; + padding-top: 5px; + box-sizing: border-box; + .top { display: flex; - -webkit-box-pack: space-evenly; - -ms-flex-pack: space-evenly; - /* justify-content: space-evenly; */ - -webkit-box-align: center; - -ms-flex-align: center; align-items: center; height: 70px; box-sizing: border-box; padding: 0 30px; - img{ - height: 50px; - width: 50px; -background-color: bisque; - border-radius: 50%; + img { + height: 50px; + width: 50px; + border-radius: 50%; } - .username{ - width: fit-content; - height: 30px; - line-height: 30px; - font-size: 16px; - margin-left: 10px; + .username { + width: fit-content; + height: 30px; + line-height: 30px; + font-size: 16px; + margin-left: 15px; } } - .link-list{ - height: 180px; + .link-list { + height: 180px; display: flex; flex-direction: column; align-items: center; - .list-item{ - display: -webkit-box; - display: -ms-flexbox; - display: flex; - width: 80%; - -webkit-box-sizing: border-box; - box-sizing: border-box; - padding: 0 20px; - border-radius: 5px; - font-size: 14px; - line-height: 25px; - height: 25px;cursor: pointer; - margin: 5px; + .list-item { + display: flex; + width: 90%; + box-sizing: border-box; + padding: 0 20px; + border-radius: 5px; + font-size: 14px; + line-height: 25px; + height: 25px; + cursor: pointer; + margin: 5px; } - .list-item:hover{ - background-color: rgba(231, 231, 231, 1); + .list-item:hover { + background-color: rgba(231, 231, 231, 1); } } - .bot{ - position: absolute; + .bot { + position: absolute; bottom: 0; height: 60px; display: flex; width: 100%; justify-content: space-around; - .set,.exit{ - display: flex; - align-items: center; - width: 28%; - justify-content: space-evenly; - font-size: 14px; - cursor: pointer; + .set, + .exit { + display: flex; + align-items: center; + width: 28%; + justify-content: space-evenly; + font-size: 14px; + cursor: pointer; } + } +} +.sys-remind { + background-color: white; + width: 400px; + position: absolute; + right: 5px; + top: 45px; + border-radius: 5px; + .remind-title { + box-sizing: border-box; + text-align: left; + padding: 0 20px; + border-bottom: 1px solid lightgray; + font-size: 16px; + line-height: 35px; + } + .remind-content { + text-align: left; + line-height: 20px; + font-size: 14px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 15px 20px; + } + .btns { + padding: 0px 12px 8px 12px; + /* background-color: antiquewhite; */ + text-align: right; } } @@ -511,8 +749,90 @@ cursor: pointer; } +.wifi-pop { + position: absolute; + width: 210px; + top: 55px; + height: 400px; + border-radius: 6px; + background-color: white; + transition: 0.2s; + display: none; + box-sizing: border-box; + right: 100px; + .top-title { + display: flex; + align-items: center; + justify-content: space-between; + box-sizing: border-box; + padding: 0 20px; + font-size: 14px; + border-bottom: 1px solid lightgray; + } + .wifi-list { + overflow: auto; + height: 340px; + .item-active { + background-color: rgba(66, 102, 153, 1); + color: white; + } + .item { + box-sizing: border-box; + cursor: pointer; + /* background-color: aqua; */ + padding: 10px 20px; + .top { + display: flex; + .icon { + font-size: 20px; + margin-right: 10px; + } + .name { + display: flex; + flex-direction: column; + line-height: 20px; + text-align: left; + } + } + .bot { + display: flex; + justify-content: space-between; + align-items: center; + .el-checkbox { + color: white; + .el-checkbox__input.is-checked + .el-checkbox__label { + color: white; + } + .el-checkbox__label { + padding-left: 5px; + font-size: 12px; + } + .el-checkbox__inner { + width: 12px; + height: 12px; + + .el-checkbox__inner::after { + height: 6px; + left: 3px; + } + } + } + + .el-button--mini, + .el-button--mini.is-round { + padding: 5px 10px; + } + } + } + } +} +.wifi-pop-show { + animation: move linear 0.2s 1; + display: block; +} + .fast-path-show { - animation: move linear .2s 1; + animation: move linear 0.2s 1; display: block; } @@ -521,6 +841,11 @@ height: 100%; margin-right: 14px; } + +.smart-ai { + height: 65%; +} + .el-dropdown-menu { top: 40px !important; } -- Gitblit v1.8.0