From 7298d5354963a88643a543b51b90192dc9fc934c Mon Sep 17 00:00:00 2001 From: doum <doum> Date: 星期四, 11 九月 2025 18:43:14 +0800 Subject: [PATCH] 最新版本541200007 --- screen/src/views/SecurityControl.vue | 2070 +++++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 1,307 insertions(+), 763 deletions(-) diff --git a/screen/src/views/SecurityControl.vue b/screen/src/views/SecurityControl.vue index 00f1180..b16eb42 100644 --- a/screen/src/views/SecurityControl.vue +++ b/screen/src/views/SecurityControl.vue @@ -2,9 +2,10 @@ <v-scale-screen width="1920" height="960"> <div class="main_app"> <img src="@/assets/images/SecurityControl/bg@2x.png" class="main_bg" alt="" /> + <img src="@/assets/images/ic_compass@2x.png" class="main_znz" alt="" /> <div class="main_header"> <img src="@/assets/images/maintitle.gif" class="main_header_bg" alt="" /> - <div class="title">瀹夋嘲鏅烘収鐗╂祦鍥尯-瀹夐槻鏅鸿兘鐩戞祴</div> + <div class="title">瀹夋嘲鏅烘収鐗╂祦鍥尯-鏅鸿兘瀹夐槻绠℃帶</div> <div class="time_wrap"> <span class="date">{{ date }}</span> <span class="week">{{ week }}</span> @@ -17,91 +18,136 @@ <div class="com_header"> <div class="title"> <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" /> - <div>瀹炴椂鍥尯杞﹁締</div> + <div>瀹炴椂鍦ㄥ洯浜哄憳</div> </div> <img src="@/assets/images/task/title@2x.png" class="bg" alt="" /> </div> <div class="second_title"> <div class="title"> <img src="@/assets/images/SecurityControl/ic_title_green@2x.png" class="icon" alt="" /> - <div>瀹炴椂鍥尯杞﹁締</div> + <div>瀹炴椂鍦ㄥ洯浜哄憳鍒嗗竷</div> </div> <div class="num_wrap"> - <div class="la">鎬昏溅浣嶏細</div> - <div class="val">{{ data.parkingLotTotal }}</div> + <div class="la">鍗曚綅锛氫汉</div> </div> </div> - <div class="stall_static"> - <div class="residue"> - <div class="la">鍓╀綑杞︿綅</div> - <div class="val">{{ data.freeParkingLot }}</div> - </div> - <div class="total"> - <div class="la">杞︿綅鎬绘暟</div> - <div class="val">{{ data.parkingLotTotal }}</div> - </div> - <div class="rate"> - <div class="la"> - <span>杞︿綅浣跨敤鐜�</span> - <span class="num">{{ data.parkingUseRate }}%</span> - </div> - <div class="val"> - <Percent :rate="data.parkingUseRate" /> - </div> - </div> + <div class="ren_chat"> + <div class="ren_chat_val"></div> </div> - <div class="second_title"> - <div class="title"> - <img src="@/assets/images/SecurityControl/ic_title_green@2x.png" class="icon" alt="" /> - <div>褰撳墠鍦ㄥ洯绉佸杞﹀垎甯�</div> - </div> - </div> - <div class="private_car"> - <div class="item"> - <img class="icon" src="@/assets/images/SecurityControl/car_yuangong@2x.png" alt=""> - <div class="num">{{ data.internalCarTotal }}</div> - <div class="name">鍛樺伐杞﹁締</div> - </div> - <div class="item"> - <img class="icon" src="@/assets/images/SecurityControl/car_xiangguanfang@2x.png" alt=""> - <div class="num num2">{{ data.relatedCarTotal }}</div> - <div class="name">鐩稿叧鏂硅溅杈�</div> - </div> - <div class="item"> - <img class="icon" src="@/assets/images/SecurityControl/car_laifang@2x.png" alt=""> - <div class="num num3">{{ data.visitCarTotal }}</div> - <div class="name">鏉ヨ杞﹁締</div> - </div> - </div> - <!-- <div class="section"> - <div class="item" :style="{ flex: data.internalCarTotal }"></div> - <div class="item" :style="{ flex: data.relatedCarTotal }"></div> - <div class="item" :style="{ flex: data.visitCarTotal }"></div> - </div> --> - <div class="second_title"> + <div class="second_title" style="margin-bottom: 0; margin-top: 15px;"> <div class="title"> <img src="@/assets/images/SecurityControl/ic_title_green@2x.png" class="icon" alt="" /> - <div>褰撳墠鍦ㄥ洯璐ц溅鍒嗗竷</div> + <div>璁垮婊炵暀鎯呭喌</div> </div> </div> - <div class="car_static"> - <div class="echart_wrap"> - <div class="pie_text"> - <div class="fs30"><strong v-if="data.visitJobCarTotal || data.visitJobCarTotal == 0">{{ - data.internalJobCarTotal + - data.relatedJobCarTotal + data.visitJobCarTotal }}</strong></div> - <div>璐ц溅</div> - </div> - <div class="echart" id="echart1"></div> + <div class="table"> + <div class="line header"> + <div>濮撳悕</div> + <div class="dept">鎷滆閮ㄩ棬</div> + <div class="time">瓒呮椂鏃堕暱</div> </div> - <div class="list"> - <div class="item" v-for="item, i in dataList1"> - <div class="line"> - <div :style="{ background: colors[i] }" class="icon"></div> - <div class="text">{{ item.name }}</div> + <div style="width: 100%; height: 96px; overflow: hidden;"> + <div v-if="dataList3.length > 0" class="three-swiper list"> + <div class="swiper-wrapper"> + <div class="item three-swiper-slide swiper-slide" v-for="(item, index) in dataList3" :key="index"> + <div class="line"> + <div>{{ item.name }}</div> + <div class="dept">{{ item.companyName }}</div> + <div class="time">{{ item.timeOutMinuteT }}</div> + </div> + <div class="separate"></div> + </div> </div> - <div :style="{ color: colors[i] }" class="num">{{ item.value }}</div> + </div> + <div v-if="dataList3.length == 0" class="empty_wrap"> + <img style="width: 90px; height: 90px;" src="@/assets/images/default_empty.png" alt=""> + </div> + </div> + </div> + </div> + + <div class="safe_warning"> +<!-- <Loading v-if="loading1" />--> + <div class="com_header"> + <div class="title"> + <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" /> + <div>瀹炴椂鍥尯杞﹁締</div> + </div> + <img src="@/assets/images/task/title@2x.png" class="bg" alt="" /> + </div> + <div class="safe_warning_content"> + <div class="second_title"> + <div class="title"> + <img src="@/assets/images/SecurityControl/ic_title_green@2x.png" class="icon" alt="" /> + <div>褰撳墠鍦ㄥ洯杞﹁締鍒嗗竷</div> + </div> + <div class="num_wrap"> + <div class="la">鍗曚綅锛氳締</div> + </div> + </div> + + <div class="safe_chat"> + <div class="safe_chat_val_n"> + <span>{{totalCar}}</span> + <span>鎬绘暟</span> + </div> + <div id="safe_chat_val"></div> + <div class="safe_chat_info"> + <div class="safe_chat_info_row" v-for="(item, index) in CarList" :key="index"> + <div class="safe_left"> + <div class="safe_left_dian" :style="{ backgroundColor: item.color }"></div> + <div class="safe_left_name">{{item.name}}</div> + </div> + <div class="safe_num" :style="{ color: item.color }">{{item.total}}</div> + </div> +<!-- <div class="safe_chat_info_row">--> +<!-- <div class="safe_left">--> +<!-- <div class="safe_left_dian" style="background-color: #28F0C4;"></div>--> +<!-- <div class="safe_left_name">绉佸杞﹁締</div>--> +<!-- </div>--> +<!-- <div class="safe_num" style="color: #28F0C4;">36</div>--> +<!-- </div>--> +<!-- <div class="safe_chat_info_row">--> +<!-- <div class="safe_left">--> +<!-- <div class="safe_left_dian" style="background-color: #FEAF01;"></div>--> +<!-- <div class="safe_left_name">鍏姟杞﹁締</div>--> +<!-- </div>--> +<!-- <div class="safe_num" style="color: #FEAF01;">36</div>--> +<!-- </div>--> +<!-- <div class="safe_chat_info_row">--> +<!-- <div class="safe_left">--> +<!-- <div class="safe_left_dian" style="background-color: #EEF028;"></div>--> +<!-- <div class="safe_left_name">璁垮杞﹁締</div>--> +<!-- </div>--> +<!-- <div class="safe_num" style="color: #EEF028;">36</div>--> +<!-- </div>--> + </div> + </div> + <div class="safe_zhu"> + <div class="safe_zhu_item"> + <div class="safe_zhu_item_label">澶栧崗璐ц繍杞﹁締</div> + <div class="safe_zhu_item_c"> + <div class="safe_zhu_item_c_t"> + <span>鎬昏溅浣嶏細{{data.outHyLotTotal || 0}}</span> + <span>鍓╀綑杞︿綅锛歿{data.outHyLotTotal - data.relatedJobCarTotal || 0}}</span> + </div> + <div class="safe_zhu_item_c_b"> + <div class="safe_zhu_item_c_b_z" :style="{width: ((data.outHyLotTotal - data.relatedJobCarTotal) / data.outHyLotTotal * 100) +'%'}"></div> + </div> + </div> + </div> + <div class="safe_zhu_item"> + <div class="safe_zhu_item_label">鍋滆溅鍦�</div> + <div class="safe_zhu_item_c"> + <div class="safe_zhu_item_c_t"> + <span>鎬昏溅浣嶏細{{data.parkingLotTotal || 0}}</span> + <span>鍓╀綑杞︿綅锛歿{data.freeParkingLot || 0}}</span> + </div> + <div class="safe_zhu_item_c_b"> + <div class="safe_zhu_item_c_b_z" :style="{width: (data.freeParkingLot / data.parkingLotTotal * 100) +'%'}"></div> + </div> + </div> </div> </div> </div> @@ -111,7 +157,9 @@ <div v-show="showJk" class="jiankong"> <img class="jk_bg" src="@/assets/images/SecurityControl/jiankong_bg@2x.png" alt=""> <div class="content"> - <div class="player_bg" style="width: 100%;height: 100%;" id="playWnd"> </div> + <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"> @@ -121,7 +169,7 @@ placeholder="鎼滅储鐩戞帶鍚嶇О"> </div> <div class="menu_wrap"> - <div class="menu" v-for="menu, i in data5"> + <div class="menu" v-for="(menu, i) in data5" :key="i"> <div class="menu_name" @click="menuClick(i)"> <div class="name">{{ menu.name }}</div> <img v-if="activeJkIndex == i" class="open" src="@/assets/images/SecurityControl/ar_close@2x.png" @@ -148,27 +196,27 @@ <div class="list"> <div class="item"> <div class="name_wrap"> - <div class="name">褰撳墠鍦ㄥ洯浜烘暟</div> + <div class="name">瀹炴椂鍦ㄥ洯浜烘暟</div> <img src="@/assets/images/SecurityControl/title_short@2x.png" class="bg" alt=""> </div> <div class="num_wrap"> - <div class="num">{{ data.inParkTotal }}</div> + <div class="num">{{ data.inParkTotal || 0 }}</div> <img src="@/assets/images/SecurityControl/anfang_ic_data@2x.png" class="bg" alt=""> </div> </div> <div class="item"> <div class="name_wrap"> - <div class="name">褰撳墠鍦ㄥ洯杞﹁締鏁�</div> + <div class="name">瀹炴椂鍦ㄥ洯杞︽暟</div> <img src="@/assets/images/SecurityControl/title_short@2x.png" class="bg" alt=""> </div> <div class="num_wrap"> - <div class="num">{{ data.internalCarTotal }}</div> + <div class="num">{{ data.inParkCarTotal || 0 }}</div> <img src="@/assets/images/SecurityControl/anfang_ic_data@2x.png" class="bg" alt=""> </div> </div> <div class="item"> <div class="name_wrap"> - <div class="name">褰撳墠璁惧鎬绘暟</div> + <div class="name">璁惧鍦ㄧ嚎瀹屽ソ鏁�</div> <img src="@/assets/images/SecurityControl/title_short@2x.png" class="bg" alt=""> </div> <div class="num_wrap"> @@ -178,12 +226,110 @@ </div> <div class="item"> <div class="name_wrap"> - <div class="name">褰撳墠鍛婅鎬绘暟</div> + <div class="name">褰撳墠鎶ヨ鎬绘暟</div> <img src="@/assets/images/SecurityControl/title_short@2x.png" class="bg" alt=""> </div> <div class="num_wrap"> <div class="num">{{ warningNum }}</div> <img src="@/assets/images/SecurityControl/anfang_ic_data@2x.png" class="bg" alt=""> + </div> + </div> + </div> + </div> + + <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=""> + <img v-else src="@/assets/images/SecurityControl/jiankong_ic_open@2x.png" class="top" alt=""> + </div> + + <div class="center_box_two"> + <div class="center_box_two_left"> + <div class="com_header"> + <div class="title"> + <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" /> + <div>鍥尯瀹夐槻璁惧</div> + </div> + <img src="@/assets/images/task/title@2x.png" class="bg" alt="" /> + </div> + <div class="device"> + <div class="device_chat"> + <div class="device_chat_qiam" v-if="dataListT2.length > 0"> + <span>{{dataListT2[0].value + dataListT2[1].value}}</span> + <span>鎬昏</span> + </div> + <div id="device_chat_val"></div> + <div class="device_chat_info" v-if="dataListT2.length > 0"> + <div class="device_chat_info_row"> + <div style="background-color: #01D9FE;" class="device_chat_info_row_dian"></div> + <div class="device_chat_info_row_nr"> + <span>鍦ㄧ嚎</span> + <span style="color: #01D9FE;">{{dataListT2[0].value}}</span> + </div> + </div> + <div class="device_chat_info_row"> + <div style="background-color: #FEAF01;" class="device_chat_info_row_dian"></div> + <div class="device_chat_info_row_nr"> + <span>绂荤嚎</span> + <span style="color: #FEAF01;">{{dataListT2[1].value}}</span> + </div> + </div> + </div> + </div> + <div class="device_table"> + <div class="table"> + <div class="line header"> + <div class="line-row">璁惧绫诲瀷</div> + <div class="line-row">鎬绘暟</div> + <div class="line-row">鍦ㄧ嚎瀹屽ソ鏁�</div> + <div class="line-row">绂荤嚎鏁�</div> + </div> + <div style="width: 100%; height: 96px; overflow: hidden;"> + <div v-if="dataList2.length > 0" class="four-swiper"> + <div class="swiper-wrapper"> + <div class="four-swiper-slide swiper-slide" v-for="(item, index) in dataList2" :key="index"> + <div class="line"> + <div class="line-row">{{ item.deviceType }}</div> + <div class="line-row">{{ item.totalNum }}</div> + <div class="line-row">{{ item.onlineNum }}</div> + <div class="line-row">{{ item.offlineDeviceNum }}</div> + </div> + <div class="separate"></div> + </div> + </div> + </div> + <div v-if="dataList2.length == 0" class="empty_wrap"> + <img style="width: 90px; height: 90px;" src="@/assets/images/default_empty.png" alt=""> + </div> + </div> + </div> + </div> + </div> + </div> + <div style="width: 20px; height: 100%"></div> + <div class="center_box_two_right"> + <div class="com_header"> + <div class="title"> + <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" /> + <div>闅愭偅闅忔墜鎷�</div> + </div> + <img src="@/assets/images/task/title@2x.png" class="bg" alt="" /> + </div> + <div class="device"> + <div class="device_item"> + <img src="@/assets/images/FireFighting/ic_tibao@2x.png" alt="" /> + <div class="device_item_info"> + <span>鎻愭姤闅愭偅鏁�</span> + <span><b style="color: #01C4FE;">{{ dataList5.dangerTotalNum || 0 }}</b>涓�</span> + </div> + </div> + <div class="device_item"> + <img src="@/assets/images/FireFighting/ic_chuli@2x.png" alt="" /> + <div class="device_item_info"> + <span>鏈暣鏀归棴鐜暟</span> + <span><b style="color: #FFB120;">{{ dataList5.dangerDealedNum || 0 }}</b>涓�</span> + </div> </div> </div> </div> @@ -194,279 +340,78 @@ <div class="com_header"> <div class="title"> <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" /> - <div>鍦ㄥ洯浜哄憳鍒嗘瀽</div> + <div>閲嶇偣鍖哄煙鍔ㄦ�佺鎺�</div> </div> <img src="@/assets/images/task/title@2x.png" class="bg" alt="" /> </div> - <div class="second_title"> - <div class="title"> - <img src="@/assets/images/SecurityControl/ic_title_green@2x.png" class="icon" alt="" /> - <div>褰撳墠鍦ㄥ洯浜哄憳鍒嗗竷</div> - </div> - </div> - <div class="static_wrap"> - <div class="item"> - <img src="@/assets/images/SecurityControl/staff_ic_neibu@2x.png" alt=""> - <div class="content"> - <div class="name">鍐呴儴鍛樺伐</div> - <div class="num"><span>{{ data.internalTotal || 0 }}</span> | - {{ data.inParkTotal ? ((data.internalTotal / data.inParkTotal) * 100).toFixed(1) : 0 }}%</div> - </div> - </div> - <div class="item"> - <img src="@/assets/images/SecurityControl/staff_ic_xiangguanfang@2x.png" alt=""> - <div class="content"> - <div class="name">闀挎湡鐩稿叧鏂�</div> - <div class="num today"><span>{{ data.relatedTotal || 0 - }}</span> | {{ data.inParkTotal ? ((data.relatedTotal / data.inParkTotal) * 100).toFixed(1) : 0 - }}%</div> - </div> - </div> - <div class="item"> - <img src="@/assets/images/SecurityControl/staff_ic_fangke@2x.png" alt=""> - <div class="content"> - <div class="name">鍦ㄥ洯璁垮</div> - <div class="num finish"><span>{{ data.visitTotal || 0 }}</span> - | {{ data.inParkTotal ? ((data.visitTotal / data.inParkTotal) * 100).toFixed(1) : 0 }}%</div> + <div class="one_swiper_wrap"> + <div class="list one-swiper" style="margin: 0 !important;"> + <div class="swiper-wrapper"> + <div class="one-swiper-slide swiper-slide item" v-for="item in arr1"> + <div class="item_wrap"> + <img :src="item.img" class="avatar" alt=""> + <div class="content"> + <div class="header"> + <div class="name">{{ item.title }}</div> + <div class="have_time">宸茬粡鍙戠敓{{ item.haveTime }}</div> + </div> + <div class="wrap"> + <div class="line addr"> + <img class="icon" src="@/assets/images/SecurityControl/xiaofang_ic_weizhi@2x.png" alt=""> + <span>{{ item.addr }}</span> + </div> + <div class="line time"> + <img class="icon" src="@/assets/images/SecurityControl/clock.png" alt=""> + <span>{{ item.createDate }}</span> + </div> + </div> + </div> + </div> + </div> + <div v-if="arr1.length == 0" style="width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;"> + <img src="@/assets/images/default_empty.png" style="width: 120px; height: 120px;" alt=""> + </div> </div> </div> </div> - <div class="second_title"> - <div class="title"> - <img src="@/assets/images/SecurityControl/ic_title_green@2x.png" class="icon" alt="" /> - <div>浠婃棩璁垮鍒嗘瀽</div> - </div> - </div> - <div class="visitor_list"> - <div class="item"> - <div class="name">寰呰闂�</div> - <div class="num_wrap"> - <span class="num">{{ data4.waitVisitNum }}</span> - <span>浜�</span> - </div> - </div> - <div class="spacing"></div> - <div class="item"> - <div class="name">宸茬櫥璁�</div> - <div class="num_wrap"> - <span class="num">{{ data4.registerVisitNum }}</span> - <span>浜�</span> - </div> - </div> - <div class="spacing"></div> - <div class="item"> - <div class="name">宸茬寮�</div> - <div class="num_wrap"> - <span class="num">{{ data4.levelNum }}</span> - <span>浜�</span> - </div> - </div> - <div class="spacing"></div> - <div class="item"> - <div class="name">婊炵暀</div> - <div class="num_wrap"> - <span class="num">{{ data4.retentionNum }}</span> - <span>浜�</span> - </div> - </div> - </div> - <div class="echart3" id="echart3"></div> </div> <div class="right_box_two"> - - </div> - <div class="right_box_three"> - - </div> - </div> - </div> - <div class="main_footer"> - <!-- <div class="car_warning"> - <div class="com_header"> - <div class="title"> - <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" /> - <div>褰撳墠杞﹁締婊炵暀棰勮</div> - </div> - <img src="@/assets/images/task/title@2x.png" class="bg" alt="" /> - </div> - <div class="table"> - <div class="line header"> - <div>杞︾墝</div> - <div class="dept">鎷滆閮ㄩ棬</div> - <div class="time">瓒呮椂鏃堕暱</div> - </div> - <div class="line"> - <div>鐨朅33234</div> - <div class="dept">缁煎悎绠$悊绉�</div> - <div class="time">10:21</div> - </div> - <div class="separate"></div> - <div class="line"> - <div>鐨朅33234</div> - <div class="dept">缁煎悎绠$悊绉�</div> - <div class="time">10:21</div> - </div> - <div class="separate"></div> - </div> - </div> --> - <div class="safe_warning"> - <div class="com_header"> - <div class="title"> - <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" /> - <div>瀹夐槻鍛婅</div> - </div> - <div class="tabs"> - <div class="tab" :class="{ active: warningTab == '0' }" @click="tasClick('0')">鍏ㄩ儴</div> - <div class="separate"></div> - <div class="tab" :class="{ active: warningTab == '1' }" @click="tasClick('1')">鍖哄煙鍛婅</div> - <div class="separate"></div> - <div class="tab" :class="{ active: warningTab == '2' }" @click="tasClick('2')">琛屼负鍛婅</div> - </div> - <img src="@/assets/images/task/title@2x.png" class="bg" alt="" /> - </div> - <div class="one_swiper_wrap"> - <div class="list one-swiper"> - <div class="swiper-wrapper"> - <div class="one-swiper-slide swiper-slide item" v-for="item in warningList"> - <div class="item_wrap"> - <img :src="item.img" class="avatar" alt=""> - <div class="content"> - <div class="header"> - <div class="name">{{ item.title }}</div> - <div class="have_time">宸茬粡鍙戠敓{{ item.haveTime }}</div> - </div> - <div class="wrap"> - <div class="line addr"> - <img class="icon" src="@/assets/images/SecurityControl/xiaofang_ic_weizhi@2x.png" alt=""> - <span>{{ item.addr }}</span> - </div> - <div class="line time"> - <img class="icon" src="@/assets/images/SecurityControl/clock.png" alt=""> - <span>{{ item.createDate }}</span> - </div> - </div> - </div> - </div> - <div v-if="item.title0 && item.createDate0" class="item_wrap"> - <img :src="item.img0" class="avatar" alt=""> - <div class="content"> - <div class="header"> - <div class="name">{{ item.title0 }}</div> - <div class="have_time">宸茬粡鍙戠敓{{ item.haveTime0 }}</div> - </div> - <div class="wrap"> - <div class="line addr"> - <img class="icon" src="@/assets/images/SecurityControl/xiaofang_ic_weizhi@2x.png" alt=""> - <span>{{ item.addr0 }}</span> - </div> - <div class="line time"> - <img class="icon" src="@/assets/images/SecurityControl/clock.png" alt=""> - <span>{{ item.createDate0 }}</span> - </div> - </div> - </div> - </div> - </div> - <div v-if="warningList.length == 0" class="empty_wrap"> - <img src="@/assets/images/default_empty.png" alt=""> - </div> + <div class="com_header"> + <div class="title"> + <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" /> + <div>鍗遍櫓琛屼负鍔ㄦ�佺鎺�</div> </div> + <img src="@/assets/images/task/title@2x.png" class="bg" alt="" /> </div> - - </div> - - </div> - <div class="garden_warning"> - <div class="com_header"> - <div class="title"> - <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" /> - <div>鍥尯瀹夐槻璁惧</div> - </div> - <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=""> - <div>鐩戞帶鍒楄〃</div> - <img v-if="showJk" src="@/assets/images/SecurityControl/jiankong_ic_close@2x.png" class="top" alt=""> - <img v-else src="@/assets/images/SecurityControl/jiankong_ic_open@2x.png" class="top" alt=""> - </div> - <div class="content"> - <div class="sa_static"> - <div class="echart_wrap"> - <div class="pie_text"> - <div class="fs30"><strong v-if="dataListT2 && dataListT2.length == 2">{{ dataListT2[0].value + - dataListT2[1].value }}</strong></div> - <div>鎬昏</div> - </div> - <div class="echart" id="echart2"></div> - </div> - <div class="list"> - <div class="item" v-for="item, i in dataListT2"> - <div class="line"> - <div :style="{ background: colors[i] }" class="icon"></div> - <div class="text">{{ item.name }}</div> - </div> - <div :style="{ color: colors[i] }" class="num">{{ item.value }} | {{ item.rate }}%</div> - </div> - - </div> - </div> - <div class="table"> - <div class="line header"> - <div class="driver">璁惧绫诲瀷</div> - <div>鎬绘暟</div> - <div>鍦ㄧ嚎鏁�</div> - <div>绂荤嚎鏁�</div> - <div>鍦ㄧ嚎鐜�</div> - </div> - <div class="list two-swiper"> + <div class="one_swiper_wrap"> + <div class="list one-swiper" style="margin: 0 !important;"> <div class="swiper-wrapper"> - <template v-for="item, i in dataList2"> - <div class="item two-swiper-slide swiper-slide"> - <div class="line"> - <div class="driver">{{ item.deviceType }}</div> - <div>{{ item.totalNum }}</div> - <div>{{ item.onlineNum }}</div> - <div>{{ item.offlineDeviceNum }}</div> - <div>{{ item.totalNum ? ((item.onlineNum / item.totalNum) * 100).toFixed(0) : 0 }}% + <div class="one-swiper-slide swiper-slide item" v-for="item in arr2"> + <div class="item_wrap"> + <img :src="item.img" class="avatar" alt=""> + <div class="content"> + <div class="header"> + <div class="name">{{ item.title }}</div> + <div class="have_time">宸茬粡鍙戠敓{{ item.haveTime }}</div> + </div> + <div class="wrap"> + <div class="line addr"> + <img class="icon" src="@/assets/images/SecurityControl/xiaofang_ic_weizhi@2x.png" alt=""> + <span>{{ item.addr }}</span> + </div> + <div class="line time"> + <img class="icon" src="@/assets/images/SecurityControl/clock.png" alt=""> + <span>{{ item.createDate }}</span> + </div> </div> </div> - <div class="separate"></div> </div> - </template> - </div> - </div> - </div> - </div> - </div> - <div class="visitor_warning"> - <div class="com_header"> - <div class="title"> - <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" /> - <div>浠婃棩璁垮婊炵暀鎯呭喌</div> - </div> - <img src="@/assets/images/task/title@2x.png" class="bg" alt="" /> - </div> - <div class="table"> - <div class="line header"> - <div>濮撳悕</div> - <div class="dept">鎷滆閮ㄩ棬</div> - <div class="dept">瓒呮椂鏃堕暱</div> - </div> - <div v-if="dataList3.length > 0" class="three-swiper list"> - <div class="swiper-wrapper"> - <div class="item swiper-slide three-swiper-slide" v-for="item in dataList3"> - <div class="line"> - <div>{{ item.name }}</div> - <div class="dept">{{ item.companyName }}</div> - <div class="dept">{{ item.timeOutMinuteT }}</div> </div> - <div class="separate"></div> + <div v-if="arr2.length == 0" style="width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;"> + <img src="@/assets/images/default_empty.png" style="width: 120px; height: 120px;" alt=""> + </div> </div> </div> - </div> - <div v-if="dataList3.length == 0" class="empty_wrap"> - <img src="@/assets/images/default_empty.png" alt=""> </div> </div> </div> @@ -476,7 +421,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' @@ -485,6 +430,8 @@ import * as echarts from 'echarts' import 'swiper/css/swiper.min.css' import Swiper from 'swiper' +import Video from './videoUrl/Video.vue' +import Loading from '@/components/Loading.vue' import { getEnergyCenterData, afgetCarmeraPreviemUrl, @@ -493,7 +440,9 @@ getVisitRetentionData, afgetVisitData, afregionTreea, - visitSecurityData + visitSecurityData, + getFightingcenterData, + inParkUser } from '@/api' @@ -508,137 +457,71 @@ }, 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瀹炰緥鎴愬姛 - oWebControl.value.JS_StartService("window", { // WebControl瀹炰緥鍒涘缓鎴愬姛鍚庨渶瑕佸惎鍔ㄦ湇鍔� - dllPath: "./VideoPluginConnect.dll" // 鍊�"./VideoPluginConnect.dll"鍐欐 - }).then(function () { - oWebControl.value.JS_SetWindowControlCallback({ // 璁剧疆娑堟伅鍥炶皟 - cbIntegrationCallBack: cbIntegrationCallBack - })// 鍚姩鎻掍欢鏈嶅姟鎴愬姛 - // oWebControl.value.JS_CreateWnd("playWnd", that.boxWidth, that.boxHeight).then(function () { //JS_CreateWnd鍒涘缓瑙嗛鎾斁绐楀彛锛屽楂樺彲璁惧畾锛宐oxWidth, boxHeight瀹瑰櫒 - oWebControl.value.JS_CreateWnd("playWnd").then(function () { //JS_CreateWnd鍒涘缓瑙嗛鎾斁绐楀彛锛屽楂樺彲璁惧畾锛宐oxWidth, boxHeight瀹瑰櫒 - init() // 鍒涘缓鎾斁瀹炰緥鎴愬姛鍚庡垵濮嬪寲 - }) - }, function () { // 鍚姩鎻掍欢鏈嶅姟澶辫触 +const initChat = () => { + inParkUser({}) + .then(res => { + let myChart = echarts.init(document.querySelector('.ren_chat_val')) + myChart.setOption({ + grid: { + top: '5%', + left: '5%', + right: '5%', + bottom: '5%', + containLabel: true + }, + tooltip: { + trigger: 'axis' + }, + xAxis: { + type: 'category', + axisLabel: { + color: '#D2E0FF', + interval: 0 + }, + data: ['鍐呴儴鍛樺伐', '闀挎湡鐩稿叧鏂�', '鍦ㄥ洯璁垮', '璐ц繍鍙告満'] + }, + yAxis: { + type: 'value', + axisLabel: { + color: '#D2E0FF' + }, + splitLine: { + show: true, + lineStyle: { + //杩欓噷杈撳叆绾挎潯鐨勬牱寮� + color: 'rgba(255,255,255,0.14)', + } + } + }, + series: [ + { + data: [ + res.data.todayInParkUserNum - (res.data.inParkLwUserNum + res.data.inParkVisitUserNum + res.data.inParkDriverUserNum), + res.data.inParkLwUserNum, + res.data.inParkVisitUserNum, + res.data.inParkDriverUserNum + ], + type: 'bar', + barWidth: 15, + itemStyle: { + normal: { + color: new echarts.graphic.LinearGradient( + 1, 1, 0, 0, + [ + { offset: 0, color: 'rgba(0, 242, 243, 0.10)' }, + { offset: 1, color: 'rgba(0, 242, 243, 1)' } + ] + ) + } + } + } + ] }) - }, - cbConnectError: function () { // 鍒涘缓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 - 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 = "28631222" //缁煎悎瀹夐槻绠$悊骞冲彴鎻愪緵鐨刟ppkey锛屽繀濉� - let secret = setEncrypt("vRfUmiilCd4EpLmtZKoT") //缁煎悎瀹夐槻绠$悊骞冲彴鎻愪緵鐨剆ecret锛屽繀濉� - let ip = "112.48.8.98" //缁煎悎瀹夐槻绠$悊骞冲彴IP鍦板潃锛屽繀濉� - let playMode = 0 //鍒濆鎾斁妯″紡锛�0-棰勮(瀹炴椂娴�)锛�1-鍥炴斁(瑙嗛) - let port = 10443 //缁煎悎瀹夐槻绠$悊骞冲彴绔彛锛岃嫢鍚敤HTTPS鍗忚锛岄粯璁�443 - let snapDir = "D:\\SnapDir" //鎶撳浘瀛樺偍璺緞 - let videoDir = "D:\\VideoDir" //绱ф�ュ綍鍍忔垨褰曞儚鍓緫瀛樺偍璺緞 - let layout = "4x1" //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 //鑷畾涔夊伐鍏锋潯鎸夐挳 + window.addEventListener('resize', function () {//鎵ц + myChart.resize() }) - }).then(function (oData) { - // 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'] const initEnergy = () => { @@ -740,9 +623,9 @@ }) } -const colors = ['#FEAF01', '#01ABFE', '#51F9E4'] +const colors = ['#01ABFE', '#FEAF01', '#51F9E4'] const initEchart2 = () => { - const myChart = echarts.init(document.getElementById('echart2')) + const myChart = echarts.init(document.getElementById('device_chat_val')) const option = { series: [ { @@ -803,10 +686,20 @@ }]), ] const data = [] - 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) }) + if (data4.value.total) { + data.push({ name: '寰呰闂�', value: data4.value.waitVisitNum, rate: (data4.value.waitVisitNum / data4.value.total).toFixed(3) }) + data.push({ name: '宸茶闂�', value: data4.value.registerVisitNum, rate: (data4.value.registerVisitNum / data4.value.total).toFixed(3) }) + data.push({ name: '宸茬寮�', value: data4.value.levelNum, rate: (data4.value.levelNum / data4.value.total).toFixed(3) }) + data.push({ name: '婊炵暀', value: data4.value.retentionNum, rate: (data4.value.retentionNum / data4.value.total).toFixed(3) }) + } else { + data.push({ name: '寰呰闂�', value: data4.value.waitVisitNum, rate: 0 }) + data.push({ name: '宸茶闂�', value: data4.value.registerVisitNum, rate: 0 }) + data.push({ name: '宸茬寮�', value: data4.value.levelNum, rate: 0 }) + data.push({ name: '婊炵暀', value: data4.value.retentionNum, rate: 0 }) + } + data.sort((a, b) => (b.value - a.value)) + // console.log('data', data); + const option = { color: colors, tooltip: { @@ -872,7 +765,7 @@ position: 'outside', formatter: (params) => { const index = params.dataIndex - return `{color${index}|${params.data.name} ${params.data.rate}%}` + return `{color${index}|${params.data.name} ${(params.data.rate * 100).toFixed(1)}%}` // return `<div>${params.data.name}</div>` }, rich: { @@ -916,12 +809,32 @@ } const data = ref({}) +let totalCar = ref(0) +let CarList = ref([]) + const getData1 = () => { + CarList.value = [] getEnergyCenterData().then(res => { if (res.code == 200) { const result = res.data data.value = result - initEchart1() + res.data.inParkCarList.forEach(item => { + totalCar.value += item.total + if (item.name === '鍏姟杞�') { + CarList.value.push({ name: '鍏姟杞﹁締', value: item.total, color: '#FEAF01' }) + } else if (item.name === '绉佸杞�') { + CarList.value.push({ name: '绉佸杞﹁締', value: item.total, color: '#28F0C4' }) + } else if (item.name === '璁垮杞﹁締') { + CarList.value.push({ name: '璁垮杞﹁締', value: item.total, color: '#EEF028' }) + } else if (item.name === '璐ц繍杞﹁締') { + CarList.value.push({ name: '璐ц繍杞﹁締', value: item.total, color: '#01ABFE' }) + } else if (item.name === '鏈煡杞﹁締') { + CarList.value.push({ name: '鏈煡杞﹁締', value: item.total, color: '#0028ff' }) + } + }) + nextTick(() => { + initSafe() + }) } }) } @@ -938,15 +851,15 @@ let outline = 0 let total = 0 dataList2.value = result.map(item => { - total += item.totalNum + // total += item.totalNum online += item.onlineNum outline += item.offlineDeviceNum - if (item.deviceType && item.deviceType.length > 6) { - item.deviceType = item.deviceType.slice(0, 6) + '...' + if (item.deviceType && item.deviceType.length > 4) { + item.deviceType = item.deviceType.slice(0, 4) + '...' } return item }) - data2.value = total + data2.value = online if (online >= outline) { temp.push({ name: '鍦ㄧ嚎', value: online, rate: ((online / (online + outline)) * 100).toFixed(1) }) temp.push({ name: '绂荤嚎', value: outline, rate: ((outline / (online + outline)) * 100).toFixed(1) }) @@ -956,8 +869,12 @@ } dataListT2.value = temp + // console.log(dataListT2.value) + console.log(dataList2.value) } - initEchart2() + nextTick(() => { + initEchart2() + }) }) } @@ -969,6 +886,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 || [] dataList3.value = result.map(i => { if (i.timeOutMinute) { @@ -979,42 +897,70 @@ } else if (i.timeOutMinute > 60) { i.timeOutMinuteT = dayjs.duration(i.timeOutMinute * 60 * 1000).format('H鏃秏鍒�') } else { - i.timeOutMinuteT = item.timeOutMinuteT + '鍒�' + i.timeOutMinuteT = i.timeOutMinute + '鍒�' } return i }) - initEchart3() + dataList3.value = [...dataList3.value, ...dataList3.value, ...dataList3.value, ...dataList3.value] + // initEchart3() }) } +const loading1 = ref(false) const warningTab = ref('0') const warningNum = ref(0) const warningList = ref([]) + +const arr1 = ref([]) // 閲嶇偣鍖哄煙鍔ㄦ�佺鎺� +const arr2 = ref([]) // 鍗遍櫓琛屼负鍔ㄦ�佺鎺� + const getWarning = () => { - afwarningEventData({ type: warningTab.value }).then(res => { + afwarningEventData({ type: 1 }) + .then(res => { + if (!res.data) return + const result = res.data.list || [] + arr1.value = result.map(item => { + item.haveTime = dayjs.duration(new Date().getTime() - new Date(item.createDate).getTime()).format('HH灏忔椂mm鍒嗛挓') + return item + }) + }) + afwarningEventData({ type: 2 }) + .then(res => { + if (!res.data) return + const result = res.data.list || [] + arr2.value = result.map(item => { + item.haveTime = dayjs.duration(new Date().getTime() - new Date(item.createDate).getTime()).format('HH灏忔椂mm鍒嗛挓') + return item + }) + }) + // loading1.value = true + afwarningEventData({ type: 0 }).then(res => { + // loading1.value = false if (!res.data) return const result = res.data.list || [] warningNum.value = res.data.total - warningList.value = result.map(item => { - item.haveTime = dayjs.duration(new Date().getTime() - new Date(item.createDate).getTime()).format('HH灏忔椂mm鍒嗛挓') - return item - }) - let temp = [] - warningList.value.forEach((item, i) => { - // console.log(i); - if (i == 0 || i % 2 == 0) { - temp.push(item) - } else { - temp[temp.length - 1].addr0 = item.addr - temp[temp.length - 1].createDate0 = item.createDate - temp[temp.length - 1].haveTime0 = item.haveTime - temp[temp.length - 1].img0 = item.img - temp[temp.length - 1].title0 = item.title - } - }) - warningList.value = temp + // warningList.value = result.map(item => { + // item.haveTime = dayjs.duration(new Date().getTime() - new Date(item.createDate).getTime()).format('HH灏忔椂mm鍒嗛挓') + // return item + // }) + // let temp = [] + // warningList.value.forEach((item, i) => { + // // console.log(i); + // if (i == 0 || i % 2 == 0) { + // temp.push(item) + // } else { + // temp[temp.length - 1].addr0 = item.addr + // temp[temp.length - 1].createDate0 = item.createDate + // temp[temp.length - 1].haveTime0 = item.haveTime + // temp[temp.length - 1].img0 = item.img + // temp[temp.length - 1].title0 = item.title + // } + // }) + // warningList.value = temp // console.log('temp', warningList.value); + }, () => { + // loading1.value = false }) } const tasClick = (val) => { @@ -1038,6 +984,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 @@ -1046,27 +999,9 @@ } } const menuItemClick = (val) => { - initPlugin() activeMenu.value = val - 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') - } - }) - // 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 } @@ -1079,34 +1014,117 @@ initialSlide: 0, // loop: true, // 寰幆妯″紡閫夐」 direction: 'vertical', //绔栫洿鏂瑰悜 - slidesPerView: 2, - autoplay: warningList.value.length > 1 ? { delay: 4000, disableOnInteraction: false } : false, - observer: true, //淇敼swiper鑷繁鎴栧瓙鍏冪礌鏃讹紝鑷姩鍒濆鍖杝wiper - }) -} -const loopFn2 = () => { - var newSwiper1 = new Swiper('.two-swiper', { - initialSlide: 0, - direction: 'vertical', //绔栫洿鏂瑰悜 slidesPerView: 3, - autoplay: autoplayFlag(dataList2.value, 3, 4000), + autoplay: arr1.value.length > 3 ? { delay: 4000, disableOnInteraction: false } : false, observer: true, //淇敼swiper鑷繁鎴栧瓙鍏冪礌鏃讹紝鑷姩鍒濆鍖杝wiper }) } +// const loopFn2 = () => { +// var newSwiper2 = new Swiper('.two-swiper', { +// initialSlide: 0, +// direction: 'vertical', //绔栫洿鏂瑰悜 +// slidesPerView: 3, +// autoplay: autoplayFlag(arr2.value.filter(i => i.totalNum > 0), 3, 4000), +// observer: true, //淇敼swiper鑷繁鎴栧瓙鍏冪礌鏃讹紝鑷姩鍒濆鍖杝wiper +// }) +// } const loopFn3 = () => { - var newSwiper1 = new Swiper('.three-swiper', { + var newSwiper3 = new Swiper('.three-swiper', { initialSlide: 0, // loop: true, // 寰幆妯″紡閫夐」 direction: 'vertical', //绔栫洿鏂瑰悜 slidesPerView: 3, - // autoplay: { delay: 500, disableOnInteraction: false }, + height: 100, autoplay: autoplayFlag(dataList3.value, 3, 4000), observer: true, //淇敼swiper鑷繁鎴栧瓙鍏冪礌鏃讹紝鑷姩鍒濆鍖杝wiper }) } +const loopFn4 = () => { + var newSwiper4 = new Swiper('.four-swiper', { + initialSlide: 0, + height: 100, + direction: 'vertical', + slidesPerView: 3, + autoplay: autoplayFlag(dataList2.value, 3, 4000), + observer: true + }) +} +const initSafe = () => { + const myChart = echarts.init(document.getElementById('safe_chat_val')) + const option = { + xAxis: CarList.value.map(item => item.name), + series: [ + { + type: 'pie', + radius: ['86%', '100%'], + label: { + show: false, + position: 'center' + }, + padAngle: 5, + itemStyle: { + borderRadius: 10 + }, + color: CarList.value.map(item => item.color), + labelLine: { + show: false + }, + data: CarList.value.map(item => item.value) + } + ] + } + myChart.setOption(option) + window.addEventListener('resize', function () { // 鎵ц + myChart.resize() + }) +} + +const initDevice = () => { + let colorList = ['#FFD802', '#53E3FF'] + const myChart = echarts.init(document.getElementById('device_chat_val')) + const temp = [] + temp.push({ name: '鍦ㄧ嚎', value: 12 }) + temp.push({ name: '绂荤嚎', value: 32 }) + temp.sort((a, b) => { + return a.value - b.value + }) + const option = { + xAxis: temp.map(item => item.name), + series: [ + { + type: 'pie', + radius: ['86%', '100%'], + label: { + show: false, + position: 'center' + }, + padAngle: 5, + itemStyle: { + borderRadius: 10 + }, + color: colorList, + labelLine: { + show: false + }, + data: temp.map(item => item.value) + } + ] + } + myChart.setOption(option) + window.addEventListener('resize', function () { // 鎵ц + myChart.resize() + }) +} + +const dataList5 = ref({}) +const getData4 = () => { + getFightingcenterData().then(res => { + dataList5.value = res.data || {} + }) +} onMounted(() => { getData1() @@ -1115,12 +1133,18 @@ getData5() getWarning() + initChat() + // initSafe() + initDevice() + getData4() setInterval(() => { getData1() getData2() getData3() + getData4() getWarning() + initChat() }, 1000 * 60) setInterval(() => { @@ -1129,8 +1153,9 @@ setTimeout(() => { loopFn1() - loopFn2() + // loopFn2() loopFn3() + loopFn4() }, 12000) }) @@ -1147,12 +1172,237 @@ display: block !important; } +.swiper-slide { + height: auto !important; /* 浣跨敤 !important 鏉ョ‘淇濅紭鍏堢骇 */ +} + .main_content { display: flex; padding: 20px 25px 0; .left_box { width: 360px; + + .safe_warning { + width: 360px; + position: relative; + + .safe_warning_content { + width: 100%; + padding: 15px 0; + box-sizing: border-box; + height: 326px; + background: rgba(0,86,255,0.1); + backdrop-filter: blur(5px); + .safe_chat { + width: 100%; + height: 169px; + margin-top: 15px; + display: flex; + padding: 15px 24px; + box-sizing: border-box; + align-items: start; + position: relative; + .safe_chat_val_n { + position: absolute; + top: 75px; + left: 84px; + transform: translate(-50%, -50%); + width: 90px; + height: 90px; + border-radius: 50%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + border: 1px dashed rgba(1,217,254,0.7); + span { + &:nth-child(1) { + font-weight: bold; + font-size: 18px; + color: #FFFFFF; + } + &:nth-child(2) { + font-weight: 400; + font-size: 12px; + color: rgba(255,255,255,0.8); + } + } + } + #safe_chat_val { + flex-shrink: 0; + width: 120px; + height: 120px; + margin-right: 40px; + } + .safe_chat_info { + flex: 1; + height: 100%; + display: flex; + flex-direction: column; + .safe_chat_info_row { + width: 100%; + display: flex; + align-items: center; + justify-content: space-between; + margin-top: 10px; + &:first-child { + margin: 0 !important; + } + .safe_left { + display: flex; + align-items: center; + .safe_left_dian { + width: 12px; + height: 12px; + border-radius: 50%; + background: #01ABFE; + margin-right: 10px; + } + .safe_left_name { + font-weight: 400; + font-size: 14px; + color: #FFFFFF; + } + } + .safe_num { + font-weight: bold; + font-size: 16px; + color: #01ABFE; + } + } + } + } + .safe_zhu { + width: 100%; + height: 91px; + padding: 0 20px; + box-sizing: border-box; + display: flex; + flex-direction: column; + .safe_zhu_item { + width: 100%; + display: flex; + align-items: center; + margin-bottom: 15px; + &:last-child { + margin: 0 !important; + } + .safe_zhu_item_label { + width: 100px; + flex-shrink: 0; + } + .safe_zhu_item_c { + flex: 1; + display: flex; + flex-direction: column; + .safe_zhu_item_c_t { + width: 100%; + display: flex; + align-items: center; + justify-content: space-between; + span { + font-weight: 400; + font-size: 13px; + color: #D2E0FF; + } + } + .safe_zhu_item_c_b { + width: 100%; + height: 10px; + margin-top: 5px; + background: rgba(255,255,255,0.07); + .safe_zhu_item_c_b_z { + height: 100%; + background: linear-gradient( 270deg, #00F2F3 0%, rgba(0,242,243,0.1) 100%); + } + } + } + } + } + } + + .list { + height: 204px; + overflow: hidden; + margin-top: 15px; + scrollbar-width: none; + display: flex; + flex-wrap: wrap; + margin-left: 20px; + + .item { + width: 736px; + height: 102px !important; + font-size: 13px; + color: #D2E0FF; + display: flex; + + /* border: 1px solid; */ + .item_wrap { + width: 368px; + height: 90px; + padding: 10px; + background: linear-gradient(270deg, rgba(1, 217, 254, 0) 0%, rgba(1, 217, 254, 0.19) 100%); + border: 1px solid #006E81; + display: flex; + margin-right: 10px; + + &:nth-of-type(2n) { + margin-right: 0; + } + } + + + .avatar { + width: 70px; + height: 70px; + margin-right: 10px; + } + + .content { + flex: 1; + + .header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + + .name { + font-weight: 500; + font-size: 15px; + } + + .have_time { + font-size: 12px; + color: #D2E0FF; + + span { + color: #FEAF01; + } + } + } + + .wrap { + font-size: 12px; + color: #D2E0FF; + + .line { + display: flex; + align-items: center; + margin-bottom: 3px; + } + + .icon { + width: 12px; + margin-right: 8px; + } + } + } + } + } + } .left_box_one { width: 100%; @@ -1163,6 +1413,68 @@ background: rgba(0, 86, 255, 0.05); backdrop-filter: blur(5px); + .table { + height: 158px; + overflow: hidden; + width: 100%; + padding: 15px; + box-sizing: border-box; + + .line { + display: flex; + align-items: center; + font-size: 14px; + height: 32px; + + div { + flex: 3; + height: 16px; + display: flex; + align-items: center; + justify-content: center; + } + + .dept { + flex: 8; + } + + .time { + flex: 5; + } + } + + .header { + background: rgba(134,156,201,0.2); + font-weight: 500; + + div { + border-right: 1px solid rgba(255, 255, 255, 0.2); + + &:nth-last-child(1) { + border: none; + } + } + } + + .separate { + width: 100%; + height: 2px; + background-color: rgba(255, 255, 255, 0.2); + /* background-color: red; */ + border-right: 4px solid #00F2F3; + border-left: 4px solid #00F2F3; + } + } + + .ren_chat { + width: 100%; + height: 130px; + .ren_chat_val { + width: 100%; + height: 100%; + } + } + .second_title { margin-top: 24px; margin-bottom: 20px; @@ -1170,7 +1482,7 @@ .stall_static { display: flex; - margin-bottom: 60px; + margin-bottom: 30px; padding: 0 20px; .residue { @@ -1354,6 +1666,10 @@ .center_box { flex: 1; margin: 0 20px; + display: flex; + flex-direction: column; + justify-content: space-between; + position: relative; .jiankong { margin: 0 48px; @@ -1503,6 +1819,228 @@ } } } + + .monitoring { + position: absolute; + cursor: pointer; + bottom: 220px; + right: 0; + display: flex; + align-items: center; + justify-content: center; + font-weight: 500; + font-size: 15px; + width: 134px; + height: 40px; + background: linear-gradient(180deg, #021F4A 0%, #054281 100%), linear-gradient(180deg, #011738 0%, rgba(5, 66, 129, 0.26) 100%), #00141F; + border-radius: 2px; + border: 1px solid rgba(12, 153, 236, 0.68); + + .icon { + width: 16px; + height: 16px; + margin-right: 4px; + } + + .top { + width: 12px; + height: 12px; + margin-left: 8px; + } + } + + .center_box_two { + width: 100%; + height: 202px; + display: flex; + align-items: center; + .center_box_two_left { + flex-shrink: 0; + width: 621px; + height: 100%; + .device { + width: 100%; + height: 162px; + padding: 15px; + background: rgba(0,86,255,0.1); + backdrop-filter: blur(5px); + box-sizing: border-box; + display: flex; + align-items: center; + justify-content: space-between; + .device_chat { + flex-shrink: 0; + width: 251px; + height: 100%; + display: flex; + align-items: start; + position: relative; + .device_chat_qiam { + position: absolute; + top: 16px; + left: 16px; + width: 88px; + height: 88px; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + border-radius: 50%; + box-shadow: inset 0 0 8px 0 #01D9FE; + span { + &:nth-child(1) { + font-weight: 500; + font-size: 20px; + color: #FFFFFF; + } + &:nth-child(2) { + font-weight: 400; + font-size: 14px; + color: rgba(255,255,255,0.8); + } + } + } + #device_chat_val { + flex-shrink: 0; + width: 120px; + height: 120px; + margin-right: 30px; + } + .device_chat_info { + flex: 1; + display: flex; + flex-direction: column; + .device_chat_info_row { + display: flex; + align-items: start; + margin-bottom: 20px; + &:last-child { + margin: 0 !important; + } + .device_chat_info_row_dian { + width: 12px; + height: 12px; + border-radius: 50%; + background: #01D9FE; + margin-top: 5px; + margin-right: 10px; + } + .device_chat_info_row_nr { + display: flex; + flex-direction: column; + span { + &:nth-child(1) { + font-weight: 400; + font-size: 14px; + color: #FFFFFF; + } + &:nth-child(2) { + font-weight: 500; + font-size: 14px; + color: #01D9FE; + } + } + } + } + } + } + .device_table { + flex: 1; + height: 100%; + .table { + height: 128px; + overflow: hidden; + width: 100%; + + .line { + display: flex; + align-items: center; + font-size: 14px; + height: 32px; + + .line-row { + flex: 1; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + } + } + + .header { + background: rgba(134, 156, 201, 0.1); + font-weight: 500; + + div { + border-right: 1px solid rgba(255, 255, 255, 0.2); + + &:nth-last-child(1) { + border: none; + } + } + } + + .separate { + width: 100%; + height: 2px; + background-color: rgba(255, 255, 255, 0.2); + border-right: 4px solid #00F2F3; + border-left: 4px solid #00F2F3; + } + } + } + } + } + .center_box_two_right { + flex: 1; + height: 100%; + .device { + width: 100%; + height: 162px; + padding: 23px 20px; + background: rgba(0,86,255,0.1); + backdrop-filter: blur(5px); + box-sizing: border-box; + display: flex; + align-items: center; + justify-content: center; + .device_item { + flex: 1; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + img { + flex-shrink: 0; + width: 90px; + height: 90px; + margin-right: 10px; + } + .device_item_info { + display: flex; + flex-direction: column; + span { + &:nth-child(1) { + font-weight: 400; + font-size: 15px; + color: #FFFFFF; + } + &:nth-child(2) { + font-weight: 400; + font-size: 12px; + color: #D2E0FF; + b { + font-weight: bold; + font-size: 24px; + line-height: 36px; + } + } + } + } + } + } + } + } } .right_box { @@ -1513,90 +2051,256 @@ background: rgba(0, 86, 255, 0.05); backdrop-filter: blur(5px); - .second_title { - margin-top: 20px; + .one_swiper_wrap { + height: 370px; + overflow: hidden; + background: rgba(0, 86, 255, 0.05); + backdrop-filter: blur(5px); + padding: 15px; + box-sizing: border-box; } - .static_wrap { - padding: 14px 0 0 46px; + .list { + height: 100%; + overflow: hidden; + margin-top: 15px; + scrollbar-width: none; + display: flex; + flex-wrap: wrap; .item { + width: 100%; + height: 102px !important; + font-size: 13px; + color: #D2E0FF; display: flex; - align-items: center; - display: flex; - margin-bottom: 10px; - img { + .item_wrap { + width: 368px; + height: 90px; + padding: 10px; + background: linear-gradient( 270deg, rgba(254,85,1,0) 0%, rgba(254,85,1,0.44) 100%); + border: 1px solid #C15D2B; + display: flex; + } + + + .avatar { width: 70px; height: 70px; - margin-right: 20px; + margin-right: 10px; } .content { - color: #FFFFFF; + flex: 1; - .num { - margin-top: 8px; - font-size: 16px; - color: #00F2F3; + .header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; - span { - font-size: 20px; - margin-right: 4px; - font-weight: 600; + .name { + font-weight: 500; + font-size: 15px; + } + + .have_time { + font-size: 12px; + color: #D2E0FF; + + span { + color: #FEAF01; + } } } - .today { - color: #09FACD; - } + .wrap { + font-size: 12px; + color: #D2E0FF; - .finish { - color: #FEAF01; + .line { + display: flex; + align-items: center; + margin-bottom: 3px; + } + + .icon { + width: 12px; + margin-right: 8px; + } } } } } - .visitor_list { - display: flex; - justify-content: space-between; - padding: 20px 20px 16px; + /*.second_title {*/ + /* margin-top: 20px;*/ + /*}*/ - .item { - font-size: 12px; - color: #D2E0FF; + /*.static_wrap {*/ + /* padding: 14px 0 0 46px;*/ - .num_wrap { - display: flex; - align-items: flex-end; - margin-top: 8px; + /* .item {*/ + /* display: flex;*/ + /* align-items: center;*/ + /* display: flex;*/ + /* margin-bottom: 10px;*/ - .num { - font-size: 22px; - line-height: 22px; - color: #FFFFFF; - } - } - } + /* img {*/ + /* width: 70px;*/ + /* height: 70px;*/ + /* margin-right: 20px;*/ + /* }*/ - .spacing { - width: 1px; - height: 40px; - background-color: #405173; - margin: 0 24px; - } - } + /* .content {*/ + /* color: #FFFFFF;*/ - .echart3 { - width: 100%; - height: 140px; - } + /* .num {*/ + /* margin-top: 8px;*/ + /* font-size: 16px;*/ + /* color: #00F2F3;*/ + + /* span {*/ + /* font-size: 20px;*/ + /* margin-right: 4px;*/ + /* font-weight: 600;*/ + /* }*/ + /* }*/ + + /* .today {*/ + /* color: #09FACD;*/ + /* }*/ + + /* .finish {*/ + /* color: #FEAF01;*/ + /* }*/ + /* }*/ + /* }*/ + /*}*/ + + /*.visitor_list {*/ + /* display: flex;*/ + /* justify-content: space-between;*/ + /* padding: 20px 20px 16px;*/ + + /* .item {*/ + /* font-size: 12px;*/ + /* color: #D2E0FF;*/ + + /* .num_wrap {*/ + /* display: flex;*/ + /* align-items: flex-end;*/ + /* margin-top: 8px;*/ + + /* .num {*/ + /* font-size: 22px;*/ + /* line-height: 22px;*/ + /* color: #FFFFFF;*/ + /* }*/ + /* }*/ + /* }*/ + + /* .spacing {*/ + /* width: 1px;*/ + /* height: 40px;*/ + /* background-color: #405173;*/ + /* margin: 0 24px;*/ + /* }*/ + /*}*/ + + /*.echart3 {*/ + /* width: 100%;*/ + /* height: 140px;*/ + /*}*/ } .right_box_two { background: rgba(0, 86, 255, 0.05); backdrop-filter: blur(5px); + + .one_swiper_wrap { + height: 350px; + overflow: hidden; + background: rgba(0, 86, 255, 0.05); + backdrop-filter: blur(5px); + padding: 15px; + box-sizing: border-box; + } + + .list { + height: 100%; + overflow: hidden; + margin-top: 15px; + scrollbar-width: none; + display: flex; + flex-wrap: wrap; + + .item { + width: 100%; + height: 102px !important; + font-size: 13px; + color: #D2E0FF; + display: flex; + + .item_wrap { + width: 368px; + height: 90px; + padding: 10px; + background: linear-gradient( 270deg, rgba(1,217,254,0) 0%, rgba(1,217,254,0.19) 100%); + border: 1px solid #006E81; + display: flex; + } + + + .avatar { + width: 70px; + height: 70px; + margin-right: 10px; + } + + .content { + flex: 1; + + .header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + + .name { + font-weight: 500; + font-size: 15px; + } + + .have_time { + font-size: 12px; + color: #D2E0FF; + + span { + color: #FEAF01; + } + } + } + + .wrap { + font-size: 12px; + color: #D2E0FF; + + .line { + display: flex; + align-items: center; + margin-bottom: 3px; + } + + .icon { + width: 12px; + margin-right: 8px; + } + } + } + } + } } .right_box_three { @@ -1669,60 +2373,21 @@ .car_warning { width: 360px; - - .table { - margin-top: 15px; - - .line { - display: flex; - align-items: center; - font-size: 14px; - height: 32px; - - div { - flex: 3; - height: 16px; - display: flex; - align-items: center; - justify-content: center; - } - - .dept { - flex: 5; - } - - .time { - flex: 4; - } - } - - .header { - background: rgba(134, 156, 201, 0.1); - font-weight: 500; - - div { - border-right: 1px solid rgba(255, 255, 255, 0.2); - - &:nth-last-child(1) { - border: none; - } - } - } - - .separate { - width: 100%; - height: 2px; - background-color: rgba(255, 255, 255, 0.2); - /* background-color: red; */ - border-right: 4px solid #00F2F3; - border-left: 4px solid #00F2F3; - } - } } .safe_warning { width: 786px; margin-right: 20px; + position: relative; + + .safe_warning_content { + width: 100%; + padding: 15px; + box-sizing: border-box; + height: 326px; + background: rgba(0,86,255,0.1); + backdrop-filter: blur(5px); + } /* one-swiper */ .one_swiper_wrap { @@ -1830,7 +2495,8 @@ display: flex; justify-content: center; align-items: center; - padding: 16px 24px; + padding-top: 16px; + padding-left: 24px; .echart_wrap { position: relative; @@ -1866,7 +2532,7 @@ } .list { - margin-left: 36px; + margin-left: 32px; flex: 1; display: flex; flex-direction: column; @@ -1897,67 +2563,6 @@ } } } - - .table { - .list { - height: 102px !important; - overflow: hidden; - - .item { - height: 34px !important; - } - } - - .line { - height: 32px !important; - - div { - justify-content: flex-end; - padding-right: 10px; - } - - .driver { - flex: 5; - justify-content: center; - } - } - - .header { - div { - justify-content: center; - padding-right: 0; - } - } - } - } - - .monitoring { - position: absolute; - cursor: pointer; - top: -60px; - right: 0; - display: flex; - align-items: center; - justify-content: center; - font-weight: 500; - font-size: 15px; - width: 134px; - height: 40px; - background: linear-gradient(180deg, #021F4A 0%, #054281 100%), linear-gradient(180deg, #011738 0%, rgba(5, 66, 129, 0.26) 100%), #00141F; - border-radius: 2px; - border: 1px solid rgba(12, 153, 236, 0.68); - - .icon { - width: 16px; - height: 16px; - margin-right: 4px; - } - - .top { - width: 12px; - height: 12px; - margin-left: 8px; - } } } @@ -1966,25 +2571,6 @@ width: 360px; background: rgba(0, 86, 255, 0.05); backdrop-filter: blur(5px); - - .table { - .list { - height: 102px !important; - overflow: hidden; - - .item { - height: 34px !important; - } - } - - .line { - div { - .dept { - flex: 5; - } - } - } - } } } @@ -2034,57 +2620,6 @@ } } } - -.table { - margin-top: 15px; - flex: 1; - - .line { - display: flex; - align-items: center; - font-size: 14px; - height: 32px; - - div { - flex: 3; - height: 16px; - display: flex; - align-items: center; - justify-content: center; - } - - .dept { - flex: 5; - } - - .time { - flex: 4; - } - } - - .header { - background: rgba(134, 156, 201, 0.1); - font-weight: 500; - - div { - border-right: 1px solid rgba(255, 255, 255, 0.2); - - &:nth-last-child(1) { - border: none; - } - } - } - - .separate { - width: 100%; - height: 2px; - background-color: rgba(255, 255, 255, 0.2); - /* background-color: red; */ - border-right: 4px solid #00F2F3; - border-left: 4px solid #00F2F3; - } -} - .second_title { height: 24px; display: flex; @@ -2140,6 +2675,15 @@ object-fit: cover; z-index: -1; } + + .main_znz { + width: 68px; + height: 68px; + position: absolute; + right: 420px; + top: 250px; + z-index: -1; + } } .bg { @@ -2151,4 +2695,4 @@ object-fit: cover; z-index: -1; } -</style> \ No newline at end of file +</style> -- Gitblit v1.9.3