From 06b2f5be922e87d086d1d4e6cdcc2119e7d3a1a4 Mon Sep 17 00:00:00 2001 From: k94314517 <8417338+k94314517@user.noreply.gitee.com> Date: 星期三, 09 七月 2025 14:36:24 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- screen/src/assets/images/FireFighting/xiaofang_ic_guzhang@2x.png | 0 screen/src/views/LogisticsEfficiency.vue | 1 admin/package-lock.json | 160 screen/src/assets/images/FireFighting/xiaofang_ic_baojing@2x.png | 0 screen/src/router/index.js | 8 screen/src/views/SecurityControl.vue | 1882 ++++++++++++------ screen/src/views/FireFighting1.vue | 1900 +++++++++++++++++++ screen/src/views/TaskEfficiency.vue | 18 admin/src/views/business/dangerStatic.vue | 4 screen/src/api/index.js | 4 screen/src/assets/images/ic_compass@2x.png | 0 admin/src/components/system/dict/DictDataManagerWindow.vue | 5 screen/src/assets/images/FireFighting/xiaofang_ic_zhengchang@2x.png | 0 screen/src/assets/images/size.png | 0 screen/src/views/FireFighting.vue | 1889 ++++++++++--------- 15 files changed, 4,277 insertions(+), 1,594 deletions(-) diff --git a/admin/package-lock.json b/admin/package-lock.json index 5c1bdfc..665a035 100644 --- a/admin/package-lock.json +++ b/admin/package-lock.json @@ -1876,63 +1876,6 @@ "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=", "dev": true }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "optional": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "optional": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "optional": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "optional": true - }, - "loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "optional": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, "ssri": { "version": "8.0.1", "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-8.0.1.tgz?cache=0&sync_timestamp=1617826515595&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssri%2Fdownload%2Fssri-8.0.1.tgz", @@ -1940,28 +1883,6 @@ "dev": true, "requires": { "minipass": "^3.1.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "optional": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "vue-loader-v16": { - "version": "npm:vue-loader@16.8.3", - "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz", - "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==", - "dev": true, - "optional": true, - "requires": { - "chalk": "^4.1.0", - "hash-sum": "^2.0.0", - "loader-utils": "^2.0.0" } } } @@ -13991,6 +13912,87 @@ } } }, + "vue-loader-v16": { + "version": "npm:vue-loader@16.8.3", + "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz", + "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==", + "dev": true, + "optional": true, + "requires": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "loader-utils": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "optional": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "optional": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "optional": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "optional": true + }, + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "optional": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "optional": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "vue-property-decorator": { "version": "8.5.1", "resolved": "https://registry.npmjs.org/vue-property-decorator/-/vue-property-decorator-8.5.1.tgz", diff --git a/admin/src/components/system/dict/DictDataManagerWindow.vue b/admin/src/components/system/dict/DictDataManagerWindow.vue index f1e0f4a..d4ea888 100644 --- a/admin/src/components/system/dict/DictDataManagerWindow.vue +++ b/admin/src/components/system/dict/DictDataManagerWindow.vue @@ -16,6 +16,7 @@ v-loading="isWorking.search" :data="tableData.list" stripe + class="no-scroll" @selection-change="handleSelectionChange" > <el-table-column type="selection" width="55"></el-table-column> @@ -130,7 +131,9 @@ //max-height: 50%; overflow: auto; } - +.no-scroll { + overflow: hidden !important; +} /deep/ .window__body { .table-content { padding: 0; diff --git a/admin/src/views/business/dangerStatic.vue b/admin/src/views/business/dangerStatic.vue index c14a486..b43d2af 100644 --- a/admin/src/views/business/dangerStatic.vue +++ b/admin/src/views/business/dangerStatic.vue @@ -34,7 +34,7 @@ <!-- </QueryForm>--> <div class="main_content"> <div class="type_wrap"> - <div class="title">闅愭偅绫诲瀷缁熻</div> + <div class="title">鏈湀闅愭偅绫诲瀷缁熻</div> <div v-show="typeList && typeList.length > 0" class="echart1" ref="typeRef"></div> <div v-show="typeList.length == 0" style="width: 100%;height: 100%;display: flex;align-items: center;justify-content: center;"> <img style="width: 240px;" src="@/assets/images/default_homeimg.png" alt=""> @@ -42,7 +42,7 @@ </div> <div class="dept_wrap"> - <div class="title">闅愭偅褰掑睘閮ㄩ棬缁熻</div> + <div class="title">鏈湀闅愭偅褰掑睘閮ㄩ棬缁熻</div> <div v-show="deptList && deptList.length > 0" class="echart2" ref="deptRef"></div> <div v-show="deptList.length == 0" style="width: 100%;height: 100%;display: flex;align-items: center;justify-content: center;"> <img style="width: 240px;" src="@/assets/images/default_homeimg.png" alt=""> diff --git a/screen/src/api/index.js b/screen/src/api/index.js index 9aaea42..4f8a3ec 100644 --- a/screen/src/api/index.js +++ b/screen/src/api/index.js @@ -221,3 +221,7 @@ export const regionDataRanking = (data) => { return request('visitsAdmin/cloudService/board/api/energy/regionDataRanking', data) } +// 鏅鸿兘瀹夐槻鐩戞祴 瀹炴椂鍦ㄥ洯浜哄憳 +export const inParkUser = (data) => { + return request('visitsAdmin/cloudService/board/api/fightingAdmin/inParkUser', data) +} diff --git a/screen/src/assets/images/FireFighting/xiaofang_ic_baojing@2x.png b/screen/src/assets/images/FireFighting/xiaofang_ic_baojing@2x.png index ec7f77f..55eccc7 100644 --- a/screen/src/assets/images/FireFighting/xiaofang_ic_baojing@2x.png +++ b/screen/src/assets/images/FireFighting/xiaofang_ic_baojing@2x.png Binary files differ diff --git a/screen/src/assets/images/FireFighting/xiaofang_ic_guzhang@2x.png b/screen/src/assets/images/FireFighting/xiaofang_ic_guzhang@2x.png index befea8e..29422eb 100644 --- a/screen/src/assets/images/FireFighting/xiaofang_ic_guzhang@2x.png +++ b/screen/src/assets/images/FireFighting/xiaofang_ic_guzhang@2x.png Binary files differ diff --git a/screen/src/assets/images/FireFighting/xiaofang_ic_zhengchang@2x.png b/screen/src/assets/images/FireFighting/xiaofang_ic_zhengchang@2x.png index 70dfad1..31ba36f 100644 --- a/screen/src/assets/images/FireFighting/xiaofang_ic_zhengchang@2x.png +++ b/screen/src/assets/images/FireFighting/xiaofang_ic_zhengchang@2x.png Binary files differ diff --git a/screen/src/assets/images/ic_compass@2x.png b/screen/src/assets/images/ic_compass@2x.png new file mode 100644 index 0000000..4cef711 --- /dev/null +++ b/screen/src/assets/images/ic_compass@2x.png Binary files differ diff --git a/screen/src/assets/images/size.png b/screen/src/assets/images/size.png new file mode 100644 index 0000000..3c9240d --- /dev/null +++ b/screen/src/assets/images/size.png Binary files differ diff --git a/screen/src/router/index.js b/screen/src/router/index.js index b383f55..acffd61 100644 --- a/screen/src/router/index.js +++ b/screen/src/router/index.js @@ -56,6 +56,14 @@ component: () => import('../views/FireFighting.vue') }, { + path: '/FireFighting1', //娑堥槻鐩戞帶 + name: 'FireFighting1', + meta: { + title: '瀹夋嘲鏅烘収鐗╂祦鍥尯-娑堥槻鎬佸娍鐩戞帶' + }, + component: () => import('../views/FireFighting1.vue') + }, + { path: '/TaskEfficiency', //鍦哄唴璋冨害鐪嬫澘 -浣滀笟鑳芥晥 name: 'TaskEfficiency', meta: { diff --git a/screen/src/views/FireFighting.vue b/screen/src/views/FireFighting.vue index 79cd732..04190af 100644 --- a/screen/src/views/FireFighting.vue +++ b/screen/src/views/FireFighting.vue @@ -5,7 +5,7 @@ <img src="@/assets/images/SecurityControl/bg@2x_2.png" class="main_bg" 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> @@ -14,190 +14,228 @@ </div> <div class="main_content"> <div class="left_box"> - <div class="left_box_one"> - <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/title@2x.png" class="bg" alt="" /> + <div class="left_box_top"> + + <div class="left_box_top_znz"> + <img src="@/assets/images/ic_compass@2x.png" alt="" /> </div> - <div class="list_wrap"> - <div class="list"> - <div class="header line"> - <span class="item name">璁惧鍚嶇О</span> - <span class="item">鎬绘暟</span> - <span class="item">鎶ヨ</span> - <span class="item">灞忚斀</span> - <span class="item">鏁呴殰</span> - <span class="item">姝e父</span> + + <div class="left_box_top_left"> + <div class="left_box_one"> + <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/title@2x.png" class="bg" alt="" /> </div> - <div class="one-swiper list_content"> - <div class="swiper-wrapper"> - <div class="line_wrap one-swiper-slide swiper-slide" v-for="(item, i) in dataList1"> - <div class="line"> - <span class="item name">{{ item.typeName }}</span> - <span class="item">{{ item.totalDeviceNum || 0 }}</span> - <span class="item" style="color: #FEAF01;">{{ item.alarmDeviceNum || 0 }}</span> - <span class="item">{{ item.shieldDeviceNum || 0 }}</span> - <span class="item">{{ item.errDeviceNum || 0 }}</span> - <span class="item">{{ item.onlineDeviceNum || 0 }}</span> + <div class="left_content"> + <div class="tips"> + <div class="tips_title"> + <img src="@/assets/images/SecurityControl/ic_title_green@2x.png" alt=""> + <span>鏈勾娑堥槻璁惧/璁炬柦缁翠繚鎯呭喌</span> + </div> + </div> + + <div class="content_wrap"> + <div class="list"> + <div class="item"> + <div>宸茬淮淇�</div> + <div class="num active">{{ dataList5.protectNum || 0 }}</div> </div> + <div class="separate"></div> + <div class="item"> + <div>璁″垝缁翠繚</div> + <div class="num acc">{{ dataList5.planProtectTotal || 0 }}</div> + </div> + <div class="separate"></div> + <div class="item"> + <div>缁翠繚鐜�</div> + <div v-if="dataList5.protectNum && dataList5.planProtectTotal" class="acc num">{{ + ((dataList5.protectNum / dataList5.planProtectTotal) * 100).toFixed(0) }}%</div> + <div v-else class="acc num">0%</div> + </div> + </div> + <div class="footer"> + <img src="@/assets/images/FireFighting/ic_weixiu@2x.png" class="icon" alt=""> + <div class="content"> + <div>鏈湀鏂板缁翠繚</div> + <div class="num">{{ dataList5.monthAddNum }} <span>涓�</span></div> + </div> + </div> + </div> + + <div class="tips"> + <div class="tips_title"> + <img src="@/assets/images/SecurityControl/ic_title_green@2x.png" alt=""> + <span>绯荤粺璁惧鐘舵��</span> + </div> + </div> + + <div class="list_wrap"> + <div class="list"> + <div class="header line"> + <span class="item name" style="color: #FFFFFF;">璁惧鍚嶇О</span> + <span class="item">鎬绘暟</span> + <span class="item">鎶ヨ</span> + <span class="item">灞忚斀</span> + <span class="item">鏁呴殰</span> + <span class="item">姝e父</span> + </div> + <div class="one-swiper list_content"> + <div class="swiper-wrapper"> + <div class="line_wrap one-swiper-slide swiper-slide" v-for="(item, i) in dataList1"> + <div class="line"> + <span class="item name">{{ item.typeName }}</span> + <span class="item">{{ item.totalDeviceNum || 0 }}</span> + <span class="item" style="color: #FEAF01;">{{ item.alarmDeviceNum || 0 }}</span> + <span class="item">{{ item.shieldDeviceNum || 0 }}</span> + <span class="item">{{ item.errDeviceNum || 0 }}</span> + <span class="item">{{ item.onlineDeviceNum || 0 }}</span> + </div> + <div class="separate"></div> + </div> + </div> + </div> + </div> + <div class="list_wrap_footer" v-if="dataList1.length > 0"> + <div class="wrap_footer_item name" style="color: #fff;">鎬昏</div> + <div class="wrap_footer_item">{{sum(dataList1, 'totalDeviceNum')}}</div> + <div class="wrap_footer_item">{{sum(dataList1, 'alarmDeviceNum')}}</div> + <div class="wrap_footer_item">{{sum(dataList1, 'shieldDeviceNum')}}</div> + <div class="wrap_footer_item">{{sum(dataList1, 'errDeviceNum')}}</div> + <div class="wrap_footer_item">{{sum(dataList1, 'onlineDeviceNum')}}</div> <div class="separate"></div> </div> </div> </div> - </div> </div> - </div> - <div class="left_box_two"> - <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/title@2x.png" class="bg" alt="" /> - </div> - <div class="police_wrap"> - <div class="item" v-for="(item, i) in dataList2"> - <div class="head"> - <div class="name">{{ item.name }}</div> - <div class="name">{{ item.num }}娆�</div> - </div> - <FirePercent :color="policeColors[i]" :rate="item.rate" /> - </div> - - </div> - </div> - <div class="left_box_three"> - <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/title@2x.png" class="bg" alt="" /> - </div> - <div class="dispose_wrap"> - <div class="echart2" id="echart2"></div> - </div> - </div> - </div> - <div class="center_box"> - <div class="center_box_one"> - <div class="static_wrap"> - <div class="item"> - <img src="@/assets/images/FireFighting/xiaofang_ic_zaixian@2x.png" alt=""> - <div class="content"> - <div class="name">鎬绘暟</div> - <div class="num">{{ dataList4.onlineDeviceNum || 0 }}</div> - </div> - </div> - <div class="item"> - <img src="@/assets/images/FireFighting/xiaofang_ic_baojing@2x.png" alt=""> - <div class="content"> - <div class="name">鎶ヨ</div> - <div class="num num2">{{ dataList4.alarmDeviceNum || 0}}</div> - </div> - </div> - <div class="item"> - <img src="@/assets/images/FireFighting/xiaofang_ic_pingbi@2x.png" alt=""> - <div class="content"> - <div class="name">灞忚斀</div> - <div class="num num5">{{ dataList4.shieldDeviceNum || 0 }}</div> - </div> - </div> - <div class="item"> - <img src="@/assets/images/FireFighting/xiaofang_ic_guzhang@2x.png" alt=""> - <div class="content"> - <div class="name">鏁呴殰</div> - <div class="num num3">{{ dataList4.errDeviceNum || 0 }}</div> - </div> - </div> - <div class="item"> - <img src="@/assets/images/FireFighting/xiaofang_ic_zhengchang@2x.png" alt=""> - <div class="content"> - <div class="name">姝e父</div> - <div class="num num4">{{ dataList4.onlineDeviceNum || 0 }}</div> + <div class="left_box_top_right"> + <div class="center_box_one"> + <div class="static_wrap"> + <div class="item"> + <img src="@/assets/images/FireFighting/xiaofang_ic_baojing@2x.png" alt=""> + <div class="content"> + <div class="name">鎶ヨ鎬绘暟</div> + <div class="num">{{ dayData.totalNum || 0 }}</div> + </div> + </div> + <div class="item"> + <img src="@/assets/images/FireFighting/xiaofang_ic_guzhang@2x.png" alt=""> + <div class="content"> + <div class="name">鏈鐞�</div> + <div class="num num2">{{ dayData.processingNum || 0 }}</div> + </div> + </div> + <div class="item"> + <img src="@/assets/images/FireFighting/xiaofang_ic_zhengchang@2x.png" alt=""> + <div class="content"> + <div class="name">宸插鐞�</div> + <div class="num num5">{{ dayData.liftNum || 0 }}</div> + </div> + </div> </div> </div> </div> </div> - <div class="center_box_two"> - <div class="content_wrap"> - <div class="header"> - <div class="left"> - <img class="icon" src="@/assets/images/FireFighting/468@2x.png" alt=""> - <span>娓╁害/婀垮害浼犳劅鍣�</span> - </div> - <div class="right"> - <img @click="changeData8(-1)" class="icon" src="@/assets/images/FireFighting/xiaofang_ar_left@2x.png" - alt=""> - <div class="num">{{ dataIndex8 + 1 }}/{{ dataList8.length }}</div> - <img @click="changeData8(1)" class="icon" src="@/assets/images/FireFighting/xiaofang_ar_right@2x.png" - alt=""> - </div> - </div> - <div class="list_wrap"> + <div class="left_box_bottom"> + <div class="left_box_three"> + <div class="com_header"> <div class="title"> - <img class="icon" src="@/assets/images/FireFighting/ic_location@2x.png" alt=""> - <span v-if="dataList8 && dataList8.length > 0">{{ dataList8[dataIndex8].humidityData.name }}</span> + <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" /> + <div>娑堥槻鎬佸娍鎰熺煡</div> </div> - <div class="list" v-if="dataList8 && dataList8.length > 0"> - <div class="item"> - <img class="icon" src="@/assets/images/FireFighting/ic_wendu@2x.png" alt=""> - <div class="content"> - <div class="num" - v-if="dataList8[dataIndex8].temperatureData && dataList8[dataIndex8].temperatureData.latestValue"> - {{ Number(dataList8[dataIndex8].temperatureData.latestValue).toFixed(1) }}<span>掳C</span></div> - <div class="la">闃堝�� {{ dataList8[dataIndex8].temperatureData?.alarmLow }}锝瀧{ - dataList8[dataIndex8].temperatureData?.alarmHigh }}掳C</div> - </div> - </div> - <div class="item"> - <img class="icon" src="@/assets/images/FireFighting/ic_shidu@2x.png" alt=""> - <div class="content"> - <div class="num" - v-if="dataList8[dataIndex8].humidityData && dataList8[dataIndex8].humidityData.latestValue">{{ - Number(dataList8[dataIndex8].humidityData.latestValue).toFixed(1) }}<span>%</span></div> - <div class="la">闃堝�� {{ dataList8[dataIndex8].humidityData?.alarmLow }}锝瀧{ - dataList8[dataIndex8].humidityData?.alarmHigh }}%</div> - </div> - </div> - </div> + <img src="@/assets/images/title@2x.png" class="bg" alt="" /> </div> - </div> - <div class="content_wrap"> - <div class="header"> - <div class="left"> - <img class="icon" src="@/assets/images/FireFighting/468@2x.png" alt=""> - <span>瀹炴椂浼犳劅鍣ㄦ娴�</span> - </div> - <div class="right"> - <img @click="changeData9(-1)" class="icon" src="@/assets/images/FireFighting/xiaofang_ar_left@2x.png" - alt=""> - <div class="num">{{ dataIndex9 + 1 }}/{{ dataTotal9 }}</div> - <img @click="changeData9(1)" class="icon" src="@/assets/images/FireFighting/xiaofang_ar_right@2x.png" - alt=""> - </div> - </div> - <div class="list_wrap2"> - <div class="item" v-for="item, i in dataListTemp9"> - <div class="title"> - <img class="icon" src="@/assets/images/FireFighting/ic_location@2x.png" alt=""> - <span>{{ item.name }}</span> - </div> - <div class="watergage_wrap" v-if="item.obj.typeCode == 253958"> - <div class="watergage" :id="'watergage' + i"></div> - <div class="unit">{{ item.obj.value }}</div> - <div class="place">闃堝�� {{ item.level }}</div> - </div> - <div v-if="item.obj.typeCode == 254001" class="liquidlevel_wrap"> - <div class="liquidlevel" :id="'liquidlevel' + i"></div> - <div class="liquidle_te"> - <div class="unit">{{ item.obj.value }}</div> - <div class="placeT">闃堝�納{ item.level }}</div> + + <div class="bottom_content"> + + <div class="bottom_content_left" v-if="dataList8 && dataList8.length > 0"> + + <div class="tips"> + <div class="tips_title"> + <img src="@/assets/images/SecurityControl/ic_title_green@2x.png" alt=""> + <span>閲嶇偣鍖哄煙娓╁害鐩戞祴</span> </div> + <div class="right"> + <img @click="changeData8(-1)" class="icon" src="@/assets/images/FireFighting/xiaofang_ar_left@2x.png" + alt=""> + <div class="num">{{ dataList8[dataIndex8].humidityData.name }}</div> + <img @click="changeData8(1)" class="icon" src="@/assets/images/FireFighting/xiaofang_ar_right@2x.png" + alt=""> + </div> + </div> + + <div class="list_wrap"> +<!-- <div class="title">--> +<!-- <img class="icon" src="@/assets/images/FireFighting/ic_location@2x.png" alt="">--> +<!-- <span v-if="dataList8 && dataList8.length > 0">{{ dataList8[dataIndex8].humidityData.name }}</span>--> +<!-- </div>--> + <div class="list" v-if="dataList8 && dataList8.length > 0"> + <div class="item"> + <img class="icon" src="@/assets/images/FireFighting/ic_wendu@2x.png" alt=""> + <div class="content"> + <div class="num" + v-if="dataList8[dataIndex8].temperatureData && dataList8[dataIndex8].temperatureData.latestValue"> + {{ Number(dataList8[dataIndex8].temperatureData.latestValue).toFixed(1) }}<span>掳C</span></div> + <div class="la">闃堝�� {{ dataList8[dataIndex8].temperatureData?.alarmLow }}锝瀧{ + dataList8[dataIndex8].temperatureData?.alarmHigh }}掳C</div> + </div> + </div> + <div class="item"> + <img class="icon" src="@/assets/images/FireFighting/ic_shidu@2x.png" alt=""> + <div class="content"> + <div class="num" + v-if="dataList8[dataIndex8].humidityData && dataList8[dataIndex8].humidityData.latestValue">{{ + Number(dataList8[dataIndex8].humidityData.latestValue).toFixed(1) }}<span>%</span></div> + <div class="la">闃堝�� {{ dataList8[dataIndex8].humidityData?.alarmLow }}锝瀧{ + dataList8[dataIndex8].humidityData?.alarmHigh }}%</div> + </div> + </div> + </div> + </div> + + </div> + <div class="bottom_content_right"> + + <div class="tips"> + <div class="tips_title"> + <img src="@/assets/images/SecurityControl/ic_title_green@2x.png" alt=""> + <span>姘村帇姘翠綅鐩戞祴</span> + </div> + <div class="right"> + <img @click="changeData9(-1)" class="icon" src="@/assets/images/FireFighting/xiaofang_ar_left@2x.png" + alt=""> + <div class="num">{{ dataIndex9 + 1 }}/{{ dataTotal9 }}</div> + <img @click="changeData9(1)" class="icon" src="@/assets/images/FireFighting/xiaofang_ar_right@2x.png" + alt=""> + </div> + </div> + + <div class="list_wrap2"> + <div class="item" v-for="(item, i) in dataListTemp9" :key="i"> + <div class="watergage_wrap" v-if="item.obj.typeCode == 253958"> + <div class="watergage" :id="'watergage' + i"></div> + </div> + <div v-if="item.obj.typeCode == 254001" class="liquidlevel_wrap"> + <img src="@/assets/images/size.png" alt="" class="size" /> + <div class="liquidlevel" :id="'liquidlevel' + i"></div> + </div> + <div class="list_wrap2_info"> + <div class="title"> + <img class="icon" src="@/assets/images/FireFighting/ic_location@2x.png" alt=""> + <span>{{ item.name }}</span> + </div> + <div class="unit"> + <span>{{ item.obj.value.substring(0, item.obj.value.indexOf('M')) }}</span> + <span>{{ item.obj.value.substring(item.obj.value.indexOf('M'), item.obj.value.length) }}</span> + </div> + <div class="place">闃堝�� {{ item.level }}</div> + </div> + </div> + <div class="item1"></div> + <div class="item1"></div> </div> </div> </div> @@ -209,103 +247,92 @@ <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/title@2x.png" class="bg" alt="" /> </div> - <div class="content_wrap"> - <div class="list"> - <div class="item"> - <div>宸茬淮淇�</div> - <div class="num active">{{ dataList5.protectNum }}</div> + <div class="right_content"> + <div class="tips"> + <div class="tips_title"> + <img src="@/assets/images/SecurityControl/ic_title_green@2x.png" alt=""> + <span> + <template v-if="dateType === '1'">鏈湀</template> + <template v-else-if="dateType === '2'">鏈勾</template> + <template v-else>浠婃棩</template>鎶ヨ + </span> </div> - <div class="separate"></div> - <div class="item"> - <div>璁″垝缁翠繚</div> - <div class="num acc">{{ dataList5.planProtectTotal }}</div> - </div> - <div class="separate"></div> - <div class="item"> - <div>缁翠繚鐜�</div> - <div v-if="dataList5.protectNum && dataList5.planProtectTotal" class="acc num">{{ - ((dataList5.protectNum / dataList5.planProtectTotal) * 100).toFixed(0) }}%</div> + <div class="tips_cates"> + <div :class="!dateType ? 'tips_cates_row active' : 'tips_cates_row'" @click="getData2('')">浠婃棩</div> + <div class="tips_cates_x">|</div> + <div :class="dateType === '1' ? 'tips_cates_row active' : 'tips_cates_row'" @click="getData2('1')">鏈湀</div> + <div class="tips_cates_x">|</div> + <div :class="dateType === '2' ? 'tips_cates_row active' : 'tips_cates_row'" @click="getData2('2')">鏈勾</div> </div> </div> - <div class="footer"> - <img src="@/assets/images/FireFighting/ic_weixiu@2x.png" class="icon" alt=""> - <div class="content"> - <div>鏈湀鏂板缁翠繚</div> - <div class="num">{{ dataList5.monthAddNum }} <span>涓�</span></div> - </div> - </div> - </div> - </div> - <div class="right_box_two"> - <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/title@2x.png" class="bg" alt="" /> - </div> - <div class="su_title"> - <img class="icon" src="@/assets/images/FireFighting/ic_title_green@2x.png" alt=""> - <div class="name">闅愭偅闅忔墜鎷�</div> - </div> - <div class="static_wrap"> - <div class="item"> - <img src="@/assets/images/FireFighting/ic_tibao@2x.png" alt=""> - <div class="content"> - <div class="name">鎻愭姤闅愭偅鏁�</div> - <div class="num"><span>{{ dataList4.dangerTotalNum }}</span>涓�</div> - </div> - </div> - <div class="item"> - <img src="@/assets/images/FireFighting/ic_chuli@2x.png" alt=""> - <div class="content"> - <div class="name">澶勭悊闅愭偅鏁�</div> - <div class="num"><span class="today">{{ dataList4.dangerDealedNum }}</span>涓�</div> - </div> - </div> - </div> - <div class="su_title"> - <img class="icon" src="@/assets/images/FireFighting/ic_title_green@2x.png" alt=""> - <div class="name">鍛婅淇℃伅</div> - </div> - <div class="list two-swiper"> - <div class="swiper-wrapper"> - <div class="item two-swiper-slide swiper-slide" v-for="item, i in dataList7" :key="i"> - <div class="icon"> - <div class="circle"></div> - <div class="line"></div> + + <div class="police_wrap"> + <div class="item" v-for="(item, i) in dataList2"> + <div class="head"> + <div class="name">{{ item.name }}</div> + <div class="name">{{ item.num }}娆�</div> </div> - <div class="content"> - <div class="header"> - <div class="time"> - <span>{{ item.alarmTime }}</span> - <span class="status" v-if="item.handleStatus == 1">宸叉牳瀹�</span> - <span class="status" v-else-if="item.handleStatus == 2">鏈牳瀹�</span> - <span class="status" v-else-if="item.handleStatus == 3">鏍稿疄涓�</span> - <span v-else class="status">鏈牳瀹�</span> - </div> - <div class="have_time">宸插彂鐢焮{ item.haveTime }}</div> + <FirePercent :color="policeColors[i]" :rate="item.rate" /> + </div> + </div> + + <div class="dispose_wrap"> + <div class="tips"> + <div class="tips_title"> + <img src="@/assets/images/SecurityControl/ic_title_green@2x.png" alt=""> + <span>鎶ヨ瓒嬪娍</span> + </div> + </div> + <div class="echart2" id="echart2"></div> + </div> + + <div class="tips"> + <div class="tips_title"> + <img src="@/assets/images/SecurityControl/ic_title_green@2x.png" alt=""> + <span>鎶ヨ鏄庣粏</span> + </div> + </div> + + <div class="list two-swiper"> + <div class="swiper-wrapper"> + <div class="item two-swiper-slide swiper-slide" v-for="(item, i) in dataList7" :key="i"> + <div class="icon"> + <div class="circle"></div> + <div class="line"></div> </div> - <div class="wrap"> - <div class="title"> - <img class="xf" src="@/assets/images/FireFighting/ic_gaojing_red@2x.png" alt=""> - <span>{{ item.alarmTypeName }}</span> + <div class="content"> + <div class="header"> + <div class="time"> + <span>{{ item.alarmTime }}</span> + <span class="status" v-if="item.handleStatus == 1">宸叉牳瀹�</span> + <span class="status" v-else-if="item.handleStatus == 2">鏈牳瀹�</span> + <span class="status" v-else-if="item.handleStatus == 3">鏍稿疄涓�</span> + <span v-else class="status">鏈牳瀹�</span> + </div> + <div class="have_time">宸插彂鐢焮{ item.haveTime }}</div> </div> - <div class="title"> - <img class="addr" src="@/assets/images/FireFighting/xiaofang_ic_weizhi@2x.png" alt=""> - <span>{{ item.regionName }}</span> + <div class="wrap"> + <div class="title"> + <img class="xf" src="@/assets/images/FireFighting/ic_gaojing_red@2x.png" alt=""> + <span>{{ item.alarmTypeName }}</span> + </div> + <div class="title"> + <img class="addr" src="@/assets/images/FireFighting/xiaofang_ic_weizhi@2x.png" alt=""> + <span>{{ item.regionName }}</span> + </div> </div> </div> </div> - </div> - <div v-if="dataList7.length == 0" style="margin-top: 100px;" class="empty_wrap"> - <img src="@/assets/images/default_empty.png" alt=""> + <div v-if="dataList7.length == 0" style="margin-top: 50px;" class="empty_wrap"> + <img src="@/assets/images/default_empty.png" alt=""> + </div> </div> </div> + </div> </div> </div> @@ -340,6 +367,7 @@ const date = ref(dayjs().format('YYYY.MM.DD')) const week = ref(weekMap[new Date().getDay()]) const time = ref(dayjs().format('HH:mm:ss')) +var dateType = ref('') setInterval(() => { date.value = dayjs().format('YYYY-MM-DD') week.value = weekMap[new Date().getDay()] @@ -360,6 +388,12 @@ // let maxNum = const option = { barMaxWidth: 3, + mapLocation: { + x: '0', + y: '0', + width: '100%', + height: '100%' + }, polar: { radius: '80%' }, @@ -731,23 +765,25 @@ } const dataList1 = ref([]) -const policeColors = ['#01D9FE', '#FE5501', '#0193FE', '#28F0C4'] +const policeColors = ['#FE5501', '#01D9FE', '#01FE9D', '#FFF306'] const dataList2 = ref([]) -const getData2 = () => { - // let temp = [] - // temp.push({ name: '鐪熷疄鎶ヨ鏁�', num: 10, rate: 20 }) - // temp.push({ name: '璇姤璀︽暟', num: 30, rate: 60 }) - // temp.push({ name: '宸茶В闄�', num: 20, rate: 40 }) - // temp.push({ name: '澶勭悊涓�', num: 8, rate: 16 }) - // dataList2.value = temp - // return +let dayData = ref([]) + +const getDayData = () => { getFightingalarmData().then(res => { + dayData.value = res.data || {} + }) +} + +const getData2 = (type) => { + dateType.value = type + getFightingalarmData({ type: dateType.value }).then(res => { const result = res.data || {} let temp = [] - temp.push({ name: '鐪熷疄鎶ヨ鏁�', num: result.realNum, rate: (result.realNum / result.totalNum) * 100 }) + temp.push({ name: '宸插鐞�', num: result.liftNum, rate: (result.liftNum / result.totalNum) * 100 }) + temp.push({ name: '鏈鐞�', num: result.processingNum, rate: (result.processingNum / result.totalNum) * 100 }) + temp.push({ name: '姝f姤璀︽暟', num: result.liftNum - result.errNum, rate: ((result.liftNum - result.errNum) / result.totalNum) * 100 }) temp.push({ name: '璇姤璀︽暟', num: result.errNum, rate: (result.errNum / result.totalNum) * 100 }) - temp.push({ name: '宸茶В闄�', num: result.liftNum, rate: (result.liftNum / result.totalNum) * 100 }) - temp.push({ name: '澶勭悊涓�', num: result.processingNum, rate: (result.processingNum / result.totalNum) * 100 }) dataList2.value = temp }) } @@ -761,12 +797,10 @@ } const initEchart2 = () => { var myChart = echarts.init(document.querySelector('.echart2')) - // 鐢熸垚鏁版嵁鍜屾棩鏈� // 绀轰緥鏁版嵁 const data1 = dataList3.value.map(i => i.realNum) const data2 = dataList3.value.map(i => i.processingNum) const data3 = dataList3.value.map(i => i.liftNum) - const data4 = dataList3.value.map(i => i.errNum) const months = dataList3.value.map(i => { return i.startDate.substring(5, 7) + '鏈�' }) @@ -774,17 +808,17 @@ const option = { legend: { - x: "center", + x: "right", textStyle: { - color: "#FFFFFF", // 鍥句緥鏂囧瓧璁句负鐧借壊 + color: "#FFFFFF", fontSize: 12 }, icon: 'circle', - top: '6%', - itemWidth: 8, - itemHeight: 8, + top: '0', + itemWidth: 10, + itemHeight: 10, itemGap: 20, - data: ['鍛婅鏁�', '杩涜涓�', '宸插鐞�', '璇姤鏁�'] // 鏇存柊鍥句緥鍚嶇О + data: ['鎶ヨ鏁�', '鏈鐞�', '宸插鐞�'] }, grid: { left: '2%', @@ -812,7 +846,7 @@ }, axisLine: { lineStyle: { - color: '#1E294C' + color: '#D2E0FF' } }, axisTick: { @@ -827,7 +861,7 @@ }, axisLine: { lineStyle: { - color: '#A9AEB2' + color: '#D2E0FF' } }, axisTick: { @@ -845,7 +879,7 @@ }, series: [ { - name: "鍛婅鏁�", + name: "鎶ヨ鏁�", type: "bar", stack: "attendance", data: data1, @@ -862,12 +896,12 @@ barWidth: 6, }, { - name: "杩涜涓�", // 杩熷埌鏁版嵁 + name: "鏈鐞�", // 杩熷埌鏁版嵁 type: "bar", stack: "attendance", data: data2, itemStyle: { - color: '#28F0C4', // 杩熷埌鐨勯鑹� + color: '#FE5501', // 杩熷埌鐨勯鑹� }, label: { show: false, @@ -883,7 +917,7 @@ stack: "attendance", data: data3, itemStyle: { - color: '#0193FE', // 璇峰亣鐨勯鑹� + color: '#01D9FE', // 璇峰亣鐨勯鑹� }, label: { show: false, @@ -892,19 +926,7 @@ emphasis: { focus: "series", }, - }, - { - name: "璇姤鏁�", // 鍗曠嫭鐨勫姞鐝煴瀛� - type: "bar", - data: data4, - barWidth: 6, - itemStyle: { - color: '#FEED01', // 楂樹寒鐨勭传鑹� - }, - emphasis: { - focus: "series", - }, - }, + } ], } myChart.setOption(option) @@ -970,9 +992,10 @@ } }) if (dataList9.value.length > 0) { - dataTotal9.value = Math.ceil(dataList9.value.length / 2) - dataListTemp9.value = dataList9.value.slice(0, 2) + dataTotal9.value = Math.ceil(dataList9.value.length / 4) + dataListTemp9.value = dataList9.value.slice(0, 4) } + console.log(dataListTemp9.value) initEcharts9() }) } @@ -989,13 +1012,13 @@ // return if (dataIndex9.value == dataTotal9.value - 1 && num > 0) { dataIndex9.value = 0 - dataListTemp9.value = dataList9.value.slice(0, 2) + dataListTemp9.value = dataList9.value.slice(0, 4) } else if (dataIndex9.value == 0 && num < 0) { dataIndex9.value = dataTotal9.value - 1 - dataListTemp9.value = dataList9.value.slice(dataList9.value.length - 2, dataList9.value.length) + dataListTemp9.value = dataList9.value.slice(dataList9.value.length - 4, dataList9.value.length) } else { dataIndex9.value = dataIndex9.value + num - dataListTemp9.value = dataList9.value.slice(dataIndex9.value * 2, (dataIndex9.value + 1) * 2) + dataListTemp9.value = dataList9.value.slice(dataIndex9.value * 4, (dataIndex9.value + 1) * 4) } initEcharts9() } @@ -1023,6 +1046,13 @@ return false } } + +const sum = (array, field) => { + return array.reduce((accumulator, currentValue) => { + return accumulator + currentValue[field]; + }, 0); +} + const loopFn1 = () => { var newSwiper1 = new Swiper('.one-swiper', { initialSlide: 0, @@ -1036,52 +1066,99 @@ var newSwiper1 = new Swiper('.two-swiper', { initialSlide: 0, direction: 'vertical', //绔栫洿鏂瑰悜 - slidesPerView: 4, - autoplay: autoplayFlag(dataList7.value, 4, 4000), + slidesPerView: 3, + autoplay: autoplayFlag(dataList7.value, 3, 4000), observer: true, //淇敼swiper鑷繁鎴栧瓙鍏冪礌鏃讹紝鑷姩鍒濆鍖杝wiper }) } onMounted(() => { - // getData1() + getDayData() getData2() getData3() getData4() getData5() - // getData6() getData7() getData8() setInterval(() => { getData2() getData3() getData4() - // getData6() getData7() }, 60 * 1000) setInterval(() => { getData5() getData8() }, 60 * 60 * 1000) - setInterval(() => { changeData8(1) changeData9(1) }, 1000 * 5) - setTimeout(() => { loopFn1() loopFn2() }, 12000) - - }) - - </script> <style lang="scss" scoped> div { box-sizing: border-box; +} +.tips { + width: 100%; + display: flex; + align-items: center; + justify-content: space-between; + .tips_title { + flex-shrink: 0; + display: flex; + align-items: center; + margin-right: 30px; + img { + width: 17px; + height: 17px; + margin-right: 7px; + } + span { + font-weight: 500; + font-size: 16px; + color: #FFFFFF; + } + } + .tips_cates { + display: flex; + align-items: center; + .tips_cates_row { + font-weight: 600; + font-size: 14px; + color: #D2E0FF; + cursor: pointer; + } + .tips_cates_x { + margin: 0 8px; + font-weight: 600; + font-size: 14px; + color: #D2E0FF; + } + .active { + color: #0094EB !important; + } + } + .right { + display: flex; + align-items: center; + + .num { + margin: 0 5px; + } + + .icon { + width: 30px; + cursor: pointer; + /* height: 16px; */ + } + } } .main_content { @@ -1089,109 +1166,482 @@ padding: 20px 25px 0; .left_box { - width: 450px; + /*width: 450px;*/ + flex: 1; + margin-right: 20px; - .left_box_one { + .left_box_top { width: 100%; - margin-bottom: 20px; + display: flex; + align-items: start; + position: relative; - .list_wrap { - padding: 10px 0; + .left_box_top_znz { + width: 68px; + height: 68px; + position: absolute; + right: 0; + top: 120px; + img { + width: 100%; + height: 100%; + } + } - .list_content { - height: 170px; - overflow: hidden; + .left_box_top_left { + width: 450px; + flex-shrink: 0; - .line_wrap { - height: 34px !important; + .left_box_one { + width: 100%; + margin-bottom: 20px; + + .left_content { + width: 100%; + height: 549px; + padding: 20px; + box-sizing: border-box; + background: rgba(255,255,255,0.03); + + .list_wrap { + padding: 10px 0; + + .list_wrap_footer { + width: 100%; + height: 40px; + display: flex; + align-items: center; + position: relative; + .separate { + position: absolute; + bottom: 0; + left: 0; + 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; + } + .wrap_footer_item { + display: flex; + align-items: center; + justify-content: center; + flex: 2; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + .name { + flex: 5; + color: #00F2F3; + } + } + + .list_content { + height: 204px; + overflow: hidden; + + .line_wrap { + height: 40px !important; + } + } + + .list { + .line { + display: flex; + height: 40px; + align-items: center; + font-size: 14px; + + .item { + flex: 2; + display: flex; + justify-content: center; + /* margin: 0 6px; */ + align-items: center; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + + } + + .name { + flex: 5; + color: #00F2F3; + } + + .warnning { + color: #FEAF01; + } + } + + .header { + background: rgba(134, 156, 201, 0.1); + font-weight: 500; + + .item { + 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; + } + } + } + + .content_wrap { + height: 176px; + + .list { + display: flex; + align-items: center; + + .item { + height: 116px; + flex: 1; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + + .num { + margin-top: 12px; + font-weight: bold; + font-size: 32px; + + } + + .acc { + background-image: -webkit-linear-gradient(top, + #ffffff 0%, + #c8ddff 66%, + #95eefc 72%, + #95eefc 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + } + + .active { + color: #00F2F3; + } + } + + .separate { + width: 1px; + height: 50px; + background-color: rgba(255, 255, 255, 0.21); + } + } + + .footer { + display: flex; + + .icon { + width: 40px; + height: 41px; + margin-right: 2px; + } + + .content { + flex: 1; + font-size: 16px; + height: 40px; + display: flex; + justify-content: space-between; + align-items: center; + padding: 0 20px; + background: linear-gradient(270deg, rgba(1, 217, 254, 0) 0%, rgba(1, 217, 254, 0.19) 100%); + border: 1px solid; + border-image: linear-gradient(270deg, rgba(1, 217, 254, 0), rgba(1, 217, 254, 0.6)) 1 1; + + .num { + font-size: 20px; + font-weight: bold; + + span { + font-size: 13px; + color: #869CC9; + } + } + } + } + } + + } + + } + } + .left_box_top_right { + flex: 1; + + .center_box_one { + width: 100%; + padding: 0 120px; + box-sizing: border-box; + .static_wrap { + display: flex; + justify-content: space-between; + align-items: center; + margin: 30px 0 54px; + + .item { + display: flex; + + img { + width: 61px; + height: 63px; + margin-right: 15px; + } + + .content { + font-size: 15px; + .num { + font-weight: bold; + font-size: 30px; + margin-right: 5px; + background-image: -webkit-linear-gradient(top, + rgba(254, 113, 1, 1) 0%, + rgba(239, 202, 16, 1) 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + } + .num2 { + background-image: -webkit-linear-gradient(top, + #fff 0%, + #dd4c26 50%, + #e43724 100%); + } + .num5 { + background-image: -webkit-linear-gradient(top, + rgba(1, 217, 254, 1) 0%, + rgba(1, 254, 242, 1) 100%); + } + } + } } } + } + } - .list { - .line { - display: flex; - height: 32px; - align-items: center; - font-size: 14px; + .left_box_bottom { + width: 100%; + display: flex; + flex-direction: column; - .item { - flex: 2; + .bottom_content { + width: 100%; + height: 168px; + display: flex; + align-items: center; + justify-content: space-between; + background: rgba(255,255,255,0.03); + + .bottom_content_left { + width: 435px; + height: 100%; + padding: 20px; + box-sizing: border-box; + + .list_wrap { + width: 100%; + height: 64px; + margin-top: 20px; + + .list { + height: 100%; display: flex; - justify-content: center; - /* margin: 0 6px; */ - align-items: center; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; + justify-content: space-evenly; - } + .item { + display: flex; + align-items: center; + position: relative; - .name { - flex: 5; - justify-content: flex-start; - } + .place { + position: absolute; + top: 120px; + right: 70px; + z-index: 999; + font-size: 13px; + color: #869CC9; + width: 120px; + text-align: center; + } - .warnning { - color: #FEAF01; - } - } + .icon { + width: 70px; + height: 70px; + margin-right: 10px; + } - .header { - background: rgba(134, 156, 201, 0.1); - font-weight: 500; + .content { + .num { + font-size: 28px; + font-weight: 500; - .item { - border-right: 1px solid rgba(255, 255, 255, 0.2); + span { + font-size: 14px; + font-weight: 400; + } + } - &:nth-last-child(1) { - border: none; + .la { + font-size: 13px; + color: #869CC9; + } + } } } } - .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; - } } - } - } - .left_box_two { - margin-bottom: 20px; - - .police_wrap { - padding: 15px 20px 0; - height: 225px; - - .item { - margin-bottom: 5px; - - .head { - display: flex; - justify-content: space-between; - align-items: center; - font-size: 16px; - color: #FFFFFF; - margin-bottom: 8px; - } - } - } - } - - .left_box_three { - .dispose_wrap { - height: 210px; - width: 100%; - - .echart2 { - width: 100%; + .bottom_content_right { + flex: 1; height: 100%; + padding: 20px; + box-sizing: border-box; + + .list_wrap2 { + display: flex; + align-items: center; + height: 85px; + + .item1 { + width: 50%; + height: 0; + } + .item { + width: 50%; + height: 100%; + display: flex; + align-items: center; + position: relative; + + .list_wrap2_info { + flex: 1; + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; + .title { + display: flex; + align-items: start; + color: #D2E0FF; + + .icon { + width: 16px; + margin-right: 8px; + } + + span { + font-weight: 400; + font-size: 14px; + color: #D2E0FF; + } + } + + .unit { + bottom: 16px; + left: 4px; + width: 130px; + margin-bottom: 6px; + margin-top: 2px; + + span { + font-weight: 500; + color: #FFFFFF; + + &:nth-child(1) { + font-size: 20px; + } + &:nth-child(2) { + font-size: 13px; + } + /*font-size: 12px;*/ + /*font-weight: 400;*/ + } + } + + .place { + bottom: 16px; + left: 4px; + width: 130px; + font-size: 13px; + color: #869CC9; + } + } + .watergage_wrap { + flex-shrink: 0; + width: 100px; + height: 85px; + text-align: center; + position: relative; + + .watergage { + width: 100px; + height: 85px; + } + + + } + .liquidlevel_wrap { + width: 100px; + height: 85px; + position: relative; + + .size { + width: 13px; + height: 84px; + position: absolute; + top: 3px; + right: 20px; + } + + .liquidle_te { + font-weight: 500; + font-size: 18px; + position: absolute; + top: 99px; + left: 0; + width: 206px; + display: flex; + flex-direction: column; + align-items: center; + + .placeT { + font-size: 12px; + color: #869CC9; + margin-top: 6px; + } + } + + .liquidlevel { + width: 220px; + height: 400px; + color: #fff; + transform: scale(0.24); + text-align: center; + left: -70px; + top: -154px; + } + } + } + } + } + } } } @@ -1203,301 +1653,12 @@ flex-direction: column; justify-content: space-between; - .center_box_one { - .static_wrap { - display: flex; - justify-content: space-between; - align-items: center; - margin: 30px 0 54px; - .item { - display: flex; - - img { - width: 61px; - height: 63px; - margin-right: 15px; - } - - .content { - font-size: 15px; - - .num { - font-size: 12px; - color: #D2E0FF; - - font-weight: bold; - font-size: 30px; - margin-right: 5px; - font-weight: 600; - background-image: -webkit-linear-gradient(top, - #01D9FE 0%, - #01D9FE 60%, - #fff 100%); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - } - - .num2 { - background-image: -webkit-linear-gradient(top, - #fff 0%, - #dd4c26 50%, - #e43724 100%); - } - - .num3 { - background-image: -webkit-linear-gradient(top, - #eb8131 0%, - #d0a72c 50%, - #e9bf43 100%); - } - - .num4 { - background-image: -webkit-linear-gradient(top, - #fff 0%, - #78db91 50%, - #6de8b0 100%); - } - - .num5 { - background-image: -webkit-linear-gradient(top, - #fff 0%, - #3a83f5 50%, - #3a83f5 100%); - } - } - } - } - } .center_box_two { width: 108%; display: flex; margin: 0 -4%; - - .content_wrap { - flex: 1; - flex-shrink: 0; - margin-right: 20px; - - .title_wrap { - display: flex; - - .title { - flex: 1; - } - } - - &:nth-last-child(1) { - margin-right: 0; - } - - .header { - display: flex; - justify-content: space-between; - align-items: center; - font-weight: bold; - font-size: 16px; - text-shadow: 0px 2px 8px #01ABFE; - margin-bottom: 20px; - - .left { - display: flex; - align-items: center; - - .icon { - width: 14px; - height: 28px; - margin-right: 10px; - } - } - - .right { - display: flex; - align-items: center; - - .num { - margin: 0 40px; - } - - .icon { - width: 30px; - cursor: pointer; - /* height: 16px; */ - } - } - } - - .list_wrap { - height: 206px; - background-image: url('@/assets/images/FireFighting/bg_wendu@2x.png'); - background-size: cover; - - .title { - height: 46px; - display: flex; - align-items: center; - color: #D2E0FF; - padding-left: 20px; - - .icon { - width: 16px; - margin-right: 8px; - } - } - - .list { - height: 160px; - display: flex; - justify-content: space-evenly; - - .item { - display: flex; - align-items: center; - position: relative; - - .place { - position: absolute; - top: 120px; - right: 70px; - z-index: 999; - font-size: 13px; - color: #869CC9; - width: 120px; - text-align: center; - } - - .icon { - width: 70px; - height: 70px; - margin-right: 10px; - } - - .content { - .num { - font-size: 28px; - font-weight: 500; - - span { - font-size: 14px; - font-weight: 400; - } - } - - .la { - font-size: 13px; - color: #869CC9; - } - } - } - } - } - - .list_wrap2 { - display: flex; - align-items: center; - height: 206px; - background-image: url('@/assets/images/FireFighting/bg_wendu@2x.png'); - background-size: cover; - - .item { - width: 50%; - height: 100%; - - .title { - height: 46px; - display: flex; - align-items: center; - color: #D2E0FF; - padding-left: 20px; - - .icon { - width: 16px; - margin-right: 8px; - } - } - - .watergage_wrap { - text-align: center; - position: relative; - left: 30px; - - .watergage { - width: 130px; - height: 112px; - } - - .unit { - font-weight: 500; - font-size: 18px; - position: relative; - bottom: 16px; - left: 4px; - width: 130px; - margin-bottom: 6px; - margin-top: 2px; - - span { - font-size: 12px; - font-weight: 400; - } - } - - .place { - position: relative; - bottom: 16px; - left: 4px; - width: 130px; - font-size: 13px; - color: #869CC9; - } - } - - .liquidlevel_wrap { - position: relative; - - /* border: 6px solid red; */ - .liquidle_te { - font-weight: 500; - font-size: 18px; - position: absolute; - top: 99px; - left: 0; - width: 206px; - display: flex; - flex-direction: column; - align-items: center; - - .placeT { - font-size: 12px; - color: #869CC9; - margin-top: 6px; - } - } - - /* .placeT { - position: relative; - bottom: 10px; - left: 4px; - font-size: 74px; - color: #869CC9; - opacity: 0; - } */ - - .liquidlevel { - width: 220px; - height: 400px; - transform: scale(0.27); - color: #fff; - text-align: center; - position: relative; - left: -8px; - top: -143px; - } - } - } - } - } } } @@ -1506,258 +1667,180 @@ width: 450px; .right_box_one { - .content_wrap { - height: 176px; + width: 100%; + + .right_content { + width: 100%; + height: 775px; + padding: 20px; + box-sizing: border-box; + background: rgba(255,255,255,0.03); .list { - display: flex; - align-items: center; + height: 240px; + overflow: hidden; + margin-top: 15px; + scrollbar-width: none; .item { - height: 116px; - flex: 1; display: flex; - flex-direction: column; - justify-content: center; - align-items: center; + font-size: 13px; + color: #D2E0FF; + height: 68px !important; - .num { - margin-top: 12px; - font-weight: bold; - font-size: 32px; + .icon { + width: 40px; + display: flex; + flex-direction: column; + align-items: center; + padding-top: 10px; - } - - .acc { - background-image: -webkit-linear-gradient(top, - #ffffff 0%, - #c8ddff 66%, - #95eefc 72%, - #95eefc 100%); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - } - - .active { - color: #00F2F3; - } - } - - .separate { - width: 1px; - height: 50px; - background-color: rgba(255, 255, 255, 0.21); - } - } - - .footer { - display: flex; - - .icon { - width: 40px; - height: 41px; - margin-right: 2px; - } - - .content { - flex: 1; - font-size: 16px; - height: 40px; - display: flex; - justify-content: space-between; - align-items: center; - padding: 0 20px; - background: linear-gradient(270deg, rgba(1, 217, 254, 0) 0%, rgba(1, 217, 254, 0.19) 100%); - border: 1px solid; - border-image: linear-gradient(270deg, rgba(1, 217, 254, 0), rgba(1, 217, 254, 0.6)) 1 1; - - .num { - font-size: 20px; - font-weight: bold; - - span { - font-size: 13px; - color: #869CC9; - } - } - } - } - } - } - - .right_box_two { - .su_title { - display: flex; - align-items: center; - font-weight: 500; - font-size: 16px; - margin: 20px; - - .icon { - width: 17px; - height: 17px; - margin-right: 7px; - } - } - - .static_wrap { - display: flex; - justify-content: space-evenly; - align-items: center; - height: 110px; - - .item { - display: flex; - align-items: center; - - img { - width: 80px; - height: 80px; - margin-right: 8px; - } - - .content { - font-size: 14px; - - .num { - font-size: 12px; - color: #D2E0FF; - margin-top: 8px; - - span { - font-weight: bold; - font-size: 24px; - margin-right: 4px; - font-weight: 600; - background-image: -webkit-linear-gradient(top, - #01D9FE 0%, - #01D9FE 60%, - #fff 100%); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; + .circle { + width: 7px; + height: 7px; + border-radius: 50%; + background: #01D9FE; + box-shadow: 0px 0px 1px 4px #34788f; + /* opacity: 0.52; */ } - .today { - background-image: -webkit-linear-gradient(top, - #fff 0%, - #FFB120 50%, - #FFB120 100%); + .line { + margin-top: 3px; + width: 1px; + flex: 1; + background-color: #153947; } } - } - } - } - .list { - height: 320px; - overflow: hidden; - margin-top: 15px; - scrollbar-width: none; - - .item { - display: flex; - font-size: 13px; - color: #D2E0FF; - height: 80px !important; - - .icon { - width: 40px; - display: flex; - flex-direction: column; - align-items: center; - padding-top: 10px; - - .circle { - width: 7px; - height: 7px; - border-radius: 50%; - background: #01D9FE; - box-shadow: 0px 0px 1px 4px #34788f; - /* opacity: 0.52; */ - } - - .line { - margin-top: 3px; - width: 1px; + .content { flex: 1; - background-color: #153947; + + .header { + display: flex; + justify-content: space-between; + align-items: center; + + .time { + display: flex; + align-items: center; + + .status { + height: 18px; + line-height: 18px; + border-radius: 2px; + padding: 2px 4px; + border: 1px solid #869CC9; + font-size: 12px; + margin-left: 8px; + } + } + + .have_time { + font-size: 12px; + color: #D2E0FF; + + span { + color: #FEAF01; + } + } + } + + .wrap { + height: 34px; + background: linear-gradient(270deg, rgba(254, 85, 1, 0) 0%, rgba(254, 85, 1, 0.19) 100%); + border-radius: 2px 0px 0px 2px; + display: flex; + align-items: center; + border: 1px solid; + margin-bottom: 20px; + margin-top: 8px; + padding: 0 10px; + border-image: linear-gradient(270deg, rgba(254, 85, 1, 0), rgba(254, 85, 1, 0.6)) 1 1; + + .title { + flex: 4; + font-weight: bold; + font-size: 15px; + color: #FFFFFF; + display: flex; + align-items: center; + + span { + margin-left: 4px; + } + + .xf { + width: 14px; + height: 14px; + } + + .addr { + width: 12px; + height: 12px; + } + } + + .address { + flex: 6; + } + } + } + } + } + + .dispose_wrap { + height: 210px; + width: 100%; + position: relative; + + .tips { + width: 100%; + display: flex; + align-items: center; + justify-content: space-between; + position: absolute; + top: 0; + left: 0; + .tips_title { + display: flex; + align-items: center; + img { + width: 17px; + height: 17px; + margin-right: 7px; + } + span { + font-weight: 500; + font-size: 16px; + color: #FFFFFF; + } } } - .content { - flex: 1; + .echart2 { + width: 100%; + height: 100%; + } + } - .header { + .police_wrap { + padding: 15px 0; + height: 225px; + + .item { + margin-bottom: 5px; + + .head { display: flex; justify-content: space-between; align-items: center; - - .time { - display: flex; - align-items: center; - - .status { - height: 18px; - line-height: 18px; - border-radius: 2px; - padding: 2px 4px; - border: 1px solid #869CC9; - font-size: 12px; - margin-left: 8px; - } - } - - .have_time { - font-size: 12px; - color: #D2E0FF; - - span { - color: #FEAF01; - } - } - } - - .wrap { - height: 34px; - background: linear-gradient(270deg, rgba(254, 85, 1, 0) 0%, rgba(254, 85, 1, 0.19) 100%); - border-radius: 2px 0px 0px 2px; - display: flex; - align-items: center; - border: 1px solid; - margin-bottom: 20px; - margin-top: 8px; - padding: 0 10px; - border-image: linear-gradient(270deg, rgba(254, 85, 1, 0), rgba(254, 85, 1, 0.6)) 1 1; - - .title { - flex: 4; - font-weight: bold; - font-size: 15px; - color: #FFFFFF; - display: flex; - align-items: center; - - span { - margin-left: 4px; - } - - .xf { - width: 14px; - height: 14px; - } - - .addr { - width: 12px; - height: 12px; - } - } - - .address { - flex: 6; - } + font-size: 16px; + color: #FFFFFF; + margin-bottom: 8px; } } } + } } } diff --git a/screen/src/views/FireFighting1.vue b/screen/src/views/FireFighting1.vue new file mode 100644 index 0000000..8432293 --- /dev/null +++ b/screen/src/views/FireFighting1.vue @@ -0,0 +1,1900 @@ +<template> + <v-scale-screen width="1920" height="960"> + <div class="main_app"> + <!-- <img src="@/assets/images/FireFighting/bg@2x.png" class="main_bg" alt="" /> --> + <img src="@/assets/images/SecurityControl/bg@2x_2.png" class="main_bg" alt="" /> + <div class="main_header"> + <img src="@/assets/images/maintitle.gif" class="main_header_bg" alt="" /> + <div class="title">瀹夋嘲鏅烘収鐗╂祦鍥尯-鏅烘収娑堥槻绠℃帶</div> + <div class="time_wrap"> + <span class="date">{{ date }}</span> + <span class="week">{{ week }}</span> + <span class="time">{{ time }}</span> + </div> + </div> + <div class="main_content"> + <div class="left_box"> + <div class="left_box_one"> + <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/title@2x.png" class="bg" alt="" /> + </div> + <div class="list_wrap"> + <div class="list"> + <div class="header line"> + <span class="item name">璁惧鍚嶇О</span> + <span class="item">鎬绘暟</span> + <span class="item">鎶ヨ</span> + <span class="item">灞忚斀</span> + <span class="item">鏁呴殰</span> + <span class="item">姝e父</span> + </div> + <div class="one-swiper list_content"> + <div class="swiper-wrapper"> + <div class="line_wrap one-swiper-slide swiper-slide" v-for="(item, i) in dataList1"> + <div class="line"> + <span class="item name">{{ item.typeName }}</span> + <span class="item">{{ item.totalDeviceNum || 0 }}</span> + <span class="item" style="color: #FEAF01;">{{ item.alarmDeviceNum || 0 }}</span> + <span class="item">{{ item.shieldDeviceNum || 0 }}</span> + <span class="item">{{ item.errDeviceNum || 0 }}</span> + <span class="item">{{ item.onlineDeviceNum || 0 }}</span> + </div> + <div class="separate"></div> + </div> + </div> + </div> + + </div> + </div> + </div> + <div class="left_box_two"> + <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/title@2x.png" class="bg" alt="" /> + </div> + <div class="police_wrap"> + <div class="item" v-for="(item, i) in dataList2"> + <div class="head"> + <div class="name">{{ item.name }}</div> + <div class="name">{{ item.num }}娆�</div> + </div> + <FirePercent :color="policeColors[i]" :rate="item.rate" /> + </div> + + </div> + </div> + <div class="left_box_three"> + <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/title@2x.png" class="bg" alt="" /> + </div> + <div class="dispose_wrap"> + <div class="echart2" id="echart2"></div> + </div> + </div> + </div> + <div class="center_box"> + <div class="center_box_one"> + <div class="static_wrap"> + <div class="item"> + <img src="@/assets/images/FireFighting/xiaofang_ic_zaixian@2x.png" alt=""> + <div class="content"> + <div class="name">鎬绘暟</div> + <div class="num">{{ dataList4.onlineDeviceNum || 0 }}</div> + </div> + </div> + <div class="item"> + <img src="@/assets/images/FireFighting/xiaofang_ic_baojing@2x.png" alt=""> + <div class="content"> + <div class="name">鎶ヨ</div> + <div class="num num2">{{ dataList4.alarmDeviceNum || 0}}</div> + </div> + </div> + <div class="item"> + <img src="@/assets/images/FireFighting/xiaofang_ic_pingbi@2x.png" alt=""> + <div class="content"> + <div class="name">灞忚斀</div> + <div class="num num5">{{ dataList4.shieldDeviceNum || 0 }}</div> + </div> + </div> + <div class="item"> + <img src="@/assets/images/FireFighting/xiaofang_ic_guzhang@2x.png" alt=""> + <div class="content"> + <div class="name">鏁呴殰</div> + <div class="num num3">{{ dataList4.errDeviceNum || 0 }}</div> + </div> + </div> + <div class="item"> + <img src="@/assets/images/FireFighting/xiaofang_ic_zhengchang@2x.png" alt=""> + <div class="content"> + <div class="name">姝e父</div> + <div class="num num4">{{ dataList4.onlineDeviceNum || 0 }}</div> + </div> + </div> + </div> + </div> + <div class="center_box_two"> + <div class="content_wrap"> + <div class="header"> + <div class="left"> + <img class="icon" src="@/assets/images/FireFighting/468@2x.png" alt=""> + <span>娓╁害/婀垮害浼犳劅鍣�</span> + </div> + <div class="right"> + <img @click="changeData8(-1)" class="icon" src="@/assets/images/FireFighting/xiaofang_ar_left@2x.png" + alt=""> + <div class="num">{{ dataIndex8 + 1 }}/{{ dataList8.length }}</div> + <img @click="changeData8(1)" class="icon" src="@/assets/images/FireFighting/xiaofang_ar_right@2x.png" + alt=""> + </div> + </div> + <div class="list_wrap"> + <div class="title"> + <img class="icon" src="@/assets/images/FireFighting/ic_location@2x.png" alt=""> + <span v-if="dataList8 && dataList8.length > 0">{{ dataList8[dataIndex8].humidityData.name }}</span> + </div> + <div class="list" v-if="dataList8 && dataList8.length > 0"> + <div class="item"> + <img class="icon" src="@/assets/images/FireFighting/ic_wendu@2x.png" alt=""> + <div class="content"> + <div class="num" + v-if="dataList8[dataIndex8].temperatureData && dataList8[dataIndex8].temperatureData.latestValue"> + {{ Number(dataList8[dataIndex8].temperatureData.latestValue).toFixed(1) }}<span>掳C</span></div> + <div class="la">闃堝�� {{ dataList8[dataIndex8].temperatureData?.alarmLow }}锝瀧{ + dataList8[dataIndex8].temperatureData?.alarmHigh }}掳C</div> + </div> + </div> + <div class="item"> + <img class="icon" src="@/assets/images/FireFighting/ic_shidu@2x.png" alt=""> + <div class="content"> + <div class="num" + v-if="dataList8[dataIndex8].humidityData && dataList8[dataIndex8].humidityData.latestValue">{{ + Number(dataList8[dataIndex8].humidityData.latestValue).toFixed(1) }}<span>%</span></div> + <div class="la">闃堝�� {{ dataList8[dataIndex8].humidityData?.alarmLow }}锝瀧{ + dataList8[dataIndex8].humidityData?.alarmHigh }}%</div> + </div> + </div> + </div> + </div> + </div> + <div class="content_wrap"> + <div class="header"> + <div class="left"> + <img class="icon" src="@/assets/images/FireFighting/468@2x.png" alt=""> + <span>瀹炴椂浼犳劅鍣ㄦ娴�</span> + </div> + <div class="right"> + <img @click="changeData9(-1)" class="icon" src="@/assets/images/FireFighting/xiaofang_ar_left@2x.png" + alt=""> + <div class="num">{{ dataIndex9 + 1 }}/{{ dataTotal9 }}</div> + <img @click="changeData9(1)" class="icon" src="@/assets/images/FireFighting/xiaofang_ar_right@2x.png" + alt=""> + </div> + </div> + <div class="list_wrap2"> + <div class="item" v-for="item, i in dataListTemp9"> + <div class="title"> + <img class="icon" src="@/assets/images/FireFighting/ic_location@2x.png" alt=""> + <span>{{ item.name }}</span> + </div> + <div class="watergage_wrap" v-if="item.obj.typeCode == 253958"> + <div class="watergage" :id="'watergage' + i"></div> + <div class="unit">{{ item.obj.value }}</div> + <div class="place">闃堝�� {{ item.level }}</div> + </div> + <div v-if="item.obj.typeCode == 254001" class="liquidlevel_wrap"> + <div class="liquidlevel" :id="'liquidlevel' + i"></div> + <div class="liquidle_te"> + <div class="unit">{{ item.obj.value }}</div> + <div class="placeT">闃堝�納{ item.level }}</div> + </div> + </div> + </div> + </div> + </div> + </div> + </div> + <div class="right_box"> + <div class="right_box_one"> + <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/title@2x.png" class="bg" alt="" /> + </div> + <div class="content_wrap"> + <div class="list"> + <div class="item"> + <div>宸茬淮淇�</div> + <div class="num active">{{ dataList5.protectNum }}</div> + </div> + <div class="separate"></div> + <div class="item"> + <div>璁″垝缁翠繚</div> + <div class="num acc">{{ dataList5.planProtectTotal }}</div> + </div> + <div class="separate"></div> + <div class="item"> + <div>缁翠繚鐜�</div> + <div v-if="dataList5.protectNum && dataList5.planProtectTotal" class="acc num">{{ + ((dataList5.protectNum / dataList5.planProtectTotal) * 100).toFixed(0) }}%</div> + </div> + </div> + <div class="footer"> + <img src="@/assets/images/FireFighting/ic_weixiu@2x.png" class="icon" alt=""> + <div class="content"> + <div>鏈湀鏂板缁翠繚</div> + <div class="num">{{ dataList5.monthAddNum }} <span>涓�</span></div> + </div> + </div> + </div> + </div> + <div class="right_box_two"> + <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/title@2x.png" class="bg" alt="" /> + </div> + <div class="su_title"> + <img class="icon" src="@/assets/images/FireFighting/ic_title_green@2x.png" alt=""> + <div class="name">闅愭偅闅忔墜鎷�</div> + </div> + <div class="static_wrap"> + <div class="item"> + <img src="@/assets/images/FireFighting/ic_tibao@2x.png" alt=""> + <div class="content"> + <div class="name">鎻愭姤闅愭偅鏁�</div> + <div class="num"><span>{{ dataList4.dangerTotalNum }}</span>涓�</div> + </div> + </div> + <div class="item"> + <img src="@/assets/images/FireFighting/ic_chuli@2x.png" alt=""> + <div class="content"> + <div class="name">澶勭悊闅愭偅鏁�</div> + <div class="num"><span class="today">{{ dataList4.dangerDealedNum }}</span>涓�</div> + </div> + </div> + </div> + <div class="su_title"> + <img class="icon" src="@/assets/images/FireFighting/ic_title_green@2x.png" alt=""> + <div class="name">鍛婅淇℃伅</div> + </div> + <div class="list two-swiper"> + <div class="swiper-wrapper"> + <div class="item two-swiper-slide swiper-slide" v-for="item, i in dataList7" :key="i"> + <div class="icon"> + <div class="circle"></div> + <div class="line"></div> + </div> + <div class="content"> + <div class="header"> + <div class="time"> + <span>{{ item.alarmTime }}</span> + <span class="status" v-if="item.handleStatus == 1">宸叉牳瀹�</span> + <span class="status" v-else-if="item.handleStatus == 2">鏈牳瀹�</span> + <span class="status" v-else-if="item.handleStatus == 3">鏍稿疄涓�</span> + <span v-else class="status">鏈牳瀹�</span> + </div> + <div class="have_time">宸插彂鐢焮{ item.haveTime }}</div> + </div> + <div class="wrap"> + <div class="title"> + <img class="xf" src="@/assets/images/FireFighting/ic_gaojing_red@2x.png" alt=""> + <span>{{ item.alarmTypeName }}</span> + </div> + <div class="title"> + <img class="addr" src="@/assets/images/FireFighting/xiaofang_ic_weizhi@2x.png" alt=""> + <span>{{ item.regionName }}</span> + </div> + </div> + </div> + </div> + <div v-if="dataList7.length == 0" style="margin-top: 100px;" class="empty_wrap"> + <img src="@/assets/images/default_empty.png" alt=""> + </div> + </div> + </div> + </div> + </div> + </div> + </div> + </v-scale-screen> +</template> + +<script setup> +import { ref, onMounted, nextTick } from 'vue' +import VScaleScreen from 'v-scale-screen' +import FirePercent from '@/components/FirePercent.vue' +import dayjs from 'dayjs' +import duration from 'dayjs/plugin/duration' +dayjs.extend(duration) +import * as echarts from 'echarts' +import 'swiper/css/swiper.min.css' +import Swiper from 'swiper' +import { + getFightingalarmData, + getFightingHandle, + getFightingcenterData, + getFightingDeAlarm, + getFightingDeviceY, + getFighalarmDataList, + getTemperatureHumidityData, + monitorDataListP +} from '@/api' + +const colors = ['#FEAF01', '#01ABFE', '#51F9E4'] +const weekMap = ['鏄熸湡鏃�', '鏄熸湡涓�', '鏄熸湡浜�', '鏄熸湡涓�', '鏄熸湡鍥�', '鏄熸湡浜�', '鏄熸湡鍏�',] +const date = ref(dayjs().format('YYYY.MM.DD')) +const week = ref(weekMap[new Date().getDay()]) +const time = ref(dayjs().format('HH:mm:ss')) +setInterval(() => { + date.value = dayjs().format('YYYY-MM-DD') + week.value = weekMap[new Date().getDay()] + time.value = dayjs().format('HH:mm:ss') + +}, 1000) + + +const initWatergage = (id, item) => { + const myChart = echarts.init(document.getElementById(id)) + var data_value = item.obj.value.replaceAll('Mpa', '') + // const startI = item.level.indexOf('-') + // const endI = item.level.indexOf('Mpa') + // let maxNum = item.level.slice(startI + 1, endI) + // let minNum = item.level.slice(0, startI) + let maxNum = item.max + let minNum = item.min + // let maxNum = + const option = { + barMaxWidth: 3, + polar: { + radius: '80%' + }, + grid: { + top: '0%', + left: '0%', + right: '%', + bottom: '0%', + containLabel: true + }, + angleAxis: { + show: false, + max: (360 * 100) / 270, + type: 'value', + startAngle: 225, + }, + radiusAxis: { + show: false, + type: 'category', + z: 10 + }, + series: [ + { + type: 'gauge', + min: minNum, + max: maxNum, + splitNumber: 5, + radius: '100%', + center: ['50%', '50%'], + data: [data_value], + detail: { + formatter: (v) => v + '%', + color: '#152435', + fontSize: 1, + + }, + itemStyle: { + color: '#3DE6FF' + }, + pointer: { + width: 2, + length: '90%', + offsetCenter: [0, '3%'], + }, + axisLine: { + show: true, + lineStyle: { + width: 0, + color: [ + [0.05, '#1b6dff'], + [0.10, '#2084ff'], + [0.15, '#2596ff'], + [0.20, '#2db0ff'], + [0.25, '#31c0ff'], + [0.30, '#36d3ff'], + [0.35, '#4fe6ec'], + [0.40, '#6ae7d2'], + [0.45, '#84e8b9'], + [0.50, '#a5e999'], + [0.55, '#ccea75'], + [0.60, '#f8eb4a'], + [0.65, '#ffdd4f'], + [0.70, '#ffcb5a'], + [0.75, '#ffae6e'], + [0.80, '#ff9c7b'], + [0.85, '#ff8d87'], + [0.90, '#ff7d91'], + [0.95, '#ff6f9b'], + [1, '#ff5ca9'] + ] + + } + }, + axisTick: { + show: true, + length: 3, + splitNumber: 12, + lineStyle: { + width: 1, + color: 'auto', + }, + }, + axisLabel: { + distance: 12, + fontSize: 8, + color: 'auto', + }, + splitLine: { + show: true, + length: -5, + lineStyle: { + width: 1, + color: 'auto', + } + }, + z: 9, + }, + { + type: 'bar', + barGap: '-100%', + coordinateSystem: 'polar', + roundCap: true, + data: [ + { + value: 100, + itemStyle: { + color: new echarts.graphic.LinearGradient(0, 0, 1, 1, [ + { offset: 0, color: '#0A5EFF' }, + { offset: 0.45, color: '#20DDFF' }, + { offset: 1, color: '#FC10CB' } + ]) + } + } + ], + z: 3, + }, + { + type: 'pie', + radius: ['2%', '6%'], + center: ['50%', '50%'], + labelLine: { + show: false + }, + data: [ + { + value: 100, + itemStyle: { + color: '#3DE6FF', + opacity: 0.5 + } + } + ], + z: 2, + }, + { + type: 'pie', + radius: 4, + labelLine: { + show: false + }, + data: [ + { + value: 20, + itemStyle: { + color: '#3DE6FF' + } + } + ], + z: 1, + }, + ] + } + myChart.setOption(option) + window.addEventListener('resize', function () { // 鎵ц + myChart.resize() + }) +} +const initLiquidlevel = (id, item) => { + const myChart = echarts.init(document.getElementById(id)) + // const startI = item.level.indexOf('-') + // const endI = item.level.indexOf('M') + // let maxNum = item.level.slice(startI + 1, endI) + // let minNum = item.level.slice(0, startI) + let maxNum = item.max + let minNum = item.min + let conNum = maxNum + let acNum = item.obj.value.replaceAll('M', '') + var data = (((acNum - minNum) / conNum) * 100).toFixed(0) + console.log('data', data) + + const option = { + tooltip: { + trigger: 'none', + }, + xAxis: { + data: ['鐧惧垎姣�'], + axisTick: { + show: false, + }, + axisLine: { + show: false, + }, + axisLabel: { + show: false, + textStyle: { + color: '#e54035', + }, + }, + }, + yAxis: { + splitLine: { + show: false, + }, + axisTick: { + show: false, + }, + axisLine: { + show: false, + }, + axisLabel: { + show: false, + }, + }, + series: [ + { + name: '鏈�涓婂眰绔嬩綋鍦�', + type: 'pictorialBar', + symbolSize: [182, 40], + symbolOffset: [0, -20], + z: 12, + itemStyle: { + normal: { + color: 'rgba(8,44,110, 1)', + }, + }, + data: [ + { + value: 100, + symbolPosition: 'end', + }, + ], + }, + { + name: '涓棿绔嬩綋鍦�', + type: 'pictorialBar', + symbolSize: [182, 40], + symbolOffset: [0, -20], + z: 12, + itemStyle: { + normal: { + color: () => + new echarts.graphic.LinearGradient(1, 1, 0, 0, [ + { + offset: 0, + color: '#03C7F9', + }, + { + offset: 1, + // color: '#03C7F922', + color: 'rgb(8,44,110)', + }, + ]), + shadowColor: '#03C7F9', + shadowBlur: 10, + shadowOffsetX: 0, + shadowOffsetY: 4, + }, + }, + data: [ + { + value: data, + symbolPosition: 'end', + }, + ], + }, + { + name: '鏈�搴曢儴绔嬩綋鍦�', + type: 'pictorialBar', + symbolSize: [182, 40], + symbolOffset: [0, 20], + z: 12, + itemStyle: { + normal: { + color: () => + new echarts.graphic.LinearGradient(0, 1, 1, 0, [ + { + offset: 0, + color: '#03C7F9', + }, + { + offset: 0.9, + // color: '#03C7F922', + color: 'rgba(8,44,110, 0.85)', + }, + ]), + // shadowColor: '#03C7F9', + // shadowBlur: 30, + // shadowOffsetX: 0, + // shadowOffsetY: -10, + }, + }, + data: [100 - data], + }, + { + //搴曢儴绔嬩綋鏌� + stack: '1', + type: 'bar', + itemStyle: { + normal: { + // color: 'rgba(8,44,110, 0.94)', + color: () => + new echarts.graphic.LinearGradient(0, 0, 1, 0, [ + { + offset: 0, + color: 'rgba(18,85,213,0.77)', + }, + { + offset: 1, + color: 'rgba(8,44,110, 0.77)', + }, + ]), + opacity: 0.77, + }, + }, + label: { + distance: 15, + show: true, + position: data > 52 ? 'inside' : 'top', + formatter: '{c}' + '%', + fontSize: 72, + color: '#1AFCFF', + textShadowColor: '#03C7F9', + textShadowBlur: 30, + textShadowOffsetX: 5, + textShadowOffsetY: 10, + }, + + silent: true, + barWidth: 250, + barGap: '-100%', // Make series be overlap + data: [data], + }, + { + //涓婇儴绔嬩綋鏌� + stack: '1', + type: 'bar', + itemStyle: { + normal: { + color: () => + new echarts.graphic.LinearGradient(1, 0, 0, 0, [ + { + offset: 0, + color: '#47C8FF77', + }, + { + offset: 0.05, + color: '#47C8FF44', + }, + { + offset: 0.15, + color: '#47C8FF00', + }, + { + offset: 0.85, + color: '#47C8FF00', + }, + { + offset: 0.95, + color: '#47C8FF44', + }, + { + offset: 1, + color: '#47C8FF77', + }, + ]), + }, + }, + silent: true, + barWidth: 300, + barGap: '-100%', // Make series be overlap + data: [100 - data], + }, + ], + } + myChart.setOption(option) + window.addEventListener('resize', function () { // 鎵ц + myChart.resize() + }) +} + +const dataList1 = ref([]) +const policeColors = ['#01D9FE', '#FE5501', '#0193FE', '#28F0C4'] +const dataList2 = ref([]) +const getData2 = () => { + // let temp = [] + // temp.push({ name: '鐪熷疄鎶ヨ鏁�', num: 10, rate: 20 }) + // temp.push({ name: '璇姤璀︽暟', num: 30, rate: 60 }) + // temp.push({ name: '宸茶В闄�', num: 20, rate: 40 }) + // temp.push({ name: '澶勭悊涓�', num: 8, rate: 16 }) + // dataList2.value = temp + // return + getFightingalarmData().then(res => { + const result = res.data || {} + let temp = [] + temp.push({ name: '鐪熷疄鎶ヨ鏁�', num: result.realNum, rate: (result.realNum / result.totalNum) * 100 }) + temp.push({ name: '璇姤璀︽暟', num: result.errNum, rate: (result.errNum / result.totalNum) * 100 }) + temp.push({ name: '宸茶В闄�', num: result.liftNum, rate: (result.liftNum / result.totalNum) * 100 }) + temp.push({ name: '澶勭悊涓�', num: result.processingNum, rate: (result.processingNum / result.totalNum) * 100 }) + dataList2.value = temp + }) +} + +const dataList3 = ref([]) +const getData3 = () => { + getFightingHandle({ type: 0 }).then(res => { + dataList3.value = res.data || [] + initEchart2() + }) +} +const initEchart2 = () => { + var myChart = echarts.init(document.querySelector('.echart2')) + // 鐢熸垚鏁版嵁鍜屾棩鏈� + // 绀轰緥鏁版嵁 + const data1 = dataList3.value.map(i => i.realNum) + const data2 = dataList3.value.map(i => i.processingNum) + const data3 = dataList3.value.map(i => i.liftNum) + const data4 = dataList3.value.map(i => i.errNum) + const months = dataList3.value.map(i => { + return i.startDate.substring(5, 7) + '鏈�' + }) + + + const option = { + legend: { + x: "center", + textStyle: { + color: "#FFFFFF", // 鍥句緥鏂囧瓧璁句负鐧借壊 + fontSize: 12 + }, + icon: 'circle', + top: '6%', + itemWidth: 8, + itemHeight: 8, + itemGap: 20, + data: ['鍛婅鏁�', '杩涜涓�', '宸插鐞�', '璇姤鏁�'] // 鏇存柊鍥句緥鍚嶇О + }, + grid: { + left: '2%', + right: '0%', + top: '20%', + bottom: '10%', + containLabel: true, + }, + tooltip: { + trigger: "axis", + axisPointer: { + type: "shadow" + }, + textStyle: { + color: "rgba(255, 255, 255, 1)" + }, + backgroundColor: "rgba(0,0,0,0.8)", + borderColor: "rgba(219, 230, 255, 0.8)", + }, + xAxis: { + data: months, + axisLabel: { + color: "#FFFFFF", // X 杞存枃瀛楄涓虹櫧鑹� + fontSize: 13, + }, + axisLine: { + lineStyle: { + color: '#1E294C' + } + }, + axisTick: { + show: false + } + }, + yAxis: { + show: true, + axisLabel: { + color: "#FFFFFF", // Y 杞存枃瀛楄涓虹櫧鑹� + fontSize: 12, + }, + axisLine: { + lineStyle: { + color: '#A9AEB2' + } + }, + axisTick: { + lineStyle: { + color: '#A9AEB2' + } + }, + splitLine: { + show: true, + lineStyle: { + color: ["#0f1d27"], + width: 1 + }, + }, + }, + series: [ + { + name: "鍛婅鏁�", + type: "bar", + stack: "attendance", + data: data1, + itemStyle: { + color: '#FEAF01', + }, + label: { + show: false, + color: "#FFFFFF", + }, + emphasis: { + focus: "series", + }, + barWidth: 6, + }, + { + name: "杩涜涓�", // 杩熷埌鏁版嵁 + type: "bar", + stack: "attendance", + data: data2, + itemStyle: { + color: '#28F0C4', // 杩熷埌鐨勯鑹� + }, + label: { + show: false, + color: "#FFFFFF", + }, + emphasis: { + focus: "series", + }, + }, + { + name: "宸插鐞�", // 璇峰亣鏁版嵁 + type: "bar", + stack: "attendance", + data: data3, + itemStyle: { + color: '#0193FE', // 璇峰亣鐨勯鑹� + }, + label: { + show: false, + color: "#FFFFFF", + }, + emphasis: { + focus: "series", + }, + }, + { + name: "璇姤鏁�", // 鍗曠嫭鐨勫姞鐝煴瀛� + type: "bar", + data: data4, + barWidth: 6, + itemStyle: { + color: '#FEED01', // 楂樹寒鐨勭传鑹� + }, + emphasis: { + focus: "series", + }, + }, + ], + } + myChart.setOption(option) + window.addEventListener('resize', function () {//鎵ц + myChart.resize() + }) +} + +const dataList4 = ref({}) +const getData4 = () => { + getFightingcenterData().then(res => { + dataList4.value = res.data || {} + dataList1.value = res.data.deviceTypeList + }) +} +const dataList5 = ref({}) // 缁翠繚 +const getData5 = () => { + getFightingDeviceY().then(res => { + dataList5.value = res.data || {} + }) +} +const dataList6 = ref([]) +const getData6 = () => { + getFightingHandle({ type: 1 }).then(res => { + dataList6.value = res.data + }) +} +const dataList7 = ref([]) +const getData7 = () => { + getFighalarmDataList().then(res => { + dataList7.value = res.data || [] + dataList7.value = dataList7.value.map(item => { + let times = new Date().getTime() - new Date(item.alarmTime).getTime() + if (times > 86400000) { + item.haveTime = dayjs.duration(times).format('D澶〩灏忔椂m鍒嗛挓') + } else if (times > 3600000) { + item.haveTime = dayjs.duration(times).format('H灏忔椂m鍒嗛挓') + } else { + item.haveTime = dayjs.duration(times).format('m鍒嗛挓') + } + return item + }) + }) +} + +const dataList8 = ref([]) +const dataIndex8 = ref(0) + +const dataList9 = ref([]) +const dataListTemp9 = ref([]) +const dataIndex9 = ref(0) +const dataTotal9 = ref(0) + +const getData8 = () => { + getTemperatureHumidityData().then(res => { + dataList8.value = res.data || [] + }) + monitorDataListP().then(res => { + dataList9.value = res.data || [] + dataList9.value.forEach(item => { + if (item.dataList && item.dataList.length > 0) { + item.obj = item.dataList[0] + } + }) + if (dataList9.value.length > 0) { + dataTotal9.value = Math.ceil(dataList9.value.length / 2) + dataListTemp9.value = dataList9.value.slice(0, 2) + } + initEcharts9() + }) +} +const changeData8 = (num) => { + if (dataIndex8.value == dataList8.value.length - 1 && num > 0) { + dataIndex8.value = 0 + } else if (dataIndex8.value == 0 && num < 0) { + dataIndex8.value = dataList8.value.length - 1 + } else { + dataIndex8.value = dataIndex8.value + num + } +} +const changeData9 = (num) => { + // return + if (dataIndex9.value == dataTotal9.value - 1 && num > 0) { + dataIndex9.value = 0 + dataListTemp9.value = dataList9.value.slice(0, 2) + } else if (dataIndex9.value == 0 && num < 0) { + dataIndex9.value = dataTotal9.value - 1 + dataListTemp9.value = dataList9.value.slice(dataList9.value.length - 2, dataList9.value.length) + } else { + dataIndex9.value = dataIndex9.value + num + dataListTemp9.value = dataList9.value.slice(dataIndex9.value * 2, (dataIndex9.value + 1) * 2) + } + initEcharts9() +} +const initEcharts9 = () => { + dataListTemp9.value.forEach((item, i) => { + + if (item.obj && item.obj.typeCode == 253958) { + nextTick(() => { + initWatergage('watergage' + i, item) + }) + } + if (item.obj && item.obj.typeCode == 254001) { + nextTick(() => { + initLiquidlevel('liquidlevel' + i, item) + }) + } + }) +} + + +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: 5, + autoplay: autoplayFlag(dataList1.value, 5, 4000), + observer: true, //淇敼swiper鑷繁鎴栧瓙鍏冪礌鏃讹紝鑷姩鍒濆鍖杝wiper + }) +} +const loopFn2 = () => { + var newSwiper1 = new Swiper('.two-swiper', { + initialSlide: 0, + direction: 'vertical', //绔栫洿鏂瑰悜 + slidesPerView: 4, + autoplay: autoplayFlag(dataList7.value, 4, 4000), + observer: true, //淇敼swiper鑷繁鎴栧瓙鍏冪礌鏃讹紝鑷姩鍒濆鍖杝wiper + }) +} + +onMounted(() => { + // getData1() + getData2() + getData3() + getData4() + getData5() + // getData6() + getData7() + getData8() + setInterval(() => { + getData2() + getData3() + getData4() + // getData6() + getData7() + }, 60 * 1000) + setInterval(() => { + getData5() + getData8() + }, 60 * 60 * 1000) + + setInterval(() => { + changeData8(1) + // changeData9(1) + }, 1000 * 5) + + setTimeout(() => { + loopFn1() + loopFn2() + }, 12000) + + +}) + + +</script> + +<style lang="scss" scoped> +div { + box-sizing: border-box; +} + +.main_content { + display: flex; + padding: 20px 25px 0; + + .left_box { + width: 450px; + + .left_box_one { + width: 100%; + margin-bottom: 20px; + + .list_wrap { + padding: 10px 0; + + .list_content { + height: 170px; + overflow: hidden; + + .line_wrap { + height: 34px !important; + } + } + + .list { + .line { + display: flex; + height: 32px; + align-items: center; + font-size: 14px; + + .item { + flex: 2; + display: flex; + justify-content: center; + /* margin: 0 6px; */ + align-items: center; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + + } + + .name { + flex: 5; + justify-content: flex-start; + } + + .warnning { + color: #FEAF01; + } + } + + .header { + background: rgba(134, 156, 201, 0.1); + font-weight: 500; + + .item { + 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; + } + } + } + } + + .left_box_two { + margin-bottom: 20px; + + .police_wrap { + padding: 15px 20px 0; + height: 225px; + + .item { + margin-bottom: 5px; + + .head { + display: flex; + justify-content: space-between; + align-items: center; + font-size: 16px; + color: #FFFFFF; + margin-bottom: 8px; + } + } + } + } + + .left_box_three { + .dispose_wrap { + height: 210px; + width: 100%; + + .echart2 { + width: 100%; + height: 100%; + } + } + } + } + + .center_box { + flex: 1; + padding: 16px 60px 0; + display: flex; + flex-direction: column; + justify-content: space-between; + + .center_box_one { + .static_wrap { + display: flex; + justify-content: space-between; + align-items: center; + margin: 30px 0 54px; + + .item { + display: flex; + + img { + width: 61px; + height: 63px; + margin-right: 15px; + } + + .content { + font-size: 15px; + + .num { + font-size: 12px; + color: #D2E0FF; + + font-weight: bold; + font-size: 30px; + margin-right: 5px; + font-weight: 600; + background-image: -webkit-linear-gradient(top, + #01D9FE 0%, + #01D9FE 60%, + #fff 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + } + + .num2 { + background-image: -webkit-linear-gradient(top, + #fff 0%, + #dd4c26 50%, + #e43724 100%); + } + + .num3 { + background-image: -webkit-linear-gradient(top, + #eb8131 0%, + #d0a72c 50%, + #e9bf43 100%); + } + + .num4 { + background-image: -webkit-linear-gradient(top, + #fff 0%, + #78db91 50%, + #6de8b0 100%); + } + + .num5 { + background-image: -webkit-linear-gradient(top, + #fff 0%, + #3a83f5 50%, + #3a83f5 100%); + } + } + } + } + } + + .center_box_two { + width: 108%; + display: flex; + margin: 0 -4%; + + .content_wrap { + flex: 1; + flex-shrink: 0; + margin-right: 20px; + + .title_wrap { + display: flex; + + .title { + flex: 1; + } + } + + &:nth-last-child(1) { + margin-right: 0; + } + + .header { + display: flex; + justify-content: space-between; + align-items: center; + font-weight: bold; + font-size: 16px; + text-shadow: 0px 2px 8px #01ABFE; + margin-bottom: 20px; + + .left { + display: flex; + align-items: center; + + .icon { + width: 14px; + height: 28px; + margin-right: 10px; + } + } + + .right { + display: flex; + align-items: center; + + .num { + margin: 0 40px; + } + + .icon { + width: 30px; + cursor: pointer; + /* height: 16px; */ + } + } + } + + .list_wrap { + height: 206px; + background-image: url('@/assets/images/FireFighting/bg_wendu@2x.png'); + background-size: cover; + + .title { + height: 46px; + display: flex; + align-items: center; + color: #D2E0FF; + padding-left: 20px; + + .icon { + width: 16px; + margin-right: 8px; + } + } + + .list { + height: 160px; + display: flex; + justify-content: space-evenly; + + .item { + display: flex; + align-items: center; + position: relative; + + .place { + position: absolute; + top: 120px; + right: 70px; + z-index: 999; + font-size: 13px; + color: #869CC9; + width: 120px; + text-align: center; + } + + .icon { + width: 70px; + height: 70px; + margin-right: 10px; + } + + .content { + .num { + font-size: 28px; + font-weight: 500; + + span { + font-size: 14px; + font-weight: 400; + } + } + + .la { + font-size: 13px; + color: #869CC9; + } + } + } + } + } + + .list_wrap2 { + display: flex; + align-items: center; + height: 206px; + background-image: url('@/assets/images/FireFighting/bg_wendu@2x.png'); + background-size: cover; + + .item { + width: 50%; + height: 100%; + + .title { + height: 46px; + display: flex; + align-items: center; + color: #D2E0FF; + padding-left: 20px; + + .icon { + width: 16px; + margin-right: 8px; + } + } + + .watergage_wrap { + text-align: center; + position: relative; + left: 30px; + + .watergage { + width: 130px; + height: 112px; + } + + .unit { + font-weight: 500; + font-size: 18px; + position: relative; + bottom: 16px; + left: 4px; + width: 130px; + margin-bottom: 6px; + margin-top: 2px; + + span { + font-size: 12px; + font-weight: 400; + } + } + + .place { + position: relative; + bottom: 16px; + left: 4px; + width: 130px; + font-size: 13px; + color: #869CC9; + } + } + + .liquidlevel_wrap { + position: relative; + + /* border: 6px solid red; */ + .liquidle_te { + font-weight: 500; + font-size: 18px; + position: absolute; + top: 99px; + left: 0; + width: 206px; + display: flex; + flex-direction: column; + align-items: center; + + .placeT { + font-size: 12px; + color: #869CC9; + margin-top: 6px; + } + } + + /* .placeT { + position: relative; + bottom: 10px; + left: 4px; + font-size: 74px; + color: #869CC9; + opacity: 0; + } */ + + .liquidlevel { + width: 220px; + height: 400px; + transform: scale(0.27); + color: #fff; + text-align: center; + position: relative; + left: -8px; + top: -143px; + } + } + } + } + } + + } + } + + .right_box { + width: 450px; + + .right_box_one { + .content_wrap { + height: 176px; + + .list { + display: flex; + align-items: center; + + .item { + height: 116px; + flex: 1; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + + .num { + margin-top: 12px; + font-weight: bold; + font-size: 32px; + + } + + .acc { + background-image: -webkit-linear-gradient(top, + #ffffff 0%, + #c8ddff 66%, + #95eefc 72%, + #95eefc 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + } + + .active { + color: #00F2F3; + } + } + + .separate { + width: 1px; + height: 50px; + background-color: rgba(255, 255, 255, 0.21); + } + } + + .footer { + display: flex; + + .icon { + width: 40px; + height: 41px; + margin-right: 2px; + } + + .content { + flex: 1; + font-size: 16px; + height: 40px; + display: flex; + justify-content: space-between; + align-items: center; + padding: 0 20px; + background: linear-gradient(270deg, rgba(1, 217, 254, 0) 0%, rgba(1, 217, 254, 0.19) 100%); + border: 1px solid; + border-image: linear-gradient(270deg, rgba(1, 217, 254, 0), rgba(1, 217, 254, 0.6)) 1 1; + + .num { + font-size: 20px; + font-weight: bold; + + span { + font-size: 13px; + color: #869CC9; + } + } + } + } + } + } + + .right_box_two { + .su_title { + display: flex; + align-items: center; + font-weight: 500; + font-size: 16px; + margin: 20px; + + .icon { + width: 17px; + height: 17px; + margin-right: 7px; + } + } + + .static_wrap { + display: flex; + justify-content: space-evenly; + align-items: center; + height: 110px; + + .item { + display: flex; + align-items: center; + + img { + width: 80px; + height: 80px; + margin-right: 8px; + } + + .content { + font-size: 14px; + + .num { + font-size: 12px; + color: #D2E0FF; + margin-top: 8px; + + span { + font-weight: bold; + font-size: 24px; + margin-right: 4px; + font-weight: 600; + background-image: -webkit-linear-gradient(top, + #01D9FE 0%, + #01D9FE 60%, + #fff 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + } + + .today { + background-image: -webkit-linear-gradient(top, + #fff 0%, + #FFB120 50%, + #FFB120 100%); + } + } + } + } + } + + .list { + height: 320px; + overflow: hidden; + margin-top: 15px; + scrollbar-width: none; + + .item { + display: flex; + font-size: 13px; + color: #D2E0FF; + height: 80px !important; + + .icon { + width: 40px; + display: flex; + flex-direction: column; + align-items: center; + padding-top: 10px; + + .circle { + width: 7px; + height: 7px; + border-radius: 50%; + background: #01D9FE; + box-shadow: 0px 0px 1px 4px #34788f; + /* opacity: 0.52; */ + } + + .line { + margin-top: 3px; + width: 1px; + flex: 1; + background-color: #153947; + } + } + + .content { + flex: 1; + + .header { + display: flex; + justify-content: space-between; + align-items: center; + + .time { + display: flex; + align-items: center; + + .status { + height: 18px; + line-height: 18px; + border-radius: 2px; + padding: 2px 4px; + border: 1px solid #869CC9; + font-size: 12px; + margin-left: 8px; + } + } + + .have_time { + font-size: 12px; + color: #D2E0FF; + + span { + color: #FEAF01; + } + } + } + + .wrap { + height: 34px; + background: linear-gradient(270deg, rgba(254, 85, 1, 0) 0%, rgba(254, 85, 1, 0.19) 100%); + border-radius: 2px 0px 0px 2px; + display: flex; + align-items: center; + border: 1px solid; + margin-bottom: 20px; + margin-top: 8px; + padding: 0 10px; + border-image: linear-gradient(270deg, rgba(254, 85, 1, 0), rgba(254, 85, 1, 0.6)) 1 1; + + .title { + flex: 4; + font-weight: bold; + font-size: 15px; + color: #FFFFFF; + display: flex; + align-items: center; + + span { + margin-left: 4px; + } + + .xf { + width: 14px; + height: 14px; + } + + .addr { + width: 12px; + height: 12px; + } + } + + .address { + flex: 6; + } + } + } + } + } + } + } +} + +.main_header { + display: flex; + justify-content: space-between; + align-items: center; + height: 90px; + position: relative; + padding: 0px 40px 16px; + font-weight: 600; + font-size: 36px; + + .title { + background-image: -webkit-linear-gradient(top, + #ffffff 0%, + #c8ddff 70%, + #85b4ff 80%, + #74a9ff 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + } + + .time_wrap { + font-size: 26px; + font-weight: 600; + background-image: -webkit-linear-gradient(top, + #ffffff 0%, + #c8ddff 50%, + #85b4ff 80%, + #74a9ff 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + display: flex; + align-items: center; + + .time { + width: 130px; + display: flex; + justify-content: flex-end; + font-size: 30px; + } + + .week { + margin-left: 20px; + } + } + + .main_header_bg { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + object-fit: cover; + z-index: -1; + } +} + +.com_header { + height: 40px; + display: flex; + justify-content: space-between; + align-items: center; + padding: 0 15px 0 13px; + position: relative; + + .title { + display: flex; + align-items: center; + font-weight: bold; + font-size: 16px; + background-image: -webkit-linear-gradient(top, + #ffffff 0%, + #c8ddff 66%, + #85b4ff 72%, + #74a9ff 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + + .icon { + width: 16px; + height: 16px; + margin-right: 14px; + } + } + + .tabs { + display: flex; + align-items: center; + font-size: 14px; + color: #d2e0ff; + + .separate { + width: 1px; + height: 14px; + background-color: #d2e0ff; + margin: 0 6px; + } + + .active { + color: #0094eb; + } + } +} + +.main_app { + width: 1920px; + height: 960px; + /* width: 100%; + height: 100vh; */ + background: #0b2539; + color: #FFFFFF; + position: relative; + z-index: -2; + font-size: 14px; + + .main_bg { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + object-fit: cover; + z-index: -1; + } +} + +.bg { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + object-fit: cover; + z-index: -1; +} +</style> diff --git a/screen/src/views/LogisticsEfficiency.vue b/screen/src/views/LogisticsEfficiency.vue index 44af195..93dd089 100644 --- a/screen/src/views/LogisticsEfficiency.vue +++ b/screen/src/views/LogisticsEfficiency.vue @@ -946,6 +946,7 @@ i.rate = count == 0 ? 0 : ((i.num / count) * 100).toFixed(0) }) data5.value = count + console.log(data5.value) initEchart1() }) } diff --git a/screen/src/views/SecurityControl.vue b/screen/src/views/SecurityControl.vue index 48985ac..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> @@ -123,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" @@ -150,17 +196,17 @@ <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"> @@ -170,7 +216,7 @@ </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"> @@ -180,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> @@ -196,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"> - <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> - <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="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="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.filter(i => i.totalNum > 0)"> - <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="time">瓒呮椂鏃堕暱</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="time">{{ 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> @@ -497,7 +440,9 @@ getVisitRetentionData, afgetVisitData, afregionTreea, - visitSecurityData + visitSecurityData, + getFightingcenterData, + inParkUser } from '@/api' @@ -511,6 +456,72 @@ time.value = dayjs().format('HH:mm:ss') }, 1000) + +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)' } + ] + ) + } + } + } + ] + }) + window.addEventListener('resize', function () {//鎵ц + myChart.resize() + }) + }) +} const arr = ['#68e2e3', '#50afd3', '#377cdb', '#d5ae3a'] const initEnergy = () => { @@ -614,7 +625,7 @@ 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: [ { @@ -798,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() + }) } }) } @@ -820,17 +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 }) - console.log('dataList2', dataList2.value) - - 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) }) @@ -840,8 +869,12 @@ } dataListT2.value = temp + // console.log(dataListT2.value) + console.log(dataList2.value) } - initEchart2() + nextTick(() => { + initEchart2() + }) }) } @@ -869,7 +902,8 @@ return i }) - initEchart3() + dataList3.value = [...dataList3.value, ...dataList3.value, ...dataList3.value, ...dataList3.value] + // initEchart3() }) } @@ -877,34 +911,56 @@ const warningTab = ref('0') const warningNum = ref(0) const warningList = ref([]) + +const arr1 = ref([]) // 閲嶇偣鍖哄煙鍔ㄦ�佺鎺� +const arr2 = ref([]) // 鍗遍櫓琛屼负鍔ㄦ�佺鎺� + const getWarning = () => { - loading1.value = true - afwarningEventData({ type: warningTab.value }).then(res => { - loading1.value = false + 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 + // loading1.value = false }) } const tasClick = (val) => { @@ -958,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.filter(i => i.totalNum > 0), 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() @@ -994,11 +1133,18 @@ getData5() getWarning() + initChat() + // initSafe() + initDevice() + getData4() + setInterval(() => { getData1() getData2() getData3() + getData4() getWarning() + initChat() }, 1000 * 60) setInterval(() => { @@ -1007,8 +1153,9 @@ setTimeout(() => { loopFn1() - loopFn2() + // loopFn2() loopFn3() + loopFn4() }, 12000) }) @@ -1025,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%; @@ -1041,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; @@ -1048,7 +1482,7 @@ .stall_static { display: flex; - margin-bottom: 60px; + margin-bottom: 30px; padding: 0 20px; .residue { @@ -1232,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; @@ -1381,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 { @@ -1391,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 { @@ -1547,61 +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 { @@ -1777,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; - } } } @@ -1846,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; - } - } - } - } } } @@ -1914,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: 8; - } - - .time { - flex: 5; - } - } - - .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; @@ -2020,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 { diff --git a/screen/src/views/TaskEfficiency.vue b/screen/src/views/TaskEfficiency.vue index 30fdf76..939a043 100644 --- a/screen/src/views/TaskEfficiency.vue +++ b/screen/src/views/TaskEfficiency.vue @@ -94,6 +94,11 @@ </div> </div> <div class="center_box"> + + <div class="left_box_top_znz"> + <img src="@/assets/images/ic_compass@2x.png" alt="" /> + </div> + <div class="center_box_one"> <div class="static_wrap"> <div class="item"> @@ -1111,6 +1116,19 @@ display: flex; flex-direction: column; justify-content: space-between; + position: relative; + + .left_box_top_znz { + width: 68px; + height: 68px; + position: absolute; + right: 30px; + top: 150px; + img { + width: 100%; + height: 100%; + } + } .center_box_one { .static_wrap { -- Gitblit v1.9.3