From 3b091db7a2cbe9ac9ae53bfa1c7e895dd4aca787 Mon Sep 17 00:00:00 2001 From: zhanghua <314079846@qq.com> Date: 星期三, 07 十二月 2022 17:10:13 +0800 Subject: [PATCH] 大华视频显示 --- src/views/video/index.vue | 315 +++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 272 insertions(+), 43 deletions(-) diff --git a/src/views/video/index.vue b/src/views/video/index.vue index d12d10d..ddf1fc8 100644 --- a/src/views/video/index.vue +++ b/src/views/video/index.vue @@ -1,80 +1,177 @@ <template> - <el-container style="height: 100%;"> + <el-container style="height: 100%"> <el-aside heigth="100%" width="200px"> <department-aside @selectedDepartment="selectedDepartment" /> </el-aside> <el-container> - <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-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 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> + <!-- <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-main style="display:flex;flex-wrap: wrap;overflow-y: scroll;"> - <div v-for="item in videoData " style="height: 240px ;width: 210px; 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;"> + <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.name }}{{ item.community }} </div> - <video id="my-video" class="video-js" controls preload="auto" width="210px" height="150px" :src="item.urlAddress" type="video/mp4"> - </video> - <div class="bottonOne" @click="">鏌ョ湅瑙嗛</div> - <div class="bottonTwo">瑙嗛涓婃姤</div> - <div class="bottonThird">瀵硅</div> + <video + :id="item.id" + class="video-js" + controls + preload="auto" + width="400px" + height="300px" + :src="item.urlAddress" + 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="鏌ョ湅瑙嗛" + width="80%" + 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 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> </template> + <script> +// import "../../video_lib/DHWs.js"; import departmentAside from "@/views/operate/fivepack/threepack/components/aside"; import videoPoint from "@/api/system/videoPoint"; export default { components: { departmentAside }, - created() { - this.getVideoPointList(); - }, data() { return { currentPage: 1, totalNum: 7, - pageSize: 10, + pageSize: 8, videoData: [], - value: null + 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 (Hls.isSupported()) { + var video = document.getElementById(item.id); + var hls = new Hls(); + videoPoint.getVideoPointUrl(item.platResourceId).then((res) => { + + if (res.code == 0) { + hls.loadSource(res.data); + hls.attachMedia(video); + hls.on(Hls.Events.MANIFEST_PARSED, function () { + video.play(); + document.body.addEventListener( + "click", + function () { + video.play(); + }, + false + ); + }); + setTimeout(() => { + video.play(); + }, 2000); + } + }); + } + }, getVideoPointList(data) { let communityId, streetId; if (data) { communityId = data.parentId; streetId = data.id; } - 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)) + 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)); }, selectedDepartment(data) { this.getVideoPointList(data); @@ -82,8 +179,117 @@ 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: "183.245.159.161", + loginPort: "8282", + 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) { + 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.platResourceId }], + }, + 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); + }, + + 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"); + } + }, + }, }; </script> <style lang="scss" scoped> @@ -105,7 +311,7 @@ color: rgb(75, 155, 183); border: 1px solid rgb(75, 155, 183); } -.el-button+.el-button{ +.el-button + .el-button { margin: 0; } .button-third { @@ -121,6 +327,26 @@ 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; + display: flex; + justify-content: center; + cursor: pointer; + border: 1px solid rgb(75, 155, 183); + + width: 33.3%; + } +} .bottonOne { color: rgb(75, 155, 183); @@ -129,7 +355,7 @@ height: 30px; line-height: 30px; margin-left: 20px; - width: 70px; + width: 33.3%; border: 1px solid rgb(75, 155, 183); cursor: pointer; } @@ -140,12 +366,12 @@ position: absolute; height: 30px; line-height: 30px; - width: 70px; + width: 33.3%; border: 1px solid rgb(75, 155, 183); margin-left: 90px; cursor: pointer; } -.el-pagination{ +.el-pagination { line-height: 40px; } .bottonThird { @@ -154,7 +380,7 @@ position: absolute; height: 30px; line-height: 30px; - width: 70px; + width: 33.3%; border: 1px solid rgb(75, 155, 183); margin-left: 160px; cursor: pointer; @@ -184,4 +410,7 @@ font-size: 14px; color: rgb(75, 155, 183); } +.dom1 { + margin: 0 auto; +} </style> \ No newline at end of file -- Gitblit v1.8.0