From 317d3e5116240d8b849857f5d737bcf61884285b Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@iotlink.com>
Date: 星期五, 21 五月 2021 14:04:55 +0800
Subject: [PATCH] 优化国标配置
---
src/pages/gb28181/index/App.vue | 472 ++++++++++++++++-------------------
src/components/giantTree/zTree/ztree.vue | 7
src/components/LeftNav.vue | 4
src/pages/gb28181/index/api.ts | 39 +++
src/Pool/TreeData.ts | 222 +++++++---------
src/pages/gb28181/index/main.ts | 14 +
src/components/giantTree/index.vue | 22 +
7 files changed, 381 insertions(+), 399 deletions(-)
diff --git a/src/Pool/TreeData.ts b/src/Pool/TreeData.ts
index 0289f6c..4d5c6a5 100644
--- a/src/Pool/TreeData.ts
+++ b/src/Pool/TreeData.ts
@@ -8,10 +8,11 @@
refreshGB28181Tree,
updateCameraArea
} from '@/api/area'
-import { findAllFile, show, changeEnable } from '@/api/localVedio'
export default class TreeDataPool {
public openeds: Array<boolean>
+ public activeTreeData: Array<object>
+
public treeData: Array<object>
public clusterData: Array<object>
public gb28181Data: Array<object>
@@ -37,20 +38,6 @@
public foldNodeList: object
//璁板綍宸︿晶tab锛歛ctiveName
public treeActiveName: string
- //鏈湴瑙嗛锛氳棰戝垎鏋愬鐞�
- public vedioAnaliyseSwitch: boolean
- //鏈湴瑙嗛鍒楄〃
- public localVedioList: Array<any>
- //鏈湴瑙嗛褰撳墠椤�
- public localCurrentPage: number
- //鏈湴瑙嗛姣忛〉鏌ヨ20鏉�
- public localPageSize: number
- //鏈湴瑙嗛鎬绘潯鏁�
- public localTotal: number
- //鍕鹃�夌殑鏈湴瑙嗛
- public checkedLocalVedio: Array<any>
- //褰撳墠閫変腑鐨勬湰鍦拌棰�
- public clickLocalVideo: object
//鎺у埗寮�濮嬨�佹殏鍋滄寜閽樉绀虹姸鎬�
public btnStaus: string
//鏈湴瑙嗛绫诲瀷
@@ -60,10 +47,19 @@
//璁板綍澶嶅埗鐨勬憚鍍忔満name
public ctrlCameraName: string
+ // 鏄惁浣跨敤ztree
public zTree: boolean
+
+ public checkedTreeNode: Array<object>
+
+ // 閫変腑鐨勬憚鍍忔満涓暟
+ public gb28181CheckedCount: number
+ // 鎬绘憚鍍忔満涓暟
+ public gb28181ChildNodeCount: number
constructor() {
this.openeds = [true, true, false]
+ this.activeTreeData = []
this.treeData = []
this.gb28181Data = []
this.clusterData = []
@@ -84,20 +80,17 @@
this.selectedNode = {}
this.treeType = ''
this.foldNodeList = {}
- this.vedioAnaliyseSwitch = false
this.treeActiveName = 'camera'
this.searchLocalType = 0
- this.localVedioList = []
- this.checkedLocalVedio = []
- this.clickLocalVideo = {}
+
//1:鏆傚仠鐘舵�侊紱2锛氱瓑寰呯姸鎬�;3:缃伆
this.btnStaus = '3'
- this.localCurrentPage = 1
- this.localPageSize = 20
- this.localTotal = 0
this.ctrlCameraId = ''
this.ctrlCameraName = ''
this.zTree = false
+ this.checkedTreeNode = []
+ this.gb28181CheckedCount = 0
+ this.gb28181ChildNodeCount = 0
}
setVideoArr(index: number, value: object, vue: any): void {
@@ -261,8 +254,6 @@
this.isFold(this.gb28181Data)
this.selectedNodes = []
this.selectedNode = {}
-
- this.cleanLocalVedio()
}
cleanTree(tree) {
@@ -397,8 +388,6 @@
if (this.openeds[1]) {
this.fetchGbTree()
}
-
- this.findAllFile({})
}
async add(name: string, parent: string) {
@@ -434,109 +423,84 @@
// this.fetchGbTree()
}
- async findAllFile(params: any) {
- ; (params.fileName = this.searchInput), (params.type = this.searchLocalType)
- params.page = this.localCurrentPage
- params.size = this.localPageSize
- let res: any = await findAllFile(params)
- if (res && res.success) {
- let list = res.data.dataList.map(i => {
- let obj: any = {}
- Object.assign(obj, i)
- if (i.ruleType == 0) {
- obj.iconStatus2 = '0'
- } else {
- obj.iconStatus2 = '1'
- }
- if (!i.snapshot_url) {
- // obj.snapshot_url = require('@/assets/nobody.png')
- obj.snapshot_url = ''
- } else {
- obj.snapshot_url = '/httpImage/' + obj.snapshot_url
- }
- if (i.is_running) {
- obj.iconStatus1 = '1'
- } else if (i.progress == 100) {
- obj.iconStatus1 = '2'
- } else if (i.status == 1 && i.progress == 0 && i.hasRule) {
- obj.iconStatus1 = '3'
- } else if (!i.hasRule && i.progress == 0) {
- obj.iconStatus1 = '4'
- }
- obj.checkStatus = false
- obj.clickStatus = false
- obj.showCheckBox = false
- return obj
- })
- this.localVedioList = list
- this.localTotal = res.data.total
- // console.log(this.localVedioList,this.searchInput,'鏈湴瑙嗛鍒楄〃')
- }
- }
-
- async show() {
- let res: any = await show()
- if (res && res.success) {
- this.vedioAnaliyseSwitch = res.data.videoEnable
- }
- }
-
- async changeEnable() {
- let res: any = await changeEnable({
- enable: this.vedioAnaliyseSwitch
- })
- }
-
- getCheckedFiles() {
- this.checkedLocalVedio = this.localVedioList.filter(i => {
- return i.checkStatus
- })
- this.clickLocalVideo = this.localVedioList.filter(i => {
- return i.clickStatus
- })[0]
-
- if (this.checkedLocalVedio.length === 0) {
- this.btnStaus = '3'
- return false
- }
- this.checkedLocalVedio.every((i, index) => {
- let t = ''
- if (i.status == 0 && i.hasRule) {
- t = '1'
- } else if (i.status == 1 && i.hasRule && !i.is_running) {
- t = '2'
- } else {
- t = '3'
- }
- if (index == 0) {
- this.btnStaus = t
- } else {
- if (this.btnStaus !== t) {
- this.btnStaus = '3'
- return false
- }
- }
- })
- }
-
- filterLocalVideoWell() {
- if (this.localVedioList.length !== 0) {
- this.localVedioList = this.localVedioList.filter(i => {
- return i.progress == 100
- })
- }
- }
-
- cleanLocalVedio() {
- this.localVedioList.map(i => {
- i.checkStatus = false
- i.clickStatus = false
- })
- this.checkedLocalVedio = []
- this.btnStaus = '3'
- }
-
- async dropNode(cameraId, areaId) {
+ async dropNode(cameraId: string, areaId: string) {
await updateCameraArea({ cameraId: cameraId, areaId: areaId })
}
+
+ getAllChildrenNodes(treeNode, arr) {
+ for (var i = 0; i < treeNode.length; i++) {
+ var sonList = treeNode[i].children;
+ if (!sonList) {
+ if (treeNode[i].type == "camera") {
+ arr.push(treeNode[i]);
+
+ if (treeNode[i].checked) {
+ this.gb28181CheckedCount += 1;
+ }
+ }
+ } else {
+ this.getAllChildrenNodes(sonList, arr);
+ }
+ }
+ return arr;
+ }
+ countChildrenNodes(treeNode) {
+ let arry = []
+
+ this.getAllChildrenNodes(treeNode, arry)
+
+ return arry.length
+ }
+
+ async fetchVideosvrCameras() {
+ const rsp: any = await refreshGB28181Tree()
+
+ if (rsp && rsp.success) {
+ this.selectedNode = {}
+ this.treeData = rsp.data ? rsp.data : []
+ if (this.treeData && this.treeData.length > 0) {
+ this.sortTreeData(this.treeData)
+ }
+
+ // 璁剧疆绂佹鎷栨嫿鎽勫儚鏈哄埌鎽勫儚鏈鸿妭鐐�
+ this.setDropDisable(this.treeData)
+ this.isFold(this.treeData)
+
+ this.activeTreeData = this.treeData
+
+ this.gb28181CheckedCount = 0;
+ this.gb28181ChildNodeCount = this.countChildrenNodes(this.treeData)
+ }
+ }
+
+ removeNoCheckedNode(nodes: Array<any>) {
+ for (let i = 0; i < nodes.length;) {
+ if (!nodes[i].checked) {
+ nodes.splice(i, 1)
+ continue
+ }
+
+ if (nodes[i].children && nodes[i].children.length) {
+ this.removeNoCheckedNode(nodes[i].children)
+ }
+ i++
+ }
+ }
+
+ countCheckedNodes(nodes: Array<any>) {
+ let count = 0
+ nodes.forEach(n => {
+ if (n.type == "camera") {
+ count++
+ }
+ })
+ this.gb28181CheckedCount = count
+ }
+
+ newTreeByChecked(nodes: Array<object>) {
+ let newTree = JSON.parse(JSON.stringify(nodes))
+ this.removeNoCheckedNode(newTree)
+
+ return newTree
+ }
}
diff --git a/src/components/LeftNav.vue b/src/components/LeftNav.vue
index 0c1137f..e63e984 100644
--- a/src/components/LeftNav.vue
+++ b/src/components/LeftNav.vue
@@ -123,14 +123,14 @@
</template>
<!-- 鍥芥爣鍒锋柊鍥炬爣 -->
- <div class="tree-edit gb-refresh" v-show="!TreeDataPool.gbReadonly">
+ <!-- <div class="tree-edit gb-refresh" v-show="!TreeDataPool.gbReadonly">
<el-tooltip content="鍒锋柊" placement="top" popper-class="atooltip">
<button @click="refreshGB">
<i v-if="loadingGBTree" class="el-icon-loading" style="font-size:16px"></i>
<i v-else class="el-icon-refresh" style="font-size:16px"></i>
</button>
</el-tooltip>
- </div>
+ </div>-->
<div class="tree-edit gb-lock" v-show="showLock">
<button @click="gbLockSwitch">
<i v-if="TreeDataPool.gbReadonly" class="el-icon-lock" style="font-size:16px"></i>
diff --git a/src/components/giantTree/index.vue b/src/components/giantTree/index.vue
index aabca2d..8ba269b 100644
--- a/src/components/giantTree/index.vue
+++ b/src/components/giantTree/index.vue
@@ -5,6 +5,7 @@
:show-checkbox="TreeDataPool.multiple"
:readonly="TreeDataPool.readonly"
:gb28181="gb28181"
+ :setting="setting"
@onCreated="handleCreated"
@onClick="itemClick"
@onCheck="itemCheck"
@@ -66,7 +67,14 @@
height: {
type: Number,
default: 0
- }
+ },
+ setting: {
+ type: Object,
+ require: false,
+ default: function () {
+ return {};
+ },
+ },
},
data() {
return {
@@ -117,13 +125,10 @@
//鎽勫儚鏈轰俊鎭洿鏂颁俊鎭悗锛屽鏋滆妭鐐逛綅缃湁鍙榯Id灏变笉鍑嗕簡,this.TreeDataPool.selectedNode姝ゆ椂杩樻槸鏃х殑淇℃伅
let ztreeNodes = ztreeObj.getNodes();
//var curNodeTid = '';
- console.log(ztreeNodes)
_this.findTidByIdFromArr(ztreeNodes);
- console.log('curNodeTid', _this.curNodeTid)
this.TreeDataPool.selectedNode.tId = _this.curNodeTid;
let node = this.ztreeObj.getNodeByTId(this.TreeDataPool.selectedNode.tId)
- console.log('selecBode', this.TreeDataPool.selectedNode)
- console.log('selectedNode.tId', this.TreeDataPool.selectedNode.tId)
+
// 澶氶�夋椂, 閫変腑鍗曢�夊崟鍑荤殑鑺傜偣
if (this.TreeDataPool.multiple) {
this.ztreeObj.checkAllNodes(false);
@@ -266,7 +271,6 @@
this.showDialog = true;
},
itemClick(evt, treeId, treeNode) {
- console.log(evt, treeId)
this.TreeDataPool.selectedNode = treeNode;
this.TreeDataPool.treeType = this.treeName;
@@ -301,6 +305,12 @@
// this.ztreeObj.checkNode(treeNode, true, false, false);
let checkedNodes = this.ztreeObj.getCheckedNodes(true);
this.TreeDataPool.updateZTreeCheckNodes(checkedNodes);
+
+ // 瀹炴椂缁熻閫変腑涓暟
+ this.TreeDataPool.countCheckedNodes(checkedNodes);
+
+ // 淇濆瓨涓�浠芥暟鎹�
+ this.TreeDataPool.activeTreeData = this.ztreeObj.getNodes()
},
//灞曞紑
itemExpand(e, id, node) {
diff --git a/src/components/giantTree/zTree/ztree.vue b/src/components/giantTree/zTree/ztree.vue
index 15a905b..b8e5024 100644
--- a/src/components/giantTree/zTree/ztree.vue
+++ b/src/components/giantTree/zTree/ztree.vue
@@ -112,7 +112,6 @@
Object.assign({}, this.ztreeSetting, this.setting),
this.list
);
- console.log('onCreated,ztr')
this.$emit("onCreated", this.ztreeObj);
});
},
@@ -275,8 +274,8 @@
padding: 5px;
color: #333;
}
-.ztree .iconfenxishexiangji{
- color: #3d68e1!important;
+.ztree .iconfenxishexiangji {
+ color: #3d68e1 !important;
}
.ztree li {
padding: 0;
@@ -386,7 +385,7 @@
background-attachment: scroll;
/* background-image: url("./img/zTreeStandard.png"); */
/* *background-image: url("./img/zTreeStandard.gif"); */
-
+
background-image: url(data:image/png;base64,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);
*background-image: url(data:image/gif;base64,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);
}
diff --git a/src/pages/gb28181/index/App.vue b/src/pages/gb28181/index/App.vue
index 45f138f..4ec547c 100644
--- a/src/pages/gb28181/index/App.vue
+++ b/src/pages/gb28181/index/App.vue
@@ -1,20 +1,15 @@
<template>
- <div class="s-basic-setting" @contextmenu.prevent="toOpenMenuList">
- <el-menu
- :default-openeds="openeds"
- background-color="#fff"
- text-color="#303133"
- active-text-color="#409EFF"
- style="height: 100%;"
- class="menu-css"
- @open="menuOpen"
- @close="menuClose"
- >
- <el-submenu index="0">
- <template slot="title">
- <b class="tree-font">鍥介檯ID</b>
- </template>
- <el-menu-item-group class="item-group">
+ <div class="s-system-manage">
+ <div class="s-basic-setting">
+ <el-tabs
+ id="e-basic-setting"
+ v-model="activeName"
+ v-loading="loading"
+ :element-loading-text="loadingText"
+ type="border-card"
+ @tab-click="hanleTabClick"
+ >
+ <el-tab-pane label="鍥芥爣ID" name="gb28181">
<!-- GB28181璁剧疆 -->
<el-form
:model="gb28181"
@@ -115,45 +110,60 @@
<el-button type="primary" @click="submitGB28281" size="small">淇濆瓨</el-button>
</el-form-item>
</el-form>
- </el-menu-item-group>
- </el-submenu>
- <el-submenu index="1">
- <template slot="title">
- <b class="tree-font">鎺ュ叆骞冲彴鍒楄〃</b>
- </template>
- <el-menu-item-group class="item-group">
- <div>
- <el-table
- :data="tableList"
- border
- fit
- highlight-current-row
- style="width: 100%; color:#000"
- :header-cell-style="{ background: '#f8f8f8', color: '#222222', height:'30px' }"
- >
- <el-table-column type="index" label="搴忓彿" align="center" width="50"></el-table-column>
- <el-table-column prop="name" label="鍚嶇О" align="center"></el-table-column>
- <el-table-column prop="id" label="ID" align="center"></el-table-column>
- <el-table-column prop="ip" label="IP" align="center"></el-table-column>
- <el-table-column prop="status" label="鐘舵��" align="center"></el-table-column>
- <el-table-column prop="mark" label="澶囨敞" align="center"></el-table-column>
- </el-table>
+ </el-tab-pane>
+
+ <el-tab-pane label="鎺ュ叆骞冲彴鍒楄〃" name="subordinates">
+ <el-table
+ :data="subDevTable"
+ border
+ fit
+ highlight-current-row
+ style="width: 100%; color:#000"
+ :header-cell-style="{ background: '#f8f8f8', color: '#222222', height:'30px' }"
+ >
+ <el-table-column type="index" label="搴忓彿" align="center" width="50"></el-table-column>
+ <el-table-column prop="name" label="鍚嶇О" align="center"></el-table-column>
+ <el-table-column prop="publicid" label="ID" align="center"></el-table-column>
+ <el-table-column prop="ip" label="IP" align="center"></el-table-column>
+ <el-table-column prop="status" label="鐘舵��" align="center">
+ <template slot-scope="scope">
+ <span
+ :style="scope.row.active ? `color:#047d19` : 'color:#f11a1a;' "
+ >{{scope.row.active ? "鍦ㄧ嚎": "绂荤嚎"}}</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="mark" label="澶囨敞" align="center"></el-table-column>
+ </el-table>
+ </el-tab-pane>
+ <el-tab-pane label="鍥芥爣鎽勫儚鏈�" name="cameras">
+ <div style="text-align:left">
+ <el-button type="primary" size="small" @click="getCamerasFromVideosvr">鍒锋柊</el-button>
</div>
- </el-menu-item-group>
- </el-submenu>
- <el-submenu index="2">
- <template slot="title">
- <b class="tree-font">鍥介檯鎽勫儚鏈�</b>
- </template>
- <el-menu-item-group class="item-group">
- <div>
- <div>
- <el-button type="primary" size="small">鍒锋柊</el-button>
- </div>
+ <div class="camera-title">
+ <b>鍥芥爣鎽勫儚鏈洪厤缃�</b>
+ <span>(鏈�澶氬嬀閫�500璺憚鍍忔満)</span>
</div>
- </el-menu-item-group>
- </el-submenu>
- </el-menu>
+ <tree-menu
+ ref="tree"
+ app="gb28181"
+ treeName="localTree"
+ :node="TreeDataPool.treeData"
+ :height="treeHeight"
+ :setting="treeSettings"
+ />
+
+ <el-divider></el-divider>
+
+ <span class="camera-seleted-text">
+ 宸查�夋嫨 (
+ <b>{{TreeDataPool.gb28181CheckedCount}}</b>
+ / {{TreeDataPool.gb28181ChildNodeCount}} ) 璺�
+ </span>
+
+ <el-button type="primary" size="small" @click="saveChecked">淇濆瓨</el-button>
+ </el-tab-pane>
+ </el-tabs>
+ </div>
</div>
</template>
@@ -162,13 +172,20 @@
getGB28181Config,
saveGB28181Config,
getGb28181AreaList,
- newGb28181ID
+ newGb28181ID,
+ getLocalCameraTree,
+ getAllSubServer,
+ saveGb28181CamTree
} from './api'
+import TreeMenu from "@/components/giantTree/index";
import { isPort, isIPv4 } from '@/scripts/validate'
import bus from '@/plugin/bus'
export default {
name: 'Gb28181Setting',
+ components: {
+ TreeMenu
+ },
directives: {
focus: {
inserted: function (el) {
@@ -179,10 +196,19 @@
data() {
return {
+ activeName: "gb28181",
+ treeHeight: 750,
+ loading: false,
+ loadingText: "",
openeds: ['0'],
gb28181: {},
- tableList: [],
+ subDevTable: [],
idType: 1,
+ treeSettings: {
+ check: {
+ enable: true
+ }
+ },
rules: {
ip: [
{
@@ -228,12 +254,59 @@
}
},
mounted() {
+ this.TreeDataPool.multiple = true;
- //this.$nextTick(()=>{
- this.initGB28181Conf()
- //})
+ this.initGB28181Conf();
},
methods: {
+ hanleTabClick(tab, event) {
+ if (this.activeName == "subordinates") {
+ getAllSubServer().then(rsp => {
+ if (rsp && rsp.success) {
+ this.subDevTable = rsp.data;
+ }
+ })
+ } else if (this.activeName == "cameras") {
+ this.getCamerasFromVideosvr();
+ }
+
+
+ },
+ async getCamerasFromVideosvr() {
+ this.loading = true;
+ await this.TreeDataPool.fetchVideosvrCameras();
+ this.loading = false;
+ },
+ saveChecked() {
+ if (this.TreeDataPool.gb28181CheckedCount > 500) {
+ this.$message({
+ type: "warning",
+ message: "鏈�澶氫粎鏀寔閫夋嫨500璺憚鍍忔満. 璇烽噸鏂伴�夋嫨"
+ })
+
+ return;
+ }
+
+ this.loading = true;
+
+ let treeData = this.TreeDataPool.newTreeByChecked(this.TreeDataPool.activeTreeData)
+
+ saveGb28181CamTree({ checkedMenus: treeData }).then(rsp => {
+ if (rsp && rsp.success) {
+ this.$message({
+ type: "success",
+ message: "淇濆瓨鎴愬姛"
+ })
+ }
+ this.loading = false;
+ }).catch(err => {
+ this.$message({
+ type: "error",
+ message: "淇濆瓨澶辫触"
+ })
+ this.loading = false;
+ })
+ },
initGB28181Conf() {
getGB28181Config().then(rsp => {
if (rsp && rsp.success) {
@@ -311,236 +384,119 @@
}
</script>
<style lang="scss">
-.s-basic-setting {
+.s-system-manage {
+ width: 100% !important;
+ min-width: 1067px;
height: 100%;
- padding: 20px;
box-sizing: border-box;
- .item-group {
- padding: 0 15px;
- margin-bottom: 15px;
- }
- .el-form {
- .el-form-item {
- text-align: left;
- margin-bottom: 16px;
- &:last-of-type {
- width: 490px;
- }
- .el-button {
- float: right;
- }
- .el-select {
- margin-right: 10px;
- }
- .el-form-item__content {
- text-align: left;
- input {
- max-width: 360px;
- }
- .el-date-editor.el-input,
- .el-date-editor.el-input__inner {
- width: 216px;
- }
- .el-checkbox__label {
- padding-left: 5px;
- }
- }
-
- .el-form-item__label {
- text-align: left;
- }
- &.el-form-item.is-required:not(.is-no-asterisk)
- > .el-form-item__label:before {
- margin-left: -9px;
- }
- }
- }
- .alarmSetting {
- .el-input {
- width: 100%;
- // padding-right: 10px;
- }
- .el-select {
- max-width: 113px;
- }
- .el-slider {
- width: calc(100% - 120px);
- display: inline-block;
- padding-right: 30px;
- box-sizing: border-box;
- vertical-align: middle;
- }
- .el-input-number {
- width: 100px;
- display: inline-block;
- .el-input {
- width: 100%;
- }
- }
+ padding: 10px;
+ background-color: #f8f9fb;
+ .s-system-manage-breadcrumb {
+ height: 5%;
+ box-sizing: border-box;
+ border: 1px solid #e4e7ed;
+ box-shadow: #e4e7ed 0px 0px 9px inset;
+ box-shadow: #e4e7ed 0px 0px 9px inset;
+ border-radius: 5px;
}
- .time-type {
- height: 25px;
- width: 413px;
- line-height: 28px;
- padding: 3px 23px;
- font-size: 14px;
- font-weight: 600;
- background-color: #e4e6ed;
- }
- #e-basic-setting {
+ .el-tabs--border-card {
+ border: 0px solid #dcdfe6;
+ -webkit-box-shadow: none;
+ box-shadow: none;
.el-tabs__header {
border: 0px solid #dcdfe6;
.el-tabs__item {
padding: 5px 50px;
height: 50px;
font-family: PingFangSC-Regular;
- font-size: 14px;
+ font-size: 15px;
color: #222222;
text-align: center;
border: 0px solid transparent;
}
.el-tabs__item:nth-child(2) {
- padding-left: 50px;
+ padding-left: 50px !important;
}
.el-tabs__item:last-child {
- padding-right: 50px;
+ padding-right: 50px !important;
}
.el-tabs__item.is-active {
- color: #ff7733;
- font-weight: bold;
+ color: #3d68e1;
+
// border-right-color: #fff;
// border-left-color: #fff;
}
.el-tabs__item:not(.is-disabled):hover {
- color: #ff7733;
- }
- }
- .el-tabs__active-bar {
- background-color: #ff7733;
- }
- .xiangqin-label {
- text-align: left;
- width: 85px;
- font-size: 14px;
- line-height: 30px;
- }
- .xiangqing-info {
- text-align: left;
- font-size: 14px;
- line-height: 30px;
- }
- }
-
- #cut_min_duration {
- .el-slider__bar {
- background-color: #3d68e1;
- }
- .el-slider__button {
- width: 10px;
- height: 10px;
- border: 4px solid #3d68e1;
- }
- }
-
- #cut_max_duration {
- .el-slider__bar {
- background-color: #ff9e6e;
- }
- .el-slider__button {
- width: 10px;
- height: 10px;
- border: 4px solid #ff9e6e;
- }
- }
- .menu-css,
- .el-menu {
- border-right: none;
- list-style: none;
- position: relative;
- margin: 0;
- padding-left: 0;
- background-color: #ffffff;
- .el-submenu__title {
- height: 35px;
- line-height: 35px;
- font-size: 14px;
- color: #303133;
- padding: 0 20px;
- list-style: none;
- cursor: pointer;
- position: relative;
- -webkit-transition: border-color 0.3s, background-color 0.3s, color 0.3s;
- transition: border-color 0.3s, background-color 0.3s, color 0.3s;
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
- white-space: nowrap;
- }
- .tree-font {
- font-family: PingFangSC-Medium;
- font-size: 14px;
- color: #222222;
- text-align: left;
- }
- li {
- text-align: left;
- .el-submenu__title {
- // border-bottom: solid 1px #e6e6e6;
- padding-left: 10px !important;
- background-color: #e4e6ed !important;
- border-radius: 2px;
- .el-submenu__icon-arrow {
- position: absolute;
- top: 50%;
- right: auto;
- left: 135px;
- margin-top: -7px;
- -webkit-transition: -webkit-transform 0.3s;
- transition: -webkit-transform 0.3s;
- transition: transform 0.3s;
- transition: transform 0.3s, -webkit-transform 0.3s;
- font-size: 12px;
- }
+ color: #3d68e1;
}
}
}
- .save-btn {
- text-align: right;
- position: relative;
- right: 40px;
+ .el-tabs__header {
+ margin-bottom: 0;
}
-}
-</style>
-<style lang="scss" scoped>
-.menu-css,
-.el-menu {
- border-right: none;
- list-style: none;
- position: relative;
- margin: 0;
- padding-left: 0;
- background-color: #ffffff;
+ .el-tabs__content {
+ height: calc(100% - 64px);
+ box-sizing: border-box;
+ overflow-y: auto;
+ padding: 20px 40px !important;
+ background: #fff;
+ .el-tab-pane {
+ width: 100%;
+ .s-title {
+ text-align: left;
+ padding: 15px 0px;
+ font-size: 16px;
+ }
+ }
+ }
- .tree-font {
- font-family: PingFangSC-Medium;
+ .s-table {
+ border: 1px solid #e8e8e9;
+ margin-top: 40px;
+ }
+
+ .ui-top-title {
+ padding-bottom: 10px;
+ /* border-bottom: 1px solid #ebebeb; */
+ position: relative;
+ text-align: left;
+ padding-left: 15px;
+ font-size: 16px;
+ font-weight: bold;
+ }
+
+ .ui-top-title:before {
+ content: " ";
+ border-left: 4px solid #f53d3d;
+ display: inline-block;
+ height: 16px;
+ position: absolute;
+ top: 50%;
+ left: 0;
+ margin-top: -13px;
+ }
+
+ .el-button--text {
+ color: #3d68e1;
+ text-decoration: underline;
+ }
+
+ .camera-title {
+ text-align: left;
+ padding: 0px 10px;
+ margin: 5px 0px;
+ height: 33px;
+ background-color: #e4e2e2;
+ line-height: 33px;
font-size: 14px;
- color: #222222;
- text-align: left;
}
- li {
- text-align: left;
- .el-submenu__title {
- .el-submenu__icon-arrow {
- position: absolute;
- top: 50%;
- right: 0;
- margin-top: -7px;
- -webkit-transition: -webkit-transform 0.3s;
- transition: -webkit-transform 0.3s;
- transition: transform 0.3s;
- transition: transform 0.3s, -webkit-transform 0.3s;
- font-size: 12px;
- }
+
+ .camera-seleted-text {
+ margin-right: 20px;
+
+ .b {
+ color: #3d68e1;
}
}
}
diff --git a/src/pages/gb28181/index/api.ts b/src/pages/gb28181/index/api.ts
index e81ffe2..37da6af 100644
--- a/src/pages/gb28181/index/api.ts
+++ b/src/pages/gb28181/index/api.ts
@@ -24,10 +24,49 @@
});
};
+export const getAllSubServer = (query: any) => {
+ return request({
+ url: "/data/api-v/gb28181/getAllSubServer",
+ method: "get",
+ params: query
+ });
+};
+
export const newGb28181ID = (query: any) => {
return request({
url: "/data/api-v/gb28181/newGbId",
method: "get",
params: query
});
+};
+
+export const getLocalCameraTree = (query: any) => {
+ return request({
+ url: "/data/api-v/area/localmenu",
+ method: "get",
+ params: query
+ });
+};
+
+export const getGB28181CameraTree = (query: any) => {
+ return request({
+ url: "/data/api-v/area/gb28181Tree",
+ method: "get",
+ params: query
+ });
+};
+
+export const refreshGB28181Tree = () => {
+ return request({
+ url: "/data/api-v/area/gb28181RefreshTree",
+ method: "post",
+ });
+};
+
+export const saveGb28181CamTree = (query: any) => {
+ return request({
+ url: "/data/api-v/gb28181/saveGb28181CamTree",
+ method: "post",
+ data: query
+ });
};
\ No newline at end of file
diff --git a/src/pages/gb28181/index/main.ts b/src/pages/gb28181/index/main.ts
index 491ea9a..d48da00 100644
--- a/src/pages/gb28181/index/main.ts
+++ b/src/pages/gb28181/index/main.ts
@@ -1,11 +1,25 @@
import Vue from 'vue';
import App from './App.vue';
+import TreeDataPool from "@/Pool/TreeData";
+
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import "@/assets/css/element-variables.scss";
Vue.use(ElementUI)
+const onlyTreeDataPool = new TreeDataPool
+
+const mixin = {
+ data() {
+ return {
+ TreeDataPool: onlyTreeDataPool
+ };
+ },
+};
+
+Vue.mixin(mixin);
+
new Vue({
el: '#app',
render: h => h(App)
--
Gitblit v1.8.0