From 9c5b1060af4e6c468b2cf95fbb9ec6d0a05fad5c Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期一, 28 二月 2022 17:56:27 +0800 Subject: [PATCH] 支持删除在线设备 --- web_src/src/components/control.vue | 341 +++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 286 insertions(+), 55 deletions(-) diff --git a/web_src/src/components/control.vue b/web_src/src/components/control.vue index 51bcb0a..bc6ac5e 100644 --- a/web_src/src/components/control.vue +++ b/web_src/src/components/control.vue @@ -7,19 +7,101 @@ <el-main> <div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;"> <span style="font-size: 1rem; font-weight: bold;">鎺у埗鍙�</span> + <div style="position: absolute; right: 17rem; top: 0.3rem;"> + 鑺傜偣閫夋嫨: <el-select size="mini" @change="chooseMediaChange" style="width: 18rem; margin-right: 8rem;" v-model="mediaServerChoose" placeholder="璇烽�夋嫨" default-first-option> + <el-option + v-for="item in mediaServerList" + :key="item.id" + :label="item.id + '( ' + item.streamIp + ' )'" + :value="item.id"> + </el-option> + </el-select> + <span >{{loadCount}}</span> + </div> <div style="position: absolute; right: 1rem; top: 0.3rem;"> - <el-popover placement="bottom" width="750" height="300" trigger="click"> - <div style="height: 600px;overflow:auto;"> - <table class="table-c" cellspacing="0"> - <tr v-for="(value, key, index) in serverConfig"> - <td style="width: 18rem; text-align: right;">{{ key }}</td> - <td style="width: 33rem; text-align:left">{{ value }}</td> - </tr> - </table> + <el-popover placement="bottom" width="900" height="300" trigger="click"> + <div style="height: 600px; overflow:auto; padding: 20px"> + <el-descriptions v-for="(value, key, index) in serverConfig" border column="1" style="margin-bottom: 1rem"> + <template slot="title"> + {{key}} + </template> + <el-descriptions-item v-for="(value1, key1, index1) in serverConfig[key]"> + <template slot="label" > + {{ getMediaKeyNameFromKey(key1) }} + </template> + {{ value1 }} + </el-descriptions-item> + </el-descriptions> </div> - <el-button type="primary" slot="reference" size="mini" @click="getServerConfig()">鏌ョ湅鏈嶅姟鍣ㄩ厤缃�</el-button> + <el-button type="primary" slot="reference" size="mini" @click="getServerConfig()">濯掍綋鏈嶅姟鍣ㄩ厤缃�</el-button> </el-popover> - <el-button style="margin-left: 1rem;" type="danger" size="mini" @click="reStartServer()">閲嶅惎鏈嶅姟鍣�</el-button> + <el-popover placement="bottom" width="900" height="300" trigger="click"> + <div style="height: 600px;overflow:auto; padding: 20px"> + + <el-descriptions title="鍩虹閰嶇疆" border column="1"> + <template slot="extra"> + <el-button style="float: right;" type="primary" size="mini" icon="el-icon-document-copy" title="鐐瑰嚮鎷疯礉" v-clipboard="JSON.stringify(wvpServerConfig.base)" @success="$message({type:'success', message:'鎴愬姛鎷疯礉鍒扮矘璐存澘'})"></el-button> + </template> + <el-descriptions-item v-for="(value, key, index) in wvpServerConfig.base" > + <template slot="label" > + {{ getNameFromKey(key) }} + </template> + <div v-if="key === 'interfaceAuthenticationExcludes'"> + <el-dropdown> + <span class="el-dropdown-link"> + 鏌ョ湅<i class="el-icon-arrow-down el-icon--right"></i> + </span> + <el-dropdown-menu slot="dropdown"> + <el-dropdown-item v-for="(value, key, index) in wvpServerConfig.base.interfaceAuthenticationExcludes">{{value}}</el-dropdown-item> + </el-dropdown-menu> + </el-dropdown> + </div> + <div v-if="key !== 'interfaceAuthenticationExcludes'"> + <div v-if="value === true"> + 宸插惎鐢� + </div> + <div v-if="value === false"> + 鏈惎鐢� + </div> + <div v-if="value !== true && value !== false"> + {{ value }} + </div> + </div> + + </el-descriptions-item> + </el-descriptions> + <div style="margin-top: 1rem"> + <el-descriptions title="鍥芥爣閰嶇疆" border column="1"> + <template slot="extra"> + <el-button style="float: right;" type="primary" size="mini" icon="el-icon-document-copy" title="鐐瑰嚮鎷疯礉" v-clipboard="JSON.stringify(wvpServerConfig.sip)" @success="$message({type:'success', message:'鎴愬姛鎷疯礉鍒扮矘璐存澘'})"></el-button> + </template> + <el-descriptions-item v-for="(value, key, index) in wvpServerConfig.sip"> + <template slot="label"> + {{ getNameFromKey(key) }} + </template> + {{ value }} + </el-descriptions-item> + </el-descriptions> + </div> + <div style="margin-top: 1rem"> + <el-descriptions title="鐗堟湰淇℃伅" border column="1"> + <template slot="extra"> + <el-button style="float: right;" type="primary" size="mini" icon="el-icon-document-copy" title="鐐瑰嚮鎷疯礉" v-clipboard="JSON.stringify(wvpServerVersion)" @success="$message({type:'success', message:'鎴愬姛鎷疯礉鍒扮矘璐存澘'})"></el-button> + </template> + <el-descriptions-item v-for="(value, key, index) in wvpServerVersion"> + <template slot="label"> + {{ getNameFromKey(key) }} + </template> + {{ value }} + </el-descriptions-item> + </el-descriptions> + + + </div> + </div> + <el-button type="primary" slot="reference" size="mini" @click="getWVPServerConfig()">淇′护鏈嶅姟鍣ㄩ厤缃�</el-button> + </el-popover> + <el-button style="margin-left: 1rem;" type="danger" size="mini" @click="reStartServer()">閲嶅惎濯掍綋鏈嶅姟鍣�</el-button> </div> </div> <el-row :gutter="30"> @@ -53,6 +135,7 @@ <script> import uiHeader from './UiHeader.vue' +import MediaServer from './service/MediaServer' import echarts from 'echarts'; export default { @@ -87,68 +170,102 @@ chartInterval: 0, //鏇存柊鍥捐〃缁熻鍥惧畾鏃朵换鍔℃爣璇� allSessionData: [], visible: false, - serverConfig: {} + wvpVisible: false, + serverConfig: {}, + wvpServerConfig: {}, + wvpServerVersion: {}, + mediaServer : new MediaServer(), + mediaServerChoose : null, + loadCount : 0, + mediaServerList : [] }; }, mounted() { - this.getAllSession(); + this.initTable(); - this.updateData(); this.chartInterval = setInterval(this.updateData, 3000); + this.mediaServer.getOnlineMediaServerList((data)=>{ + this.mediaServerList = data.data; + if (this.mediaServerList && this.mediaServerList.length > 0) { + this.mediaServerChoose = this.mediaServerList[0].id + this.loadCount = this.mediaServerList[0].count; + this.updateData(); + } + }) }, destroyed() { clearInterval(this.chartInterval); //閲婃斁瀹氭椂浠诲姟 }, methods: { + chooseMediaChange: function (val) { + this.loadCount = 0 + this.initTable() + this.updateData(); + }, updateData: function () { this.getThreadsLoad(); + this.getLoadCount(); + this.getAllSession(); }, /** * 鑾峰彇绾跨▼鐘舵�� */ getThreadsLoad: function () { let that = this; - this.$axios({ + if (that.mediaServerChoose != null) { + this.$axios({ method: 'get', - url: '/zlm/index/api/getThreadsLoad' - }).then(function (res) { + url: '/zlm/' + that.mediaServerChoose +'/index/api/getThreadsLoad' + }).then(function (res) { if (res.data.code == 0) { - that.tableOption.xAxis.data.push(new Date().toLocaleTimeString('chinese', { - hour12: false - })); - that.table1Option.xAxis.data.push(new Date().toLocaleTimeString('chinese', { - hour12: false - })); + that.tableOption.xAxis.data.push(new Date().toLocaleTimeString('chinese', { + hour12: false + })); + that.table1Option.xAxis.data.push(new Date().toLocaleTimeString('chinese', { + hour12: false + })); - for (var i = 0; i < res.data.data.length; i++) { - if (that.tableOption.series[i] === undefined) { - let data = { - data: [], - type: 'line' - }; - let data1 = { - data: [], - type: 'line' - }; - data.data.push(res.data.data[i].delay); - data1.data.push(res.data.data[i].load); - that.tableOption.series.push(data); - that.table1Option.series.push(data1); - } else { - that.tableOption.series[i].data.push(res.data.data[i].delay); - that.table1Option.series[i].data.push(res.data.data[i].load); - } + for (var i = 0; i < res.data.data.length; i++) { + if (that.tableOption.series[i] === undefined) { + let data = { + data: [], + type: 'line' + }; + let data1 = { + data: [], + type: 'line' + }; + data.data.push(res.data.data[i].delay); + data1.data.push(res.data.data[i].load); + that.tableOption.series.push(data); + that.table1Option.series.push(data1); + } else { + that.tableOption.series[i].data.push(res.data.data[i].delay); + that.table1Option.series[i].data.push(res.data.data[i].load); } - that.tableOption.dataZoom[0].start = that.charZoomStart; - that.tableOption.dataZoom[0].end = that.charZoomEnd; - that.table1Option.dataZoom[0].start = that.charZoomStart; - that.table1Option.dataZoom[0].end = that.charZoomEnd; - //that.myChart = echarts.init(document.getElementById('ThreadsLoad')); - that.myChart.setOption(that.tableOption, true); - // that.myChart1 = echarts.init(document.getElementById('WorkThreadsLoad')); - that.myChart1.setOption(that.table1Option, true); + } + that.tableOption.dataZoom[0].start = that.charZoomStart; + that.tableOption.dataZoom[0].end = that.charZoomEnd; + that.table1Option.dataZoom[0].start = that.charZoomStart; + that.table1Option.dataZoom[0].end = that.charZoomEnd; + //that.myChart = echarts.init(document.getElementById('ThreadsLoad')); + that.myChart.setOption(that.tableOption, true); + // that.myChart1 = echarts.init(document.getElementById('WorkThreadsLoad')); + that.myChart1.setOption(that.table1Option, true); } - }); + }); + } + + }, + getLoadCount: function (){ + let that = this; + if (that.mediaServerChoose != null) { + that.mediaServer.getMediaServer(that.mediaServerChoose, (data)=>{ + if (data.code == 0) { + that.loadCount = data.data.count + } + }) + } }, initTable: function () { let that = this; @@ -242,10 +359,9 @@ getAllSession: function () { let that = this; that.allSessionData = []; - console.log("鍦板潃锛�" + '/zlm/index/api/getAllSession'); this.$axios({ method: 'get', - url: '/zlm/index/api/getAllSession' + url: '/zlm/' + that.mediaServerChoose +'/index/api/getAllSession' }).then(function (res) { res.data.data.forEach(item => { let data = { @@ -262,10 +378,39 @@ let that = this; this.$axios({ method: 'get', - url: '/zlm/index/api/getServerConfig' + url: '/zlm/' + that.mediaServerChoose +'/index/api/getServerConfig' }).then(function (res) { - that.serverConfig = res.data.data[0]; + let info = res.data.data[0]; + let serverInfo = {} + for (let i = 0; i < Object.keys(info).length; i++) { + let key = Object.keys(info)[i]; + let group = key.substring(0, key.indexOf(".")) + let itemKey = key.substring(key.indexOf(".") + 1) + if (!serverInfo[group]) serverInfo[group] = {} + serverInfo[group][itemKey] = info[key] + } + + that.serverConfig = serverInfo; that.visible = true; + }); + }, + getWVPServerConfig: function () { + let that = this; + this.$axios({ + method: 'get', + url: '/api/server/config' + }).then(function (res) { + console.log(res) + that.wvpServerConfig = res.data.data; + that.wvpVisible = true; + }); + this.$axios({ + method: 'get', + url: '/api/server/version' + }).then(function (res) { + console.log(res) + that.wvpServerVersion = res.data.data; + that.wvpVisible = true; }); }, reStartServer: function () { @@ -278,7 +423,7 @@ let that = this; this.$axios({ method: 'get', - url: '/zlm/index/api/restartServer' + url: '/zlm/' + that.mediaServerChoose +'/index/api/restartServer' }).then(function (res) { that.getAllSession(); if (res.data.code == 0) { @@ -313,7 +458,7 @@ let that = this; this.$axios({ method: 'get', - url: '/zlm/index/api/kick_session&id=' + id + url: '/zlm/' + that.mediaServerChoose +'/index/api/kick_session&id=' + id }).then(function (res) { that.getAllSession(); that.$message({ @@ -321,6 +466,92 @@ message: '鍒犻櫎鎴愬姛!' }); }); + }, + getNameFromKey: function(key) { + let nameData = { + "waitTrack": "绛夊緟缂栫爜淇℃伅", + "interfaceAuthenticationExcludes": "涓嶈繘琛岄壌鏉冪殑鎺ュ彛", + "playTimeout": "鐐规挱瓒呮椂鏃堕棿", + "autoApplyPlay": "鑷姩鐐规挱", + "recordPushLive": "鎺ㄦ祦褰曞儚", + "redisConfig": "鑷姩閰嶇疆redis", + "thirdPartyGBIdReg": "stream淇℃伅姝e垯", + "savePositionHistory": "淇濆瓨杞ㄨ抗淇℃伅", + "interfaceAuthentication": "鎺ュ彛閴存潈", + "serverId": "鏈嶅姟ID", + "logInDatebase": "鏃ュ織瀛樺偍杩涙暟鎹簱", + "seniorSdp": "鎵╁睍SDP", + "password": "瀵嗙爜", + "port": "绔彛鍙�", + "keepaliveTimeOut": "蹇冭烦瓒呮椂", + "domain": "鍥芥爣鍩�", + "ip": "IP鍦板潃", + "monitorIp": "鐩戝惉IP", + "alarm": "瀛樺偍鎶ヨ淇℃伅", + "ptzSpeed": "浜戝彴鎺у埗閫熷害", + "id": "鍥芥爣ID", + "registerTimeInterval": "娉ㄥ唽闂撮殧", + "artifactId": "妯″潡鍚嶇О", + "version": "鐗堟湰", + "project": "宸ョ▼", + "git_Revision": "GIT淇鐗堟湰", + "git_BRANCH": "GIT鍒嗘敮", + "git_URL": "GIT鍦板潃", + "build_DATE": "鏋勫缓鏃堕棿", + "create_By": "浣滆��", + "git_Revision_SHORT": "GIT淇鐗堟湰锛堢煭锛�", + "build_Jdk": "鏋勫缓鐢↗DK", + }; + console.log(key + ": " + nameData[key]) + + if (nameData[key]) { + return nameData[key] + }else { + return key; + } + }, + getMediaKeyNameFromKey: function(key) { + let nameData = { + "waitTrack": "绛夊緟缂栫爜淇℃伅", + "interfaceAuthenticationExcludes": "涓嶈繘琛岄壌鏉冪殑鎺ュ彛", + "playTimeout": "鐐规挱瓒呮椂鏃堕棿", + "autoApplyPlay": "鑷姩鐐规挱", + "recordPushLive": "鎺ㄦ祦褰曞儚", + "redisConfig": "鑷姩閰嶇疆redis", + "thirdPartyGBIdReg": "stream淇℃伅姝e垯", + "savePositionHistory": "淇濆瓨杞ㄨ抗淇℃伅", + "interfaceAuthentication": "鎺ュ彛閴存潈", + "serverId": "鏈嶅姟ID", + "logInDatebase": "鏃ュ織瀛樺偍杩涙暟鎹簱", + "seniorSdp": "鎵╁睍SDP", + "password": "瀵嗙爜", + "port": "绔彛鍙�", + "keepaliveTimeOut": "蹇冭烦瓒呮椂", + "domain": "鍥芥爣鍩�", + "ip": "IP鍦板潃", + "monitorIp": "鐩戝惉IP", + "alarm": "瀛樺偍鎶ヨ淇℃伅", + "ptzSpeed": "浜戝彴鎺у埗閫熷害", + "id": "鍥芥爣ID", + "registerTimeInterval": "娉ㄥ唽闂撮殧", + "artifactId": "妯″潡鍚嶇О", + "version": "鐗堟湰", + "project": "宸ョ▼", + "git_Revision": "GIT淇鐗堟湰", + "git_BRANCH": "GIT鍒嗘敮", + "git_URL": "GIT鍦板潃", + "build_DATE": "鏋勫缓鏃堕棿", + "create_By": "浣滆��", + "git_Revision_SHORT": "GIT淇鐗堟湰锛堢煭锛�", + "build_Jdk": "鏋勫缓鐢↗DK", + }; + console.log(key + ": " + nameData[key]) + + if (nameData[key]) { + return nameData[key] + }else { + return key; + } } } }; -- Gitblit v1.8.0