赞
踩
视频带149分屏,主要是没做到响应式布局,不支持rstp的直播,需要后台转流,左侧树带拖拽功能!下面是代码片段
<template> <div class="main"> <div class="left"> <el-input class="selectInput" placeholder="输入通道名" :clearable="true" v-model="filterText" > </el-input> <el-tree ref="tree" :data="treeData" :props="props" node-key="id" :default-expanded-keys="['S4NbecfYA1DQ1HUOF0KP14']" check-strictly highlight-current :filter-node-method="filterNode" @node-click="nodeClick" > <template #default="{ node }"> <div class="custom-tree-node" style="user-select: none"> <span class="name" @mousedown="onMousedown(node)">{{ node.label }}</span> </div> </template> </el-tree> </div> <div class="right"> <div class="title"> <div class="text">{{ showTitle }}</div> <div class="exit" title="退出" @click="toclose"> <svg-icon :icon-class="'close'" class="close" @click="toclose" ></svg-icon> <div class="close_text" @click="toclose">关闭</div> </div> </div> <div class="right_main" ref="right_main"> <div class="player" ref="one" v-show="status === 1"> <video ref="player" id='player' preload="auto" class="video-js vjs-default-skin vjs-big-play-centered" ></video> </div> <div class="playerfour" v-show="status === 4" v-for="item in ['play41', 'play42', 'play43', 'play44']" :class="item === activeName ? 'activeBorder' : 'playerfour'" @click="changeSrc(item)" :key="item" > <video :ref="item" preload="auto" :id="item" class="video-js vjs-default-skin vjs-big-play-centered" ></video> </div> <div class="playernine" :class="v === activeName ? 'activeBorder' : 'playernine'" @click="changeSrc(v)" v-show="status===9" v-for="v in nineArray" :key="v" > <video :ref="v" :id="v" preload="auto" class="video-js vjs-default-skin vjs-big-play-centered" ></video> </div> </div> <div class="right_bottom"> <div class="left_b"> <div class="one"></div> <div class="two"></div> <div class="three"></div> </div> <div class="right_b"> <div class="show_type"> <div class="one_t" :class="lookStatus === '预览' ? 'blue_t' : ''" @click="goLook('预览')" > 预览 </div> <div class="two_t" :class="lookStatus === '录像' ? 'blue_t' : ''" @click="goLook('录像')" > 录像 </div> </div> <div class="one" @click="changeStatus(1)"></div> <div class="two" @click="changeStatus(4)"></div> <div class="three" @click="changeStatus(9)"></div> </div> </div> </div> </div> <div class="Console" v-if="false"> <div class="top"> <div class="text">云台控制</div> <div class="xxx"></div> </div> <div class="bottom"> <div class="circular"> <div class="b1" @mousedown="down('top')"></div> <div class="b2"></div> <div class="b3"></div> <div class="b4"></div> <div class="small-circular"></div> </div> </div> </div> </template> <script> import html2canvas from "html2canvas"; import videojs from "video.js"; import "video.js/dist/video-js.css"; import { setTimers, getTree, getPassageByGis, getOrgDevTreePassage, getOrgDevTreeEquipment, realMonitor, queryPassage, } from "./service/index.js"; import VideojsZhcnLanguage from "video.js/dist/lang/zh-CN.json"; videojs.addLanguage("zh-CN", VideojsZhcnLanguage); //设置中文 export default { name: "VideoPlayer", data() { return { props: { label: "text", value: "id", isLeaf: "leaf", }, isdown: false, filterText: "", tu1: require("./source/image/test1.jpeg"), lookStatus: "预览", play1: null, showArray: [], activeName: "", activeName9: "", srcVideo: "", showTitle: "", activeBorder: "playerfour", nineArray: [ "play91", "play92", "play93", "play94", "play95", "play96", "play97", "play98", "play99", ], status: 1, options: { lang: "zh-CN", //设置中文 bigPlayButton: false, //是否显示播放按钮 controls: true, //开启交互,即是用户可控。 muted: true, //开启视频时是否静音 fluid: false, //根据外层css样式大小,自动填充宽高!比较实用,可搭配响应式 loop: true, //循环播放 controlBar: { fullscreenToggle: true, // 音量条的横向还是纵向显示 volumePanel: { inline: false, }, }, sourceOrder: true, reload: "auto", //重载 autoplay: true, //其余设置根据需求添加! poster: "", //视频封面 techOrder: ["html5", "flash"], flash: { swf: "videojs/video-js.swf", }, }, options41: { lang: "zh-CN", //设置中文 width: 0, height: 0, controls: true, //开启交互,即是用户可控。 muted: true, //开启视频时是否静音 fluid: false, //根据外层css样式大小,自动填充宽高!比较实用,可搭配响应式 reload: "auto", //重载 autoplay: true, bigPlayButton: false, //是否显示播放按钮 loop: true, //循环播放 //其余设置根据需求添加! poster: "", //视频封面 controlBar: { fullscreenToggle: true, // 音量条的横向还是纵向显示 volumePanel: { inline: false, }, }, }, treeData: [], }; }, watch: { filterText(val) { try { console.log(val, val, "val123"); this.$refs.tree.filter(val); console.log(this.treeData, "this.treeData", this.$refs.tree); } catch (error) { console.log(error); } }, activeName(val) { if (document.getElementById(val).getAttribute("name")) { this.showTitle = document.getElementById(val).getAttribute("name"); } else { this.showTitle = ""; } }, }, async mounted() { this.initVideo(); this.options.width = this.$refs.right_main.offsetWidth / 1; this.options.height = this.$refs.right_main.offsetHeight / 1; this.player1 = videojs( this.$refs.player, this.options, function onPlayerReady() { console.log("onPlayerReady", this); } ); this.setTimer(); let { id, status, jwd, radius } = this.$route.params; try { if (id && status && jwd && radius) { let array = jwd.split(","); this.getTree(); this.getPassageByGis(array, radius, id); this.status = 1; let { data } = await realMonitor({ channelId: id, scheme: "HLS", }); this.$nextTick(() => { this.changeSrcToShow("player", data, "application/x-mpegURL"); }); } else if (id) { console.log(11111111111, "2222222222"); let { data } = await realMonitor({ channelId: id, scheme: "HLS", }); this.queryPassage(id); this.getTree(); this.$nextTick(() => { this.changeSrcToShow("player", data, "application/x-mpegURL"); }); } else { this.status = 4; this.getTree(); } } catch (error) { console.log(error); } setInterval(() => { this.setTimer(); }, 120000); }, methods: { nodeCollapse(data, node, self) { data.children.push({ test: "111" }); data.children = data.children.filter((item) => !item.name); }, initVideo() { this.options41.width = this.$refs.right_main.offsetWidth / 2; this.options41.height = this.$refs.right_main.offsetHeight / 2; this.player41 = videojs( this.$refs.play41[0], this.options41, function onPlayerReady() { console.log("onPlayerReady", this); } ); this.player42 = videojs( this.$refs.play42[0], { width: this.$refs.right_main.offsetWidth / 2, height: this.$refs.right_main.offsetHeight / 2, controls: true, //开启交互,即是用户可控。 muted: true, //开启视频时是否静音 bigPlayButton: false, //是否显示播放按钮 fluid: false, //根据外层css样式大小,自动填充宽高!比较实用,可搭配响应式 loop: true, //循环播放 lang: "zh-CN", //设置中文 reload: "auto", //重载 autoplay: true, controlBar: { fullscreenToggle: true, // 音量条的横向还是纵向显示 volumePanel: { inline: false, }, }, //其余设置根据需求添加! poster: "", //视频封面 }, function onPlayerReady() { console.log("onPlayerReady", this); } ); this.player43 = videojs( this.$refs.play43[0], { width: this.$refs.right_main.offsetWidth / 2, height: this.$refs.right_main.offsetHeight / 2, controls: true, //开启交互,即是用户可控。 muted: true, //开启视频时是否静音 bigPlayButton: false, //是否显示播放按钮 autoplay: true, lang: "zh-CN", //设置中文 loop: true, //循环播放 fluid: false, //根据外层css样式大小,自动填充宽高!比较实用,可搭配响应式 reload: "auto", //重载 controlBar: { fullscreenToggle: true, // 音量条的横向还是纵向显示 volumePanel: { inline: false, }, }, //其余设置根据需求添加! poster: "", //视频封面 }, function onPlayerReady() { console.log("onPlayerReady", this); } ); this.player44 = videojs( this.$refs.play44[0], { width: this.$refs.right_main.offsetWidth / 2, height: this.$refs.right_main.offsetHeight / 2, controls: true, //开启交互,即是用户可控。 muted: true, //开启视频时是否静音 loop: true, //循环播放 bigPlayButton: false, //是否显示播放按钮 autoplay: true, lang: "zh-CN", //设置中文 fluid: false, //根据外层css样式大小,自动填充宽高!比较实用,可搭配响应式 reload: "auto", //重载 controlBar: { fullscreenToggle: true, // 音量条的横向还是纵向显示 volumePanel: { inline: false, }, }, //其余设置根据需求添加! poster: "", //视频封面 }, function onPlayerReady() { console.log("onPlayerReady", this); } ); this.player91 = videojs( this.$refs.play91[0], { width: this.$refs.right_main.offsetWidth / 3, height: this.$refs.right_main.offsetHeight / 3, controls: true, //开启交互,即是用户可控。 muted: true, //开启视频时是否静音 loop: true, //循环播放 autoplay: true, bigPlayButton: false, //是否显示播放按钮 lang: "zh-CN", //设置中文 fluid: false, //根据外层css样式大小,自动填充宽高!比较实用,可搭配响应式 reload: "auto", //重载 controlBar: { fullscreenToggle: true, // 音量条的横向还是纵向显示 volumePanel: { inline: false, }, }, //其余设置根据需求添加! poster: "", //视频封面 }, function onPlayerReady() { console.log("onPlayerReady", this); } ); this.player92 = videojs( this.$refs.play92[0], { width: this.$refs.right_main.offsetWidth / 3, height: this.$refs.right_main.offsetHeight / 3, controls: true, //开启交互,即是用户可控。 muted: true, //开启视频时是否静音 autoplay: true, bigPlayButton: false, //是否显示播放按钮 lang: "zh-CN", //设置中文 loop: true, //循环播放 fluid: false, //根据外层css样式大小,自动填充宽高!比较实用,可搭配响应式 reload: "auto", //重载 controlBar: { fullscreenToggle: true, // 音量条的横向还是纵向显示 volumePanel: { inline: false, }, }, //其余设置根据需求添加! poster: "", //视频封面 }, function onPlayerReady() { console.log("onPlayerReady", this); } ); this.player93 = videojs( this.$refs.play93[0], { width: this.$refs.right_main.offsetWidth / 3, height: this.$refs.right_main.offsetHeight / 3, controls: true, //开启交互,即是用户可控。 muted: true, //开启视频时是否静音 loop: true, //循环播放 autoplay: true, bigPlayButton: false, //是否显示播放按钮 lang: "zh-CN", //设置中文 fluid: false, //根据外层css样式大小,自动填充宽高!比较实用,可搭配响应式 reload: "auto", //重载 controlBar: { fullscreenToggle: true, // 音量条的横向还是纵向显示 volumePanel: { inline: false, }, }, //其余设置根据需求添加! poster: "", //视频封面 }, function onPlayerReady() { console.log("onPlayerReady", this); } ); this.player94 = videojs( this.$refs.play94[0], { width: this.$refs.right_main.offsetWidth / 3, height: this.$refs.right_main.offsetHeight / 3, controls: true, //开启交互,即是用户可控。 muted: true, //开启视频时是否静音 loop: true, //循环播放 bigPlayButton: false, //是否显示播放按钮 autoplay: true, lang: "zh-CN", //设置中文 fluid: false, //根据外层css样式大小,自动填充宽高!比较实用,可搭配响应式 reload: "auto", //重载 controlBar: { fullscreenToggle: true, // 音量条的横向还是纵向显示 volumePanel: { inline: false, }, }, //其余设置根据需求添加! poster: "", //视频封面 }, function onPlayerReady() { console.log("onPlayerReady", this); } ); this.player95 = videojs( this.$refs.play95[0], { width: this.$refs.right_main.offsetWidth / 3, height: this.$refs.right_main.offsetHeight / 3, controls: true, //开启交互,即是用户可控。 loop: true, //循环播放 bigPlayButton: false, //是否显示播放按钮 autoplay: true, lang: "zh-CN", //设置中文 muted: true, //开启视频时是否静音 fluid: false, //根据外层css样式大小,自动填充宽高!比较实用,可搭配响应式 reload: "auto", //重载 controlBar: { fullscreenToggle: true, // 音量条的横向还是纵向显示 volumePanel: { inline: false, }, }, //其余设置根据需求添加! poster: "", //视频封面 }, function onPlayerReady() { console.log("onPlayerReady", this); } ); this.player96 = videojs( this.$refs.play96[0], { width: this.$refs.right_main.offsetWidth / 3, height: this.$refs.right_main.offsetHeight / 3, controls: true, //开启交互,即是用户可控。 muted: true, //开启视频时是否静音 loop: true, //循环播放 bigPlayButton: false, //是否显示播放按钮 autoplay: true, lang: "zh-CN", //设置中文 fluid: false, //根据外层css样式大小,自动填充宽高!比较实用,可搭配响应式 reload: "auto", //重载 controlBar: { fullscreenToggle: true, // 音量条的横向还是纵向显示 volumePanel: { inline: false, }, }, //其余设置根据需求添加! poster: "", //视频封面 }, function onPlayerReady() { console.log("onPlayerReady", this); } ); this.player97 = videojs( this.$refs.play97[0], { width: this.$refs.right_main.offsetWidth / 3, height: this.$refs.right_main.offsetHeight / 3, loop: true, //循环播放 bigPlayButton: false, //是否显示播放按钮 autoplay: true, lang: "zh-CN", //设置中文 controls: true, //开启交互,即是用户可控。 muted: true, //开启视频时是否静音 fluid: false, //根据外层css样式大小,自动填充宽高!比较实用,可搭配响应式 reload: "auto", //重载 controlBar: { fullscreenToggle: true, // 音量条的横向还是纵向显示 volumePanel: { inline: false, }, }, //其余设置根据需求添加! poster: "", //视频封面 }, function onPlayerReady() { console.log("onPlayerReady", this); } ); this.player98 = videojs( this.$refs.play98[0], { width: this.$refs.right_main.offsetWidth / 3, height: this.$refs.right_main.offsetHeight / 3, loop: true, //循环播放 autoplay: true, bigPlayButton: false, //是否显示播放按钮 lang: "zh-CN", //设置中文 controls: true, //开启交互,即是用户可控。 muted: true, //开启视频时是否静音 fluid: false, //根据外层css样式大小,自动填充宽高!比较实用,可搭配响应式 reload: "auto", //重载 controlBar: { fullscreenToggle: true, // 音量条的横向还是纵向显示 volumePanel: { inline: false, }, }, //其余设置根据需求添加! poster: "", //视频封面 }, function onPlayerReady() { console.log("onPlayerReady", this); } ); this.player99 = videojs( this.$refs.play99[0], { width: this.$refs.right_main.offsetWidth / 3, height: this.$refs.right_main.offsetHeight / 3, loop: true, //循环播放 autoplay: true, bigPlayButton: false, //是否显示播放按钮 lang: "zh-CN", //设置中文 controls: true, //开启交互,即是用户可控。 muted: true, //开启视频时是否静音 fluid: false, //根据外层css样式大小,自动填充宽高!比较实用,可搭配响应式 reload: "auto", //重载 controlBar: { fullscreenToggle: true, // 音量条的横向还是纵向显示 volumePanel: { inline: false, }, }, //其余设置根据需求添加! poster: "", //视频封面 }, function onPlayerReady() { console.log("onPlayerReady", this); } ); }, filterNode(value, data) { console.log(value, "value"); if (!value) { return true; } console.log(value, data, "1111111"); if (data.text) { return data.text.split("").includes(value); } }, async Wait() { try { setTimeout(() => {}); } catch (error) { console.log(error); } }, async queryPassage(id) { try { let { data } = await queryPassage({ passageId: id, }); this.showTitle = data[0].name; } catch (error) { console.log(error); } }, async onMousedown(node) { if(this.isdown){ return } this.isdown = true; if (node.data.nodeType==='3.0') { try { let { data } = await realMonitor({ channelId: node.data.id, scheme: "HLS", }); this.srcVideo = data; } catch (error) { console.log(error); } let dom = document.createElement("div"); dom.innerText = node.data.text; dom.style.display = "none"; dom.style.border = "1px solid red"; dom.classList.add("drag-div-box"); document.body.appendChild(dom); let moveFlag = false; document.onmousemove = (e) => { if(!this.isdown)return; e.preventDefault(); if (!moveFlag) { // this.$emit("drag-start", node); moveFlag = true; } dom.style.position = "absolute"; dom.style.left = e.clientX + 3 + "px"; dom.style.top = e.clientY + 3 + "px"; dom.style.zIndex = 1000; dom.style.display = "block"; dom.style.backgroundColor = "#c9e9f7"; dom.style.color = "#333"; dom.style.padding = "5px 5px"; dom.style.fontSize = "16px"; dom.style.lineHeight = "1"; dom.style.borderRadius = "4px"; }; // 鼠标已经抬起 document.onmouseup = (e) => { this.isdown = false; document.body.removeChild(dom); document.onmousemove = null; // 当鼠标弹起时移出移动事件 document.onmouseup = null; // 移出up事件,清空内存 if (moveFlag) { // this.$emit("drag-end", node); if (this.status === 1) { if (this.d("player")) { this.showTitle = node.data.text; let a = this.srcVideo; this.changeSrcToShow("player", a, "application/x-mpegURL"); } } else if (this.status === 4) { let array = ["play41", "play42", "play43", "play44"]; array.map((v) => { if (this.d(v, true)) { this.showTitle = node.data.text; let a = this.srcVideo; document .getElementById(v) .setAttribute("name", node.data.text); this.changeSrcToShow(v, a, "application/x-mpegURL", true); return; } }); } else { this.nineArray.map((v) => { if (this.d(v, true)) { let a = this.srcVideo; // this.showTitle = node.data.name; document .getElementById(v) .setAttribute("name", node.data.text); this.changeSrcToShow(v, a, "application/x-mpegURL", true); return; } }); } } }; } }, d(id, type) { if (type) { var wx = window.event.clientX; var wy = window.event.clientY; var d_left = this.$refs[id][0].getBoundingClientRect().left; var d_top = this.$refs[id][0].getBoundingClientRect().top; var d_width = this.$refs[id][0].clientWidth; var d_height = this.$refs[id][0].clientHeight; if ( wx < d_left || wy < d_top || wx > d_left + d_width || wy > d_top + d_height ) { return false; } else { return true; } } else { var wx = window.event.clientX; var wy = window.event.clientY; var d_left = this.$refs[id].getBoundingClientRect().left; var d_top = this.$refs[id].getBoundingClientRect().top; var d_width = this.$refs[id].clientWidth; var d_height = this.$refs[id].clientHeight; if ( wx < d_left || wy < d_top || wx > d_left + d_width || wy > d_top + d_height ) { return false; } else { return true; } } }, goLook(text) { this.lookStatus = text; }, changeStatus(number) { this.status = number; if(number===1){ this.showTitle = document.getElementById('player').getAttribute("name"); }else if(["play41", "play42", "play43", "play44"].includes( this.activeName )&& number===4){ this.showTitle = document.getElementById(this.activeName).getAttribute("name"); }else{ this.showTitle = document.getElementById(this.activeName).getAttribute("name"); } }, changeSrcToShow(Ref, Src, Type = "application/x-mpegURL", type) { if (this.$refs[Ref] && type) { console.log("改变"); videojs(this.$refs[Ref][0]).src(Src); videojs(this.$refs[Ref][0]).type(Type); } else if (this.$refs) { console.log("改变"); videojs(this.$refs[Ref]).src(Src); console.log(videojs(this.$refs[Ref]), "type"); videojs(this.$refs[Ref]).type(Type); } else { console.log("error", "dom不存在!"); } }, async loadTree(node, resolve) { console.log(node, "data"); if (node.level === 0) { let { data } = await getTree(); resolve(data); } else { let { data } = await getOrgDevTreePassage({ nodeId: node.data.id, paging: { pageNumber: 1, pageSize: 100, }, }); let data1 = await getTree({ parentid: node.data.id, }); console.log(data1.data[0].children, "data1"); if (data && data.length > 0) { data.map((v) => { v.text = v.name; v.leaf = true; }); } if (data1.data[0].children) { data1.data[0].children.map((v) => { data.unshift(v); }); } resolve(data); } }, async getTree() { try { let { data } = await getTree(); this.treeData = data; console.log(data, "treedata"); } catch (error) {} }, async nodeClick(node) { if (node.nodeType === "3.0") { try { let { data } = await realMonitor({ channelId: node.id, scheme: "HLS", }); if ( this.activeName && ["play41", "play42", "play43", "play44"].includes( this.activeName ) && this.status === 4 ) { this.showTitle = node.text; document .getElementById(this.activeName) .setAttribute("name", node.text); // console.log(document.getElementById(this.activeName).getAttribute('name'),'this.activeName'); this.changeSrcToShow( this.activeName, data, "application/x-mpegURL", true ); } else if ( this.activeName && this.nineArray.includes(this.activeName) && this.status === 9 ) { this.showTitle = node.text; document .getElementById(this.activeName) .setAttribute("name", node.text); this.changeSrcToShow( this.activeName, data, "application/x-mpegURL", true ); } else if (!this.activeName && this.status === 4) { this.activeName = ["play41", "play42", "play43", "play44"][0]; this.showTitle = node.text; document .getElementById(this.activeName) .setAttribute("name", node.text); this.changeSrcToShow( this.activeName, data, "application/x-mpegURL", true ); } else if (!this.activeName && this.status === 9) { this.activeName = this.nineArray[0]; this.showTitle = node.text; document .getElementById(this.activeName) .setAttribute("name", node.text); this.changeSrcToShow( this.activeName, data, "application/x-mpegURL", true ); } else { document .getElementById('player') .setAttribute("name", node.text); this.showTitle = node.text; this.changeSrcToShow("player", data, "application/x-mpegURL"); } } catch (error) { console.log(error); } } }, async nodeExpand(node) { console.log(node, "node"); if (node.children[0].test) { node.children.splice(0, 1); } if (node.name) { try { let { data } = await getOrgDevTreeEquipment({ nodeId: node.id, paging: { pageNumber: 0, pageSize: 100, }, }); console.log(data, "data,hsebei"); } catch (error) {} } else { try { let { data } = await getOrgDevTreePassage({ nodeId: node.id, paging: { pageNumber: 1, pageSize: 100, }, }); if (data && data.length > 0) { console.log(node, "data"); data.map((v) => { v.text = v.name; node.children.push(v); }); } } catch (error) { console.log(error); } } }, async getORG(node) { try { let { data } = await getOrgDevTreePassage({ nodeId: node.id, paging: { pageNumber: 1, pageSize: 100, }, }); data.map((v) => { v.text = v.name; }); return data; } catch (error) { console.log(error); } }, changeSrc(item) { this.activeName = item; console.log( this.$refs[this.activeName][0], this.$refs[this.activeName][0].offsetWidth, this.$refs[this.activeName][0].offsetHeight, "this.$refs.item" ); }, // 截图 crossTabletoImage() { const canvas = document.createElement("canvas"); const canvasBox = document.querySelector(".imageBox"); const width = canvasBox.clientWidth; const height = canvasBox.clientHeight; // 宽高 * 2 并放大 2 倍 是为了防止图片模糊 // canvas.width = width * 2 // canvas.height = height * 2 canvas.width = width; canvas.height = height; canvas.style.width = width + "px"; canvas.style.height = height + "px"; const context = canvas.getContext("2d"); // context.scale(2, 2) context.scale(1, 1); const options = { backgroundColor: null, canvas: canvas, useCORS: true, }; html2canvas(canvasBox, options).then((canvas) => { const dataURL = canvas.toDataURL("image/png"); // 图片格式转成base64 this.downloadImage(dataURL); }); }, down(text) {}, async setTimer() { await setTimers({}); }, async getTRees() { let { data } = await getTree(); // this.treeData = data; console.log(data, "data"); }, async getOrgDevTreePassage() { let { data } = await getOrgDevTreePassage({ nodeId: "S4NbecfYA1DQAT48FEMDRC", paging: { pageNumber: 1, pageSize: 100, }, }); console.log(data, "data,data"); }, //获取视频通道的方法 async getPassageByGis(jwd, r, id) { try { let { data } = await getPassageByGis({ coordinates: jwd, radius: r, }); console.log(data, "datagpx"); if (data && data.length > 0) { data.map((v) => { if (v.id == id) { this.showTitle = v.name; } v.text = v.name; v.nodeType = "3.0"; v.leaf = true; }); } this.treeData = data; } catch (error) {} }, toclose() { this.$confirm("是否确定关闭?", "关闭窗口", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning", }) .then(() => { window.close(); }) .catch((e) => { console.log(e); }); }, }, }; </script> <style scoped lang='scss'> //屏蔽单击暂停 .vjs-tech { pointer-events: none; } .activeBorder { video:first-child { border: 1px solid red !important; } } .main { width: 100vw; height: 100vh; display: flex; background: rgba(7, 23, 45, 1); .left { flex: 0 0 14%; overflow: auto; height: 100%; margin-right: 1%; background: rgba(15, 49, 96, 1); .selectInput { margin-bottom: 10px; background: #0b2444; border-radius: 0px 0px 4px 0px; :deep(.el-input__inner) { background: transparent; border: none; font-size: 16px; font-family: Source Han Sans CN; font-weight: 400; color: #cfd8e3; line-height: 10px; } } :deep(.el-tree) { background-color: transparent; font-size: 18px; font-family: Source Han Sans CN; font-weight: 400; color: #e5e5e5; line-height: 10px; } :deep(.el-tree--highlight-current) { background-color: transparent; } :deep(.is-focusable) { background-color: transparent; } :deep(.is-focusable:hover) { background-color: transparent; } :deep(.is-current) { color: #2dc2fe; background: #294466; border-radius: 8px; } :deep(.is-current:hover) { background-color: transparent; } :deep(.el-tree-node__content) { background-color: transparent; } :deep(.el-tree-node) { padding: 5px 0px; } } .right { flex: 0 0 85%; height: 100%; background: rgba(15, 49, 96, 1); display: flex; flex-direction: column; .title { display: flex; align-items: center; justify-content: space-between; flex: 0 0 50px; background: rgba(15, 45, 96, 1); .exit { width: 80px; height: 30px; cursor: pointer; margin-right: 5px; display: flex; align-items: center; .close { color: #9bc5d4; font-size: 20px; margin-left: 5px; margin-right: 0px; cursor: pointer; } .close_text { cursor: pointer; font-family: Microsoft YaHei; font-weight: bold; color: #88b4c9; } } .text { margin-left: 10px; font-size: 20px; font-family: Source Han Sans CN; font-weight: 400; color: #00ccff; line-height: 10px; } } .right_bottom { display: flex; align-items: center; justify-content: space-between; background: rgba(12, 38, 76, 1); flex: 0 0 50px; .left_b { display: flex; align-items: center; justify-content: left; height: 100%; .one { width: 26px; height: 22px; cursor: pointer; margin: 0 39px; background-image: url("./images/相机.png"); background-size: 100% 100%; background-position: center; } .two { width: 26px; height: 22px; cursor: pointer; margin-right: 39px; background-image: url("./images/video.png"); background-size: 100% 100%; background-position: center; } .three { width: 26px; height: 22px; cursor: pointer; margin-right: 39px; background-image: url("./images/control.png"); background-size: 100% 100%; background-position: center; } } .right_b { display: flex; align-items: center; justify-content: right; height: 100%; .show_type { width: 164px; height: 30px; display: flex; align-items: center; justify-content: center; border: 1px solid #125dcc; border-radius: 4px; cursor: pointer; .one_t { display: flex; align-items: center; justify-content: center; height: 100%; flex: 1; font-size: 18px; font-family: Source Han Sans CN; font-weight: 400; color: #e5e5e5; line-height: 10px; background: transparent; border-radius: 4px 0 0 4px; } .two_t { display: flex; align-items: center; justify-content: center; height: 100%; flex: 1; font-size: 18px; font-family: Source Han Sans CN; font-weight: 400; color: #e5e5e5; line-height: 10px; background: transparent; } .blue_t { background: #125dcc !important; } } .one { width: 26px; height: 22px; cursor: pointer; margin: 0 39px; background-image: url("./images/s1.png"); background-size: 100% 100%; background-position: center; } .two { width: 26px; height: 22px; cursor: pointer; margin-right: 39px; background-image: url("./images/s2.png"); background-size: 100% 100%; background-position: center; } .three { width: 26px; height: 22px; cursor: pointer; margin-right: 39px; background-image: url("./images/s3.png"); background-size: 100% 100%; background-position: center; } } } .right_main { flex: 1; display: flex; overflow: auto; /* wrap: 在必要的时候进行换行*/ flex-wrap: wrap; video { background: rgba(52, 52, 52, 1); border: 0.5px solid black; } .player { flex: 1; height: 100%; } .playerfour { flex: 0 0 49%; height: 49%; } .playernine { flex: 0 0 32%; height: 32%; } } } } .Console { width: 230px; height: 230px; position: relative; bottom: 310px; left: 19%; display: flex; flex-direction: column; .top { display: flex; justify-content: space-between; align-items: center; flex: 0 0 45px; width: 100%; background: #132b4c; .text { font-size: 18px; font-family: Source Han Sans CN; font-weight: 400; color: #e5e5e5; line-height: 10px; margin-left: 10px; } .xxx { width: 13px; height: 12px; margin-right: 10px; background: url("./images/xxx.png"); background-position: center; background-size: 100% 100%; } } .bottom { flex: 1; width: 100%; background: #07172d; display: flex; justify-content: center; align-items: center; .circular { display: flex; justify-content: center; align-items: center; width: 150px; height: 150px; border-top: 1px solid #ffffff; border-bottom: 1px solid #ffffff; border-radius: 50%; position: relative; .b1 { width: 48px; height: 44px; background: url("./images/topblack.png") no-repeat center 100% 100%; position: absolute; left: 1px; top: 1px; } .small-circular { width: 60px; height: 60px; border-right: 1px solid #ffffff; border-left: 1px solid #ffffff; border-radius: 50%; } } } } </style>
效果图
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。