From e6443cf405d4e950abe35a29e6c133d097fc1ad5 Mon Sep 17 00:00:00 2001 From: zhanghua <314079846@qq.com> Date: 星期一, 04 十二月 2023 17:46:01 +0800 Subject: [PATCH] 100路视频 --- src/views/video/index.vue | 724 ++++++++++++++++++++++++++++--------------------------- 1 files changed, 370 insertions(+), 354 deletions(-) diff --git a/src/views/video/index.vue b/src/views/video/index.vue index d601e9c..356c75c 100644 --- a/src/views/video/index.vue +++ b/src/views/video/index.vue @@ -1,101 +1,110 @@ <template> - <el-container class="video-container" style="height: 100%"> - <el-aside heigth="100%" width="200px"> - <department-aside @selectedDepartment="selectedDepartment" /> - </el-aside> + <el-container class="video-container" style="height: 100%"> + <el-aside heigth="100%" width="200px"> + <department-aside @selectedDepartment="selectedDepartment" /> + </el-aside> - <el-container class="video-body-right"> - <el-header style="display: flex; flex-direction: column; height: 120px"> - <div - style="display: flex; justify-content: space-between; height: 80px" - > - <span - style=" - color: rgb(75, 155, 183); - font-weight: 500; - text-align: left; - font-size: 16px; - " - >鏁翠綋瓒嬪娍</span - > - <el-date-picker - class="video-time-select" - v-model="value" - type="date" - placeholder="閫夋嫨鏃ユ湡" - > - </el-date-picker> - </div> - <!-- <div style="height: 60px; display: flex; justify-content: flex-start"> + <el-container class="video-body-right"> + <el-header + style="display: flex; flex-direction: column; height: 120px" + > + <div + style=" + display: flex; + justify-content: space-between; + height: 80px; + " + > + <span + style=" + color: rgb(75, 155, 183); + font-weight: 500; + text-align: left; + font-size: 16px; + " + >鏁翠綋瓒嬪娍</span + > + <el-date-picker + class="video-time-select" + v-model="value" + type="date" + placeholder="閫夋嫨鏃ユ湡" + > + </el-date-picker> + </div> + <!-- <div style="height: 60px; display: flex; justify-content: flex-start"> <el-button class="button-one"> 瑙嗛棰勮 </el-button> <el-button class="button-two"> 瑙嗛宸℃煡 </el-button> <el-button class="button-third"> 鍥剧墖宸℃煡 </el-button> </div> --> - </el-header> + </el-header> - <el-main style="display: flex; flex-wrap: wrap; overflow-y: scroll"> - <div - v-for="item in videoData" - :key="item.id" - style=" - height: 360px; - width: 400px; - position: relative; - margin-left: 20px; - " - > - <div - style=" - color: rgb(75, 155, 183); - font-size: 11px; - line-height: 18px; - position: absolute; - z-index: 1; - left: 50px; - " - > - {{ item.community }}-{{ item.name }} - </div> - <video - :id="item.id" - class="video-js" - controls - preload="auto" - width="400px" - height="300px" - type="video/mp4" - ></video> - <div class="button-div"> - <div @click="loadVideo(item)">鏌ョ湅瑙嗛</div> - <div>瑙嗛涓婃姤</div> - <div @click="create(item)">瀵硅</div> - </div> - </div> - </el-main> - <el-dialog - :visible.sync="dialogCreate" - title="鏌ョ湅瑙嗛" - v-show="dialogCreate" - :before-close="handleClose2" - > - <div class="dom" style="width: 100%; height: 600px; position: relative"> - <div id="dom1" class="dom1"></div> - <div id="dom2" class="dom2"></div> - <div id="dom3" class="dom3"></div> - </div> - </el-dialog> - <el-footer> - <div style="margin-bottom: 0"> - <el-pagination - layout="prev, pager, next" - @current-change="currentPageChange" - :total="totalNum" - :page-size="pageSize" - ></el-pagination> - </div> - </el-footer> + <el-main style="display: flex; flex-wrap: wrap; overflow-y: scroll"> + <div + v-for="item in videoData" + :key="item.id" + style=" + height: 360px; + width: 400px; + position: relative; + margin-left: 20px; + " + > + <div + style=" + color: rgb(75, 155, 183); + font-size: 11px; + line-height: 18px; + position: absolute; + z-index: 1; + left: 50px; + " + > + {{ item.community }}-{{ item.name }} + </div> + <video + :id="item.id" + class="video-js" + controls + preload="auto" + width="400px" + height="300px" + type="video/mp4" + ></video> + <div class="button-div"> + <div @click="loadVideo(item)">鏌ョ湅瑙嗛</div> + <div>瑙嗛涓婃姤</div> + <div @click="create(item)">瀵硅</div> + </div> + </div> + </el-main> + <el-dialog + :visible.sync="dialogCreate" + title="鏌ョ湅瑙嗛" + v-show="dialogCreate" + :before-close="handleClose2" + > + <div + class="dom" + style="width: 100%; height: 600px; position: relative" + > + <div id="dom1" class="dom1"></div> + <div id="dom2" class="dom2"></div> + <div id="dom3" class="dom3"></div> + </div> + </el-dialog> + <el-footer> + <div style="margin-bottom: 0"> + <el-pagination + layout="prev, pager, next" + @current-change="currentPageChange" + :total="totalNum" + :page-size="pageSize" + ></el-pagination> + </div> + </el-footer> + </el-container> </el-container> - </el-container> </template> <script> @@ -104,304 +113,311 @@ import videoPoint from "@/api/system/videoPoint"; export default { - components: { departmentAside }, - data() { - return { - currentPage: 1, - totalNum: 7, - pageSize: 8, - videoData: [], - value: null, - dialogCreate: false, - cutPosX: 10, - cutPosY: 10, - cutWidth: 100, - cutHeight: 100, - crtPosX: 0, - crtPosY: 0, - crtWidth: 1000, - crtHeight: 600, - domId: "dom1", - ctrl: "ctrl1", - }; - }, - - created() { - this.getVideoPointList(); - }, - mounted() {}, - methods: { - loadVideo(item) { - if (item.code || item.platResourceId) { - if (Hls.isSupported()) { - var video = document.getElementById(item.id); - var hls = new Hls(); - videoPoint - .getVideoPointUrl(item.code || item.platResourceId) - .then((res) => { - if (res.code === 0) { - hls.loadSource(res.data); - hls.attachMedia(video); - setTimeout(() => { - video.play(); - }, 2000); - } - }); + components: { departmentAside }, + data() { + return { + currentPage: 1, + totalNum: 7, + pageSize: 8, + videoData: [], + value: null, + dialogCreate: false, + cutPosX: 10, + cutPosY: 10, + cutWidth: 100, + cutHeight: 100, + crtPosX: 0, + crtPosY: 0, + crtWidth: 1000, + crtHeight: 600, + domId: "dom1", + ctrl: "ctrl1", + }; + }, + watch: { + '$route'(to, from) { //鐩戝惉璺敱鏄惁鍙樺寲 + this.getVideoPointList(); } - } else { - this.$message.error("鏆傛棤瑙嗛"); - } }, - getVideoPointList(data) { - let communityId, streetId; - if (data) { - communityId = data.id; - streetId = data.parentId; - } - videoPoint - .getVideoPointList({ - current: this.currentPage, - size: this.pageSize, - communityId, - streetId, - }) - .then(({ records, total }) => { - this.videoData = records; - this.totalNum = total; - }) - .catch((err) => this.$message.error(err)); + created() { + this.getVideoPointList(); }, - selectedDepartment(data) { - this.getVideoPointList(data); - }, - currentPageChange(page) { - this.currentPage = page; - this.getVideoPointList(); - }, - handleClose2() { - this.dialogCreate = false; - this.destroy(); - }, - login() { - // 璋冪敤鐧诲綍鎺ュ彛 - this.ws.detectConnectQt().then((res) => { - if (res) { - // 杩炴帴瀹㈡埛绔垚鍔� - this.ws.login({ - loginIp: "172.28.194.180", - loginPort: "7902", - userName: "suichang", - userPwd: "a12345677", - https: 1, - }); - this.$message.info("鐧诲綍涓�..."); - this.ws.on("loginState", (res) => { - this.isLogin = res; - if (res) { - this.$message.success("鐧诲綍鎴愬姛"); - this.activePanel = "key2"; + mounted() { }, + methods: { + loadVideo(item) { + if (item.code || item.platResourceId) { + if (Hls.isSupported()) { + var video = document.getElementById(item.id); + var hls = new Hls(); + videoPoint + .getVideoPointUrl(item.code || item.platResourceId) + .then((res) => { + if (res.code === 0) { + hls.loadSource(res.data); + hls.attachMedia(video); + setTimeout(() => { + video.play(); + }, 2000); + } + }); + } } else { - this.$message.info("鐧诲綍澶辫触"); + this.$message.error("鏆傛棤瑙嗛"); } - }); - } else { - // 杩炴帴瀹㈡埛绔け璐� - this.$message.info("璇烽噸鏂板畨瑁呭鎴风"); - } - }); - }, - logout() { - // 璋冪敤鐧诲嚭鎺ュ彛 - this.ws.logout({ - loginIp: this.loginIp, - }); - }, - create(item) { - if (item.platResourceId && item.code) { - const DHWsInstance = DHWs.getInstance(); - this.ws = DHWsInstance; - console.log(this.ws); - this.login(); - // 璋冪敤鍒涘缓鎺т欢鎺ュ彛 - // if (!this.isLogin) { - // this.$message.info('姝e湪鐧婚檰瀹㈡埛绔紝璇风◢绛�......'); - // return false; - // } - this.dialogCreate = true; - setTimeout(() => { - let _this = this; - const params = [ - { - // ctrlType: "realMonitorUI", - ctrlType: "playerWin", - ctrlCode: this.ctrl, - ctrlProperty: { - displayMode: 1, - splitNum: 1, - channelList: [{ channelId: item.code }], - }, - visible: true, - domId: this.domId, - }, - ]; - this.setPos(); - _this.ws - .createCtrl(params) - .then((res) => { - this.$message.success("鍒涘缓鎴愬姛"); - console.log("res", res); - }) - .catch((e) => { - console.log("error;", e); - }); - _this.ws.on("createCtrlResult", (res) => { - console.warn(res); - }); - }, 1000); - } else { - this.$message.error("鏆傛棤瑙嗛"); - } - }, + }, + getVideoPointList(data) { + let path = this.$route.path; + let communityId, streetId; + if (data) { + communityId = data.id; + streetId = data.parentId; + } - destroy() { - // 璋冪敤閿�姣佹帶浠舵帴鍙� - if (!this.isLogin) { - this.$Message.info("姝e湪鐧婚檰瀹㈡埛绔紝璇风◢绛�......"); - return false; - } - const ctrls = this.ws.ctrls.map((i) => { - if (i.ctrlCode === this.ctrl) { - return i.ctrlCode; - } - }); - this.ws.destroyCtrl(ctrls); + videoPoint + .getVideoPointList({ + current: this.currentPage, + size: this.pageSize, + type: path.substring(path.length - 1, path.length), + communityId, + streetId, + }) + .then(({ records, total }) => { + this.videoData = records; + this.totalNum = total; + }) + .catch((err) => this.$message.error(err)); + }, + selectedDepartment(data) { + this.getVideoPointList(data); + }, + currentPageChange(page) { + this.currentPage = page; + this.getVideoPointList(); + }, + handleClose2() { + this.dialogCreate = false; + this.destroy(); + }, + login() { + // 璋冪敤鐧诲綍鎺ュ彛 + this.ws.detectConnectQt().then((res) => { + if (res) { + // 杩炴帴瀹㈡埛绔垚鍔� + this.ws.login({ + loginIp: "172.28.194.180", + loginPort: "7902", + userName: "suichang", + userPwd: "a12345677", + https: 1, + }); + this.$message.info("鐧诲綍涓�..."); + this.ws.on("loginState", (res) => { + this.isLogin = res; + if (res) { + this.$message.success("鐧诲綍鎴愬姛"); + this.activePanel = "key2"; + } else { + this.$message.info("鐧诲綍澶辫触"); + } + }); + } else { + // 杩炴帴瀹㈡埛绔け璐� + this.$message.info("璇烽噸鏂板畨瑁呭鎴风"); + } + }); + }, + logout() { + // 璋冪敤鐧诲嚭鎺ュ彛 + this.ws.logout({ + loginIp: this.loginIp, + }); + }, + create(item) { + if (item.platResourceId && item.code) { + const DHWsInstance = DHWs.getInstance(); + this.ws = DHWsInstance; + console.log(this.ws); + this.login(); + // 璋冪敤鍒涘缓鎺т欢鎺ュ彛 + // if (!this.isLogin) { + // this.$message.info('姝e湪鐧婚檰瀹㈡埛绔紝璇风◢绛�......'); + // return false; + // } + this.dialogCreate = true; + setTimeout(() => { + let _this = this; + const params = [ + { + // ctrlType: "realMonitorUI", + ctrlType: "playerWin", + ctrlCode: this.ctrl, + ctrlProperty: { + displayMode: 1, + splitNum: 1, + channelList: [{ channelId: item.code }], + }, + visible: true, + domId: this.domId, + }, + ]; + this.setPos(); + _this.ws + .createCtrl(params) + .then((res) => { + this.$message.success("鍒涘缓鎴愬姛"); + console.log("res", res); + }) + .catch((e) => { + console.log("error;", e); + }); + _this.ws.on("createCtrlResult", (res) => { + console.warn(res); + }); + }, 1000); + } else { + this.$message.error("鏆傛棤瑙嗛"); + } + }, + + destroy() { + // 璋冪敤閿�姣佹帶浠舵帴鍙� + if (!this.isLogin) { + this.$Message.info("姝e湪鐧婚檰瀹㈡埛绔紝璇风◢绛�......"); + return false; + } + const ctrls = this.ws.ctrls.map((i) => { + if (i.ctrlCode === this.ctrl) { + return i.ctrlCode; + } + }); + this.ws.destroyCtrl(ctrls); + }, + setPos() { + let target = document.getElementById(this.domId); + console.log(target, "target"); + target.style.right = `${this.crtPosX}px`; + target.style.top = `${this.crtPosY}px`; + target.style.width = `${this.crtWidth}px`; + target.style.height = `${this.crtHeight}px`; + if (document.createEvent) { + var event = document.createEvent("HTMLEvents"); + event.initEvent("resize", true, true); + window.dispatchEvent(event); + } else if (document.createEventObject) { + window.fireEvent("onresize"); + } + }, }, - setPos() { - let target = document.getElementById(this.domId); - console.log(target, "target"); - target.style.right = `${this.crtPosX}px`; - target.style.top = `${this.crtPosY}px`; - target.style.width = `${this.crtWidth}px`; - target.style.height = `${this.crtHeight}px`; - if (document.createEvent) { - var event = document.createEvent("HTMLEvents"); - event.initEvent("resize", true, true); - window.dispatchEvent(event); - } else if (document.createEventObject) { - window.fireEvent("onresize"); - } - }, - }, }; </script> <style lang="scss" scoped> .video-time-select { - &::v-deep .el-input__prefix { - height: auto; - } + &::v-deep .el-input__prefix { + height: auto; + } } .video-body-right { - padding: 10px; - border: 1px solid #ccc; - margin-left: 5px; + padding: 10px; + border: 1px solid #ccc; + margin-left: 5px; } .button-one { - height: 40px; - width: 80px; - margin-left: 20px; - padding: 0; - // background-color: #09152f; - color: rgb(75, 155, 183); - border: 1px solid rgb(75, 155, 183); + height: 40px; + width: 80px; + margin-left: 20px; + padding: 0; + // background-color: #09152f; + color: rgb(75, 155, 183); + border: 1px solid rgb(75, 155, 183); } .button-two { - height: 40px; - width: 80px; - padding: 0; - // background-color: #09152f; - color: rgb(75, 155, 183); - border: 1px solid rgb(75, 155, 183); + height: 40px; + width: 80px; + padding: 0; + // background-color: #09152f; + color: rgb(75, 155, 183); + border: 1px solid rgb(75, 155, 183); } .el-button + .el-button { - margin: 0; + margin: 0; } .button-third { - height: 40px; - width: 80px; - padding: 0; - // background-color: #09152f; - color: rgb(75, 155, 183); - border: 1px solid rgb(75, 155, 183); + height: 40px; + width: 80px; + padding: 0; + // background-color: #09152f; + color: rgb(75, 155, 183); + border: 1px solid rgb(75, 155, 183); } .video-js { - border: 1px solid rgb(75, 155, 183); - margin-left: 20px; + border: 1px solid rgb(75, 155, 183); + margin-left: 20px; } .button-div { - color: rgb(75, 155, 183); - position: absolute; - height: 30px; - line-height: 30px; - width: 100%; - margin-left: 20px; - display: flex; - justify-content: center; - - div { - font-size: 11px; + color: rgb(75, 155, 183); + position: absolute; + height: 30px; + line-height: 30px; + width: 100%; + margin-left: 20px; display: flex; justify-content: center; - cursor: pointer; - border: 1px solid rgb(75, 155, 183); - width: 33.3%; - } + div { + font-size: 11px; + display: flex; + justify-content: center; + cursor: pointer; + border: 1px solid rgb(75, 155, 183); + + width: 33.3%; + } } .bottonOne { - color: rgb(75, 155, 183); - font-size: 11px; - position: absolute; - height: 30px; - line-height: 30px; - margin-left: 20px; - width: 33.3%; - border: 1px solid rgb(75, 155, 183); - cursor: pointer; + color: rgb(75, 155, 183); + font-size: 11px; + position: absolute; + height: 30px; + line-height: 30px; + margin-left: 20px; + width: 33.3%; + border: 1px solid rgb(75, 155, 183); + cursor: pointer; } .bottonTwo { - color: rgb(75, 155, 183); - font-size: 11px; - position: absolute; - height: 30px; - line-height: 30px; - width: 33.3%; - border: 1px solid rgb(75, 155, 183); - margin-left: 90px; - cursor: pointer; + color: rgb(75, 155, 183); + font-size: 11px; + position: absolute; + height: 30px; + line-height: 30px; + width: 33.3%; + border: 1px solid rgb(75, 155, 183); + margin-left: 90px; + cursor: pointer; } .el-pagination { - line-height: 40px; + line-height: 40px; } .bottonThird { - color: rgb(75, 155, 183); - font-size: 11px; - position: absolute; - height: 30px; - line-height: 30px; - width: 33.3%; - border: 1px solid rgb(75, 155, 183); - margin-left: 160px; - cursor: pointer; + color: rgb(75, 155, 183); + font-size: 11px; + position: absolute; + height: 30px; + line-height: 30px; + width: 33.3%; + border: 1px solid rgb(75, 155, 183); + margin-left: 160px; + cursor: pointer; } ::v-deep .el-header { - // background-color: #09152f; - color: #000; - line-height: 60px; + // background-color: #09152f; + color: #000; + line-height: 60px; } // ::v-deep .el-aside { @@ -418,31 +434,31 @@ // } ::v-deep .el-tree-node__label { - line-height: 30px; - font-size: 14px; - color: rgb(75, 155, 183); + line-height: 30px; + font-size: 14px; + color: rgb(75, 155, 183); } .dom1 { - margin: 0 auto; + margin: 0 auto; } video::-webkit-media-controls-timeline { - display: none; + display: none; } video::-webkit-media-controls-current-time-display { - display: none; + display: none; } video::-webkit-media-controls-time-remaining-display { - display: none; + display: none; } video::-webkit-media-controls-mute-button { - display: none; + display: none; } video::-webkit-media-controls-toggle-closed-captions-button { - display: none; + display: none; } </style> -- Gitblit v1.8.0