monitor.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776
  1. <template>
  2. <div>
  3. <transition name="fade">
  4. <div class="panel monitor" >
  5. <div class="panel-tit">
  6. 视频监控
  7. <img
  8. class="setting"
  9. src="@/assets/setting.png"
  10. alt=""
  11. @click="open"
  12. />
  13. </div>
  14. <ul class="monitor-list" >
  15. <!-- <div @click="opeanfullwin()" class="opean"></div> -->
  16. <li v-for="(hls, index) in hls_video" :key="index">
  17. <video
  18. v-if="hls.boolhls"
  19. class="hlsVideo monitor-height"
  20. @click="hlsVideo(hls.name)"
  21. :ref="hls.ref"
  22. controls
  23. preload="true"
  24. muted
  25. ></video>
  26. <p style="width:90%;margin:6px 5%;font-size: 1.4rem">{{hls.name}}</p>
  27. </li>
  28. </ul>
  29. <div class="panel-footer"></div>
  30. <div class="panel monitor-setting" v-if="showModal">
  31. <div class="panel-tit">
  32. 画面配置<img
  33. class="close"
  34. src="@/assets/close.png"
  35. alt=""
  36. @click="showModal = false"
  37. />
  38. </div>
  39. <div class="monitor-option">
  40. <el-form ref="form" :model="form" label-width="10rem">
  41. <el-form-item label="画面一:">
  42. <el-select class="main-select-tree" ref="selectTree" v-model="selectVideoHc[0].label" >
  43. <el-option v-for="item in formatData(list)" :key="item.value" :label="item.label" :value="item.label" class="select1" />
  44. <el-tree class="main-select-el-tree" ref="selecteltree"
  45. :data="list"
  46. node-key="id"
  47. highlight-current
  48. :props="defaultProps"
  49. @node-click="handleNodeClick($event,1)"
  50. :expand-on-click-node="expandOnClickNode"
  51. />
  52. </el-select>
  53. </el-form-item>
  54. <el-form-item label="画面二:">
  55. <el-select class="main-select-tree" ref="selectTree" v-model="selectVideoHc[1].label" >
  56. <el-option v-for="item in formatData(list)" :key="item.value" :label="item.label" :value="item.label" class="select1" />
  57. <el-tree class="main-select-el-tree" ref="selecteltree"
  58. :data="list"
  59. node-key="id"
  60. highlight-current
  61. :props="defaultProps"
  62. @node-click="handleNodeClick($event,2)"
  63. :expand-on-click-node="expandOnClickNode"
  64. />
  65. </el-select>
  66. </el-form-item>
  67. <el-form-item label="画面三:">
  68. <el-select class="main-select-tree" ref="selectTree" v-model="selectVideoHc[2].label" >
  69. <el-option v-for="item in formatData(list)" :key="item.value" :label="item.label" :value="item.label" class="select1" />
  70. <el-tree class="main-select-el-tree" ref="selecteltree"
  71. :data="list"
  72. node-key="id"
  73. highlight-current
  74. :props="defaultProps"
  75. @node-click="handleNodeClick($event,3)"
  76. :expand-on-click-node="expandOnClickNode"
  77. />
  78. </el-select>
  79. </el-form-item>
  80. <el-form-item label="画面四:">
  81. <el-select class="main-select-tree" ref="selectTree" v-model="selectVideoHc[3].label" >
  82. <el-option v-for="item in formatData(list)" :key="item.value" :label="item.label" :value="item.label" class="select1" />
  83. <el-tree class="main-select-el-tree" ref="selecteltree"
  84. :data="list"
  85. node-key="id"
  86. highlight-current
  87. :props="defaultProps"
  88. @node-click="handleNodeClick($event,4)"
  89. :expand-on-click-node="expandOnClickNode"
  90. />
  91. </el-select>
  92. </el-form-item>
  93. <el-form-item label="画面五:">
  94. <el-select class="main-select-tree" ref="selectTree" v-model="selectVideoHc[4].label" >
  95. <el-option v-for="item in formatData(list)" :key="item.value" :label="item.label" :value="item.label" class="select1" />
  96. <el-tree class="main-select-el-tree" ref="selecteltree"
  97. :data="list"
  98. node-key="id"
  99. highlight-current
  100. :props="defaultProps"
  101. @node-click="handleNodeClick($event,5)"
  102. :expand-on-click-node="expandOnClickNode"
  103. />
  104. </el-select>
  105. </el-form-item>
  106. <el-form-item label="画面六:">
  107. <el-select class="main-select-tree" ref="selectTree" v-model="selectVideoHc[5].label" >
  108. <el-option v-for="item in formatData(list)" :key="item.value" :label="item.label" :value="item.label" class="select1" />
  109. <el-tree class="main-select-el-tree" ref="selecteltree"
  110. :data="list"
  111. node-key="id"
  112. highlight-current
  113. :props="defaultProps"
  114. @node-click="handleNodeClick($event,6)"
  115. :expand-on-click-node="expandOnClickNode"
  116. />
  117. </el-select>
  118. </el-form-item>
  119. <el-form-item style="margin-left:-2rem">
  120. <el-button @click="cancel">取消</el-button>
  121. <el-button type="primary" @click="submit"
  122. >保存</el-button
  123. >
  124. </el-form-item>
  125. </el-form>
  126. </div>
  127. <div class="panel-footer"></div>
  128. </div>
  129. </div>
  130. </transition>
  131. <iframe
  132. id="otherPage"
  133. align="middle"
  134. :src="iframe_Url"
  135. :style="'width:' + width + ';'"
  136. ></iframe>
  137. </div>
  138. </template>
  139. <script>
  140. import Hls from "hls.js";
  141. import { getLocalDeviceList, getLocalUnitNodes, getLocalChannel } from "@/api/device/camera";
  142. import api from "@/api/monitor";
  143. import { Message } from 'element-ui'
  144. export default {
  145. name: "monitor",
  146. props: {
  147. width: String,
  148. required: true,
  149. },
  150. data() {
  151. return {
  152. configKey: undefined,
  153. configName: undefined,
  154. configId:undefined,
  155. video:false,
  156. selectVideo:[
  157. {
  158. name:undefined,
  159. id:undefined,
  160. url:undefined,
  161. label:undefined
  162. },
  163. {
  164. name:undefined,
  165. id:undefined,
  166. url:undefined,
  167. label:undefined
  168. },
  169. {
  170. name:undefined,
  171. id:undefined,
  172. url:undefined,
  173. label:undefined
  174. },
  175. {
  176. name:undefined,
  177. id:undefined,
  178. url:undefined,
  179. label:undefined
  180. },
  181. {
  182. name:undefined,
  183. id:undefined,
  184. url:undefined,
  185. label:undefined
  186. },
  187. {
  188. name:undefined,
  189. id:undefined,
  190. url:undefined,
  191. label:undefined
  192. },
  193. ],
  194. selectVideoHc:[
  195. {
  196. name:undefined,
  197. id:undefined,
  198. url:undefined,
  199. label:undefined
  200. },
  201. {
  202. name:undefined,
  203. id:undefined,
  204. url:undefined,
  205. label:undefined
  206. },
  207. {
  208. name:undefined,
  209. id:undefined,
  210. url:undefined,
  211. label:undefined
  212. },
  213. {
  214. name:undefined,
  215. id:undefined,
  216. url:undefined,
  217. label:undefined
  218. },
  219. {
  220. name:undefined,
  221. id:undefined,
  222. url:undefined,
  223. label:undefined
  224. },
  225. {
  226. name:undefined,
  227. id:undefined,
  228. url:undefined,
  229. label:undefined
  230. },
  231. ],
  232. expandOnClickNode: true,
  233. options:[],
  234. list:[],
  235. defaultProps: {
  236. children: 'children',
  237. label: 'label'
  238. },
  239. showModal_tow: false,
  240. showModal: false,
  241. hls: "",
  242. form: {
  243. name: "",
  244. region: "",
  245. region2: "",
  246. region3: "",
  247. region4: "",
  248. region5: "",
  249. region6: "",
  250. date1: "",
  251. date2: "",
  252. delivery: false,
  253. type: [],
  254. resource: "",
  255. desc: "",
  256. },
  257. hls_video: [],
  258. iframe_Url: "",
  259. tableData:[]
  260. };
  261. },
  262. created(){
  263. this.getVideoUrl()
  264. this.getList()
  265. },
  266. mounted() {
  267. let _this = this;
  268. _this.iframe_Url = window.PLATFROM_IFRAME.iframeUrl;
  269. // _this.getLocalChannel();
  270. window.addEventListener(
  271. "message",
  272. function (event) {
  273. var isDOM = typeof event.data === "object";
  274. // // 监听父窗口发送过来的数据向服务器发送post请求
  275. var data = event.data;
  276. if (isDOM == true) {
  277. if ("param" in data == true) {
  278. if (data.param.name === "17楼监控2") {
  279. _this.opeanfullwin(data.param.id);
  280. }
  281. } else {
  282. }
  283. }
  284. },
  285. false
  286. );
  287. },
  288. methods: {
  289. //获取视频配置数据
  290. getList(){
  291. getLocalDeviceList().then(Response =>{
  292. if(Response.data.pageList){
  293. let arr = []
  294. for(let a = 0; a<Response.data.pageList.length; a++){
  295. arr[a] = {}
  296. arr[a].label = Response.data.pageList[a].name
  297. arr[a].id = Response.data.pageList[a].id
  298. arr[a].children = []
  299. getLocalUnitNodes({deviceId:Response.data.pageList[a].id}).then(Response =>{
  300. for(let b = 0; b<Response.data.pageList.length; b++){
  301. arr[a].children[b] = {}
  302. arr[a].children[b].label = Response.data.pageList[b].deviceName
  303. arr[a].children[b].id = Response.data.pageList[b].id + 1000001 + b
  304. arr[a].children[b].children = []
  305. getLocalChannel({unitNdesUuid:Response.data.pageList[b].unitUuid,unitType:1}).then(Response =>{
  306. let data = Response.data.pageList
  307. for(let c = 0; c<data.length; c++){
  308. arr[a].children[b].children[c] = {}
  309. arr[a].children[b].children[c].id = data[c].id
  310. arr[a].children[b].children[c].name = arr[a].label + "/" + arr[a].children[b].label + "/" + data[c].name
  311. arr[a].children[b].children[c].label = data[c].name
  312. arr[a].children[b].children[c].url = "http://" + data[c].nvr_ip + ":" + data[c].hls_port + "/live/cameraid/" + arr[a].id + "%24" + data[c].id.split("$")[(data[c].id.split("$")).length-1] + "/substream/1.m3u8"
  313. }
  314. })
  315. }
  316. })
  317. }
  318. this.list = arr
  319. }
  320. })
  321. },
  322. //增加视频参数
  323. addVideoUrl(){
  324. var video = {}
  325. video.video = this.selectVideo
  326. api.addVideoUrl(
  327. {
  328. configKey: "video.top.device",
  329. configName: "video",
  330. configValue: JSON.stringify(video)
  331. }
  332. ).then(Response =>{
  333. if(Response.status == "SUCCESS"){
  334. Message({
  335. message: "摄像头配置添加成功",
  336. type: 'success'
  337. })
  338. }
  339. })
  340. },
  341. //获取视频参数
  342. getVideoUrl(){
  343. api.getVideoUrl("video.top.device").then(Response =>{
  344. if(Response.status == "SUCCESS"){
  345. this.selectVideo = this.deepClone(JSON.parse(Response.data.configValue).video)
  346. this.selectVideoHc = this.deepClone(JSON.parse(Response.data.configValue).video)
  347. for(let i =0;i<this.selectVideo.length;i++){
  348. this.hls_video.push({
  349. ref: "hlsVideo" + (i),
  350. name: (this.selectVideo[i].name).split("/")[2],
  351. hls: "hlsVideo" + (i),
  352. url:this.selectVideo[i].url,
  353. boolhls: true,
  354. boolimg: false,
  355. });
  356. this.loadVideoFn(this.hls_video[i].url, this.hls_video[i].ref, i)
  357. }
  358. }
  359. })
  360. },
  361. //修改数据
  362. updateVideoUrl(){
  363. var video = {}
  364. video.video = this.selectVideoHc
  365. api.updateVideoUrl(
  366. {
  367. configId:11,
  368. configKey: "video.top.device",
  369. configName: "video",
  370. configValue: JSON.stringify(video)
  371. }
  372. ).then(Response =>{
  373. if(Response.status == "SUCCESS"){
  374. Message({
  375. message: "摄像头配置修改成功",
  376. type: 'success'
  377. })
  378. }
  379. })
  380. },
  381. //下拉数据
  382. formatData(data){
  383. let options = [];
  384. data.forEach((item,key) => {
  385. options.push({label:item.label,value:item.id});
  386. if(item.children){
  387. item.children.forEach((items,keys) => {
  388. options.push({label:items.label,value:items.id});
  389. if(items.children){
  390. items.children.forEach((itemss,keyss) => {
  391. options.push({label:itemss.label,value:itemss.id});
  392. if(itemss.children){
  393. itemss.children.forEach((itemsss,keysss) => {
  394. options.push({label:itemsss.label,value:itemsss.id});
  395. });
  396. }
  397. });
  398. }
  399. });
  400. }
  401. });
  402. return options;
  403. },
  404. //下拉点击
  405. handleNodeClick(data,type) {
  406. if(data.name){
  407. var x = document.getElementsByClassName("el-select-dropdown");
  408. var i;
  409. for (i = 0; i < x.length; i++) {
  410. x[i].style.display = "none"
  411. }
  412. this.selectVideoHc[type-1].id = data.id
  413. this.selectVideoHc[type-1].name = data.name
  414. this.selectVideoHc[type-1].url = data.url
  415. this.selectVideoHc[type-1].label = data.label
  416. }
  417. },
  418. //下拉取消
  419. cancel(){
  420. this.selectVideoHc = []
  421. this.showModal = false
  422. },
  423. deepClone(obj){ //可传入对象 或 数组
  424. // 判断是否为 null 或 undefined 直接返回该值即可,
  425. if(obj === null || !obj)return obj;
  426. // 判断 是要深拷贝 对象 还是 数组
  427. if(Object.prototype.toString.call(obj)==="[object Object]"){ //对象字符串化的值会为 "[object Object]"
  428. let target = {}; //生成新的一个对象
  429. const keys = Object.keys(obj); //取出对象所有的key属性 返回数组 keys = [ ]
  430. //遍历复制值, 可用 for 循环代替性能较好
  431. keys.forEach(key=>{
  432. if(obj[key]&&typeof obj[key] === "object")
  433. //如果遇到的值又是 引用类型的 [ ] {} ,得继续深拷贝
  434. target[key] = this.deepClone(obj[key]);//递归
  435. else
  436. target[key] = obj[key];
  437. })
  438. return target //返回新的对象
  439. }else if(Array.isArray(obj)){
  440. // 数组同理
  441. let arr = [];
  442. obj.forEach((item,index)=>{
  443. if(item&&typeof item === "object")
  444. arr[index] = this.deepClone(item);
  445. else
  446. arr[index] = item;
  447. })
  448. return arr
  449. }
  450. },
  451. //
  452. open(){
  453. this.selectVideoHc = this.deepClone(this.selectVideo)
  454. this.showModal = true
  455. },
  456. //下拉保存
  457. submit(){
  458. this.updateVideoUrl()
  459. setTimeout(()=>{
  460. this.$emit('monitorChange')
  461. },1000)
  462. this.showModal = false
  463. },
  464. //画面配置事件处理
  465. video_hmpz(video, i) {
  466. var _this = this;
  467. var ref_video = this.hls_video[i].ref;
  468. var hls_video = this.hls_video[i].hls;
  469. if ((ref_video, this.$refs[ref_video][0] != undefined)) {
  470. this.$refs[ref_video][0].pause();
  471. hls_video.destroy();
  472. hls_video = null;
  473. }
  474. _this.loadVideoFn(video, _this.hls_video[i].ref, i);
  475. },
  476. abnormal() {},
  477. hlsVideo(name) {
  478. var myframe = document.getElementById("otherPage"); //获取iframe
  479. myframe.contentWindow.postMessage({ name: name }, "*"); //childDomain是子页面的源(协议+主机+端口号)
  480. },
  481. loadVideoFn: function (url, ref, i) { //播放器
  482. var that = this;
  483. var ref = ref
  484. setTimeout(() =>{
  485. if (Hls.isSupported()) {
  486. that.hls_video[i].hls = new Hls();
  487. that.hls_video[i].hls.loadSource(url);
  488. that.hls_video[i].hls.attachMedia(that.$refs[ref][0]);
  489. that.hls_video[i].hls.on(Hls.Events.MANIFEST_PARSED, () => {
  490. that.hls_video[i].boolhls = true;
  491. that.hls_video[i].boolimg = false;
  492. that.$refs["hlsVideo" + i][0].play();
  493. });
  494. that.hls_video[i].hls.on(Hls.Events.ERROR, (event, data) => {
  495. if (data.type === "networkError") {
  496. // 监听出错事件
  497. console.log("加载失败");
  498. // that.hls_video[i].boolhls = false;
  499. // that.hls_video[i].boolimg = true;
  500. }
  501. });
  502. }
  503. },1000)
  504. },
  505. //销毁hls 视频流
  506. destroyHls() {
  507. if(this.hls_video){
  508. for (let i = 0; i < this.hls_video.length; i++) {
  509. var ref_video = this.hls_video[i].ref;
  510. var hls_video = this.hls_video[i].hls;
  511. if ((ref_video, this.$refs[ref_video][0] != undefined)) {
  512. this.$refs[ref_video][0].pause();
  513. hls_video.destroy();
  514. hls_video = null;
  515. }
  516. }
  517. }
  518. },
  519. onSubmit() {
  520. },
  521. },
  522. // created: function () {
  523. // let _this = this;
  524. // _this.$once("hook:beforeDestroy", () => {
  525. // _this.destroyHls();
  526. // });
  527. // },
  528. };
  529. </script>
  530. <style lang="scss" scoped>
  531. .el-input__inner{
  532. width:130% !important;
  533. margin-left:-20%;
  534. }
  535. .el-select__caret{
  536. margin-right:-20px
  537. }
  538. // .opean{
  539. // position: absolute;
  540. // width: 100px;
  541. // height:100px;
  542. // background-color: red;
  543. // z-index: 100;
  544. // margin: 0 auto;
  545. // }
  546. .scene {
  547. position: fixed;
  548. z-index: 2000;
  549. top: 0;
  550. width: 100%;
  551. height: 100%;
  552. -webkit-perspective: 600;
  553. perspective: 600;
  554. display: flex;
  555. align-items: center;
  556. justify-content: center;
  557. }
  558. .scene svg {
  559. width: 240px;
  560. height: 240px;
  561. }
  562. .dc-logo {
  563. position: fixed;
  564. right: 10px;
  565. bottom: 10px;
  566. }
  567. .dc-logo:hover svg {
  568. -webkit-transform-origin: 50% 50%;
  569. transform-origin: 50% 50%;
  570. -webkit-animation: arrow-spin 2.5s 0s cubic-bezier(0.165, 0.84, 0.44, 1)
  571. infinite;
  572. animation: arrow-spin 2.5s 0s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;
  573. }
  574. .dc-logo:hover:hover:before {
  575. padding: 6px;
  576. font: 10px/1 Monaco, sans-serif;
  577. font-size: 10px;
  578. color: #00fffe;
  579. text-transform: uppercase;
  580. position: absolute;
  581. left: -70px;
  582. top: -30px;
  583. white-space: nowrap;
  584. z-index: 20px;
  585. box-shadow: 0px 0px 4px #222;
  586. background: rgba(0, 0, 0, 0.4);
  587. }
  588. .dc-logo:hover:hover:after {
  589. content: "Digital Craft";
  590. padding: 6px;
  591. font: 10px/1 Monaco, sans-serif;
  592. font-size: 10px;
  593. color: #6e6f71;
  594. text-transform: uppercase;
  595. position: absolute;
  596. right: 0;
  597. top: -30px;
  598. white-space: nowrap;
  599. z-index: 20px;
  600. box-shadow: 0px 0px 4px #222;
  601. background: rgba(0, 0, 0, 0.4);
  602. background-image: none;
  603. }
  604. @-webkit-keyframes arrow-spin {
  605. 50% {
  606. -webkit-transform: rotateY(360deg);
  607. transform: rotateY(360deg);
  608. }
  609. }
  610. @keyframes arrow-spin {
  611. 50% {
  612. -webkit-transform: rotateY(360deg);
  613. transform: rotateY(360deg);
  614. }
  615. }
  616. .monitor-setting1 {
  617. width: 35%;
  618. height: 45rem;
  619. position: fixed;
  620. left: 0;
  621. right: 0;
  622. top: 20rem;
  623. z-index: 15;
  624. margin: 0 auto;
  625. }
  626. .height_clone {
  627. height: 45rem;
  628. }
  629. .hlsVideo {
  630. width: 18.5rem;
  631. // width: 100%;
  632. border: none;
  633. margin: 0 auto;
  634. margin-left: 5%;
  635. }
  636. // .monitor-height {
  637. // height: 150px;
  638. // }
  639. //视频监控
  640. .panel.monitor {
  641. margin-top: 2rem;
  642. z-index: 3;
  643. .panel-tit {
  644. position: relative;
  645. }
  646. }
  647. .monitor-list {
  648. padding: 1.2rem;
  649. height: calc(100vh - 51rem);
  650. overflow-y: scroll;
  651. }
  652. .monitor-list li {
  653. width: 50%;
  654. position: relative;
  655. display: block;
  656. float: left;
  657. }
  658. .monitor-list li img {
  659. width: 100%;
  660. display: block;
  661. }
  662. .monitor-tit {
  663. position: absolute;
  664. bottom: 0;
  665. width: 100%;
  666. left: 0;
  667. font-size: 1.2rem;
  668. line-height: 3rem;
  669. text-indent: 1rem;
  670. // display:none;
  671. background: rgba(0, 0, 0, 0.7);
  672. }
  673. .setting,
  674. .close {
  675. position: absolute;
  676. width: 2rem;
  677. right: 1.5rem;
  678. top: 1.3rem;
  679. cursor: pointer;
  680. z-index: 1;
  681. }
  682. .close {
  683. width: 1.7rem;
  684. cursor: pointer;
  685. }
  686. .monitor-setting {
  687. position: absolute;
  688. left: 105%;
  689. width: 100%;
  690. top: 0;
  691. margin: 0 auto;
  692. text-align: center;
  693. .monitor-option {
  694. position: relative;
  695. padding: 2rem 1rem 1rem 2rem;
  696. }
  697. }
  698. ::-webkit-scrollbar {
  699. display: none
  700. }
  701. </style>
  702. <style lang="scss">
  703. .monitor-setting .el-form-item__label {
  704. font-size: 1.6rem;
  705. color: #fff;
  706. line-height: 3.4rem;
  707. text-align: left;
  708. }
  709. .monitor-setting .el-form-item__content {
  710. line-height: 3.4rem;
  711. }
  712. .monitor-setting .el-form-item {
  713. margin-bottom: 1.6rem;
  714. }
  715. .monitor-setting .el-input__inner {
  716. height: 3.4rem;
  717. line-height: 3.4rem;
  718. border-radius: 0;
  719. font-size: 1.4rem;
  720. background-color: rgba(0, 0, 0, 0);
  721. border: 1px solid #3486da;
  722. }
  723. .monitor-setting .el-input__icon {
  724. line-height: 2.4rem;
  725. }
  726. .monitor-setting .el-button {
  727. border-radius: 0;
  728. font-size: 1.6rem;
  729. padding: 1rem 2.3rem;
  730. margin-top: 3rem;
  731. }
  732. .monitor-setting .el-select .el-input .el-select__caret {
  733. color: #3486da;
  734. font-size: 1.6rem;
  735. }
  736. .monitor-setting .el-select:hover .el-input__inner {
  737. border: 1px solid #3486da;
  738. opacity: 0.7;
  739. }
  740. .main-select-el-tree .el-tree-node .is-current > .el-tree-node__content{font-weight: bold; color: #409eff;}
  741. .main-select-el-tree .el-tree-node.is-current > .el-tree-node__content{font-weight: bold; color: #409eff;}
  742. .select1{
  743. display:none;
  744. }
  745. </style>