TVWalls.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754
  1. <template>
  2. <div>
  3. <el-dialog :title="title" :visible.sync="TVWallVisible" v-if="TVWallVisible" customClass="TVWallCustomWidth"
  4. @close="cancelEventLocationShow()">
  5. <!--<div @click="findCameraByEventCoordinate()">视频联动</div>-->
  6. <!--<div class="forthis" style="width: 22%; position: absolute;left: 0;z-index: 9999999999999;">-->
  7. <!--<div class="i-list-con" style="height: 46vh; overflow-y: scroll;">-->
  8. <!--<span v-for="(item,index) in cameraList" :key="index">-->
  9. <!--<div class="d-l-con" @click="playhk(item.channelCode)">-->
  10. <!--<div class="d-l-l-text">-->
  11. <!--<i class="i-small"></i>-->
  12. <!--<h4>{{ item.cameraName }}</h4>-->
  13. <!--</div>-->
  14. <!--</div>-->
  15. <!--</span>-->
  16. <!--</div>-->
  17. <!--</div>-->
  18. <!--<div style="width:70%;height:400px;position:absolute;">-->
  19. <!--&lt;!&ndash;视频窗口展示-&#45;&#45;大华&ndash;&gt;-->
  20. <!--<div id="dom1" class="dom1"></div>-->
  21. <!--&lt;!&ndash;视频窗口展示-&#45;&#45;海康&ndash;&gt;-->
  22. <!--<div id="playWnd" class="playWnd" style="left: 0px; top: 0px;"></div>-->
  23. <!--</div>-->
  24. <div style="display: flex;" >
  25. <div id="dom1" class="dom1"></div>
  26. <div class="leader-info-container" v-if="userDataShow">
  27. <div class="leader-info-list-con" v-for="user in userData">
  28. <h4 style="">{{user.position}}:{{user.name}}</h4>
  29. <h4>电话:{{user.phone}}</h4>
  30. </div>
  31. </div>
  32. </div>
  33. </el-dialog>
  34. </div>
  35. </template>
  36. <script>
  37. /** ----------------------------------摄像头预览开始------------------------------------- */
  38. import {getDahuaVideoServer, getTVWallList} from '@/api/dahua/dahua'
  39. import {tvCameraList} from '@/api/haikang/haikang'
  40. import {findCameraByEventCoordinate, rotation} from '@/api/monitor'
  41. import DHWs from '@/dahua/lib/DHWs'
  42. import Cookies from "js-cookie"
  43. /** ----------------------------------摄像头预览结束------------------------------------- */
  44. export default {
  45. dicts: ['event_source'],
  46. components: {},
  47. data() {
  48. return {
  49. title:['365','369','371','373','372','370'].includes(Cookies.get("deptId"))?"电视墙":"电视墙\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000您的所有操作痕迹已被后台记录,请谨慎操作。",
  50. tvListJson: [],
  51. TVWallVisible: false,
  52. activeName: 'tv',
  53. channelId: ['ZgVzqsjwA1DTF561VHG69F'],
  54. /** ----------------------------------摄像头预览开始------------------------------------- */
  55. showModal: true,
  56. activePanel: 'key1',
  57. isLogin: false,
  58. loginType: '1',
  59. token: '',
  60. ctrlType: 'playerWin',
  61. https: 1,
  62. httpsList: [
  63. {
  64. value: 0,
  65. label: 0
  66. },
  67. {
  68. value: 1,
  69. label: 1
  70. }
  71. ],
  72. ctrlTypeList: [{
  73. value: 'playerWin',
  74. label: '播放控件'
  75. }, {
  76. value: 'realMonitorUI',
  77. label: '带设备树实时预览控件'
  78. }, {
  79. value: 'playbackUI',
  80. label: '带设备树视频回放控件'
  81. }, {
  82. value: 'TVWallUI',
  83. label: '视频上墙'
  84. }],
  85. ctrlList: [
  86. {
  87. value: 'ctrl1',
  88. label: '控件1'
  89. },
  90. {
  91. value: 'ctrl2',
  92. label: '控件2'
  93. },
  94. {
  95. value: 'ctrl3',
  96. label: '控件3'
  97. }
  98. ],
  99. splitList: [
  100. {
  101. value: 1,
  102. label: '1 * 1'
  103. },
  104. {
  105. value: 4,
  106. label: '2 * 2'
  107. },
  108. {
  109. value: 9,
  110. label: '3 * 3'
  111. }
  112. ],
  113. displayModeList: [
  114. {
  115. value: 1,
  116. label: '播放器预览模式'
  117. },
  118. {
  119. value: 2,
  120. label: '播放器回放模式'
  121. }
  122. ],
  123. mixedVideoDisplayModeList: [
  124. {
  125. value: 1,
  126. label: '播放实时视频'
  127. },
  128. {
  129. value: 2,
  130. label: '播放回放视频'
  131. }
  132. ],
  133. ctrl: 'ctrl1',
  134. splitNum: 1,
  135. displayMode: 1,
  136. displayTimeRange: [],
  137. modalDisplayTimeRange: [],
  138. mixedVideoTime: null,
  139. recordPath: 'C:\\DSS LightWeight\\DSS LightWeight Client\\Record\\',
  140. downloadName: '',
  141. downTimeRange: [],
  142. downloadFormat: 0,
  143. downloadFormatList: [{
  144. value: 0,
  145. label: 'dav'
  146. },
  147. {
  148. value: 1,
  149. label: 'avi'
  150. }, {
  151. value: 2,
  152. label: 'mp4'
  153. }],
  154. downloadSource: 3,
  155. downloadSourceList: [
  156. {
  157. value: 3,
  158. label: '中心录像'
  159. }, {
  160. value: 2,
  161. label: '设备录像'
  162. }],
  163. showDownloadStreamType: false,
  164. downloadStreamType: 1,
  165. downloadStreamTypeList: [{
  166. value: 1,
  167. label: '主码流'
  168. },
  169. {
  170. value: 2,
  171. label: '辅码流'
  172. },
  173. {
  174. value: 3,
  175. label: '三码流'
  176. }],
  177. downloadIsShow: true,
  178. downloadIsShowList: [{
  179. value: true,
  180. label: '是'
  181. },
  182. {
  183. value: false,
  184. label: '否'
  185. }],
  186. crtPosX: 0,
  187. crtPosY: 0,
  188. crtWidth: 1148,
  189. crtHeight: 650,
  190. domId: 'dom1',
  191. mixedVideoDisplayMode: 2,
  192. isShowTipe: true,
  193. autoList: [],
  194. stringList: [],
  195. data: null,
  196. /** ----------------------------------摄像头预览结束------------------------------------- */
  197. cameraList: [],
  198. initCount: 0,
  199. pubKey: '',
  200. oWebControl: null,
  201. userData:[],
  202. userDataShow:false,
  203. }
  204. },
  205. created() {
  206. const DHWsInstance = DHWs.getInstance()
  207. this.ws = DHWsInstance
  208. },
  209. methods: {
  210. cancelEventLocationShow() {
  211. this.userData = []
  212. // this.activeName = 'tv'
  213. this.TVWallVisible = false
  214. this.destroy()
  215. if (this.oWebControl != null) {
  216. this.oWebControl.JS_HideWnd() // 先让窗口隐藏,规避可能的插件窗口滞后于浏览器消失问题
  217. this.oWebControl.JS_Disconnect().then(function () { // 断开与插件服务连接成功
  218. },
  219. function () { // 断开与插件服务连接失败
  220. })
  221. }
  222. },
  223. showTVWall(data, val, item) {
  224. if(item != null){
  225. this.userData = item;
  226. this.userDataShow = true;
  227. }
  228. this.tvListJson = data
  229. this.data = val
  230. this.autoList = []
  231. this.stringList = []
  232. let length = data[0].treeLabels.length > 4 ? 5 : data[0].treeLabels.length
  233. for (let i = 1; i < length; i++) {
  234. this.autoList.push({"channelId": data[0].treeLabels[i].labelCode})
  235. this.stringList.push(data[0].treeLabels[i].labelCode)
  236. }
  237. console.log("this.autoList",this.autoList);
  238. console.log("this.stringList",this.stringList);
  239. // let that=this;
  240. /** ----------------------------------大华摄像头预览开始------------------------------------- */
  241. this.ws.addEventListener('connectStateChange', data => {
  242. if (data) {
  243. console.log('连接成功')
  244. } else {
  245. console.log('连接失败,下载客户端')
  246. this.alertReinstall()
  247. }
  248. })
  249. this.preview()
  250. /** ----------------------------------大华摄像头预览结束------------------------------------- */
  251. /** ----------------------------------海康摄像头预览开始------------------------------------- */
  252. // tvCameraList().then(response => {
  253. // this.cameraList=response.data
  254. // })
  255. // that.initPlugin()
  256. // setTimeout(function() {
  257. // that.playhk();
  258. // }, 5000)
  259. // /** ----------------------------------海康摄像头预览结束------------------------------------- */
  260. this.TVWallVisible = true
  261. },
  262. /** ----------------------------------大华摄像头预览开始------------------------------------- */
  263. alertLogin: function () {
  264. this.$modal.msg('登录中....')
  265. },
  266. alertLoginSuccess: function () {
  267. this.$modal.msgSuccess('登录成功!')
  268. },
  269. alertLoginFailed: function () {
  270. this.$modal.msgError('登陆失败!')
  271. },
  272. alertReinstall: function () {
  273. this.$modal.msgWarning('请重新安装客户端')
  274. },
  275. /** 预览按钮操作 */
  276. preview() {
  277. getDahuaVideoServer().then(newResponse => {
  278. this.ws.detectConnectQt().then(res => {
  279. if (res) { // 连接客户端成功
  280. this.alertLogin()
  281. this.ws.login({
  282. loginIp: newResponse.loginIp,
  283. loginPort: newResponse.loginPort,
  284. userName: newResponse.userName,
  285. userPwd: newResponse.userPwd,
  286. // loginIp: '192.168.100.100',
  287. // loginPort: 8314,
  288. // userName: 'system',
  289. // userPwd: 'Admin@123',
  290. token: '',
  291. https: 1
  292. })
  293. this.ws.on('loginState', (res) => {
  294. this.isLogin = res
  295. console.log('---res-----', res)
  296. if (res) {
  297. this.alertLoginSuccess()
  298. this.activePanel = 'key2'
  299. this.create(this.tvListJson)
  300. } else {
  301. this.alertLoginFailed()
  302. }
  303. })
  304. } else { // 连接客户端失败
  305. this.alertReinstall()
  306. }
  307. })
  308. })
  309. },
  310. playRealMonitorVideo() { // 自定义设备树自动播放指定通道编码视频
  311. const config = this.ws.config
  312. const {loginIp, userCode} = config
  313. this.ws.postMessage('playRealMonitorVideo', {
  314. loginIp,
  315. userCode,
  316. params: {
  317. ctrlCode: "ctrl1",
  318. array: this.autoList
  319. }
  320. })
  321. },
  322. realTimeVideoDialog(cameraParams) {
  323. // 调用弹窗实时播放接口
  324. if (!this.isLogin) {
  325. this.$Message.info("正在登陆客户端,请稍等......");
  326. return false;
  327. }
  328. this.ws.openVideo(cameraParams);
  329. },
  330. create(tvListJson) { // 调用创建控件接口
  331. let _this = this
  332. const params = [
  333. {
  334. 'ctrlType': 'realMonitorUI',
  335. 'ctrlCode': 'ctrl1',
  336. 'ctrlProperty': {
  337. 'displayMode': 1,
  338. 'splitNum': (this.autoList.length == 1 ? 1 : 4),
  339. 'channelList': [
  340. {
  341. 'channelId': ''
  342. }
  343. ]
  344. },
  345. 'visible': true,
  346. 'domId': 'dom1'
  347. }
  348. ]
  349. this.setPos()
  350. this.customizeTree(tvListJson);
  351. // if(_this.stringList.length == 1){
  352. // _this.realTimeVideoDialog([_this.stringList[0]]);
  353. // }else{
  354. _this.ws.createCtrl(params);
  355. _this.playRealMonitorVideo();
  356. // }
  357. if (_this.data != undefined && _this.data != null) {
  358. setTimeout( _this.rotation(_this.data.longitude, _this.data.latitude, _this.stringList),5000)
  359. }
  360. },
  361. rotation(lng,lat,list){
  362. rotation(lng,lat,list);
  363. },
  364. setPos() {
  365. let target = document.getElementById(this.domId)
  366. console.log(target, 'target')
  367. target.style.right = `${this.crtPosX}px`
  368. target.style.top = `${this.crtPosY}px`
  369. target.style.width = `${this.crtWidth}px`
  370. target.style.height = `${this.crtHeight}px`
  371. if (document.createEvent) {
  372. var event = document.createEvent('HTMLEvents')
  373. event.initEvent('resize', true, true)
  374. window.dispatchEvent(event)
  375. } else if (document.createEventObject) {
  376. window.fireEvent('onresize')
  377. }
  378. },
  379. destroy() { // 调用销毁控件接口
  380. if (!this.isLogin) {
  381. this.$modal.msgWarning('正在登陆客户端,请稍等......')
  382. return false
  383. }
  384. const ctrls = this.ws.ctrls.map(i => {
  385. if (i.ctrlCode === this.ctrl) {
  386. return i.ctrlCode
  387. }
  388. })
  389. this.ws.destroyCtrl(ctrls)
  390. },
  391. customizeTree(tvListJson) { // 调用控件接口树
  392. const config = this.ws.config
  393. const {loginIp, userCode} = config
  394. this.ws.postMessage('customizeTree', {
  395. loginIp,
  396. userCode,
  397. params: {
  398. array: tvListJson
  399. }
  400. })
  401. },
  402. /** ----------------------------------大华摄像头预览结束------------------------------------- */
  403. /** ----------------------------------海康摄像头预览开始------------------------------------- */
  404. // 创建播放实例
  405. initPlugin() {
  406. let that = this
  407. that.oWebControl = new WebControl({
  408. szPluginContainer: 'playWnd', // 指定容器id
  409. iServicePortStart: 15900, // 指定起止端口号,建议使用该值
  410. iServicePortEnd: 15909,
  411. szClassId: '23BF3B0A-2C56-4D97-9C03-0CB103AA8F11', // 用于IE10使用ActiveX的clsid
  412. cbConnectSuccess: function () { // 创建WebControl实例成功
  413. that.oWebControl.JS_StartService('window', { // WebControl实例创建成功后需要启动服务
  414. dllPath: './VideoPluginConnect.dll' // 值"./VideoPluginConnect.dll"写死
  415. }).then(function () { // 启动插件服务成功
  416. that.oWebControl.JS_SetWindowControlCallback({ // 设置消息回调
  417. cbIntegrationCallBack: cbIntegrationCallBack
  418. })
  419. that.oWebControl.JS_CreateWnd('playWnd', 850, 615).then(function () { //JS_CreateWnd创建视频播放窗口,宽高可设定
  420. that.init() // 创建播放实例成功后初始化
  421. })
  422. }, function () { // 启动插件服务失败
  423. })
  424. },
  425. cbConnectError: function () { // 创建WebControl实例失败
  426. that.oWebControl = null
  427. $('#playWnd').html('插件未启动,正在尝试启动,请稍候...<a href="./hk/VideoWebPlugin.exe">点击下载插件</a>')
  428. WebControl.JS_WakeUp('VideoWebPlugin://') // 程序未启动时执行error函数,采用wakeup来启动程序
  429. initCount++
  430. if (initCount < 3) {
  431. setTimeout(function () {
  432. that.initPlugin()
  433. }, 3000)
  434. } else {
  435. $('#playWnd').html('插件启动失败,请检查插件是否安装!<a href="./hk/VideoWebPlugin.exe">点击下载插件</a>')
  436. }
  437. },
  438. cbConnectClose: function (bNormalClose) {
  439. // 异常断开:bNormalClose = false
  440. // JS_Disconnect正常断开:bNormalClose = true
  441. console.log('cbConnectClose')
  442. that.oWebControl = null
  443. }
  444. })
  445. },
  446. //初始化
  447. init() {
  448. let that = this
  449. this.getPubKey(function () {
  450. ////////////////////////////////// 请自行修改以下变量值 ////////////////////////////////////
  451. var appkey = '24699060' //综合安防管理平台提供的appkey,必填
  452. var secret = that.setEncrypt('tt1pMbsrlwGZUWucdAPw') //综合安防管理平台提供的secret,必填
  453. var ip = '36.49.108.22' //综合安防管理平台IP地址,必填
  454. var playMode = 0 //初始播放模式:0-预览,1-回放
  455. var port = 1443 //综合安防管理平台端口,若启用HTTPS协议,默认443
  456. var snapDir = 'D:\\SnapDir' //抓图存储路径
  457. var videoDir = 'D:\\VideoDir' //紧急录像或录像剪辑存储路径
  458. var layout = '3x3' //playMode指定模式的布局
  459. var enableHTTPS = 1 //是否启用HTTPS协议与综合安防管理平台交互,这里总是填1
  460. var encryptedFields = 'secret' //加密字段,默认加密领域为secret
  461. var showToolbar = 1 //是否显示工具栏,0-不显示,非0-显示
  462. var showSmart = 1 //是否显示智能信息(如配置移动侦测后画面上的线框),0-不显示,非0-显示
  463. var buttonIDs = '0,16,256,257,258,259,260,512,513,514,515,516,517,768,769' //自定义工具条按钮
  464. ////////////////////////////////// 请自行修改以上变量值 ////////////////////////////////////
  465. that.oWebControl.JS_RequestInterface({
  466. funcName: 'init',
  467. argument: JSON.stringify({
  468. appkey: appkey, //API网关提供的appkey
  469. secret: secret, //API网关提供的secret
  470. ip: ip, //API网关IP地址
  471. playMode: playMode, //播放模式(决定显示预览还是回放界面)
  472. port: port, //端口
  473. snapDir: snapDir, //抓图存储路径
  474. videoDir: videoDir, //紧急录像或录像剪辑存储路径
  475. layout: layout, //布局
  476. enableHTTPS: enableHTTPS, //是否启用HTTPS协议
  477. encryptedFields: encryptedFields, //加密字段
  478. showToolbar: showToolbar, //是否显示工具栏
  479. showSmart: showSmart, //是否显示智能信息
  480. buttonIDs: buttonIDs //自定义工具条按钮
  481. })
  482. }).then(function (oData) {
  483. that.oWebControl.JS_Resize(850, 615) // 初始化后resize一次,规避firefox下首次显示窗口后插件窗口未与DIV窗口重合问题
  484. })
  485. })
  486. },
  487. //获取公钥
  488. getPubKey(callback) {
  489. let that = this
  490. that.oWebControl.JS_RequestInterface({
  491. funcName: 'getRSAPubKey',
  492. argument: JSON.stringify({
  493. keyLength: 1024
  494. })
  495. }).then(function (oData) {
  496. console.log(oData)
  497. if (oData.responseMsg.data) {
  498. that.pubKey = oData.responseMsg.data
  499. callback()
  500. }
  501. 125
  502. })
  503. },
  504. //RSA加密
  505. setEncrypt(value) {
  506. var encrypt = new JSEncrypt()
  507. encrypt.setPublicKey(this.pubKey)
  508. return encrypt.encrypt(value)
  509. },
  510. //播放海康摄像头
  511. playhk(channelCode) {
  512. var cameraIndexCode = channelCode //获取输入的监控点编号值,必填
  513. var streamMode = 0 //主子码流标识:0-主码流,1-子码流
  514. var transMode = 1 //传输协议:0-UDP,1-TCP
  515. var gpuMode = 0 //是否启用GPU硬解,0-不启用,1-启用
  516. var wndId = -1 //播放窗口序号(在2x2以上布局下可指定播放窗口)
  517. cameraIndexCode = cameraIndexCode.replace(/(^\s*)/g, '')
  518. cameraIndexCode = cameraIndexCode.replace(/(\s*$)/g, '')
  519. this.oWebControl.JS_RequestInterface({
  520. funcName: 'startPreview',
  521. argument: JSON.stringify({
  522. cameraIndexCode: cameraIndexCode, //监控点编号
  523. streamMode: streamMode, //主子码流标识
  524. transMode: transMode, //传输协议
  525. gpuMode: gpuMode, //是否开启GPU硬解
  526. wndId: wndId //可指定播放窗口
  527. })
  528. })
  529. }
  530. /** ----------------------------------海康摄像头预览结束------------------------------------- */
  531. }
  532. }
  533. // 推送消息
  534. function cbIntegrationCallBack(oData) {
  535. console.log(JSON.stringify(oData.responseMsg))
  536. }
  537. </script>
  538. <style rel="stylesheet/scss" lang="scss" scoped>
  539. @import '@/assets/styles/base.scss';
  540. .event-info-con {
  541. width: 100%;
  542. display: flex;
  543. .e-left {
  544. width: 32%;
  545. }
  546. .e-center {
  547. width: 30%;
  548. margin-left: 1%;
  549. .img-company {
  550. width: 100%;
  551. height: 18.3vh;
  552. img {
  553. }
  554. }
  555. }
  556. .e-right {
  557. margin-left: 1%;
  558. width: 45%;
  559. }
  560. .e-location-left {
  561. width: 28%;
  562. margin-top: 1rem;
  563. }
  564. .e-location-right {
  565. width: 71%;
  566. margin-top: 1.3rem;
  567. margin-left: 1rem;
  568. }
  569. }
  570. .el-dialog:not(.is-fullscreen) {
  571. margin-top: 5.5vh !important;
  572. }
  573. .bottom-menu-normal {
  574. max-width: 90%;
  575. padding: 0 3rem;
  576. position: absolute;
  577. left: 50%;
  578. transform: translateX(-50%);
  579. bottom: 0;
  580. z-index: 100000;
  581. border-radius: 5px;
  582. display: flex;
  583. justify-content: center;
  584. align-items: center;
  585. background: url(../assets/images/integrated/btm-menu.png) center no-repeat;
  586. background-size: cover;
  587. overflow: hidden;
  588. .btm-m-con {
  589. position: relative;
  590. color: $inBlue;
  591. font-size: .5rem;
  592. padding: 1rem 1.5rem;
  593. display: flex;
  594. align-items: center;
  595. justify-content: center;
  596. -webkit-transform: translateY(0);
  597. transform: translateY(0);
  598. transition: all 0.2s ease-in-out;
  599. cursor: pointer;
  600. white-space: nowrap;
  601. i {
  602. font-size: 1rem;
  603. color: $inBlue;
  604. text-shadow: 0 0 10px rgba($color: $inBlue, $alpha: .6);
  605. margin-right: 0.2rem;
  606. }
  607. }
  608. .btm-m-con:hover {
  609. text-shadow: 0 0 20px rgba($color: $inBlueHover, $alpha: 1.0);
  610. filter: brightness(2.3);
  611. -webkit-transform: translateX(0.2rem);
  612. transform: translateX(0.2rem);
  613. transition: all 0.2s ease-in-out;
  614. i {
  615. color: $inBlueHover;
  616. text-shadow: 0 0 20px rgba($color: $inBlueHover, $alpha: 1.0);
  617. }
  618. }
  619. .m-l-none {
  620. .el-input__inner {
  621. margin-left: 0 !important;
  622. }
  623. }
  624. }
  625. /*海康*/
  626. html, body {
  627. padding: 0;
  628. margin: 0;
  629. }
  630. .playWnd {
  631. margin: -13px 0 0 255px;
  632. width: 850px; /*播放容器的宽和高设定*/
  633. height: 615px;
  634. border: 1px solid red;
  635. }
  636. .operate {
  637. margin-top: 24px;
  638. }
  639. .operate::after {
  640. content: '';
  641. display: block;
  642. clear: both;
  643. }
  644. .module {
  645. float: left;
  646. width: 340px;
  647. /*min-height: 320px;*/
  648. margin-left: 16px;
  649. padding: 16px 8px;
  650. box-sizing: border-box;
  651. border: 1px solid #e5e5e5;
  652. }
  653. .module .item {
  654. margin-bottom: 4px;
  655. }
  656. .module input[type="text"] {
  657. box-sizing: border-box;
  658. display: inline-block;
  659. vertical-align: middle;
  660. margin-left: 0;
  661. width: 150px;
  662. min-height: 20px;
  663. }
  664. .module .btn {
  665. min-width: 80px;
  666. min-height: 24px;
  667. margin-top: 100px;
  668. margin-left: 80px;
  669. }
  670. //电视墙视频摄像头预览弹层样式
  671. .TVWallCustomWidth {
  672. width: 1500px !important;
  673. height: 750px !important;
  674. background: #04080c !important;
  675. box-shadow: $barShadow !important;
  676. border: 1px $barBorder !important;
  677. .el-dialog__header {
  678. padding: 15px 20px !important;
  679. background-image: -moz-linear-gradient($GradualGreen) !important;
  680. background-image: -webkit-linear-gradient($GradualGreen) !important;
  681. background-image: linear-gradient($GradualGreen) !important;
  682. box-shadow: $shadowTitle !important;
  683. .el-dialog__title {
  684. font-weight: bolder !important;
  685. color: #3cd7ef !important;
  686. }
  687. }
  688. .leader-info-container{
  689. // padding: .5rem;
  690. display: flex;
  691. height: 650px;
  692. width: 20rem;
  693. overflow-y: scroll;
  694. flex-direction: column;
  695. padding: 0 1rem;
  696. .leader-info-list-con{
  697. width: 100%;
  698. padding: 1rem;
  699. margin-bottom: .5rem;
  700. background-image: -moz-linear-gradient($GradualGreen)!important;
  701. background-image: -webkit-linear-gradient($GradualGreen) !important;
  702. background-image: linear-gradient($GradualGreen)!important;
  703. border: solid 1px #7dc2eb;
  704. box-shadow: $shadowListHover !important;
  705. border-radius: 5px;
  706. h4{
  707. margin: .4rem 0;
  708. color: $white;
  709. }
  710. }
  711. .leader-info-list-con:hover{
  712. background-image: -moz-linear-gradient($popupBG)!important;
  713. background-image: -webkit-linear-gradient($popupBG) !important;
  714. background-image: linear-gradient($popupBG)!important;
  715. }
  716. }
  717. }
  718. </style>