From 53b6400ec10c8ca61ccec91c82c358d2488eead8 Mon Sep 17 00:00:00 2001 From: jiangping <jp@doumee.com> Date: 星期五, 20 十二月 2024 09:50:39 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- screen/src/views/SecurityControl.vue | 179 +++++++++++++++++++++++++++++++---------------------------- 1 files changed, 94 insertions(+), 85 deletions(-) diff --git a/screen/src/views/SecurityControl.vue b/screen/src/views/SecurityControl.vue index c13e8f9..17f7c0a 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,11 @@ </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> + <Video v-if="showJk && activeMenu && activeMenu.indexCode" :href="data.videoPluginUrl" :indexCode="activeMenu.indexCode" /> + <!-- <div class="player_bg" style="width: 100%;height: 100%;" id="playWnd"> </div> --> </div> <div class="right_wrap"> <div class="menus"> @@ -144,7 +145,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 +197,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 +288,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 +323,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 +368,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,9 +383,9 @@ <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"> + <div class="monitoring" @click="changeMon"> <img src="@/assets/images/SecurityControl/ic_jiankong@2x.png" class="icon" alt=""> <div>鐩戞帶鍒楄〃</div> <img v-if="showJk" src="@/assets/images/SecurityControl/jiankong_ic_close@2x.png" class="top" alt=""> @@ -417,7 +422,7 @@ </div> <div class="list two-swiper"> <div class="swiper-wrapper"> - <template v-for="item, i in dataList2"> + <template v-for="item, i in dataList2.filter(i => i.total > 0)"> <div class="item two-swiper-slide swiper-slide"> <div class="line"> <div class="driver">{{ item.deviceType }}</div> @@ -441,7 +446,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 +466,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 +477,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' @@ -481,6 +486,7 @@ import * as echarts from 'echarts' import 'swiper/css/swiper.min.css' import Swiper from 'swiper' +import Video from './videoUrl/Video.vue' import { getEnergyCenterData, afgetCarmeraPreviemUrl, @@ -503,8 +509,6 @@ time.value = dayjs().format('HH:mm:ss') }, 1000) - - const arr = ['#68e2e3', '#50afd3', '#377cdb', '#d5ae3a'] const initEnergy = () => { @@ -655,23 +659,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 +740,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 +828,6 @@ dataListT2.value = temp } initEchart2() - loopFn2() }) } @@ -831,7 +839,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 +855,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 +874,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 +885,6 @@ }) warningList.value = temp // console.log('temp', warningList.value); - loopFn1() }) } const tasClick = (val) => { @@ -930,6 +908,13 @@ data5.value = result.filter(item => item.carmeraList && item.carmeraList.length > 0) }) } +const changeMon = () => { + showJk.value = !showJk.value + if(!showJk.value){ + activeJkIndex.value = -1 + activeMenu.value = {} + } +} const menuClick = (val) => { if (val == activeJkIndex.value) { activeJkIndex.value = -1 @@ -939,11 +924,8 @@ } const menuItemClick = (val) => { activeMenu.value = val - afgetCarmeraPreviemUrl({ indexCode: val.indexCode }).then(res => { - activeVideo.value = res.data - }) -} +} const autoplayFlag = (list = [], leng = 4, time = 2000) => { if (list.length > leng) { return { delay: time, disableOnInteraction: false } @@ -966,7 +948,7 @@ initialSlide: 0, direction: 'vertical', //绔栫洿鏂瑰悜 slidesPerView: 3, - autoplay: autoplayFlag(dataList2.value, 3, 4000), + autoplay: autoplayFlag(dataList2.value.filter(i => i.total > 0), 3, 4000), observer: true, //淇敼swiper鑷繁鎴栧瓙鍏冪礌鏃讹紝鑷姩鍒濆鍖杝wiper }) } @@ -984,15 +966,31 @@ + 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 +1018,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 +1273,7 @@ .menu_wrap { margin-top: 15px; max-height: 440px; - overflow: hidden; + overflow: auto; .menu { .menu_name { @@ -1368,6 +1368,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 +1452,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 +1583,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 +1676,8 @@ flex: 1; margin-right: 20px; position: relative; + background: rgba(0, 86, 255, 0.05); + backdrop-filter: blur(5px); .content { display: flex; @@ -1675,7 +1688,8 @@ display: flex; justify-content: center; align-items: center; - padding: 16px 24px; + padding-top: 16px; + padding-left: 24px; .echart_wrap { position: relative; @@ -1711,7 +1725,7 @@ } .list { - margin-left: 36px; + margin-left: 32px; flex: 1; display: flex; flex-direction: column; @@ -1809,6 +1823,8 @@ .visitor_warning { width: 360px; + background: rgba(0, 86, 255, 0.05); + backdrop-filter: blur(5px); .table { .list { @@ -1844,13 +1860,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