From c5370d2a8c89caa6c8da533c2cf691cb3d16dc3c Mon Sep 17 00:00:00 2001 From: liukangdong <898885815@qq.com> Date: 星期四, 12 十二月 2024 16:45:31 +0800 Subject: [PATCH] ll --- screen/src/views/SecurityControl.vue | 317 ++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 241 insertions(+), 76 deletions(-) diff --git a/screen/src/views/SecurityControl.vue b/screen/src/views/SecurityControl.vue index c13e8f9..0703983 100644 --- a/screen/src/views/SecurityControl.vue +++ b/screen/src/views/SecurityControl.vue @@ -3,7 +3,7 @@ <div class="main_app"> <img src="@/assets/images/SecurityControl/bg@2x.png" class="main_bg" alt="" /> <div class="main_header"> - <img src="@/assets/images/maintitle@2x.png" class="main_header_bg" alt="" /> + <img src="@/assets/images/maintitle.gif" class="main_header_bg" alt="" /> <div class="title">瀹夋嘲鏅烘収鐗╂祦鍥尯-瀹夐槻鏅鸿兘鐩戞祴</div> <div class="time_wrap"> <span class="date">{{ date }}</span> @@ -19,7 +19,7 @@ <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" /> <div>瀹炴椂鍥尯杞﹁締</div> </div> - <img src="@/assets/images/title@2x.png" class="bg" alt="" /> + <img src="@/assets/images/task/title@2x.png" class="bg" alt="" /> </div> <div class="second_title"> <div class="title"> @@ -108,10 +108,10 @@ </div> </div> <div class="center_box"> - <div v-if="showJk" class="jiankong"> + <div v-show="showJk" class="jiankong"> <img class="jk_bg" src="@/assets/images/SecurityControl/jiankong_bg@2x.png" alt=""> <div class="content"> - <video :src="activeVideo" class="video"></video> + <div class="player_bg" style="width: 100%;height: 100%;" id="playWnd"> </div> </div> <div class="right_wrap"> <div class="menus"> @@ -144,7 +144,7 @@ </div> </div> - <div v-else class="center_box_one"> + <div v-show="!showJk" class="center_box_one"> <div class="list"> <div class="item"> <div class="name_wrap"> @@ -196,7 +196,7 @@ <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" /> <div>鍦ㄥ洯浜哄憳鍒嗘瀽</div> </div> - <img src="@/assets/images/title@2x.png" class="bg" alt="" /> + <img src="@/assets/images/task/title@2x.png" class="bg" alt="" /> </div> <div class="second_title"> <div class="title"> @@ -287,7 +287,7 @@ <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" /> <div>褰撳墠杞﹁締婊炵暀棰勮</div> </div> - <img src="@/assets/images/title@2x.png" class="bg" alt="" /> + <img src="@/assets/images/task/title@2x.png" class="bg" alt="" /> </div> <div class="table"> <div class="line header"> @@ -322,7 +322,7 @@ <div class="separate"></div> <div class="tab" :class="{ active: warningTab == '2' }" @click="tasClick('2')">琛屼负鍛婅</div> </div> - <img src="@/assets/images/title@2x.png" class="bg" alt="" /> + <img src="@/assets/images/task/title@2x.png" class="bg" alt="" /> </div> <div class="one_swiper_wrap"> <div class="list one-swiper"> @@ -367,8 +367,12 @@ </div> </div> </div> + <div v-if="warningList.length == 0" class="empty_wrap"> + <img src="@/assets/images/default_empty.png" alt=""> + </div> </div> </div> + </div> </div> @@ -378,7 +382,7 @@ <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" /> <div>鍥尯瀹夐槻璁惧</div> </div> - <img src="@/assets/images/title@2x.png" class="bg" alt="" /> + <img src="@/assets/images/task/title@2x.png" class="bg" alt="" /> </div> <div class="monitoring" @click="showJk = !showJk"> <img src="@/assets/images/SecurityControl/ic_jiankong@2x.png" class="icon" alt=""> @@ -441,7 +445,7 @@ <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" /> <div>浠婃棩璁垮婊炵暀鎯呭喌</div> </div> - <img src="@/assets/images/title@2x.png" class="bg" alt="" /> + <img src="@/assets/images/task/title@2x.png" class="bg" alt="" /> </div> <div class="table"> <div class="line header"> @@ -461,8 +465,8 @@ </div> </div> </div> - <div class="empty_wrap"> - <img v-if="dataList3.length == 0" src="@/assets/images/default_empty.png" alt=""> + <div v-if="dataList3.length == 0" class="empty_wrap"> + <img src="@/assets/images/default_empty.png" alt=""> </div> </div> </div> @@ -472,7 +476,7 @@ </template> <script setup> -import { ref, onMounted } from 'vue' +import { ref, onMounted, nextTick } from 'vue' import VScaleScreen from 'v-scale-screen' import Percent from '@/components/percent.vue' import dayjs from 'dayjs' @@ -504,6 +508,143 @@ }, 1000) + +const oWebControl = ref(null) +const initCount = ref() +const pubKey = ref('') +const initPlugin = () => { + oWebControl.value = new WebControl({ + szPluginContainer: "playWnd", // 鎸囧畾瀹瑰櫒id + iServicePortStart: 15900, // 鎸囧畾璧锋绔彛鍙凤紝寤鸿浣跨敤璇ュ�� + iServicePortEnd: 15900, + szClassId: "23BF3B0A-2C56-4D97-9C03-0CB103AA8F11", // 鐢ㄤ簬IE10浣跨敤ActiveX鐨刢lsid + cbConnectSuccess: function () { + // 鍒涘缓WebControl瀹炰緥鎴愬姛 + console.log('鍒涘缓WebControl瀹炰緥鎴愬姛'); + + oWebControl.value.JS_StartService("window", { // WebControl瀹炰緥鍒涘缓鎴愬姛鍚庨渶瑕佸惎鍔ㄦ湇鍔� + dllPath: "./VideoPluginConnect.dll" // 鍊�"./VideoPluginConnect.dll"鍐欐 + }).then(function () { + oWebControl.value.JS_SetWindowControlCallback({ // 璁剧疆娑堟伅鍥炶皟 + cbIntegrationCallBack: cbIntegrationCallBack + })// 鍚姩鎻掍欢鏈嶅姟鎴愬姛 + oWebControl.value.JS_CreateWnd("playWnd", '300', '200').then(function () { //JS_CreateWnd鍒涘缓瑙嗛鎾斁绐楀彛锛屽楂樺彲璁惧畾锛宐oxWidth, boxHeight瀹瑰櫒 + // oWebControl.value.JS_CreateWnd("playWnd").then(function () { //JS_CreateWnd鍒涘缓瑙嗛鎾斁绐楀彛锛屽楂樺彲璁惧畾锛宐oxWidth, boxHeight瀹瑰櫒 + init() // 鍒涘缓鎾斁瀹炰緥鎴愬姛鍚庡垵濮嬪寲 + }) + }, function () { // 鍚姩鎻掍欢鏈嶅姟澶辫触 + }) + }, + cbConnectError: function () { // 鍒涘缓WebControl瀹炰緥澶辫触 + console.log('鍒涘缓WebControl瀹炰緥澶辫触'); + oWebControl.value = null + $("#playWnd").html("鎻掍欢鏈惎鍔紝姝e湪灏濊瘯鍚姩锛岃绋嶅��...") + WebControl.JS_WakeUp("VideoWebPlugin://") // 绋嬪簭鏈惎鍔ㄦ椂鎵цerror鍑芥暟锛岄噰鐢╳akeup鏉ュ惎鍔ㄧ▼搴� + initCount.value++ + if (initCount.value < 3) { + setTimeout(function () { + initPlugin() + }, 3000) + } else { + $("#playWnd").html("鎻掍欢鍚姩澶辫触锛岃妫�鏌ユ彃浠舵槸鍚﹀畨瑁咃紒鎴栭噸鏂颁笅杞� <a href='./videoUrl/VideoWebPlugin.exe' target='_blank'>涓嬭浇a<a>") + } + }, + cbConnectClose: function (bNormalClose) { + // 寮傚父鏂紑锛歜NormalClose = false + // JS_Disconnect姝e父鏂紑锛歜NormalClose = true + console.log('寮傚父鏂紑锛歜NormalClose'); + oWebControl.value = null + $("#playWnd").html("鎻掍欢鏈惎鍔紝姝e湪灏濊瘯鍚姩锛岃绋嶅��...") + WebControl.JS_WakeUp("VideoWebPlugin://") + initCount.value++ + if (initCount.value < 3) { + setTimeout(function () { + initPlugin() + }, 3000) + } else { + $("#playWnd").html("鎻掍欢鍚姩澶辫触锛岃妫�鏌ユ彃浠舵槸鍚﹀畨瑁咃紒鎴栭噸鏂颁笅杞� <a href='https://img0.baidu.com/it/u=3867022436,608124672&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=1422' target='_blank'>涓嬭浇b<a>") + } + } + }) +} +function fileDown() { + window.open('./videoUrl/VideoWebPlugin.exe') +} +// 娑堟伅鍥炶皟 +const cbIntegrationCallBack = (oData) => { + let response = oData.responseMsg + // response.type=1 閫変腑绐楀彛娑堟伅 type=2 鎾斁娑堟伅 +} +// 鐩戞帶 + + + + +// 鍒濆鍖� +const init = () => { + getPubKey(function () { + ////////////////////////////////// 璇疯嚜琛屼慨鏀逛互涓嬪彉閲忓�� //////////////////////////////////// + let appkey = "23154099" //缁煎悎瀹夐槻绠$悊骞冲彴鎻愪緵鐨刟ppkey锛屽繀濉� + let secret = '88wFsg3xfn7o8QMsWEO2' //缁煎悎瀹夐槻绠$悊骞冲彴鎻愪緵鐨剆ecret锛屽繀濉� + // let secret = setEncrypt("88wFsg3xfn7o8QMsWEO2") //缁煎悎瀹夐槻绠$悊骞冲彴鎻愪緵鐨剆ecret锛屽繀濉� + let ip = "10.50.250.253" //缁煎悎瀹夐槻绠$悊骞冲彴IP鍦板潃锛屽繀濉� + let playMode = 0 //鍒濆鎾斁妯″紡锛�0-棰勮(瀹炴椂娴�)锛�1-鍥炴斁(瑙嗛) + let port = 443 //缁煎悎瀹夐槻绠$悊骞冲彴绔彛锛岃嫢鍚敤HTTPS鍗忚锛岄粯璁�443 + let snapDir = "D:\\SnapDir" //鎶撳浘瀛樺偍璺緞 + let videoDir = "D:\\VideoDir" //绱ф�ュ綍鍍忔垨褰曞儚鍓緫瀛樺偍璺緞 + let layout = "1x1" //playMode鎸囧畾妯″紡鐨勫竷灞� + let enableHTTPS = 1 //鏄惁鍚敤HTTPS鍗忚涓庣患鍚堝畨闃茬鐞嗗钩鍙颁氦浜掞紝杩欓噷鎬绘槸濉�1 + let encryptedFields = 'secret' //鍔犲瘑瀛楁锛岄粯璁ゅ姞瀵嗛鍩熶负secret + let showToolbar = 1 //鏄惁鏄剧ず宸ュ叿鏍忥紝0-涓嶆樉绀猴紝闈�0-鏄剧ず + let showSmart = 1 //鏄惁鏄剧ず鏅鸿兘淇℃伅锛堝閰嶇疆绉诲姩渚︽祴鍚庣敾闈笂鐨勭嚎妗嗭級锛�0-涓嶆樉绀猴紝闈�0-鏄剧ず + let buttonIDs = "0,16,256,257,258,259,260,513,514,515,516,517,768" //鑷畾涔夊伐鍏锋潯鎸夐挳 + oWebControl.value.JS_RequestInterface({ + funcName: "init", + argument: JSON.stringify({ + appkey: appkey, //API缃戝叧鎻愪緵鐨刟ppkey + secret: secret, //API缃戝叧鎻愪緵鐨剆ecret + ip: ip, //API缃戝叧IP鍦板潃 + playMode: playMode, //鎾斁妯″紡锛堝喅瀹氭樉绀洪瑙堣繕鏄洖鏀剧晫闈級 + port: port, //绔彛 + snapDir: snapDir, //鎶撳浘瀛樺偍璺緞 + videoDir: videoDir, //绱ф�ュ綍鍍忔垨褰曞儚鍓緫瀛樺偍璺緞 + layout: layout, //甯冨眬 + enableHTTPS: enableHTTPS, //鏄惁鍚敤HTTPS鍗忚 + encryptedFields: encryptedFields, //鍔犲瘑瀛楁 + showToolbar: showToolbar, //鏄惁鏄剧ず宸ュ叿鏍� + showSmart: showSmart, //鏄惁鏄剧ず鏅鸿兘淇℃伅 + buttonIDs: buttonIDs //鑷畾涔夊伐鍏锋潯鎸夐挳 + }) + }).then(function (oData) { + console.log('鍒濆鍖栨垚鍔�'); + + // oWebControl.value.JS_Resize(that.boxWidth, that.boxHeight) // 鍒濆鍖栧悗resize涓�娆★紝瑙勯伩firefox涓嬮娆℃樉绀虹獥鍙e悗鎻掍欢绐楀彛鏈笌DIV绐楀彛閲嶅悎闂 + }) + }) +} + +// 鑾峰彇鍏挜 +function getPubKey(callback) { + oWebControl.value.JS_RequestInterface({ + funcName: 'getRSAPubKey', + argument: JSON.stringify({ + keyLength: 1024, + }), + }).then((oData) => { + if (oData.responseMsg.data) { + pubKey.value = oData.responseMsg.data + callback() + } + }) +} + +// RSA鍔犲瘑 +function setEncrypt(value) { + let that = this + let encrypt = new JSEncrypt() + encrypt.setPublicKey(pubKey.value) + return encrypt.encrypt(value) +} const arr = ['#68e2e3', '#50afd3', '#377cdb', '#d5ae3a'] @@ -655,23 +796,24 @@ }]), new echarts.graphic.LinearGradient(0, 1, 0, 0, [{ offset: 0, + color: '#4370f2' + }, { + offset: 1, + color: '#61d3f9' + }]), + new echarts.graphic.LinearGradient(0, 1, 0, 0, [{ + offset: 0, color: '#4679f6' }, { offset: 1, color: '#4674f6' }]), - new echarts.graphic.LinearGradient(0, 1, 0, 0, [{ - offset: 0, - color: '#4370f2' - }, { - offset: 1, - color: '#61d3f9' - }])] + ] const data = [] - data.push({ name: '寰呰闂�', value: data4.value.waitVisitNum, rate: data4.value.waitVisitNum / data4.value.total }) - data.push({ name: '宸茬櫥璁�', value: data4.value.registerVisitNum, rate: data4.value.registerVisitNum / data4.value.total }) - data.push({ name: '宸茬寮�', value: data4.value.levelNum, rate: data4.value.levelNum / data4.value.total }) - data.push({ name: '婊炵暀', value: data4.value.retentionNum, rate: data4.value.retentionNum / data4.value.total }) + data.push({ name: '寰呰闂�', value: data4.value.waitVisitNum, rate: (data4.value.waitVisitNum / data4.value.total).toFixed(1) }) + data.push({ name: '宸茬櫥璁�', value: data4.value.registerVisitNum, rate: (data4.value.registerVisitNum / data4.value.total).toFixed(1) }) + data.push({ name: '宸茬寮�', value: data4.value.levelNum, rate: (data4.value.levelNum / data4.value.total).toFixed(1) }) + data.push({ name: '婊炵暀', value: data4.value.retentionNum, rate: (data4.value.retentionNum / data4.value.total).toFixed(1) }) const option = { color: colors, tooltip: { @@ -735,12 +877,16 @@ label: { show: true, position: 'outside', - formatter: '{a|{b}} {a|{d}%}', + formatter: (params) => { + const index = params.dataIndex + return `{color${index}|${params.data.name} ${params.data.rate}%}` + // return `<div>${params.data.name}</div>` + }, rich: { - a: { - color: '#869CC9', - fontSize: 13 - }, + color0: { color: 'orange', fontSize: 14 }, + color1: { color: '#869CC9', fontSize: 13 }, + color2: { color: '#869CC9', fontSize: 13 }, + color3: { color: '#869CC9', fontSize: 13 } } }, labelLine: { @@ -819,7 +965,6 @@ dataListT2.value = temp } initEchart2() - loopFn2() }) } @@ -831,7 +976,7 @@ data4.value = res.data || {} let obj = data4.value data4.value.total = obj.levelNum + obj.retentionNum + obj.registerVisitNum + obj.waitVisitNum - const result = res.data.visitRetentionDataList || [] + const result = res.data?.visitRetentionDataList || [] dataList3.value = result.map(i => { if (i.timeOutMinute) { i.timeOutMinute = Math.abs(i.timeOutMinute) @@ -847,36 +992,8 @@ return i }) initEchart3() - loopFn3() }) - - // getVisitRetentionData().then(res => { - // const result = res.data || [] - // dataList3.value = result.map(i => { - // if (i.timeOutMinute) { - // i.timeOutMinute = Math.abs(i.timeOutMinute) - // } - // if (i.timeOutMinute > 60 * 24) { - // i.timeOutMinuteT = dayjs.duration(i.timeOutMinute * 60 * 1000).format('D澶〩鏃秏鍒�') - // } else if (i.timeOutMinute > 60) { - // i.timeOutMinuteT = dayjs.duration(i.timeOutMinute * 60 * 1000).format('H鏃秏鍒�') - // } else { - // i.timeOutMinuteT = item.timeOutMinuteT + '鍒�' - // } - - // return i - // }) - // loopFn3() - // }) } -// const data4 = ref({}) -// const getData4 = () => { -// afgetVisitData().then(res => { -// const result = res.data || {} -// data4.value = result -// initEchart3() -// }) -// } const warningTab = ref('0') const warningNum = ref(0) @@ -894,7 +1011,6 @@ warningList.value.forEach((item, i) => { // console.log(i); if (i == 0 || i % 2 == 0) { - console.log(i) temp.push(item) } else { temp[temp.length - 1].addr0 = item.addr @@ -906,7 +1022,6 @@ }) warningList.value = temp // console.log('temp', warningList.value); - loopFn1() }) } const tasClick = (val) => { @@ -938,10 +1053,33 @@ } } const menuItemClick = (val) => { + initPlugin() activeMenu.value = val - afgetCarmeraPreviemUrl({ indexCode: val.indexCode }).then(res => { - activeVideo.value = res.data + nextTick(() => { + console.log('indexCode', val.indexCode); + + oWebControl.value.JS_RequestInterface({ + funcName: "startPreview", + argument: JSON.stringify({ + cameraIndexCode: val.indexCode, //鐩戞帶鐐圭紪鍙� + streamMode: 0, //涓诲瓙鐮佹祦鏍囪瘑锛�0-涓荤爜娴侊紝1-瀛愮爜娴� + transMode: 1, //浼犺緭鍗忚锛�0-UDP锛�1-TCP + gpuMode: 0, //鏄惁鍚敤GPU纭В锛�0-涓嶅惎鐢紝1-鍚敤 + wndId: -1 //鎾斁绐楀彛搴忓彿锛堝湪2x2浠ヤ笂甯冨眬涓嬪彲鎸囧畾鎾斁绐楀彛锛� + }) + }).then((oData) => { + if (oData.responseMsg.code === 1) { + console.log('success', oData) + } + }, err => { + console.log('err', err) + + }) }) + + // afgetCarmeraPreviemUrl({ indexCode: val.indexCode }).then(res => { + // activeVideo.value = res.data + // }) } const autoplayFlag = (list = [], leng = 4, time = 2000) => { @@ -984,15 +1122,32 @@ + onMounted(() => { getData1() getData2() getData3() - // getData4() getData5() getWarning() - // initEchart1() + + setInterval(() => { + getData1() + getData2() + getData3() + getWarning() + }, 1000 * 60) + + setInterval(() => { + getData5() + }, 1000 * 60 * 60) + + setTimeout(() => { + loopFn1() + loopFn2() + loopFn3() + }, 12000) + }) @@ -1020,6 +1175,8 @@ margin-bottom: 20px; font-size: 14px; color: #D2E0FF; + background: rgba(0, 86, 255, 0.05); + backdrop-filter: blur(5px); .second_title { margin-top: 24px; @@ -1273,7 +1430,7 @@ .menu_wrap { margin-top: 15px; max-height: 440px; - overflow: hidden; + overflow: auto; .menu { .menu_name { @@ -1368,6 +1525,8 @@ .right_box_one { margin-bottom: 20px; + background: rgba(0, 86, 255, 0.05); + backdrop-filter: blur(5px); .second_title { margin-top: 20px; @@ -1450,9 +1609,15 @@ } } - .right_box_two {} + .right_box_two { + background: rgba(0, 86, 255, 0.05); + backdrop-filter: blur(5px); + } - .right_box_three {} + .right_box_three { + background: rgba(0, 86, 255, 0.05); + backdrop-filter: blur(5px); + } } } @@ -1575,10 +1740,13 @@ margin-right: 20px; /* one-swiper */ - .one_swiper_wrap{ + .one_swiper_wrap { height: 140px; overflow: hidden; + background: rgba(0, 86, 255, 0.05); + backdrop-filter: blur(5px); } + .list { height: 204px; overflow: hidden; @@ -1665,6 +1833,8 @@ flex: 1; margin-right: 20px; position: relative; + background: rgba(0, 86, 255, 0.05); + backdrop-filter: blur(5px); .content { display: flex; @@ -1809,6 +1979,8 @@ .visitor_warning { width: 360px; + background: rgba(0, 86, 255, 0.05); + backdrop-filter: blur(5px); .table { .list { @@ -1844,13 +2016,6 @@ align-items: center; font-weight: bold; font-size: 16px; - background-image: -webkit-linear-gradient(top, - #ffffff 0%, - #c8ddff 66%, - #85b4ff 72%, - #74a9ff 100%); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; .icon { width: 16px; -- Gitblit v1.9.3