From 214e6fe7a754ddf4900e07033a2fda6200f4d7a1 Mon Sep 17 00:00:00 2001 From: jiangping <jp@doumee.com> Date: 星期一, 16 十二月 2024 19:38:32 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- screen/src/views/LogisticsEfficiency.vue | 328 ++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 206 insertions(+), 122 deletions(-) diff --git a/screen/src/views/LogisticsEfficiency.vue b/screen/src/views/LogisticsEfficiency.vue index 8a4cebb..899b850 100644 --- a/screen/src/views/LogisticsEfficiency.vue +++ b/screen/src/views/LogisticsEfficiency.vue @@ -3,7 +3,7 @@ <div class="main_app"> <img src="@/assets/images/energy_ef/bg@2x.png" class="main_bg" alt="" /> <div class="main_header"> - <img src="@/assets/images/maintitle.gif" class="main_header_bg" alt="" /> + <!-- <img src="@/assets/images/maintitle.gif" class="main_header_bg" alt="" /> --> <div class="title">瀹夋嘲鏅烘収鐗╂祦鍥尯-璋冨害鑳芥晥璺熻釜</div> <div class="time_wrap"> <span class="date">{{ date }}</span> @@ -30,14 +30,22 @@ <div class="content"> <div class="num" v-if="data1.monthOutTotal || data1.yearOutTotal">{{ activeTab1 == 0 ? data1.monthOutTotal.toLocaleString() : data1.yearOutTotal.toLocaleString() }}</div> - <div class="unit_wrap" v-if="data1.monthOutTotalOnYear || data1.yearOutTotalOnYear"> - <span style="color: #869CC9;">鍚屾瘮</span> - <img - v-if="(activeTab1 == 0 && data1.monthOutTotalOnYear > 0) || (activeTab1 == 1 && data1.yearOutTotalOnYear > 0)" - src="@/assets/images/ic_up.png" class="icon" alt=""> - <img v-else src="@/assets/images/ic_down.png" class="icon" alt=""> - <span>{{ activeTab1 == 0 ? Math.abs(data1.monthOutTotalOnYear) : Math.abs(data1.yearOutTotalOnYear) - }}%</span> + <div class="unit_wrap"> + <span style="color: #869CC9;">{{ activeTab1 == 0 ? '鍚屾瘮' : '鐜瘮' }}</span> + <template v-if="activeTab1 == 0 && data1.monthLastOutTotal"> + <img v-if="data1.monthOutTotal > data1.monthLastOutTotal" src="@/assets/images/ic_up.png" + class="icon" alt=""> + <img v-else src="@/assets/images/ic_down.png" class="icon" alt=""> + </template> + <template v-if="activeTab1 == 1 && data1.yearLastOutTotal"> + <img v-if="data1.yearOutTotal > data1.yearLastOutTotal" src="@/assets/images/ic_up.png" + class="icon" alt=""> + <img v-else src="@/assets/images/ic_down.png" class="icon" alt=""> + </template> + + <span v-if="activeTab1 == 0 && data1.monthLastOutTotal">{{ Math.abs((((data1.monthOutTotal - data1.monthLastOutTotal)/data1.monthLastOutTotal) * 100).toFixed(1)) }}%</span> + <span v-else-if="activeTab1 == 1 && data1.yearLastOutTotal">{{ Math.abs((((data1.yearOutTotal - data1.yearLastOutTotal)/data1.yearLastOutTotal) * 100).toFixed(1)) }}%</span> + <span v-else>-</span> </div> </div> <div class="train_wrap"> @@ -151,21 +159,33 @@ <div class="list"> <div class="item"> <img src="@/assets/images/LogisticsCenter/car_zaitu@2x.png" alt=""> - <span>鍦ㄩ�旓細{{ 8 }}</span> + <span>鍦ㄩ�旓細{{ data7.busyNum }}</span> </div> <div class="item"> <img src="@/assets/images/LogisticsCenter/car_kongxian@2x.png" alt=""> - <span>绌洪棽锛歿{ 8 }}</span> + <span>绌洪棽锛歿{ data7.idleNum }}</span> </div> <div class="item"> <img src="@/assets/images/LogisticsCenter/car_lixian@2x.png" alt=""> - <span>绂荤嚎锛歿{ 8 }}</span> + <span>绂荤嚎锛歿{ data7.offlineNum }}</span> </div> </div> <div class="echart_wrap"> <div ref="echartMap" class="echart_map" id="echartMap"></div> </div> - + <div class="warnning_info"> + <div class="head" @click="isShowCarW = !isShowCarW"> + <img src="../assets/images/FireFighting/fire_right.png" alt=""> + <span>杞﹁締鎶ヨ</span> + </div> + <div v-if="isShowCarW" class="war_list"> + <div class="line" v-for="item in data7.eventList"> + <div class="id_card">{{ item.carCode }}</div> + <div class="title">{{ item.title }}</div> + <div v-if="item.time">{{ item.time.slice(11) }}</div> + </div> + </div> + </div> </div> </div> <div class="right_box"> @@ -187,7 +207,7 @@ <img src="@/assets/images/energy_ef/ic_chukuxiaolv@2x.png" alt=""> <div class="content"> <div class="name">鍑哄簱鏁堢巼</div> - <div class="num"><span>{{ activeTab12 == 0 ? data1.todayInRata : data1.monthInRata }}</span>涓囨敮/灏忔椂 + <div class="num"><span>{{ activeTab12 == 0 ? data1.todayOutRate : data1.monthOutRate }}</span>涓囨敮/灏忔椂 </div> </div> </div> @@ -195,7 +215,7 @@ <img src="@/assets/images/energy_ef/ic_rukuxiaolv@2x.png" alt=""> <div class="content"> <div class="name">鍏ュ簱鏁堢巼</div> - <div class="num"><span class="today">{{ activeTab12 == 0 ? data1.monthOutTotal : data1.yearOutTotal + <div class="num"><span class="today">{{ activeTab12 == 0 ? data1.todayInRate : data1.monthInRate }}</span>涓囨敮/灏忔椂</div> </div> </div> @@ -259,7 +279,7 @@ </div> </div> <!-- --> - <div class="modal" v-if="showModal"> + <div class="modal" v-if="activeCar && activeCar.phone"> <div class="title_head"> <img src="@/assets/images/energy_ef/chuku_ic_car@2x.png" alt=""> <span>鐨朼222</span> @@ -314,7 +334,7 @@ </div> </div> </div> - <div class="modal_mask" v-if="showModal" @click="showModal = false"></div> + <div class="modal_mask" v-if="activeCar && activeCar.phone" @click="activeCar = {}"></div> </div> </v-scale-screen> </template> @@ -336,6 +356,8 @@ wlstockList, wltotalInList, wltransportMeasure, + carsListPost, + getCarsJobDetails } from '@/api' import 'swiper/css/swiper.min.css' import Swiper from 'swiper' @@ -351,13 +373,6 @@ time.value = dayjs().format('HH:mm:ss') }, 1000) - -const showModal = ref(false) -const modalTab = ref(0) -const modalTabClick = (val) => { - modalTab.value = val -} - const initEnergy = () => { @@ -381,42 +396,62 @@ left: '3%', right: '4%', bottom: '3%', - top: '18%', + top: '26%', containLabel: true }, tooltip: { trigger: 'axis' }, - xAxis: [{ - nameGap: 5, - type: 'category', - axisLine: { - show: true, - lineStyle: { - color: '#999' + xAxis: [ + { + nameGap: 5, + type: 'category', + axisLine: { + show: true, + lineStyle: { + color: '#999' + }, }, - }, - axisLabel: { - color: '#869CC9' - // fontSize: 24, - }, - axisTick: { - show: false, - }, - data: dataList2.value.map(i => i.planDate), - }], + axisLabel: { + color: '#869CC9' + // fontSize: 24, + }, + axisTick: { + show: false, + }, + data: dataList2.value.map(i => i.planDateStrT), + } + ], yAxis: [ { - nameTextStyle: { - color: '#869CC9', - }, - offset: 0, - name: '涓囨敮', type: 'value', + name: '涓�', + min: 0, axisLabel: { show: true, color: "#869CC9", }, + splitLine: { + show: true, + lineStyle: { + width: 1, + color: "rgba(49,105,129,0.4)", + type: 'dashed' + } + }, + // interval: 5, + axisLabel: { + formatter: '{value}' + } + }, + { + type: 'value', + name: '涓囨敮', + nameTextStyle: { + color: '#869CC9', + }, + offset: 0, + type: 'value', axisLine: { show: true, }, @@ -428,18 +463,10 @@ type: 'dashed' } }, - }, - { - type: 'value', - name: '%', - min: 0, - max: 100, - // interval: 5, axisLabel: { - formatter: '{value}%' - }, - splitLine: false - } + formatter: '{value}' + } + }, ], series: [ { @@ -452,6 +479,7 @@ position: 'top', color: '#fff', }, + yAxisIndex: 1, itemStyle: { color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ { @@ -475,6 +503,7 @@ name: '浠诲姟瀹屾垚閲�', type: 'bar', barWidth: 10, + yAxisIndex: 1, label: { show: false, position: 'top', @@ -504,6 +533,7 @@ type: 'line', smooth: false, showAllSymbol: true, + yAxisIndex: 0, symbol: 'none', lineStyle: { color: "#1a43bc" @@ -555,26 +585,24 @@ const initMap = () => { var myChart = echarts.init(echartMap.value) echarts.registerMap('js', ahJSON) - var scatterData = [ - { - name: '骞煎効鍥�', - num: 15, - color: ['#1984ff', '#184b8d'], - img: icKongxian, - data: [ - { name: '', value: [117.25, 31.49] }, - ], - }, - { - name: '灏忓', - num: 11, - color: ['#f16c08', '#7f3710'], - img: icLixian, - data: [ - { name: '', value: [118.5, 31.08] }, - ], + const scatterData = data7.value.carsList.map(item => { + return { + name: item.terminalId, + img: item.status == 0 ? icLixian : item.status == 1 || item.status == 2 ? icZaitu : icKongxian, + data: [{ code: item.plateNum, value: [item.longitude, item.latitude] }] } - ] + }) + // var scatterData = [ + // { + // name: '骞煎効鍥�', + // num: 15, + // // color: ['#1984ff', '#184b8d'], + // img: icKongxian, + // data: [ + // { name: 'asdasdas ', value: [117.25, 31.49] }, + // ], + // }, + // ] let serData = [] scatterData.forEach((item) => { serData.push({ @@ -609,30 +637,11 @@ }, symbolSize: [32, 40], hoverAnimation: true, - zlevel: 99, data: item.data, }) } ) - var center = { - '鍚堣偉甯�': [117.25, 31.83], - '婊佸窞甯�': [118.32, 32.3], - '鑺滄箹甯�': [118.43, 31.35], - '闃滈槼甯�': [115.38, 32.89], - '铓屽煚甯�': [117.39, 32.92], - '娣崡甯�': [116.99, 32.63], - '椹瀺灞卞競': [118.5, 31.71], - '瀹夊簡甯�': [117.05, 30.52], - '榛勫北甯�': [118.33, 29.71], - '閾滈櫟甯�': [117.81, 30.94], - '瀹垮窞甯�': [116.98, 33.64], - '娣寳甯�': [116.8, 33.9], - '鍏畨甯�': [116.51, 31.75], - '姹犲窞甯�': [117.49, 30.66], - '瀹e煄甯�': [118.76, 30.94], - '浜冲窞甯�': [115.78, 33.84], - } var data = [ { name: "鍚堣偉甯�", value: 3 }, { name: "婊佸窞甯�", value: 0 }, @@ -659,16 +668,6 @@ x: 'center', textStyle: { color: '#ffffff' - } - }, - tooltip: { - trigger: 'item', - formatter: function (params) { - if (typeof (params.value)[2] == "undefined") { - return params.name + ' : ' + params.value - } else { - return params.name + ' : ' + params.value[2] - } } }, visualMap: { @@ -712,7 +711,7 @@ symbolSize: 14, label: { normal: { - show: true, + show: false, formatter: function (params) { return '{fline|鍦扮偣锛�' + params.data.city + '}\n{tline|' + (params.data.info || '鍙戠敓xx闆嗕欢') + '}' }, @@ -751,10 +750,7 @@ label: { show: true, color: '#ffffff', - emphasis: { - color: 'white', - show: false - } + }, itemStyle: { normal: { @@ -763,9 +759,15 @@ areaColor: '#1d3b60' }, emphasis: { - areaColor: '#FA8C16', - borderWidth: 1, - color: '#428598' + disabled: true, + // areaColor: '#FA8C16', + // borderWidth: 1, + // color: '#428598', + label: { + show: true, // 濮嬬粓鏄剧ず鏂囧瓧 + color: '#fff' // 璁剧疆鏂囧瓧棰滆壊 + }, + areaColor: null } }, data: data @@ -775,10 +777,22 @@ } myChart.setOption(option) + myChart.on('click', function (params) { + const item = params.data + getCarsJobDetails({ carCode: item.code }).then(res => { + activeCar.value = res.data + }) + }) window.addEventListener('resize', function () {//鎵ц myChart.resize() }) } +const activeCar = ref({}) +const modalTab = ref(0) +const modalTabClick = (val) => { + modalTab.value = val +} + const data1 = ref({}) const activeTab1 = ref(0) @@ -798,11 +812,17 @@ const dataList2 = ref([]) const activeTab2 = ref(0) -const tabClick2 = (val) => { activeTab2.value = val } +const tabClick2 = (val) => { + activeTab2.value = val + getData2() +} const getData2 = () => { wltransportMeasure({ queryType: activeTab2.value }).then(res => { - const result = res.data + const result = res.data || [] dataList2.value = result + dataList2.value.forEach(item => { + item.planDateStrT = activeTab2.value == 2 ? dayjs(item.planDate).format('M') : dayjs(item.planDate).format('M.D') + }) initEnergy() }) } @@ -831,7 +851,10 @@ } const data4 = ref({}) const activeTab4 = ref(0) -const tabClick4 = (val) => { activeTab4.value = val } +const tabClick4 = (val) => { + activeTab4.value = val + getData4() +} const getData4 = () => { wljobData({ queryType: activeTab4.value }).then(res => { const result = res.data @@ -850,7 +873,7 @@ return i }) dataList5.value.forEach(i => { - i.rate = ((i.num / count) * 100).toFixed(0) + i.rate = count == 0 ? 0 : ((i.num / count) * 100).toFixed(0) }) data5.value = count initEchart1() @@ -859,8 +882,18 @@ const dataList6 = ref([]) const getData6 = () => { wlstockList().then(res => { - const result = res.data + const result = res.data.stockList || [] dataList6.value = result + }) +} + +const isShowCarW = ref(false) +const data7 = ref({}) +const getData7 = () => { + carsListPost().then(res => { + const result = res.data || {} + data7.value = result + initMap() }) } @@ -896,8 +929,7 @@ getData4() getData5() getData6() - - initMap() + getData7() setTimeout(() => { loopFn1() @@ -1212,7 +1244,7 @@ } .echart_wrap { - width: 100%; + width: 86%; height: 100%; .echart_map { @@ -1221,6 +1253,58 @@ /* transform: rotate(60deg); */ } } + + .warnning_info { + position: absolute; + right: 0; + bottom: 0; + border-top: 1px solid #5ecbce; + border-bottom: 1px solid #5ecbce; + + .head { + display: flex; + width: 280px; + height: 57px; + background: rgba(0, 30, 63, 0.4); + backdrop-filter: blur(5px); + display: flex; + align-items: center; + padding-left: 10px; + font-weight: bold; + font-size: 16px; + cursor: pointer; + + img { + width: 14px; + margin-right: 10px; + } + } + + .war_list { + max-height: 300px; + overflow: auto; + + .line { + font-size: 13px; + color: #D2E0FF; + display: flex; + align-items: center; + height: 30px; + + div { + flex: 3; + } + + .id_card { + color: #00F2F3; + } + + .title { + flex: 4; + } + } + } + } } } -- Gitblit v1.9.3