From 929cf4c7be11bfd1e134d0cb0d7cbbe94772ebdf Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@iotlink.com> Date: 星期一, 07 九月 2020 15:35:14 +0800 Subject: [PATCH] 摄像机树增加导入功能 --- src/components/LeftNav.vue | 142 +++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 123 insertions(+), 19 deletions(-) diff --git a/src/components/LeftNav.vue b/src/components/LeftNav.vue index cf99eea..fc28117 100644 --- a/src/components/LeftNav.vue +++ b/src/components/LeftNav.vue @@ -4,6 +4,7 @@ class="left-tree-box" :style="`height:${height}px;animation-duration: 0.7s`" v-show="TreeDataPool.showTreeBox" + v-loading="menuLoading" > <el-tabs v-model="TreeDataPool.treeActiveName" type="border-card" @tab-click="handleClick"> <el-tab-pane label="鎽勫儚鏈�" name="camera" :style="`height:${height - 56}px;`" v-if="showCam"> @@ -75,6 +76,16 @@ </el-tooltip> </div> + <!-- 瀵煎叆璁惧 --> + <div class="tree-edit import-btn" v-show="!TreeDataPool.readonly"> + <el-tooltip content="瀵煎叆璁惧" placement="bottom" popper-class="atooltip"> + <button @click="importCameras('0')"> + <!-- <i class="el-icon-video-camera"></i> --> + <span class="iconfont icondaoru" style="font-size:16px;"></span> + </button> + </el-tooltip> + </div> + <!-- 鏍戞搷浣滈攣 --> <div class="tree-edit tree-lock" v-show="showLock"> <button @click="lockSwitch"> @@ -101,6 +112,7 @@ :node="TreeDataPool.treeData" :height="height" @addDevice="addCamera" + @import="importCameras" /> </el-menu-item-group> </el-submenu> @@ -213,6 +225,20 @@ <file-upload v-show="fileUploadBox" @close="fileUploadBox= false" /> </el-tab-pane> </el-tabs> + + <!-- 瀵煎叆璁惧缁勪欢 浜嬩欢瑙﹀彂 --> + <el-upload + class="upload-btn" + action="https://jsonplaceholder.typicode.com/posts/" + accept=".xlsx" + :on-exceed="exceed" + :limit="10" + :on-remove="remove" + :http-request="uploadFile" + :show-file-list="false" + > + <button ref="import-btn" v-show="false"></button> + </el-upload> </div> </transition> </template> @@ -225,10 +251,15 @@ updateStatus } from "@/api/localVedio"; +import { + createCamera, +} from "@/api/camera"; + import bus from "@/plugin/bus" import TreeMenu from "@/components/treeMenu/index"; import LocalVedioList from '@/components/subComponents/LocalVedioList'; import FileUpload from '@/components/subComponents/FileUpload/index'; +import XLSX from 'xlsx' export default { components: { @@ -335,27 +366,11 @@ ], timeout: null, fileUploadBox: false, - loadingGBTree: false + loadingGBTree: false, + importAreaId: "", + menuLoading: false }; }, - // watch: { - // $route(to, from) { - // switch (to.name) { - // case "Searching": - // this.cameraAuth = "videoSearch:camera" - // this.dataStack = "videoSearch:dataStack" - // break - // case "VideoManage": - // this.cameraAuth = "VIDEOCAMERA:camera" - // this.dataStack = "VIDEOCAMERA:dataStack" - // break - // default: - // this.cameraAuth = "videoMonitor:camera" - // this.dataStack = "videoMonitor:dataStack" - // } - // // console.log("璺敱鍙樺寲锛�", to, from) - // } - // }, created() { if (this.showCam) { this.TreeDataPool.treeActiveName = "camera" @@ -507,6 +522,91 @@ refrash(current, pageSize) { this.TreeDataPool.localCurrentPage = current; }, + + importCameras(area) { + this.importAreaId = area + this.$refs["import-btn"].click() + }, + + async uploadFile(params) { + const _file = params.file; + const fileReader = new FileReader(); + fileReader.onload = (ev) => { + this.menuLoading = true; + try { + const data = ev.target.result; + const workbook = XLSX.read(data, { + type: 'binary' + }); + + for (let sheet in workbook.Sheets) { + //寰幆璇诲彇姣忎釜鏂囦欢 + const sheetArray = XLSX.utils.sheet_to_json(workbook.Sheets[sheet]); + //鑻ュ綋鍓峴heet娌℃湁鏁版嵁锛屽垯continue + if (sheetArray.length == 0) { + continue; + } + + let succeed = 0; + let failed = 0; + + for (let item in sheetArray) { + let camera = this.newCamera(); + camera.areaid = this.importAreaId; + camera.name = String(sheetArray[item].name); + camera.rtsp = String(sheetArray[item].rtsp); + camera.addr = String(sheetArray[item].addr); + + createCamera(camera).then(rsp => { + if (rsp && rsp.success) { + succeed++; + } else { + failed++; + } + }).catch(err => { + failed++; + }) + } + + let _this = this + setTimeout(() => { + this.menuLoading = false; + _this.$message({ + type: "success", + message: "鎿嶄綔瀹屾垚, 瀵煎叆鎴愬姛:" + succeed + "涓� 澶辫触:" + failed + "涓�" + }) + _this.TreeDataPool.fetchTreeData(); + }, 2000) + } + } catch (e) { + this.menuLoading = false + this.$message.warning('鏂囦欢绫诲瀷涓嶆纭紒'); + } + }; + fileReader.readAsBinaryString(_file); + }, + exceed() { + this.$message.error("鏈�澶氬彧鑳戒笂浼�1涓獂ls鏂囦欢"); + }, + //鍒犻櫎鏂囦欢 + remove() { + + }, + newCamera() { + return { + latitude: 0, + rtsp: "", + longitude: 0, + name: "", + addr: "", + areaid: "", + reserved: "", + run_type: -1, + username: "", + password: "", + sensors: [] + } + } } }; </script> @@ -736,6 +836,10 @@ .camera-add { left: 128px; } + +.import-btn { + left: 156px; +} .tree-font { font-family: PingFangSC-Medium; font-size: 14px; -- Gitblit v1.8.0