From a030368330d5a6bf1d0ed42b6121b53d13b587d0 Mon Sep 17 00:00:00 2001 From: liukangdong <898885815@qq.com> Date: 星期四, 31 十月 2024 11:35:13 +0800 Subject: [PATCH] ll --- screen/src/views/SecurityControl.vue | 219 +++++++++++++++++++++++++++++++----------------------- 1 files changed, 125 insertions(+), 94 deletions(-) diff --git a/screen/src/views/SecurityControl.vue b/screen/src/views/SecurityControl.vue index e2bcac9..a8f450a 100644 --- a/screen/src/views/SecurityControl.vue +++ b/screen/src/views/SecurityControl.vue @@ -28,25 +28,26 @@ </div> <div class="num_wrap"> <div class="la">鎬昏溅浣嶏細</div> - <div class="val">100</div> + <div class="val">{{ data.parkingLotTotal }}</div> </div> </div> <div class="stall_static"> <div class="residue"> <div class="la">鍓╀綑杞︿綅</div> - <div class="val">50</div> + <div class="val">{{ data.freeParkingLot }}</div> </div> <div class="total"> <div class="la">杞︿綅鎬绘暟</div> - <div class="val">50</div> + <div class="val">{{ data.parkingLotTotal }}</div> </div> <div class="rate"> <div class="la"> <span>杞︿綅浣跨敤鐜�</span> - <span class="num">50%</span> + <span v-if="data.inParkCarTotal && data.parkingLotTotal" class="num">{{ ((data.inParkCarTotal / + data.parkingLotTotal) * 100).toFixed(0) }}%</span> </div> <div class="val"> - <Percent :rate="50" /> + <Percent :rate="((data.inParkCarTotal / data.parkingLotTotal) * 100).toFixed(0)" /> </div> </div> </div> @@ -59,22 +60,22 @@ <div class="private_car"> <div class="item"> <div class="name">鍛樺伐杞﹁締</div> - <div class="num">20</div> + <div class="num">{{ data.internalCarTotal }}</div> </div> <div class="item"> <div class="name">鐩稿叧鏂硅溅杈�</div> - <div class="num num2">20</div> + <div class="num num2">{{ data.relatedCarTotal }}</div> </div> <div class="item"> <div class="name">鏉ヨ杞﹁締</div> - <div class="num num3">20</div> + <div class="num num3">{{ data.visitCarTotal }}</div> </div> </div> <div class="section"> - <div class="item"></div> - <div class="item"></div> - <div class="item"></div> + <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="title"> @@ -85,32 +86,19 @@ <div class="car_static"> <div class="echart_wrap"> <div class="pie_text"> - <div class="fs30"><strong>300</strong></div> + <div class="fs30"><strong v-if="data.visitJobCarTotal">{{ data.internalJobCarTotal + + data.relatedJobCarTotal + data.visitJobCarTotal }}</strong></div> <div>璐ц溅</div> </div> <div class="echart" id="echart1"></div> </div> <div class="list"> - <div class="item"> + <div class="item" v-for="item, i in dataList1"> <div class="line"> - <div :style="{ background: colors[0] }" class="icon"></div> - <div class="text">鍐呰繍杞﹁締</div> + <div :style="{ background: colors[i] }" class="icon"></div> + <div class="text">{{ item.name }}</div> </div> - <div :style="{ color: colors[0] }" class="num">100</div> - </div> - <div class="item"> - <div class="line"> - <div :style="{ background: colors[1] }" class="icon"></div> - <div class="text">澶栧崗杩愯緭杞﹁締</div> - </div> - <div :style="{ color: colors[1] }" class="num">100</div> - </div> - <div class="item"> - <div class="line"> - <div :style="{ background: colors[2] }" class="icon"></div> - <div class="text">甯傚叕鍙稿嵏璐ц溅杈�</div> - </div> - <div :style="{ color: colors[2] }" class="num">100</div> + <div :style="{ color: colors[i] }" class="num">{{ item.value }}</div> </div> </div> </div> @@ -125,7 +113,7 @@ <img src="@/assets/images/SecurityControl/title_short@2x.png" class="bg" alt=""> </div> <div class="num_wrap"> - <div class="num">200</div> + <div class="num">{{ data.inParkTotal }}</div> <img src="@/assets/images/SecurityControl/anfang_ic_data@2x.png" class="bg" alt=""> </div> </div> @@ -135,7 +123,7 @@ <img src="@/assets/images/SecurityControl/title_short@2x.png" class="bg" alt=""> </div> <div class="num_wrap"> - <div class="num">200</div> + <div class="num">{{ data.inParkCarTotal }}</div> <img src="@/assets/images/SecurityControl/anfang_ic_data@2x.png" class="bg" alt=""> </div> </div> @@ -145,7 +133,7 @@ <img src="@/assets/images/SecurityControl/title_short@2x.png" class="bg" alt=""> </div> <div class="num_wrap"> - <div class="num">200</div> + <div class="num">{{ data.deviceTotal }}</div> <img src="@/assets/images/SecurityControl/anfang_ic_data@2x.png" class="bg" alt=""> </div> </div> @@ -155,7 +143,7 @@ <img src="@/assets/images/SecurityControl/title_short@2x.png" class="bg" alt=""> </div> <div class="num_wrap"> - <div class="num">200</div> + <div class="num">{{ data.errTotal }}</div> <img src="@/assets/images/SecurityControl/anfang_ic_data@2x.png" class="bg" alt=""> </div> </div> @@ -182,21 +170,24 @@ <img src="@/assets/images/SecurityControl/staff_ic_neibu@2x.png" alt=""> <div class="content"> <div class="name">鍐呴儴鍛樺伐</div> - <div class="num"><span>1000</span> | 66.6%</div> + <div class="num" v-if="data.internalTotal && data.inParkTotal"><span>{{ data.internalTotal }}</span> | + {{ ((data.internalTotal / data.inParkTotal) * 100).toFixed(1) }}%</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>1000</span> | 66.6%</div> + <div class="num today" v-if="data.relatedTotal && data.inParkTotal"><span>{{ data.relatedTotal + }}</span> | {{ ((data.relatedTotal / data.inParkTotal) * 100).toFixed(1) }}%</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>1000</span> | 66.6%</div> + <div class="num finish" v-if="data.visitTotal && data.inParkTotal"><span>{{ data.visitTotal }}</span> + | {{ ((data.visitTotal / data.inParkTotal) * 100).toFixed(1) }}%</div> </div> </div> </div> @@ -351,26 +342,21 @@ <div class="sa_static"> <div class="echart_wrap"> <div class="pie_text"> - <div class="fs30"><strong>300</strong></div> + <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"> + <div class="item" v-for="item, i in dataListT2"> <div class="line"> - <div :style="{ background: colors[1] }" class="icon"></div> - <div class="text">鍦ㄧ嚎</div> + <div :style="{ background: colors[i] }" class="icon"></div> + <div class="text">{{ item.name }}</div> </div> - <div :style="{ color: colors[1] }" class="num">100</div> + <div :style="{ color: colors[i] }" class="num">{{ item.value }} | {{ item.rate }}%</div> </div> - <div class="item"> - <div class="line"> - <div :style="{ background: colors[2] }" class="icon"></div> - <div class="text">绂荤嚎</div> - </div> - <div :style="{ color: colors[2] }" class="num">100</div> - </div> + </div> </div> <div class="table"> @@ -381,22 +367,18 @@ <div>绂荤嚎鏁�</div> <div>鍦ㄧ嚎鐜�</div> </div> - <div class="line"> - <div class="driver">闂ㄧ璁惧</div> - <div>10</div> - <div>10</div> - <div>10</div> - <div>10</div> - </div> - <div class="separate"></div> - <div class="line"> - <div class="driver">闂ㄧ璁惧</div> - <div>10</div> - <div>10</div> - <div>10</div> - <div>10</div> - </div> - <div class="separate"></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 v-if="item.onlineNum && item.totalNum">{{ ((item.onlineNum / item.totalNum) * 100).toFixed(0) }}% + </div> + </div> + <div class="separate"></div> + </template> + </div> </div> </div> @@ -414,18 +396,14 @@ <div class="dept">鎷滆閮ㄩ棬</div> <div class="dept">瓒呮椂鏃堕暱</div> </div> - <div class="line"> - <div>name</div> - <div class="dept">缁煎悎绠$悊绉�</div> - <div class="dept">10:21</div> - </div> - <div class="separate"></div> - <div class="line"> - <div>name</div> - <div class="dept">缁煎悎绠$悊绉�</div> - <div class="dept">10:21</div> - </div> - <div class="separate"></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> + <div class="separate"></div> + </template> </div> </div> </div> @@ -438,11 +416,12 @@ import VScaleScreen from 'v-scale-screen' import Percent from '@/components/percent.vue' import dayjs from 'dayjs' +import duration from 'dayjs/plugin/duration' +dayjs.extend(duration) import * as echarts from 'echarts' import { getEnergyCenterData, getSecurityDeviceData, getVisitRetentionData } from '@/api' -const colors = ['#FEAF01', '#01ABFE', '#51F9E4'] const weekMap = ['鏄熸湡鏃�', '鏄熸湡涓�', '鏄熸湡浜�', '鏄熸湡涓�', '鏄熸湡鍥�', '鏄熸湡浜�', '鏄熸湡鍏�',] const date = ref(dayjs().format('YYYY.MM.DD')) const week = ref(weekMap[new Date().getDay()]) @@ -515,8 +494,18 @@ myChart.resize() }) } + +const dataList1 = ref([]) const initEchart1 = () => { const myChart = echarts.init(document.getElementById('echart1')) + const temp = [] + temp.push({ name: '鍐呰繍杞﹁締', value: data.value.internalJobCarTotal }) + temp.push({ name: '澶栧崗杩愯緭杞﹁締', value: data.value.relatedJobCarTotal }) + temp.push({ name: '甯傚叕鍙稿嵏璐ц溅杈�', value: data.value.visitJobCarTotal }) + temp.sort((a, b) => { + return a.value - b.value + }) + dataList1.value = temp const option = { series: [ { @@ -534,11 +523,7 @@ labelLine: { show: false }, - data: [ - { value: 1048, name: 'Search Engine' }, - { value: 735, name: 'Direct' }, - { value: 580, name: 'Email' } - ] + data: temp } ] } @@ -547,6 +532,8 @@ myChart.resize() }) } + +const colors = ['#FEAF01', '#01ABFE', '#51F9E4'] const initEchart2 = () => { const myChart = echarts.init(document.getElementById('echart2')) const option = { @@ -566,11 +553,7 @@ labelLine: { show: false }, - data: [ - { value: 1048, name: 'Search Engine' }, - { value: 735, name: 'Direct' }, - { value: 580, name: 'Email' } - ] + data: dataListT2.value } ] } @@ -723,14 +706,59 @@ myChart.resize() }) } -const ininDate = () => { - getEnergyCenterData() + +const data = ref({}) +const getData1 = () => { + getEnergyCenterData().then(res => { + const result = res.data + data.value = result + initEchart1() + }) } + +const dataList2 = ref([]) +const dataListT2 = ref([]) +const getData2 = () => { + getSecurityDeviceData().then(res => { + 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) }) + } + + dataListT2.value = temp + initEchart2() + }) +} + +const dataList3 = ref([]) +const getData3 = () => { + getVisitRetentionData().then(res => { + const result = res.data || [] + dataList3.value = result.map(i => { + i.timeOutMinuteT = dayjs.duration(i.timeOutMinute * 60 * 1000).format('HH:mm') + return i + }) + }) +} + onMounted(() => { - ininDate() + getData1() + getData2() + getData3() initEchart3() - initEchart1() - initEchart2() + // initEchart1() }) @@ -1293,6 +1321,7 @@ flex: 1; margin-right: 20px; position: relative; + .content { display: flex; @@ -1406,9 +1435,11 @@ 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{ + + .icon { width: 30px; } + .top { width: 12px; height: 12px; -- Gitblit v1.9.3