From a0f6b517164ce4151115b1aad2b428e4f012011b Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期四, 14 十一月 2024 18:19:55 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
screen/src/assets/images/LogisticsCenter/map_car_lixian@2x.png | 0
screen/src/api/index.js | 12 +
screen/src/utils/request.js | 7
screen/src/views/LogisticsEfficiency.vue | 166 ++++++++++++++--
screen/vite.config.js | 4
screen/src/assets/images/LogisticsCenter/car_lixian@2x.png | 0
screen/src/assets/images/LogisticsCenter/map_car_zaitu@2x.png | 0
screen/src/assets/images/LogisticsCenter/car_kongxian@2x.png | 0
screen/src/views/SecurityControl.vue | 375 +++++++++++++++++++++++--------------
screen/src/assets/images/LogisticsCenter/car_zaitu@2x.png | 0
screen/src/assets/images/LogisticsCenter/map_car_kongxian@2x.png | 0
screen/src/views/TaskEfficiency.vue | 4
12 files changed, 390 insertions(+), 178 deletions(-)
diff --git a/screen/src/api/index.js b/screen/src/api/index.js
index 9a19320..ee208df 100644
--- a/screen/src/api/index.js
+++ b/screen/src/api/index.js
@@ -113,17 +113,25 @@
export const getVisitRetentionData = (data) => {
return request('visitsAdmin/cloudService/board/api/security/visitRetentionData', data)
}
+// 瀹夐槻绠℃帶澶у睆 璁垮婊炵暀鎯呭喌
+export const visitSecurityData = (data) => {
+ return request('visitsAdmin/cloudService/board/api/security/visitSecurityData', data)
+}
// 瀹夐槻绠℃帶澶у睆 璁垮鍒嗘瀽
export const afgetVisitData = (data) => {
return request('visitsAdmin/cloudService/board/api/security/getVisitData', data)
}
// 瀹夐槻绠℃帶澶у睆 鍖哄煙闆嗗悎
export const afregionList = (data) => {
- return request('visitsAdmin/cloudService/board/api/security/regionList', data)
+ return request('visitsAdmin/cloudService/board/api/security/regionList', data, "POST")
}
// 瀹夐槻绠℃帶澶у睆 鏍戝瀷鍖哄煙闆嗗悎
export const afregionTreea = (data) => {
- return request('visitsAdmin/cloudService/board/api/security/regionList', data)
+ return request('visitsAdmin/cloudService/board/api/security/regionList', data, "POST")
+}
+// 瀹夐槻绠℃帶澶у睆 鏍规嵁code鑾峰彇鍦板潃
+export const afgetCarmeraPreviemUrl = (data) => {
+ return request('visitsAdmin/cloudService/board/api/security/getCarmeraPreviemUrl', data)
}
// 瀹夐槻绠℃帶澶у睆 鍛婅
export const afwarningEventData = (data) => {
diff --git a/screen/src/assets/images/LogisticsCenter/car_kongxian@2x.png b/screen/src/assets/images/LogisticsCenter/car_kongxian@2x.png
new file mode 100644
index 0000000..4b88ea3
--- /dev/null
+++ b/screen/src/assets/images/LogisticsCenter/car_kongxian@2x.png
Binary files differ
diff --git a/screen/src/assets/images/LogisticsCenter/car_lixian@2x.png b/screen/src/assets/images/LogisticsCenter/car_lixian@2x.png
new file mode 100644
index 0000000..bc75d5f
--- /dev/null
+++ b/screen/src/assets/images/LogisticsCenter/car_lixian@2x.png
Binary files differ
diff --git a/screen/src/assets/images/LogisticsCenter/car_zaitu@2x.png b/screen/src/assets/images/LogisticsCenter/car_zaitu@2x.png
new file mode 100644
index 0000000..4640d4b
--- /dev/null
+++ b/screen/src/assets/images/LogisticsCenter/car_zaitu@2x.png
Binary files differ
diff --git a/screen/src/assets/images/LogisticsCenter/map_car_kongxian@2x.png b/screen/src/assets/images/LogisticsCenter/map_car_kongxian@2x.png
new file mode 100644
index 0000000..38bff78
--- /dev/null
+++ b/screen/src/assets/images/LogisticsCenter/map_car_kongxian@2x.png
Binary files differ
diff --git a/screen/src/assets/images/LogisticsCenter/map_car_lixian@2x.png b/screen/src/assets/images/LogisticsCenter/map_car_lixian@2x.png
new file mode 100644
index 0000000..42ffa31
--- /dev/null
+++ b/screen/src/assets/images/LogisticsCenter/map_car_lixian@2x.png
Binary files differ
diff --git a/screen/src/assets/images/LogisticsCenter/map_car_zaitu@2x.png b/screen/src/assets/images/LogisticsCenter/map_car_zaitu@2x.png
new file mode 100644
index 0000000..7efde5a
--- /dev/null
+++ b/screen/src/assets/images/LogisticsCenter/map_car_zaitu@2x.png
Binary files differ
diff --git a/screen/src/utils/request.js b/screen/src/utils/request.js
index 490faed..a20accf 100644
--- a/screen/src/utils/request.js
+++ b/screen/src/utils/request.js
@@ -18,11 +18,12 @@
export default instance
-export const request = (url, data) => {
+export const request = (url, data, method = 'GET') => {
return instance({
url: url,
- method: 'GET',
- params: { ...data }
+ method: method || 'GET',
+ params: method == 'GET' ? { ...data } : null,
+ data: method == 'POST' ? { ...data } : null
})
}
diff --git a/screen/src/views/LogisticsEfficiency.vue b/screen/src/views/LogisticsEfficiency.vue
index a04ca3b..1d043b5 100644
--- a/screen/src/views/LogisticsEfficiency.vue
+++ b/screen/src/views/LogisticsEfficiency.vue
@@ -89,14 +89,19 @@
<span class="item addr">鏀惰揣鍗曚綅</span>
<span class="item time">浠诲姟寮�濮嬫椂闂�</span>
</div>
- <div class="line" v-for="item in dataList3">
- <span class="item flag"><span :class="{ flag_bg: item.type == 1 || item.type == 3 }">{{ item.type == 1
- || item.type == 3 ? '鍑�' : '鍏�' }}</span></span>
- <span class="item order">{{ item.billCode || item.contractNum }}</span>
- <span class="item id_card">{{ item.carCodeFront }}</span>
- <span class="item status">{{ statusMap[item.status].label }}</span>
- <span class="item addr">{{ item.repertotyAddress }}</span>
- <span class="item time" v-if="item.confirmTaskDate">{{ item.confirmTaskDate.slice(5, 16) }}</span>
+ <div class="one-swiper list_temp">
+ <div class="swiper-wrapper">
+ <div class="line swiper-slide one-swiper-slide" v-for="item in dataList3">
+ <span class="item flag"><span :class="{ flag_bg: item.type == 1 || item.type == 3 }">{{ item.type
+ == 1
+ || item.type == 3 ? '鍑�' : '鍏�' }}</span></span>
+ <span class="item order">{{ item.billCode || item.contractNum }}</span>
+ <span class="item id_card">{{ item.carCodeFront }}</span>
+ <span class="item status">{{ statusMap[item.status].label }}</span>
+ <span class="item addr">{{ item.repertotyAddress }}</span>
+ <span class="item time" v-if="item.confirmTaskDate">{{ item.confirmTaskDate.slice(5, 16) }}</span>
+ </div>
+ </div>
</div>
</div>
</div>
@@ -223,10 +228,12 @@
<Percent v-if="data1.stockTotal && data1.stockMax"
:rate="((data1.stockTotal / data1.stockMax) * 100).toFixed(0)" />
</div>
- <div class="list">
- <div class="item" v-for="item in dataList6">
- <div class="la">{{ item.name }}</div>
- <div class="val">{{ item.num }}涓囨敮</div>
+ <div class="list two-swiper">
+ <div class="swiper-wrapper">
+ <div class="item two-swiper-slide swiper-slide" v-for="item in dataList6">
+ <div class="la">{{ item.name }}</div>
+ <div class="val">{{ item.num }}涓囨敮</div>
+ </div>
</div>
</div>
</div>
@@ -300,6 +307,9 @@
import dayjs from 'dayjs'
import * as echarts from 'echarts'
import ahJSON from '@/assets/anhui.json'
+import icKongxian from '@/assets/images/LogisticsCenter/map_car_kongxian@2x.png'
+import icLixian from '@/assets/images/LogisticsCenter/map_car_lixian@2x.png'
+import icZaitu from '@/assets/images/LogisticsCenter/map_car_zaitu@2x.png'
import {
wlcenterData,
wljobData,
@@ -308,6 +318,8 @@
wltotalInList,
wltransportMeasure,
} from '@/api'
+import 'swiper/css/swiper.min.css'
+import Swiper from 'swiper'
const colors = ['#FEAF01', '#01ABFE', '#51F9E4']
const weekMap = ['鏄熸湡鏃�', '鏄熸湡涓�', '鏄熸湡浜�', '鏄熸湡涓�', '鏄熸湡鍥�', '鏄熸湡浜�', '鏄熸湡鍏�',]
@@ -524,6 +536,66 @@
const initMap = () => {
var myChart = echarts.init(echartMap.value)
echarts.registerMap('js', ahJSON)
+ var scatterData = [
+ {
+ name: '骞煎効鍥�',
+ num: 15,
+ color: ['#1984ff', '#184b8d'],
+ img: icKongxian,
+ data: [
+ { name: '鑵惧啿甯�', value: [117.25, 31.49] },
+ ],
+ },
+ {
+ name: '灏忓',
+ num: 11,
+ color: ['#f16c08', '#7f3710'],
+ img: icLixian,
+ data: [
+ { name: '鑵惧啿甯�', value: [118.5, 31.08] },
+ ],
+ }
+ ]
+ let serData = []
+ scatterData.forEach((item) => {
+ serData.push({
+ name: `${item.name}`,
+ type: 'effectScatter',
+ coordinateSystem: 'geo',
+ effectType: 'ripple',
+ showEffectOn: 'render',
+ // 鏁g偣鏍峰紡
+ rippleEffect: {
+ period: 1,
+ scale: 1,
+ brushType: 'fill'
+ },
+ // 鏁g偣澶у皬 鑷畾涔夋暎鐐瑰浘鐗�
+ // symbol: `image://${item.img}`,
+ symbol: `image://${item.img}`,
+ label: {
+ show: true,
+ formatter: '{b|{b}}',
+ position: 'top',
+ distance: -1,
+ rich: {
+ b: {
+ color: "#fff",
+ fontSize: 14,
+ height: 30,
+ // width: 200,
+ padding: 5,
+ },
+ }
+ },
+ symbolSize: [24, 30],
+ hoverAnimation: true,
+
+ zlevel: 99,
+ data: item.data,
+ })
+ }
+ )
var center = {
'鍚堣偉甯�': [117.25, 31.83],
'婊佸窞甯�': [118.32, 32.3],
@@ -570,7 +642,6 @@
color: '#ffffff'
}
},
-
tooltip: {
trigger: 'item',
formatter: function (params) {
@@ -668,18 +739,19 @@
},
itemStyle: {
normal: {
- borderColor: '#2980b9',
+ borderColor: '#428598',
borderWidth: 1,
areaColor: '#1d3b60'
},
emphasis: {
areaColor: '#FA8C16',
- borderWidth: 0,
- color: 'green'
+ borderWidth: 1,
+ color: '#428598'
}
},
data: data
- }
+ },
+ ...serData,
]
}
@@ -736,6 +808,7 @@
wlplatformJobList().then(res => {
const result = res.data
dataList3.value = result
+ loopFn1()
})
}
const data4 = ref({})
@@ -770,6 +843,33 @@
wlstockList().then(res => {
const result = res.data
dataList6.value = result
+ loopFn2()
+ })
+}
+
+const autoplayFlag = (list = [], leng = 4, time = 2000) => {
+ if (list.length > leng) {
+ return { delay: time, disableOnInteraction: false }
+ } else {
+ return false
+ }
+}
+const loopFn1 = () => {
+ var newSwiper1 = new Swiper('.one-swiper', {
+ initialSlide: 0,
+ direction: 'vertical', //绔栫洿鏂瑰悜
+ slidesPerView: 7,
+ autoplay: autoplayFlag(dataList3.value, 7, 2000),
+ observer: true, //淇敼swiper鑷繁鎴栧瓙鍏冪礌鏃讹紝鑷姩鍒濆鍖杝wiperiper
+ })
+}
+const loopFn2 = () => {
+ var newSwiper1 = new Swiper('.two-swiper', {
+ initialSlide: 0,
+ direction: 'vertical', //绔栫洿鏂瑰悜
+ slidesPerView: 7,
+ autoplay: autoplayFlag(dataList6.value, 7, 2000),
+ observer: true, //淇敼swiper鑷繁鎴栧瓙鍏冪礌鏃讹紝鑷姩鍒濆鍖杝wiperiper
})
}
onMounted(() => {
@@ -789,6 +889,10 @@
<style lang="scss" scoped>
div {
box-sizing: border-box;
+}
+
+.swiper-wrapper {
+ display: block !important;
}
.main_content {
@@ -901,10 +1005,15 @@
.list_wrap {
padding: 10px 0;
+ .list_temp {
+ height: 210px !important;
+ overflow: hidden;
+ }
+
.list {
.line {
display: flex;
- height: 30px;
+ height: 30px !important;
align-items: center;
padding: 0 10px;
font-size: 12px;
@@ -1224,7 +1333,7 @@
.item {
width: 100%;
- height: 36px;
+ height: 36px !important;
display: flex;
align-items: center;
@@ -1526,34 +1635,41 @@
color: #D2E0FF;
padding: 10px;
margin-bottom: 10px;
+
.head {
display: flex;
justify-content: space-between;
align-items: center;
height: 36px;
line-height: 36px;
- border-bottom: 1px solid rgba(255,255,255,0.16);
+ border-bottom: 1px solid rgba(255, 255, 255, 0.16);
margin-bottom: 10px;
+
.code {
font-weight: 500;
font-size: 14px;
color: #00F2F3;
}
}
- .line{
+
+ .line {
display: flex;
align-items: center;
margin-bottom: 8px;
- &:nth-last-child(1){
+
+ &:nth-last-child(1) {
margin-bottom: 0;
}
- .name{
+
+ .name {
flex: 4;
}
- .num{
+
+ .num {
flex: 3;
}
- .val{
+
+ .val {
color: #fff;
}
}
diff --git a/screen/src/views/SecurityControl.vue b/screen/src/views/SecurityControl.vue
index 4953e4a..282403c 100644
--- a/screen/src/views/SecurityControl.vue
+++ b/screen/src/views/SecurityControl.vue
@@ -43,11 +43,10 @@
<div class="rate">
<div class="la">
<span>杞︿綅浣跨敤鐜�</span>
- <span v-if="data.inParkCarTotal && data.parkingLotTotal" class="num">{{ ((data.inParkCarTotal /
- data.parkingLotTotal) * 100).toFixed(0) }}%</span>
+ <span v-if="data.inParkCarTotal && data.parkingLotTotal" class="num">{{ data.parkingUseRate }}%</span>
</div>
<div class="val">
- <Percent :rate="((data.inParkCarTotal / data.parkingLotTotal) * 100).toFixed(0)" />
+ <Percent :rate="data.parkingUseRate" />
</div>
</div>
</div>
@@ -89,7 +88,7 @@
<div class="car_static">
<div class="echart_wrap">
<div class="pie_text">
- <div class="fs30"><strong v-if="data.visitJobCarTotal">{{ data.internalJobCarTotal +
+ <div class="fs30"><strong v-if="data.visitJobCarTotal || data.visitJobCarTotal == 0">{{ data.internalJobCarTotal +
data.relatedJobCarTotal + data.visitJobCarTotal }}</strong></div>
<div>璐ц溅</div>
</div>
@@ -111,30 +110,30 @@
<div v-if="showJk" class="jiankong">
<img class="jk_bg" src="@/assets/images/SecurityControl/jiankong_bg@2x.png" alt="">
<div class="content">
- <div class="video"></div>
+ <video :src="activeVideo" class="video"></video>
</div>
<div class="right_wrap">
<div class="menus">
<div class="search_wrap">
<img class="search" src="@/assets/images/SecurityControl/ic_search@2x.png" alt="">
- <input v-model="dataValue5" @input="getData5" class="input" type="text" placeholder="鎼滅储鐩戞帶鍚嶇О">
+ <input v-model="dataValue5" @blur="getData5" @keyup.enter="getData5" class="input" type="text" placeholder="鎼滅储鐩戞帶鍚嶇О">
</div>
<div class="menu_wrap">
<div class="menu" v-for="menu, i in data5">
<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"
+ <img v-if="activeJkIndex == i" class="open" src="@/assets/images/SecurityControl/ar_close@2x.png"
alt="">
- <img v-else class="icon" src="@/assets/images/SecurityControl/ar_open@2x.png" alt=""> -->
+ <img v-else class="icon" src="@/assets/images/SecurityControl/ar_open@2x.png" alt="">
</div>
- <!-- <div v-if="activeJkIndex == i" class="list">
- <div class="item" @click="menuItemClick(item.name)" v-for="item in menu.childen">
- <img v-if="activeMenu == item.name" class="icon"
+ <div v-if="activeJkIndex == i" class="list">
+ <div class="item" @click="menuItemClick(item)" v-for="item in menu.carmeraList">
+ <img v-if="activeMenu.indexCode == item.indexCode" class="icon"
src="@/assets/images/SecurityControl/ic_jiankong_sel@2x.png" alt="">
<img v-else class="icon" src="@/assets/images/SecurityControl/ic_jiankon.png" alt="">
- <span :class="{ active: activeMenu == item.name }">{{ item.name }}</span>
+ <span :class="{ active: activeMenu.indexCode == item.indexCode }">{{ item.name }}</span>
</div>
- </div> -->
+ </div>
</div>
</div>
@@ -161,7 +160,7 @@
<img src="@/assets/images/SecurityControl/title_short@2x.png" class="bg" alt="">
</div>
<div class="num_wrap">
- <div class="num">{{ data.inParkCarTotal }}</div>
+ <div class="num">{{ data.internalCarTotal }}</div>
<img src="@/assets/images/SecurityControl/anfang_ic_data@2x.png" class="bg" alt="">
</div>
</div>
@@ -171,7 +170,7 @@
<img src="@/assets/images/SecurityControl/title_short@2x.png" class="bg" alt="">
</div>
<div class="num_wrap">
- <div class="num">{{ data.deviceTotal }}</div>
+ <div class="num">{{ data2 }}</div>
<img src="@/assets/images/SecurityControl/anfang_ic_data@2x.png" class="bg" alt="">
</div>
</div>
@@ -181,7 +180,7 @@
<img src="@/assets/images/SecurityControl/title_short@2x.png" class="bg" alt="">
</div>
<div class="num_wrap">
- <div class="num">{{ data.errTotal }}</div>
+ <div class="num">{{ warningNum }}</div>
<img src="@/assets/images/SecurityControl/anfang_ic_data@2x.png" class="bg" alt="">
</div>
</div>
@@ -208,24 +207,25 @@
<img src="@/assets/images/SecurityControl/staff_ic_neibu@2x.png" alt="">
<div class="content">
<div class="name">鍐呴儴鍛樺伐</div>
- <div class="num" v-if="data.internalTotal && data.inParkTotal"><span>{{ data.internalTotal }}</span> |
- {{ ((data.internalTotal / data.inParkTotal) * 100).toFixed(1) }}%</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" v-if="data.relatedTotal && data.inParkTotal"><span>{{ data.relatedTotal
- }}</span> | {{ ((data.relatedTotal / data.inParkTotal) * 100).toFixed(1) }}%</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" v-if="data.visitTotal && data.inParkTotal"><span>{{ data.visitTotal }}</span>
- | {{ ((data.visitTotal / data.inParkTotal) * 100).toFixed(1) }}%</div>
+ <div class="num finish"><span>{{ data.visitTotal || 0 }}</span>
+ | {{ data.inParkTotal ? ((data.visitTotal / data.inParkTotal) * 100).toFixed(1) : 0 }}%</div>
</div>
</div>
</div>
@@ -314,11 +314,11 @@
<div>瀹夐槻鍛婅</div>
</div>
<div class="tabs">
- <div class="tab active">鍏ㄩ儴</div>
+ <div class="tab" :class="{ active: warningTab == '0' }" @click="tasClick('0')">鍏ㄩ儴</div>
<div class="separate"></div>
- <div class="tab">鍖哄煙鍛婅</div>
+ <div class="tab" :class="{ active: warningTab == '1' }" @click="tasClick('1')">鍖哄煙鍛婅</div>
<div class="separate"></div>
- <div class="tab">琛屼负鍛婅</div>
+ <div class="tab" :class="{ active: warningTab == '2' }" @click="tasClick('2')">琛屼负鍛婅</div>
</div>
<img src="@/assets/images/title@2x.png" class="bg" alt="" />
</div>
@@ -329,17 +329,17 @@
<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 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>
+ <span>{{ item.addr }}</span>
</div>
<div class="line time">
<img class="icon" src="@/assets/images/SecurityControl/clock.png" alt="">
- <span>{{item.createDate}}</span>
+ <span>{{ item.createDate }}</span>
</div>
</div>
</div>
@@ -391,18 +391,23 @@
<div>绂荤嚎鏁�</div>
<div>鍦ㄧ嚎鐜�</div>
</div>
- <template v-for="item, i in dataList2">
- <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>
+ <div class="list two-swiper">
+ <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>
+ </div>
+ <div class="separate"></div>
+ </div>
+ </template>
</div>
- <div class="separate"></div>
- </template>
-
+ </div>
</div>
</div>
</div>
@@ -420,14 +425,19 @@
<div class="dept">鎷滆閮ㄩ棬</div>
<div class="dept">瓒呮椂鏃堕暱</div>
</div>
- <template 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 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>
</div>
- <div class="separate"></div>
- </template>
+ </div>
+
</div>
</div>
</div>
@@ -445,7 +455,16 @@
import * as echarts from 'echarts'
import 'swiper/css/swiper.min.css'
import Swiper from 'swiper'
-import { getEnergyCenterData,afwarningEventData, getSecurityDeviceData, getVisitRetentionData, afgetVisitData, afregionTreea } from '@/api'
+import {
+ getEnergyCenterData,
+ afgetCarmeraPreviemUrl,
+ afwarningEventData,
+ getSecurityDeviceData,
+ getVisitRetentionData,
+ afgetVisitData,
+ afregionTreea,
+ visitSecurityData
+} from '@/api'
const weekMap = ['鏄熸湡鏃�', '鏄熸湡涓�', '鏄熸湡浜�', '鏄熸湡涓�', '鏄熸湡鍥�', '鏄熸湡浜�', '鏄熸湡鍏�',]
@@ -459,41 +478,6 @@
}, 1000)
-const showJk = ref(true)
-const activeJkIndex = ref(0)
-const activeMenu = ref('')
-const jkList = ref([
- {
- name: '鏈堝彴鍖�',
- childen: [
- { name: '鏈堝彴1', id: 0 },
- { name: '鏈堝彴2', id: 0 },
- { name: '鏈堝彴3', id: 0 },
- ]
- },
- {
- name: '鍔炲叕妤�',
- childen: []
- },
- {
- name: '鍘傛埧',
- childen: []
- },
- {
- name: '澶ч棬',
- childen: []
- },
-])
-const menuClick = (val) => {
- if (val == activeJkIndex.value) {
- activeJkIndex.value = -1
- } else {
- activeJkIndex.value = val
- }
-}
-const menuItemClick = (val) => {
- activeMenu.value = val
-}
const arr = ['#68e2e3', '#50afd3', '#377cdb', '#d5ae3a']
@@ -608,7 +592,7 @@
show: false,
position: 'center'
},
- padAngle: 5,
+ padAngle: 3,
itemStyle: {
borderRadius: 10
},
@@ -658,10 +642,10 @@
color: '#61d3f9'
}])]
const data = []
- data.push({ name: '寰呰闂�', value: data4.value.waitVisitNum, rate: data4.value.waitVisitRata })
- data.push({ name: '宸茬櫥璁�', value: data4.value.registerVisitNum, rate: data4.value.registerVisitRata })
- data.push({ name: '宸茬寮�', value: data4.value.levelNum, rate: data4.value.levelRata })
- data.push({ name: '婊炵暀', value: data4.value.retentionNum, rate: data4.value.retentionRata })
+ 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 })
const option = {
color: colors,
tooltip: {
@@ -722,7 +706,7 @@
label: {
show: true,
position: 'outside',
- formatter: '{a|{b}} {a|{c}%}',
+ formatter: '{a|{b}} {a|{d}%}',
rich: {
a: {
color: '#869CC9',
@@ -766,70 +750,130 @@
const data = ref({})
const getData1 = () => {
getEnergyCenterData().then(res => {
- const result = res.data
- data.value = result
- initEchart1()
+ if (res.code == 200) {
+ const result = res.data
+ data.value = result
+ initEchart1()
+ }
})
}
const dataList2 = ref([])
+const data2 = ref(0)
const dataListT2 = ref([])
const getData2 = () => {
getSecurityDeviceData().then(res => {
- if(res.code == 200 && res.data && res.data.length > 0){
+ if (res.code == 200 && res.data && res.data.length > 0) {
const result = res.data
- let temp = []
- let online = 0
- let outline = 0
- dataList2.value = result.map(item => {
- online += item.onlineNum
- outline += item.offlineDeviceNum
- return item
- })
- 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) })
- } else {
- temp.push({ name: '绂荤嚎', value: outline, rate: ((outline / (online + outline)) * 100).toFixed(1) })
- temp.push({ name: '鍦ㄧ嚎', value: online, rate: ((online / (online + outline)) * 100).toFixed(1) })
- }
+ let temp = []
+ let online = 0
+ let outline = 0
+ let total = 0
+ dataList2.value = result.map(item => {
+ total += item.totalNum
+ online += item.onlineNum
+ outline += item.offlineDeviceNum
+ if (item.deviceType && item.deviceType.length > 6) {
+ item.deviceType = item.deviceType.slice(0, 6) + '...'
+ }
+ return item
+ })
+ data2.value = total
+ 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) })
+ } else {
+ temp.push({ name: '绂荤嚎', value: outline, rate: ((outline / (online + outline)) * 100).toFixed(1) })
+ temp.push({ name: '鍦ㄧ嚎', value: online, rate: ((online / (online + outline)) * 100).toFixed(1) })
+ }
- dataListT2.value = temp
+ dataListT2.value = temp
}
-
initEchart2()
+ loopFn2()
})
}
const dataList3 = ref([])
+const data4 = ref({})
const getData3 = () => {
- getVisitRetentionData().then(res => {
- const result = res.data || []
+ visitSecurityData().then(res => {
+ if( !res.code == 200) return
+ 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 => {
- i.timeOutMinuteT = dayjs.duration(i.timeOutMinute * 60 * 1000).format('HH:mm')
+ 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
})
- })
-}
-const data4 = ref({})
-const getData4 = () => {
- afgetVisitData().then(res => {
- const result = res.data || {}
- data4.value = result
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)
const warningList = ref([])
const getWarning = () => {
- afwarningEventData({type: 0}).then(res => {
- const result = res.data || []
+ afwarningEventData({ type: warningTab.value }).then(res => {
+ 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
})
+ // loopFn1()
})
}
+const tasClick = (val) => {
+ warningTab.value = val
+ getWarning()
+}
+
+
+const showJk = ref(false)
+const activeJkIndex = ref(0)
+const activeMenu = ref({})
+const activeVideo = ref('')
const dataValue5 = ref('')
const data5 = ref([])
const getData5 = () => {
@@ -838,7 +882,20 @@
withCameras: 1
}).then(res => {
const result = res.data || []
- data5.value = result
+ data5.value = result.filter(item => item.carmeraList && item.carmeraList.length > 0)
+ })
+}
+const menuClick = (val) => {
+ if (val == activeJkIndex.value) {
+ activeJkIndex.value = -1
+ } else {
+ activeJkIndex.value = val
+ }
+}
+const menuItemClick = (val) => {
+ activeMenu.value = val
+ afgetCarmeraPreviemUrl({ indexCode: val.indexCode }).then(res => {
+ activeVideo.value = res.data
})
}
@@ -851,26 +908,23 @@
}
const loopFn1 = () => {
var newSwiper1 = new Swiper('.one-swiper', {
- // initialSlide: 0,
+ initialSlide: 0,
loop: true, // 寰幆妯″紡閫夐」
- // direction: 'vertical', //绔栫洿鏂瑰悜
- slidesPerView: 2,
+ direction: 'vertical', //绔栫洿鏂瑰悜
+ slidesPerView: 1,
slidesPerGroup: 2,
slidesPerColumn: 2,
// autoplay: { delay: 500, disableOnInteraction: false },
- autoplay: autoplayFlag(dataList2.value, 2, 2000),
+ autoplay: warningList.value.length > 2 ? { delay: 500, disableOnInteraction: false } : false,
observer: true, //淇敼swiper鑷繁鎴栧瓙鍏冪礌鏃讹紝鑷姩鍒濆鍖杝wiper
})
}
-loopFn1()
const loopFn2 = () => {
var newSwiper1 = new Swiper('.two-swiper', {
initialSlide: 0,
- // loop: true, // 寰幆妯″紡閫夐」
direction: 'vertical', //绔栫洿鏂瑰悜
slidesPerView: 3,
- // autoplay: { delay: 500, disableOnInteraction: false },
- autoplay: autoplayFlag(dataList2.value, 3, 4000),
+ autoplay: autoplayFlag(dataList2.value, 3, 2000),
observer: true, //淇敼swiper鑷繁鎴栧瓙鍏冪礌鏃讹紝鑷姩鍒濆鍖杝wiper
})
}
@@ -881,7 +935,7 @@
direction: 'vertical', //绔栫洿鏂瑰悜
slidesPerView: 3,
// autoplay: { delay: 500, disableOnInteraction: false },
- autoplay: autoplayFlag(dataList2.value, 3, 4000),
+ autoplay: autoplayFlag(dataList3.value, 3, 4000),
observer: true, //淇敼swiper鑷繁鎴栧瓙鍏冪礌鏃讹紝鑷姩鍒濆鍖杝wiper
})
}
@@ -892,7 +946,7 @@
getData1()
getData2()
getData3()
- getData4()
+ // getData4()
getData5()
getWarning()
@@ -906,9 +960,11 @@
div {
box-sizing: border-box;
}
+
.swiper-wrapper {
- display: block !important;
- }
+ display: block !important;
+}
+
.main_content {
display: flex;
padding: 20px 25px 0;
@@ -1134,8 +1190,8 @@
padding: 16px 0px 32px 20px;
.video {
+ width: 100%;
height: 100%;
- border: 1px solid;
}
}
@@ -1174,8 +1230,9 @@
.menu_wrap {
margin-top: 15px;
- max-height: 400px;
- overflow: auto;
+ max-height: 440px;
+ overflow: auto;
+
.menu {
.menu_name {
display: flex;
@@ -1199,16 +1256,17 @@
.list {
.item {
display: flex;
- align-items: center;
- height: 34px;
+ /* align-items: center; */
margin-left: 10px;
cursor: pointer;
color: #D2E0FF;
+ margin-top: 8px;
.icon {
width: 15px;
height: 14px;
margin-right: 8px;
+ margin-top: 2px;
}
.active {
@@ -1473,6 +1531,7 @@
.safe_warning {
width: 786px;
margin-right: 20px;
+
/* one-swiper */
.list {
height: 124px;
@@ -1481,13 +1540,21 @@
scrollbar-width: none;
display: flex;
flex-wrap: wrap;
-
+ margin-left: 20px;
+
.item {
width: 366px;
/* width: 50%; */
- height: 102px;
+ float: left;
+ height: 102px !important;
font-size: 13px;
color: #D2E0FF;
+ margin-right: 10px;
+
+ &:nth-of-type(2n) {
+ margin-right: 0;
+ }
+
.item_wrap {
height: 90px;
padding: 10px;
@@ -1630,14 +1697,25 @@
}
.table {
+ .list {
+ height: 102px !important;
+ overflow: auto;
+
+ .item {
+ height: 34px !important;
+ }
+ }
+
.line {
+ height: 32px !important;
+
div {
justify-content: flex-end;
padding-right: 10px;
}
.driver {
- flex: 4;
+ flex: 5;
justify-content: center;
}
}
@@ -1686,6 +1764,15 @@
width: 360px;
.table {
+ .list {
+ height: 102px !important;
+ overflow: auto;
+
+ .item {
+ height: 34px !important;
+ }
+ }
+
.line {
div {
.dept {
diff --git a/screen/src/views/TaskEfficiency.vue b/screen/src/views/TaskEfficiency.vue
index 442c916..fc9f8c0 100644
--- a/screen/src/views/TaskEfficiency.vue
+++ b/screen/src/views/TaskEfficiency.vue
@@ -603,9 +603,9 @@
label: {
show: true,
position: 'outside',
- // formatter: '{a|{b}} {a|{c}%}',
- formatter: params => {
+ formatter: (params) => {
return `{a|${params.data.name} ${params.data.rate}%}`
+ // return `<div>${params.data.name}</div>`
},
rich: {
a: {
diff --git a/screen/vite.config.js b/screen/vite.config.js
index 1afa5c0..f4a5d19 100644
--- a/screen/vite.config.js
+++ b/screen/vite.config.js
@@ -25,9 +25,9 @@
server: {
proxy: {
"/gateway_interface": {
- // target: "http://192.168.0.103:10010",
+ target: "http://192.168.0.103:10010",
// target: "http://10.50.250.253:8088/gateway_interface",
- target: "http://192.168.0.173/gateway_interface",
+ // target: "http://192.168.0.173/gateway_interface",
changeOrigin: true,
rewrite: (path) => path.replace(/^\/gateway_interface/, ""),
},
--
Gitblit v1.9.3