From f7236c4a9099d0ec3128861f8b485e28acb01146 Mon Sep 17 00:00:00 2001
From: 648540858 <456panlinlin>
Date: 星期三, 20 四月 2022 18:21:18 +0800
Subject: [PATCH] 添加公共组件设备树
---
web_src/static/css/iconfont.woff2 | 0
src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorage.java | 2
src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java | 4
web_src/src/components/service/DeviceService.js | 39 ++++---
web_src/src/components/common/DeviceTree.vue | 159 +++++++++++++++++++++++++++++++
web_src/src/router/index.js | 6 +
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java | 4
web_src/static/css/iconfont.css | 48 +++++++++
web_src/src/components/UiHeader.vue | 1
web_src/index.html | 2
src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java | 4
11 files changed, 244 insertions(+), 25 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorage.java b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorage.java
index 9d12eb5..d57f812 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorage.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorage.java
@@ -180,7 +180,7 @@
* @param count
* @return
*/
- PageInfo querySubChannels(String deviceId, String channelId, String query, Boolean hasSubChannel, String online, int page, int count);
+ PageInfo querySubChannels(String deviceId, String channelId, String query, Boolean hasSubChannel, Boolean online, int page, int count);
/**
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java
index 42e46e1..c1ff7a6 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java
@@ -246,7 +246,9 @@
" channelId as \"value\",\n" +
" channelId as \"key\",\n" +
" longitude,\n" +
- " latitude\n" +
+ " latitude,\n" +
+ " PTZType,\n" +
+ " subCount\n" +
" from device_channel\n" +
" where deviceId = #{deviceId}")
List<DeviceChannelTree> tree(String deviceId);
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java
index fbb6e38..5d0031f 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java
@@ -365,9 +365,9 @@
}
@Override
- public PageInfo<DeviceChannel> querySubChannels(String deviceId, String parentChannelId, String query, Boolean hasSubChannel, String online, int page, int count) {
+ public PageInfo<DeviceChannel> querySubChannels(String deviceId, String parentChannelId, String query, Boolean hasSubChannel, Boolean online, int page, int count) {
PageHelper.startPage(page, count);
- List<DeviceChannel> all = deviceChannelMapper.queryChannels(deviceId, parentChannelId, null, null, null);
+ List<DeviceChannel> all = deviceChannelMapper.queryChannels(deviceId, parentChannelId, query, hasSubChannel, online);
return new PageInfo<>(all);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
index 95d2843..38cbdee 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
@@ -235,7 +235,7 @@
@ApiImplicitParam(name="page", value = "褰撳墠椤�", required = true, dataTypeClass = Integer.class),
@ApiImplicitParam(name="count", value = "姣忛〉鏉℃暟", required = true, dataTypeClass = Integer.class),
@ApiImplicitParam(name="query", value = "鏌ヨ鍐呭", dataTypeClass = String.class),
- @ApiImplicitParam(name="online", value = "鏄惁鍦ㄧ嚎", dataTypeClass = String.class),
+ @ApiImplicitParam(name="online", value = "鏄惁鍦ㄧ嚎", dataTypeClass = Boolean.class),
@ApiImplicitParam(name="channelType", value = "閫氶亾绫诲瀷锛� 瀛愮洰褰�", dataTypeClass = Boolean.class),
})
@GetMapping("/sub_channels/{deviceId}/{channelId}/channels")
@@ -244,7 +244,7 @@
int page,
int count,
@RequestParam(required = false) String query,
- @RequestParam(required = false) String online,
+ @RequestParam(required = false) Boolean online,
@RequestParam(required = false) Boolean channelType){
// if (logger.isDebugEnabled()) {
diff --git a/web_src/index.html b/web_src/index.html
index a287331..df23a7f 100644
--- a/web_src/index.html
+++ b/web_src/index.html
@@ -22,7 +22,7 @@
// 鍦板浘鐡︾墖鍦板潃
tilesUrl: "http://webrd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8",
// 鐡︾墖澶у皬
- tileSize: 512,
+ tileSize: 256,
// 榛樿灞傜骇
zoom:10,
// 榛樿鍦板浘涓績鐐�
diff --git a/web_src/src/components/UiHeader.vue b/web_src/src/components/UiHeader.vue
index 3341428..af6d665 100644
--- a/web_src/src/components/UiHeader.vue
+++ b/web_src/src/components/UiHeader.vue
@@ -10,6 +10,7 @@
<el-menu-item index="/cloudRecord">浜戠褰曞儚</el-menu-item>
<el-menu-item index="/mediaServerManger">鑺傜偣绠$悊</el-menu-item>
<el-menu-item index="/parentPlatformList/15/1">鍥芥爣绾ц仈</el-menu-item>
+ <el-menu-item index="/test">璁惧鏍�</el-menu-item>
<el-menu-item @click="openDoc">鍦ㄧ嚎鏂囨。</el-menu-item>
<!-- <el-submenu index="/setting">-->
<!-- <template slot="title">绯荤粺璁剧疆</template>-->
diff --git a/web_src/src/components/common/DeviceTree.vue b/web_src/src/components/common/DeviceTree.vue
new file mode 100644
index 0000000..43a797b
--- /dev/null
+++ b/web_src/src/components/common/DeviceTree.vue
@@ -0,0 +1,159 @@
+<template>
+ <div id="DeviceTree" style="width: 100%;height: 100%; background-color: #FFFFFF">
+ <el-container>
+ <el-header>璁惧鍒楄〃</el-header>
+ <el-main style="background-color: #ffffff;">
+ <div class="device-tree-main-box">
+ <el-tree :props="defaultProps" :load="loadNode" lazy @node-click="handleNodeClick"@node-contextmenu="handleContextMenu">
+ <span class="custom-tree-node" slot-scope="{ node, data }" style="width: 100%">
+ <span v-if="node.data.type === 0 && node.data.online" title="鍦ㄧ嚎璁惧" class="device-online iconfont icon-jiedianleizhukongzhongxin2"></span>
+ <span v-if="node.data.type === 0 && !node.data.online " title="绂荤嚎璁惧" class="device-offline iconfont icon-jiedianleizhukongzhongxin2"></span>
+ <span v-if="node.data.type === 2 && node.data.online" title="鐩綍" class="device-online iconfont icon-jiedianleilianjipingtai"></span>
+ <span v-if="node.data.type === 2 && !node.data.online" title="鐩綍" class="device-offline iconfont icon-jiedianleilianjipingtai"></span>
+ <span v-if="node.data.type === 3 && node.data.online " title="鍦ㄧ嚎閫氶亾" class="device-online iconfont icon-shebeileijiankongdian"></span>
+ <span v-if="node.data.type === 3 && !node.data.online" title="鍦ㄧ嚎閫氶亾" class="device-offline iconfont icon-shebeileijiankongdian"></span>
+ <span v-if="node.data.type === 4 && node.data.online " title="鍦ㄧ嚎閫氶亾-鐞冩満" class="device-online iconfont icon-shebeileiqiuji"></span>
+ <span v-if="node.data.type === 4 && !node.data.online" title="鍦ㄧ嚎閫氶亾-鐞冩満" class="device-offline iconfont icon-shebeileiqiuji"></span>
+ <span v-if="node.data.type === 5 && node.data.online " title="鍦ㄧ嚎閫氶亾-鍗婄悆" class="device-online iconfont icon-shebeileibanqiu"></span>
+ <span v-if="node.data.type === 5 && !node.data.online" title="鍦ㄧ嚎閫氶亾-鍗婄悆" class="device-offline iconfont icon-shebeileibanqiu"></span>
+ <span v-if="node.data.type === 6 && node.data.online " title="鍦ㄧ嚎閫氶亾-鏋満" class="device-online iconfont icon-shebeileiqiangjitongdao"></span>
+ <span v-if="node.data.type === 6 && !node.data.online" title="鍦ㄧ嚎閫氶亾-鏋満" class="device-offline iconfont icon-shebeileiqiangjitongdao"></span>
+ <span v-if="node.data.online" style="padding-left: 1px" class="device-online">{{ node.label }}</span>
+ <span v-if="!node.data.online" style="padding-left: 1px" class="device-offline">{{ node.label }}</span>
+ <span>
+ <i v-if="node.data.hasGPS && node.data.online" style="color: #9d9d9d" class="device-online iconfont icon-dizhi"></i>
+ <i v-if="node.data.hasGPS && !node.data.online" style="color: #9d9d9d" class="device-offline iconfont icon-dizhi"></i>
+ </span>
+ </span>
+ </el-tree>
+ </div>
+ </el-main>
+ </el-container>
+ </div>
+</template>
+
+<script>
+import DeviceService from "../service/DeviceService.js";
+
+export default {
+ name: 'DeviceTree',
+ data() {
+ return {
+ deviceService: new DeviceService(),
+ defaultProps: {
+ children: 'children',
+ label: 'name',
+ isLeaf: 'isLeaf'
+ }
+ };
+ },
+ props: ['clickEvent', 'contextMenuEvent'],
+ methods: {
+ handleNodeClick(data) {
+ console.log("鐐瑰嚮浜嬩欢")
+ if(typeof (this.clickEvent) == "function") {
+ this.clickEvent(data.userData)
+ }
+ },
+ handleContextMenu(data) {
+ console.log("鍙抽敭鐐瑰嚮浜嬩欢")
+ if(typeof (this.contextMenuEvent) == "function") {
+ this.contextMenuEvent(data.userData)
+ }
+ },
+ loadNode: function(node, resolve){
+ if (node.level === 0) {
+ this.deviceService.getAllDeviceList((data)=>{
+ console.log(data)
+ if (data.length > 0) {
+ let nodeList = []
+ for (let i = 0; i < data.length; i++) {
+ console.log(data[i].name)
+ let node = {
+ name: data[i].name || data[i].deviceId,
+ isLeaf: false,
+ id: data[i].deviceId,
+ type: data[i].online,
+ online: data[i].online === 1,
+ userData: data[i]
+ }
+ nodeList.push(node);
+ }
+ resolve(nodeList)
+ }else {
+ resolve([])
+ }
+ }, (error)=>{
+
+ })
+ }
+ if (node.level === 1) {
+ this.deviceService.getAllChannel(true, node.data.id, (catalogData) => {
+ this.deviceService.getAllChannel(false, node.data.id, (channelData) => {
+ let data = catalogData.concat(channelData)
+ this.channelDataHandler(data, resolve)
+ })
+ })
+ }else if (node.level > 1){
+ this.deviceService.getAllSubChannel(true, node.data.deviceId, node.data.id, (catalogData)=>{
+ this.deviceService.getAllSubChannel(false, node.data.deviceId, node.data.id, (channelData)=>{
+ let data = catalogData.concat(channelData)
+ this.channelDataHandler(data, resolve)
+ })
+ })
+ }
+ },
+ channelDataHandler: function (data, resolve) {
+ if (data.length > 0) {
+ let nodeList = []
+ for (let i = 0; i < data.length; i++) {
+ let type = 3;
+ if (data[i].subCount > 0) {
+ type = 2;
+ }else if (data[i].ptztype === 1 ) { // 1-鐞冩満;2-鍗婄悆;3-鍥哄畾鏋満;4-閬ユ帶鏋満
+ type = 4;
+ }else if (data[i].ptztype === 2) {
+ type = 5;
+ }else if (data[i].ptztype === 3 || data[i].ptztype === 4) {
+ type = 6;
+ }
+ let node = {
+ name: data[i].name || data[i].channelId,
+ isLeaf: data[i].subCount === 0,
+ id: data[i].channelId,
+ deviceId: data[i].deviceId,
+ type: type,
+ online: data[i].status === 1,
+ hasGPS: data[i].longitude*data[i].latitude !== 0,
+ userData: data[i]
+ }
+ nodeList.push(node);
+ }
+ resolve(nodeList)
+ }else {
+ resolve([])
+ }
+ }
+ },
+ destroyed() {
+ // if (this.jessibuca) {
+ // this.jessibuca.destroy();
+ // }
+ // this.playing = false;
+ // this.loaded = false;
+ // this.performance = "";
+ },
+}
+</script>
+
+<style>
+.device-tree-main-box{
+ text-align: left;
+}
+.device-online{
+ color: #252525;
+}
+.device-offline{
+ color: #727272;
+}
+</style>
diff --git a/web_src/src/components/service/DeviceService.js b/web_src/src/components/service/DeviceService.js
index 93c98f6..aae0418 100644
--- a/web_src/src/components/service/DeviceService.js
+++ b/web_src/src/components/service/DeviceService.js
@@ -46,21 +46,21 @@
}
- getAllCatalog(deviceId, callback, errorCallback) {
+ getAllChannel(isCatalog, deviceId, callback, errorCallback) {
let currentPage = 1;
let count = 100;
let catalogList = []
- this.getAllCatalogIteration(deviceId, catalogList, currentPage, count, callback, errorCallback)
+ this.getAllChannelIteration(isCatalog, deviceId, catalogList, currentPage, count, callback, errorCallback)
}
- getAllCatalogIteration(deviceId, catalogList, currentPage, count, callback, errorCallback) {
- this.getCatalog(deviceId, currentPage, count, (data) => {
+ getAllChannelIteration(isCatalog, deviceId, catalogList, currentPage, count, callback, errorCallback) {
+ this.getChanel(isCatalog, deviceId, currentPage, count, (data) => {
console.log(data)
if (data.list) {
catalogList = catalogList.concat(data.list);
if (catalogList.length < data.total) {
currentPage ++
- this.getAllCatalogIteration(deviceId, catalogList, currentPage, count, callback, errorCallback)
+ this.getAllChannelIteration(isCatalog, deviceId, catalogList, currentPage, count, callback, errorCallback)
}else {
console.log(2222)
if (typeof (callback) == "function") callback(catalogList)
@@ -68,7 +68,7 @@
}
}, errorCallback)
}
- getCatalog(deviceId, currentPage, count, callback, errorCallback) {
+ getChanel(isCatalog, deviceId, currentPage, count, callback, errorCallback) {
this.$axios({
method: 'get',
url: `/api/device/query/devices/${deviceId}/channels`,
@@ -77,7 +77,7 @@
count: count,
query: "",
online: "",
- channelType: true
+ channelType: isCatalog
}
}).then((res) =>{
if (typeof (callback) == "function") callback(res.data)
@@ -85,29 +85,28 @@
}
- getAllSubCatalog(deviceId, channelId, callback, errorCallback) {
+ getAllSubChannel(isCatalog, deviceId, channelId, callback, errorCallback) {
let currentPage = 1;
let count = 100;
let catalogList = []
- this.getAllSubCatalogIteration(deviceId, channelId, catalogList, currentPage, count, callback, errorCallback)
+ this.getAllSubChannelIteration(isCatalog, deviceId, channelId, catalogList, currentPage, count, callback, errorCallback)
}
- getAllSubCatalogIteration(deviceId,channelId, catalogList, currentPage, count, callback, errorCallback) {
- this.getSubCatalog(deviceId, channelId, currentPage, count, (data) => {
+ getAllSubChannelIteration(isCatalog, deviceId,channelId, catalogList, currentPage, count, callback, errorCallback) {
+ this.getSubChannel(isCatalog, deviceId, channelId, currentPage, count, (data) => {
console.log(data)
if (data.list) {
catalogList = catalogList.concat(data.list);
if (catalogList.length < data.total) {
currentPage ++
- this.getAllSubCatalogIteration(deviceId, channelId, catalogList, currentPage, count, callback, errorCallback)
+ this.getAllSubChannelIteration(isCatalog, deviceId, channelId, catalogList, currentPage, count, callback, errorCallback)
}else {
- console.log(2222)
if (typeof (callback) == "function") callback(catalogList)
}
}
}, errorCallback)
}
- getSubCatalog(deviceId, channelId, currentPage, count, callback, errorCallback) {
+ getSubChannel(isCatalog, deviceId, channelId, currentPage, count, callback, errorCallback) {
this.$axios({
method: 'get',
url: `/api/device/query/sub_channels/${deviceId}/${channelId}/channels`,
@@ -116,12 +115,22 @@
count: count,
query: "",
online: "",
- channelType: true
+ channelType: isCatalog
}
}).then((res) =>{
if (typeof (callback) == "function") callback(res.data)
}).catch(errorCallback);
}
+ getDeviceTree(deviceId, callback, errorCallback){
+ this.$axios({
+ method: 'get',
+ url: `/api/device/query/${deviceId}/tree`,
+ params:{}
+ }).then((res) =>{
+ console.log(res.data)
+ if (typeof (callback) == "function") callback(res.data.data)
+ }).catch(errorCallback);
+ }
}
export default DeviceService;
diff --git a/web_src/src/router/index.js b/web_src/src/router/index.js
index 3869fa3..273fa8c 100644
--- a/web_src/src/router/index.js
+++ b/web_src/src/router/index.js
@@ -15,6 +15,7 @@
import sip from '../components/setting/Sip.vue'
import media from '../components/setting/Media.vue'
import live from '../components/live.vue'
+import deviceTree from '../components/common/DeviceTree.vue'
import wasmPlayer from '../components/common/jessibuca.vue'
import rtcPlayer from '../components/dialog/rtcPlayer.vue'
@@ -115,5 +116,10 @@
name: 'rtcPlayer',
component: rtcPlayer,
},
+ {
+ path: '/test',
+ name: 'deviceTree',
+ component: deviceTree,
+ },
]
})
diff --git a/web_src/static/css/iconfont.css b/web_src/static/css/iconfont.css
index 0698271..2a08b07 100644
--- a/web_src/static/css/iconfont.css
+++ b/web_src/static/css/iconfont.css
@@ -1,8 +1,6 @@
@font-face {
font-family: "iconfont"; /* Project id 1291092 */
- src: url('iconfont.woff2?t=1647245982270') format('woff2'),
- url('iconfont.woff?t=1647245982270') format('woff'),
- url('iconfont.ttf?t=1647245982270') format('truetype');
+ src: url('iconfont.woff2?t=1650436696596') format('woff2');
}
.iconfont {
@@ -13,6 +11,50 @@
-moz-osx-font-smoothing: grayscale;
}
+.icon-jiedianleizhukongzhongxin1:before {
+ content: "\e9d0";
+}
+
+.icon-jiedianleizhukongzhongxin2:before {
+ content: "\e9d1";
+}
+
+.icon-jiedianleilianjipingtai:before {
+ content: "\e9d3";
+}
+
+.icon-jiedianleiquyu:before {
+ content: "\e9d4";
+}
+
+.icon-shebeileigis:before {
+ content: "\e9ec";
+}
+
+.icon-shebeileibanqiu:before {
+ content: "\e9f5";
+}
+
+.icon-shebeileibanqiugis:before {
+ content: "\e9f6";
+}
+
+.icon-shebeileijiankongdian:before {
+ content: "\ea07";
+}
+
+.icon-shebeileiqiangjitongdao:before {
+ content: "\ea15";
+}
+
+.icon-shebeileiqiuji:before {
+ content: "\ea17";
+}
+
+.icon-shebeileiqiujigis:before {
+ content: "\ea18";
+}
+
.icon-xitongxinxi:before {
content: "\e7d6";
}
diff --git a/web_src/static/css/iconfont.woff2 b/web_src/static/css/iconfont.woff2
index 4833708..7204137 100644
--- a/web_src/static/css/iconfont.woff2
+++ b/web_src/static/css/iconfont.woff2
Binary files differ
--
Gitblit v1.8.0