From 4a800a8fc83c6bd1f86a8e847b079a51a7532c09 Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@smartai.com> Date: 星期三, 20 七月 2022 15:05:58 +0800 Subject: [PATCH] 修复国标配置的bug --- src/pages/gb28181/index/App.vue | 374 +++++++++++++++++++++++++++++------------------------ 1 files changed, 203 insertions(+), 171 deletions(-) diff --git a/src/pages/gb28181/index/App.vue b/src/pages/gb28181/index/App.vue index 4ec547c..0a7c8fd 100644 --- a/src/pages/gb28181/index/App.vue +++ b/src/pages/gb28181/index/App.vue @@ -10,106 +10,104 @@ @tab-click="hanleTabClick" > <el-tab-pane label="鍥芥爣ID" name="gb28181"> - <!-- GB28181璁剧疆 --> - <el-form - :model="gb28181" - :rules="rules" - label-width="130px" - class="alarmSetting" - ref="gb28181" - > - <!-- <el-form-item label="鍥介檯鏈嶅姟鍣↖P" prop="ServerIp"> + <div style="width: 775px"> + <!-- GB28181璁剧疆 --> + <el-form :model="gb28181" :rules="rules" label-width="130px" class="alarmSetting" ref="gb28181"> + <!-- <el-form-item label="鍥介檯鏈嶅姟鍣↖P" prop="ServerIp"> <ip-input :ip="gb28181.ServerIp" @on-blur="gb28181.ServerIp = arguments[0]"></ip-input> - </el-form-item>--> + </el-form-item>--> - <div style="text-align: left;margin-bottom: 16px;"> - <el-radio-group v-model="gb28181.idType"> - <el-radio :label="0">杈撳叆宸叉湁ID</el-radio> - <el-radio :label="1">鐢熸垚鏂扮殑ID</el-radio> - </el-radio-group> - </div> + <div style="text-align: left;margin-bottom: 16px;"> + <el-radio-group v-model="gb28181.idType"> + <el-radio :label="0">杈撳叆宸叉湁ID</el-radio> + <el-radio :label="1">鐢熸垚鏂扮殑ID</el-radio> + </el-radio-group> + </div> - <el-form-item label="鎵�鍦ㄥ湴"> - <el-select - v-model="locationCity.province" - @change="changeProvince" - size="small" - placeholder="璇烽�夋嫨鐪佷唤" - :disabled="gb28181.idType === 0" - > - <el-option - v-for="item in locationCity.provinceOptions" - :key="item.id" - :label="item.name" + <el-form-item label="鎵�鍦ㄥ湴"> + <el-select + v-model="locationCity.province" + @change="changeProvince" size="small" - :value="item.id" - ></el-option> - </el-select> - <el-select - class="ml10 mr10" - v-model="locationCity.city" - :disabled="!locationCity.province" - @change="changeCity" - size="small" - placeholder="璇烽�夋嫨鍩庡競" - > - <el-option - v-for="item in locationCity.cityOptions" - :key="item.id" - :label="item.name" - :value="item.id" - ></el-option> - </el-select> - <el-select - v-model="locationCity.county" - :disabled="!locationCity.city" - size="small" - placeholder="璇烽�夋嫨鍖哄幙" - > - <el-option - v-for="item in locationCity.countyOptions" - :key="item.id" - :label="item.name" - :value="item.id" - ></el-option> - </el-select> - <el-button - type="text" - style="position: absolute" - v-show="gb28181.idType === 1" - @click="newGBID" - >鐢熸垚ID</el-button> - </el-form-item> + placeholder="璇烽�夋嫨鐪佷唤" + :disabled="gb28181.idType === 0" + > + <el-option + v-for="item in locationCity.provinceOptions" + :key="item.id" + :label="item.name" + size="small" + :value="item.id" + ></el-option> + </el-select> + <el-select + class="ml10 mr10" + v-model="locationCity.city" + :disabled="!locationCity.province" + @change="changeCity" + size="small" + placeholder="璇烽�夋嫨鍩庡競" + > + <el-option + v-for="item in locationCity.cityOptions" + :key="item.id" + :label="item.name" + :value="item.id" + ></el-option> + </el-select> + <el-select + v-model="locationCity.county" + :disabled="!locationCity.city" + size="small" + placeholder="璇烽�夋嫨鍖哄幙" + > + <el-option + v-for="item in locationCity.countyOptions" + :key="item.id" + :label="item.name" + :value="item.id" + ></el-option> + </el-select> + <el-button type="text" style="position: absolute" v-show="gb28181.idType === 1" @click="newGBID" + >鐢熸垚ID</el-button + > + </el-form-item> - <!-- <el-form-item label="鍥介檯鏈嶅姟鍣ㄧ鍙�" prop="GbServerPort"> + <!-- <el-form-item label="鍥介檯鏈嶅姟鍣ㄧ鍙�" prop="GbServerPort"> <el-input v-model.number="gb28181.ServerPort" placeholder="璇疯緭鍏�" size="small"></el-input> - </el-form-item>--> + </el-form-item>--> - <el-form-item label="鍥芥爣ID"> - <el-input - v-model="gb28181.PublicId" - placeholder="璇疯緭鍏�" - size="small" - :disabled="gb28181.idType === 1" - ></el-input> - </el-form-item> + <el-form-item label="鍥芥爣ID"> + <el-input + v-model="gb28181.PublicId" + placeholder="璇疯緭鍏�" + size="small" + :disabled="gb28181.idType === 1" + ></el-input> + </el-form-item> - <el-form-item label="鍥芥爣绔彛" prop="GbServerPort"> - <el-input v-model.number="gb28181.GbServerPort" placeholder="璇疯緭鍏�" size="small"></el-input> - </el-form-item> + <el-form-item label="鍥芥爣绔彛" prop="GbServerPort"> + <el-input v-model.number="gb28181.GbServerPort" placeholder="璇疯緭鍏�" size="small"></el-input> + </el-form-item> - <el-form-item label="寮�鍚壌鏉�"> - <el-switch v-model="gb28181.IsAuth"></el-switch> - </el-form-item> + <el-form-item label="寮�鍚壌鏉�" style="text-align: left"> + <el-switch v-model="gb28181.IsAuth"></el-switch> + </el-form-item> - <el-form-item label="閴存潈瀵嗙爜" v-show="gb28181.IsAuth"> - <el-input v-model="gb28181.Password" placeholder="璇疯緭鍏�" size="small"></el-input> - </el-form-item> + <el-form-item label="閴存潈瀵嗙爜"> + <el-input + v-model="gb28181.Password" + placeholder="璇疯緭鍏�" + size="small" + :disabled="!gb28181.IsAuth" + ></el-input> + </el-form-item> - <el-form-item> - <el-button type="primary" @click="submitGB28281" size="small">淇濆瓨</el-button> - </el-form-item> - </el-form> + <el-form-item style="float: right"> + <el-button type="primary" @click="submitGB28281" size="small">淇濆瓨</el-button> + </el-form-item> + </el-form> + </div> </el-tab-pane> <el-tab-pane label="鎺ュ叆骞冲彴鍒楄〃" name="subordinates"> @@ -119,7 +117,7 @@ fit highlight-current-row style="width: 100%; color:#000" - :header-cell-style="{ background: '#f8f8f8', color: '#222222', height:'30px' }" + :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> @@ -127,17 +125,17 @@ <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> + <span :style="scope.row.alive ? `color:#047d19` : 'color:#f11a1a;'">{{ + scope.row.alive ? "鍦ㄧ嚎" : "绂荤嚎" + }}</span> </template> </el-table-column> - <el-table-column prop="mark" label="澶囨敞" align="center"></el-table-column> + <el-table-column prop="corp" 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> + <el-button type="primary" size="small" @click="updateCamerasFromVideosvr">鍒锋柊</el-button> </div> <div class="camera-title"> <b>鍥芥爣鎽勫儚鏈洪厤缃�</b> @@ -150,14 +148,20 @@ :node="TreeDataPool.treeData" :height="treeHeight" :setting="treeSettings" + style="width:600px;min-height:500px" /> - + <div class="base-image" v-loading="TreeDataPool.baseImageLoading"> + <span>{{ TreeDataPool.cameraNameForBaseImage }}</span> + <div class="camera-image" v-show="TreeDataPool.cameraNameForBaseImage.length"> + <img :src="'data:image/png;base64,' + TreeDataPool.gb28181CameraBaseImage" width="450px" alt /> + </div> + </div> <el-divider></el-divider> <span class="camera-seleted-text"> 宸查�夋嫨 ( - <b>{{TreeDataPool.gb28181CheckedCount}}</b> - / {{TreeDataPool.gb28181ChildNodeCount}} ) 璺� + <b>{{ TreeDataPool.gb28181CheckedCount }}</b> + / {{ TreeDataPool.gb28181ChildNodeCount }} ) 璺� </span> <el-button type="primary" size="small" @click="saveChecked">淇濆瓨</el-button> @@ -173,23 +177,22 @@ saveGB28181Config, getGb28181AreaList, newGb28181ID, - getLocalCameraTree, getAllSubServer, saveGb28181CamTree -} from './api' +} from "./api" -import TreeMenu from "@/components/giantTree/index"; -import { isPort, isIPv4 } from '@/scripts/validate' -import bus from '@/plugin/bus' +import TreeMenu from "@/components/giantTree/index" +import { isPort, isIPv4 } from "@/scripts/validate" +import bus from "@/plugin/bus" export default { - name: 'Gb28181Setting', + name: "Gb28181Setting", components: { TreeMenu }, directives: { focus: { - inserted: function (el) { - el.querySelector('input').focus() + inserted: function(el) { + el.querySelector("input").focus() } } }, @@ -200,7 +203,7 @@ treeHeight: 750, loading: false, loadingText: "", - openeds: ['0'], + openeds: ["0"], gb28181: {}, subDevTable: [], idType: 1, @@ -213,40 +216,40 @@ ip: [ { required: true, - message: '璇疯緭鍏P鍦板潃', - trigger: 'change' + message: "璇疯緭鍏P鍦板潃", + trigger: "change" }, - { validator: isIPv4, trigger: 'change' } + { validator: isIPv4, trigger: "change" } ], ServerIp: [ { required: true, - message: '璇疯緭鍏P鍦板潃', - trigger: 'change' + message: "璇疯緭鍏P鍦板潃", + trigger: "change" }, - { validator: isIPv4, trigger: 'change' } + { validator: isIPv4, trigger: "change" } ], ServerPort: [ { required: true, - message: '璇疯緭鍏ョ鍙�', - trigger: 'change' + message: "璇疯緭鍏ョ鍙�", + trigger: "change" }, - { validator: isPort, trigger: 'change' } + { validator: isPort, trigger: "change" } ], GbServerPort: [ { required: true, - message: '璇疯緭鍏ョ鍙�', - trigger: 'change' + message: "璇疯緭鍏ョ鍙�", + trigger: "change" }, - { validator: isPort, trigger: 'change' } + { validator: isPort, trigger: "change" } ] }, locationCity: { - province: '', - city: '', - county: '', + province: "", + city: "", + county: "", provinceOptions: [], cityOptions: [], countyOptions: [] @@ -254,95 +257,108 @@ } }, mounted() { - this.TreeDataPool.multiple = true; + this.TreeDataPool.multiple = true - this.initGB28181Conf(); + // 璁板綍鐩綍鏄惁鎶樺彔 + let foldList = localStorage.getItem("ztree_fold_list") + if (foldList) { + this.TreeDataPool.foldNodeList = JSON.parse(foldList) + } + + this.initGB28181Conf() }, methods: { hanleTabClick(tab, event) { if (this.activeName == "subordinates") { - getAllSubServer().then(rsp => { + getAllSubServer().then((rsp) => { if (rsp && rsp.success) { - this.subDevTable = rsp.data; + this.subDevTable = rsp.data } }) } else if (this.activeName == "cameras") { - this.getCamerasFromVideosvr(); + this.getCamerasFromVideosvr() } - - }, async getCamerasFromVideosvr() { - this.loading = true; - await this.TreeDataPool.fetchVideosvrCameras(); - this.loading = false; + this.loading = true + await this.TreeDataPool.fetchVideosvrCameras(false) + this.loading = false + }, + async updateCamerasFromVideosvr() { + this.loading = true + await this.TreeDataPool.fetchVideosvrCameras(true) + this.loading = false }, saveChecked() { + localStorage.setItem("ztree_fold_list", JSON.stringify(this.TreeDataPool.foldNodeList)) + if (this.TreeDataPool.gb28181CheckedCount > 500) { this.$message({ type: "warning", message: "鏈�澶氫粎鏀寔閫夋嫨500璺憚鍍忔満. 璇烽噸鏂伴�夋嫨" }) - return; + return } - this.loading = true; + 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: "淇濆瓨澶辫触" + saveGb28181CamTree({ checkedMenus: treeData }) + .then((rsp) => { + if (rsp && rsp.success) { + this.$message({ + type: "success", + message: "淇濆瓨鎴愬姛" + }) + } + this.loading = false }) - this.loading = false; - }) + .catch((err) => { + this.$message({ + type: "error", + message: "淇濆瓨澶辫触" + }) + this.loading = false + }) }, initGB28181Conf() { - getGB28181Config().then(rsp => { + getGB28181Config().then((rsp) => { if (rsp && rsp.success) { this.gb28181 = rsp.data //this.gb28181.idType = 0; - this.$set(this.gb28181, 'idType', 0) - this.$refs['gb28181'].resetFields(); + this.$set(this.gb28181, "idType", 0) + this.$refs["gb28181"].resetFields() } }) - getGb28181AreaList().then(rsp => { + getGb28181AreaList().then((rsp) => { if (rsp && rsp.success) { this.locationCity.provinceOptions = rsp.data } }) }, submitGB28281() { - this.$refs['gb28181'].validate(valid => { + this.$refs["gb28181"].validate((valid) => { if (valid) { - saveGB28181Config(this.gb28181).then(rsp => { + saveGB28181Config(this.gb28181).then((rsp) => { if (rsp && rsp.success) { this.$notify({ - type: 'success', - message: 'GB28181璁剧疆淇濆瓨鎴愬姛' + type: "success", + message: "GB28181璁剧疆淇濆瓨鎴愬姛" }) } }) } else { - console.log('error submit!!') + console.log("error submit!!") return false } }) }, changeProvince() { let pid = this.locationCity.province - getGb28181AreaList({ parentId: pid }).then(rsp => { + getGb28181AreaList({ parentId: pid }).then((rsp) => { if (rsp && rsp.success) { this.locationCity.cityOptions = rsp.data this.locationCity.city = this.locationCity.cityOptions[0].id @@ -352,7 +368,7 @@ }, changeCity() { let pid = this.locationCity.city - getGb28181AreaList({ parentId: pid }).then(rsp => { + getGb28181AreaList({ parentId: pid }).then((rsp) => { if (rsp && rsp.success) { this.locationCity.countyOptions = rsp.data this.locationCity.county = this.locationCity.countyOptions[0].id @@ -360,25 +376,29 @@ }) }, newGBID() { - let cCode = this.locationCity.county + '' - newGb28181ID({ code: cCode }).then(rsp => { + let cCode = this.locationCity.county + "" + newGb28181ID({ code: cCode }).then((rsp) => { if (rsp && rsp.success) { this.gb28181.PublicId = rsp.data } }) }, - menuOpen() { - - }, - menuClose() { - - }, + menuOpen() {}, + menuClose() {}, toOpenMenuList(e) { - let t = e.clientY - this.$el.offsetTop + 30; - let l = e.clientX - this.$el.offsetLeft; + let t = e.clientY - this.$el.offsetTop + 30 + let l = e.clientX - this.$el.offsetLeft - window.parent.postMessage({ source: location.href.split('/')[location.href.split('/').length - 1], trigger: 'contextmenu', menuT: t, menuL: l }, "*"); - return false; + window.parent.postMessage( + { + source: location.href.split("/")[location.href.split("/").length - 1], + trigger: "contextmenu", + menuT: t, + menuL: l + }, + "*" + ) + return false } } } @@ -499,5 +519,17 @@ color: #3d68e1; } } + + .base-image { + position: absolute; + top: 18%; + left: 57%; + width: 450px; + + .camera-image { + background-color: black; + height: 254px; + } + } } </style> -- Gitblit v1.8.0