From c3aaf28f7316cce12eec007a9f85a96cbcddeec2 Mon Sep 17 00:00:00 2001 From: jiangping <jp@doumee.com> Date: 星期三, 07 五月 2025 10:34:20 +0800 Subject: [PATCH] 最新版本541200007 --- screen/src/views/LogisticsCenter.vue | 1187 +++++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 872 insertions(+), 315 deletions(-) diff --git a/screen/src/views/LogisticsCenter.vue b/screen/src/views/LogisticsCenter.vue index 4635785..ff1b012 100644 --- a/screen/src/views/LogisticsCenter.vue +++ b/screen/src/views/LogisticsCenter.vue @@ -3,8 +3,8 @@ <div class="main_app"> <img src="@/assets/images/LogisticsCenter/bg@2x.png" class="main_bg" alt="" /> <div class="main_header"> - <!-- <img src="@/assets/images/maintitle.gif" class="main_header_bg" alt="" /> --> - <div class="title">鍏ㄧ渷鐗╂祦鍦ㄩ��</div> + <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> @@ -21,10 +21,19 @@ <img src="@/assets/images/title@2x.png" class="bg" alt="" /> </div> <div class="left_box_one"> + <Loading v-if="loading1" /> <div class="second_title"> <div class="title"> <img src="@/assets/images/LogisticsCenter/ic_title@2x.png" class="icon" alt="" /> - <div>绱鍑哄簱閲�</div> + <div>绱鍑哄簱閲�(绠�)</div> + <div class="question"> + <img src="@/assets/images/ic_question@2x.png" style="margin-left: 6px;" class="icon" alt=""> + <div class="hover_wrap"> + <div class="triangle"></div> + <div class="title">绱鍑哄簱閲忕粺璁¤鏄庯細</div> + <div>绱鍑哄簱閲忥細鎵�鏈夌墿娴佸嚭搴撲綔涓氭暟鎹紙鍖呭惈鑱旇惀鍔犲伐锛堝洖杩愩�佽惤鍦伴攢鍞級銆佸墠缃簱绉诲簱(鎴愰兘/涓存矀)绛夋墍鏈夊嚭搴撲綔涓氭暟鎹級</div> + </div> + </div> </div> <div class="tabs"> <div class="tab" :class="{ active: activeTab1 == 1 }" @click="tab1Click(1)">鏈懆</div> @@ -36,27 +45,40 @@ </div> <div class="content_wrap"> <div class="num_wrap"> - <div class="num_list" v-if="StockOutData.currentNum"> - <div class="num" v-for="i in StockOutData.currentNum + ''"> - {{ i }} - <img class="bg" src="@/assets/images/LogisticsCenter/bg_number@2x.png" alt=""> + <div class="question1"> + <div class="hover_con"> + <div class="num_list" v-if="StockOutData.currentNum || StockOutData.currentNum == 0"> + <div class="num" v-for="i in StockOutData.currentNum + ''"> + {{ i }} + <img class="bg" src="@/assets/images/LogisticsCenter/bg_number@2x.png" alt=""> + </div> + </div> + <div class="hover_wrap"> + <div class="triangle"></div> + <div class="title" v-if="StockOutData.currentProvinceNum || StockOutData.currentProvinceNum == 0"> + 璋冩嫧鍑哄簱閲忥細{{ StockOutData.currentProvinceNum.toFixed(0) }}绠�</div> + <div class="title" v-if="StockOutData.currentOtherNum || StockOutData.currentOtherNum == 0"> + 鍏朵粬鍑哄簱閲忥細{{ StockOutData.currentOtherNum.toFixed(0) }}绠�</div> + </div> </div> + </div> - <div class="content"> + <div class="content" v-if="false"> <div class="unit_wrap"> <span class="la">鍚屾瘮</span> - <template v-if="StockOutData.currentNum && StockOutData.lastNum"> - <img v-if="StockOutData.currentNum >= StockOutData.lastNum" src="@/assets/images/ic_up.png" + <template v-if="StockOutData.sameOutNum"> + <img v-if="StockOutData.currentOutNum >= StockOutData.sameOutNum" src="@/assets/images/ic_up.png" class="icon" alt=""> <img v-else src="@/assets/images/ic_down.webp" class="icon" alt=""> </template> - <span v-if="StockOutData.lastNum && StockOutData.currentNum">{{ Math.abs((((StockOutData.currentNum + <span v-if="StockOutData.sameOutNum">{{ Math.abs((((StockOutData.currentOutNum - - StockOutData.lastNum) / - StockOutData.lastNum) + StockOutData.sameOutNum) / + StockOutData.sameOutNum) * 100).toFixed(2)) }}%</span> <span v-else style="margin-left: 6px;">-</span> - <span class="la" style="margin-left: 30px;margin-right: 10px;">绱鍑哄簱杞︽</span> + <span v-if="StockOutData.totalCarNum" class="la" + style="margin-left: 30px;margin-right: 10px;">绱鍑哄簱杞︽</span> <span>{{ StockOutData.totalCarNum || '' }}</span> </div> @@ -89,7 +111,7 @@ <div class="second_title"> <div class="title"> <img src="@/assets/images/LogisticsCenter/ic_title@2x.png" class="icon" alt="" /> - <div>褰撳墠杩愯緭浠诲姟</div> + <div>褰撳墠璁㈠崟浠诲姟</div> </div> <div class="search_wrap"> <img src="@/assets/images/LogisticsCenter/ic_search@2x.png" alt=""> @@ -100,9 +122,9 @@ </div> <div class="list_wrap"> <div class="header line"> - <span class="item">杩愯緭杞﹁締</span> - <span class="item status">鐘舵��</span> - <span class="item">浣嶇疆</span> + <span class="item">鍚堝悓鍙�</span> + <span class="item status">璁㈠崟鐘舵��</span> + <span class="item">鐩殑鍦�</span> <span class="item">浠诲姟涓嬭揪鏃堕棿</span> </div> <div class="one-swiper list"> @@ -113,11 +135,16 @@ <span class="item">{{ item.contractNumber }}</span> <span class="item status">{{ item.statusDesc }}</span> <span class="item">{{ item.receiveEnterprise }}</span> - <span class="item">{{ item.transportDate }}</span> + <span class="item">{{ item.createDate || '-' }}</span> </div> </div> </div> - + <template v-if="isLoadingTask || transportTask.length == 0"> + <Loading v-if="isLoadingTask" /> + <div class="empty" v-else> + <img src="@/assets/images/default_nodata.png" alt=""> + </div> + </template> </div> </div> </div> @@ -127,6 +154,17 @@ <div class="left"> <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" /> <span>鍑哄簱鑳藉姏</span> + <div class="question"> + <img src="@/assets/images/ic_question@2x.png" style="margin-left: 4px;" class="icon" alt=""> + <div class="hover_wrap"> + <div class="triangle"></div> + <div class="title">鍑哄簱鑳藉姏缁熻璇存槑锛�</div> + <div>1銆佸綋鍓嶈鍗曢噺锛氭埅鑷崇洰鍓嶆湭閰嶈浇鐨勮鍗曢噺</div> + <div>2銆佸綋鍓嶄换鍔¢噺锛氭墍鏈夊凡涓嬭揪杩愯緭涓旀湭鍑哄簱鐨勪换鍔¢噺锛氭埅姝㈢洰鍓嶅凡閰嶈浇鏈嚭搴�+鏃犻渶閰嶈浇鐨勪换鍔�(鍚屽煄浠诲姟閲�)</div> + <div>3銆佷粖鏃ュ嚭搴撻噺锛氫粖鏃ュ疄闄呭嚭搴撻噺锛氫互鐢靛瓙閿佷笂閿佷负鍑�</div> + <div>4銆佸墿浣欎换鍔¢噺锛氭暟鎹悓褰撳墠浠诲姟閲忥紙寮圭獥鍒嗗埆灞曠ず鍚屽簱鍜岃繍杈撲换鍔¢噺</div> + </div> + </div> </div> <div class="right"> <img @click="showPro = !showPro" src="@/assets/images/LogisticsCenter/position.png" class="posi" alt=""> @@ -141,15 +179,18 @@ <div class="item"> <img src="@/assets/images/LogisticsCenter/ic_jinrijihua@2x.png" alt=""> <div class="content"> - <div class="name">褰撴棩璁㈠崟閲�</div> - <div class="num"><span class="blue">{{ cneterData.currentOrderNum }}</span>涓囨敮</div> + <div class="name">褰撳墠璁㈠崟閲�</div> + <div class="num"><span class="blue" + v-if="cneterData.currentOrderNum || cneterData.currentOrderNum == 0">{{ + cneterData.currentOrderNum }}</span>绠�</div> </div> </div> <div class="item"> <img src="@/assets/images/LogisticsCenter/ic_jinrijihua@2.png" alt=""> <div class="content"> - <div class="name">褰撴棩璁″垝閲�</div> - <div class="num"><span>{{ cneterData.currentPlanNum }}</span>涓囨敮</div> + <div class="name">褰撳墠浠诲姟閲�</div> + <div class="num"><span v-if="cneterData.currentPlanNum || cneterData.currentPlanNum == 0">{{ + cneterData.currentPlanNum }}</span>绠�</div> <div class="unit">杞︽锛歿{ cneterData.currentPlanCarNum }}</div> </div> </div> @@ -157,22 +198,33 @@ <img src="@/assets/images/LogisticsCenter/ic_jinrichuku@2x.png" alt=""> <div class="content"> <div class="name">浠婃棩鍑哄簱閲�</div> - <div class="num"><span class="finish">{{ cneterData.crrentOutNum }}</span>涓囨敮</div> + <div class="num"><span v-if="cneterData.crrentOutNum || cneterData.crrentOutNum == 0" + class="finish">{{ + cneterData.crrentOutNum }}</span>绠�</div> <div class="unit">杞︽锛歿{ cneterData.crrentOutCarNum }}</div> </div> </div> - <div class="item"> - <img src="@/assets/images/LogisticsCenter/ic_jinriweichu@2x.png" alt=""> - <div class="content"> - <div class="name">鍓╀綑浠诲姟閲�</div> - <div class="num"><span class="today">{{ cneterData.crrentRestNum }}</span>涓囨敮</div> - <div class="unit">杞︽锛歿{ cneterData.crrentRestCarNum }}</div> + <div class="tooltip_wrap"> + <div class="item"> + <img src="@/assets/images/LogisticsCenter/ic_jinriweichu@2x.png" alt=""> + <div class="content"> + <div class="name">鍓╀綑浠诲姟閲�</div> + <div class="num"><span v-if="cneterData.crrentRestNum || cneterData.crrentRestNum == 0" + class="today">{{ + cneterData.crrentRestNum }}</span>绠�</div> + <div class="unit">杞︽锛歿{ cneterData.crrentRestCarNum }}</div> + </div> + </div> + <div class="tooltip"> + <div class="triangle"></div> + <div>杩愯緭浠诲姟閲忥細{{ cneterData.needTransportOrderNum }}绠�</div> + <div>鍚屽煄鍏卞簱浠诲姟閲忥細{{ cneterData.noNeedTransportOrderNum }}绠�</div> </div> </div> </div> <div class="footer"> <div class="wrap"> - <div class="content"> + <div class="content" :style='{ width: cneterData.level1 }'> <div class="scale">0</div> <!-- <div class="node"> <div>8h</div> @@ -181,40 +233,91 @@ <div class="icon icon2"></div> </div> </div> --> - <div class="box"> - <div class="tag"> - <div class="icon"></div> - <span>浠婃棩鍑哄簱</span> + <div :style="{ width: cneterData.level3 }" + :class="{ box23: cneterData.crrentOutNum >= cneterData.hoursAbility }" class="box"> + <div class="tooltip_wrap"> + <div v-if="cneterData.crrentOutNum < cneterData.hoursAbility" class="tag"> + <div class="icon"></div> + <span>浠婃棩鍑哄簱</span> + </div> + <div class="tooltip"> + <div class="triangle"></div>浠婃棩鍑哄簱閲忥細{{ cneterData.crrentOutNum }}绠� + </div> </div> </div> - <div class="box box1"> - <div class="tag tag1"> - <div class="icon"></div> - <span>褰撴棩璁″垝</span> + <div :style="{ width: cneterData.level2 }" class="box box1"> + <div class="tooltip_wrap"> + <div v-if="cneterData.hoursAbility >= cneterData.currentPlanNum" class="tag tag1"> + <div class="icon"></div> + <span>褰撳墠浠诲姟</span> + </div> + <div class="tooltip"> + <div class="triangle"></div>褰撳墠浠诲姟閲忥細{{ cneterData.currentPlanNum }}绠� + </div> </div> </div> </div> - <!-- <div class="side"> - <div class="box"></div> - <div class="scale" style="left: -12px;">8h</div> - <div class="scale scale1">鏈�澶�</div> - </div> --> + <div class="side"> + <div v-if="cneterData.crrentOutNum >= cneterData.hoursAbility" :style="{ width: cneterData.level33 }" + class="box box22"> + <div class="tooltip_wrap"> + <div class="tag"> + <div class="icon"></div> + <span>浠婃棩鍑哄簱</span> + </div> + <div class="tooltip"> + <div class="triangle"></div>浠婃棩鍑哄簱閲忥細{{ cneterData.crrentOutNum }}绠� + </div> + </div> + </div> + <div v-if="cneterData.hoursAbility <= cneterData.currentPlanNum" + :style="{ width: cneterData.level22 }" class="box box1 box11"> + <div class="tooltip_wrap"> + <div class="tag tag1"> + <div class="icon"></div> + <span>褰撳墠浠诲姟</span> + </div> + <div class="tooltip"> + <div class="triangle"></div>褰撳墠浠诲姟閲忥細{{ cneterData.currentPlanNum }}绠� + </div> + </div> + </div> + <!-- <div class="box"></div> --> + <div class="scale" style="left: -12px;"> + <div class="tooltip_wrap"> + <span>8h</span> + <div class="tooltip"> + <div class="triangle"></div>8灏忔椂鍑哄簱鑳藉姏锛歿{ cneterData.hoursAbility }}绠� + </div> + </div> + </div> + <div class="scale scale1"> + <div class="tooltip_wrap"> + <span>鏈�澶�</span> + <div class="tooltip"> + <div class="triangle"></div>鏈�澶у嚭搴撹兘鍔涳細{{ cneterData.maxAbility }}绠� + </div> + </div> + </div> + </div> </div> </div> </div> <div class="center_box_two"> <div class="echart_map" ref="mapEchart" id="echart_map"></div> - <div v-if="showModal1" @click="showModal1 = false" class="modal1"> - <div class="list"> + <div v-if="showModal1" class="modal1"> + <div class="content"> <div class="head line"> <div class="item">杞︾墝鍙�</div> - <div class="item contract">鍚堝悓鍙�</div> - <div class="item">鐩殑鍦�</div> + <div class="item">鍚堝悓鍙�</div> + <div class="item addr">鐩殑鍦�</div> </div> - <div class="line" v-for="item in active1List"> - <div class="item">{{ item.platNumber }}</div> - <div class="item contract">{{ item.contractNumber }}</div> - <div class="item">{{ item.repertotyName }}</div> + <div class="list"> + <div class="line" v-for="item in active1List"> + <div class="item">{{ item.platNumber }}</div> + <div class="item">{{ item.contractNumber }}</div> + <div class="item addr">{{ item.repertotyName }}</div> + </div> </div> </div> </div> @@ -254,8 +357,8 @@ </div> <div class="side"> 鍏ㄧ渷锛� - <span>{{ data5.totalNum }}</span> - <span class="unit">涓囨敮 | </span> + <span>{{ data5.currentNum }}</span> + <span class="unit">绠� | </span> <span v-if="data5.totalNum">{{ ((data5.currentNum / data5.totalNum) * 100).toFixed(1) }}%</span> </div> </div> @@ -269,7 +372,12 @@ <img src="@/assets/images/LogisticsCenter/ic_title@2x.png" class="icon" alt="" /> <div>鍑哄簱鑳藉姏鍒╃敤鐜�</div> </div> - <div class="side">鍏ㄧ渷锛�<span>100<span class="unit">涓囨敮 |</span> 40.6%</span></div> + <div class="side"> + 鍏ㄧ渷锛� + <span>{{ data6.currentNum }}</span> + <span class="unit">绠� | </span> + <span v-if="data6.totalNum">{{ ((data6.currentNum / data6.totalNum) * 100).toFixed(1) }}%</span> + </div> </div> <div class="echart5_wrap"> <div class="echart5" id="echart6"></div> @@ -279,9 +387,14 @@ <div class="second_title"> <div class="title"> <img src="@/assets/images/LogisticsCenter/ic_title@2x.png" class="icon" alt="" /> - <div>杩愮敤璧勬簮鍒╃敤鐜�</div> + <div>杩愬姏璧勬簮鍒╃敤鐜�</div> </div> - <div class="side">鍏ㄧ渷锛�<span>100<span class="unit">涓囨敮 |</span> 40.6%</span></div> + <div class="side"> + 鍏ㄧ渷锛� + <span>{{ data7.currentNum }}</span> + <span class="unit">杈� | </span> + <span v-if="data7.totalNum">{{ (data7.useRate * 100).toFixed(1) }}%</span> + </div> </div> <div class="echart5_wrap"> <div class="echart5" id="echart7"></div> @@ -292,8 +405,15 @@ <!-- --> <div class="modal_wrap" v-if="showModal"> <div class="title_head"> - <img src="@/assets/images/energy_ef/chuku_ic_car@2x.png" alt=""> - <span>鍚堝悓鍙凤細{{ modalInfo.contractNumber }}</span> + <div class="left"> + <img src="@/assets/images/LogisticsCenter/ic_hetong.png" alt=""> + <span>鍚堝悓鍙凤細{{ modalInfo.contractNumber }}</span> + </div> + <div class="tit_status">{{ modalInfo.orderStatusDesc }}</div> + </div> + <div v-if="modalInfo.overStock && modalInfo.overStock == 1" class="stock"> + <img src="@/assets/images/LogisticsCenter/ic_tips@2x.png" alt=""> + <span>鍥犲簱瀛樹笉瓒筹紝璁㈠崟鏆傛椂鏃犳硶閰嶈浇</span> </div> <div class="info"> <div class="item"> @@ -319,7 +439,7 @@ <div class="item"> <div class="dian"></div> <div class="la">杞﹁締浣嶇疆锛�</div> - <div class="val">{{ modalInfo.aa || '-' }}</div> + <div class="val">{{ modalInfo.position || '-' }}</div> </div> <div class="item"> <div class="dian"></div> @@ -334,7 +454,8 @@ </div> <div id="map-container" ref="mapContainer"></div> <div class="fu_list"> - <div class="fu_item" v-for="item, i in modalInfo.cicleStatusList"> + <div class="fu_item" v-for="item, k in modalInfo.cicleStatusList"> + <view v-if="k != modalInfo.cicleStatusList.length - 1" class="separate"></view> <div class="item_title"> <div class="icon"> <img v-if="item.key == 0 && k != 0" src="@/assets/images/LogisticsCenter/ic_dingdan@2x.png" @@ -369,7 +490,7 @@ <div v-else class="icon_wrap"></div> <div class="text" :class="{ placeholder3: k == 0 && i == 0 }"> {{ ite.orderStatusDes }} - <text v-if="ite.tel">锛屽彂璐т粨搴撶數璇濓細</text> + <text v-if="ite.tel">,鍙戣揣浠撳簱鐢佃瘽锛�</text> <text v-if="ite.tel" class="primaryColor">{{ ite.tel }}</text> </div> </div> @@ -378,8 +499,9 @@ </div> </div> </div> + <Loading v-if="modalLoading" /> </div> - <div class="modal_mask" v-if="showModal" @click="showModal = false"></div> + <div class="modal_mask" v-if="showModal || showModal1" @click="closeModal"></div> </div> </v-scale-screen> </template> @@ -389,6 +511,7 @@ import VScaleScreen from 'v-scale-screen' import Percent from '@/components/percent.vue' import dayjs from 'dayjs' +import axios from "axios" import * as echarts from 'echarts' import 'swiper/css/swiper.min.css' import Swiper from 'swiper' @@ -396,9 +519,12 @@ import chinaJSON from '@/assets/china.json' import fahuoImg from '@/assets/images/LogisticsCenter/ic_fahuodi@2x.png' import shouImg from '@/assets/images/LogisticsCenter/ic_huowu@2x.png' +// import Loading from 'vue-loading-overlay' +// import 'vue-loading-overlay/dist/css/index.css' +import Loading from '@/components/Loading.vue' + import { getStoreOperationList, - getStorearriveGoodsList, getStorecenterData, getStoreenergyDataList, getStorelastMonthOil, @@ -424,68 +550,7 @@ time.value = dayjs().format('HH:mm:ss') }, 1000) - -const initEchart2 = () => { - const myChart = echarts.init(document.getElementById('echart1')) - const option = { - series: [ - { - type: 'pie', - radius: ['86%', '100%'], - label: { - show: false, - position: 'center' - }, - padAngle: 5, - itemStyle: { - borderRadius: 10 - }, - color: colors, - labelLine: { - show: false - }, - data: [ - { value: 1048, name: 'Search Engine' }, - { value: 735, name: 'Direct' }, - { value: 580, name: 'Email' } - ] - } - ] - } - myChart.setOption(option) - window.addEventListener('resize', function () { // 鎵ц - myChart.resize() - }) -} -const initEchart3 = () => { - const myChart = echarts.init(document.getElementById('echart3')) - const option = { - tooltip: { - trigger: 'item' - }, - series: [ - { - type: 'pie', - radius: ['80%', '96%'], - label: { - show: false, - position: 'center' - }, - color: ['#72ecc5', '#19373a'], - labelLine: { - show: false - }, - data: [3, 7] - } - ] - } - myChart.setOption(option) - window.addEventListener('resize', function () { // 鎵ц - myChart.resize() - }) -} - -// +// const mapList = ref([]) const mapEchart = ref() const initMap = () => { @@ -501,50 +566,60 @@ { value: [103.9526, 30.7617, 1901], itemStyle: { color: '#fff' }, name: '鍥涘窛', total: 18, bj: 0, yj: 0, yx: 18, tj: 0, dw: 0 } ] const mapData = [ - { name: '鍖椾含甯�', value: 0 }, - { name: '澶╂触甯�', value: 0 }, - { name: '涓婃捣甯�', value: 0 }, - { name: '閲嶅簡甯�', value: 0 }, - { name: '娌冲寳鐪�', value: 0 }, - { name: '娌冲崡鐪�', value: 0 }, - { name: '浜戝崡鐪�', value: 0 }, - { name: '杈藉畞鐪�', value: 0 }, - { name: '榛戦緳姹熺渷', value: 0 }, - { name: '婀栧崡鐪�', value: 0 }, - { name: '瀹夊窘鐪�', value: 0 }, - { name: '灞变笢鐪�', value: 0 }, - { name: '鏂扮枂缁村惥灏旇嚜娌诲尯', value: 0 }, - { name: '姹熻嫃鐪�', value: 0 }, - { name: '娴欐睙鐪�', value: 0 }, - { name: '姹熻タ鐪�', value: 0 }, - { name: '婀栧寳鐪�', value: 0 }, - { name: '骞胯タ澹棌鑷不鍖�', value: 0 }, - { name: '鐢樿們鐪�', value: 0 }, - { name: '灞辫タ鐪�', value: 0 }, - { name: '鍐呰挋鍙よ嚜娌诲尯', value: 0 }, - { name: '闄曡タ鐪�', value: 0 }, - { name: '鍚夋灄鐪�', value: 0 }, - { name: '绂忓缓鐪�', value: 0 }, - { name: '璐靛窞鐪�', value: 0 }, - { name: '骞夸笢鐪�', value: 0 }, - { name: '闈掓捣鐪�', value: 0 }, - { name: '瑗胯棌鑷不鍖�', value: 0 }, - { name: '瀹佸鍥炴棌鑷不鍖�', value: 0 }, - { name: '鍥涘窛鐪�', value: 0 }, - { name: '瀹佸鐪�', value: 0 }, - { name: '娴峰崡鐪�', value: 0 }, - { name: '鍙版咕鐪�', value: 0 }, - { name: '棣欐腐鐗瑰埆琛屾斂鍖�', value: 0 }, - { name: '婢抽棬鐗瑰埆琛屾斂鍖�', value: 0 }, + { name: '鍖椾含甯�', code: '110000', value: 0 }, + { name: '澶╂触甯�', code: '120000', value: 0 }, + { name: '涓婃捣甯�', code: '310000', value: 0 }, + { name: '閲嶅簡甯�', code: '500000', value: 0 }, + { name: '娌冲寳鐪�', code: '130000', value: 0 }, + { name: '娌冲崡鐪�', code: '410000', value: 0 }, + { name: '浜戝崡鐪�', code: '530000', value: 0 }, + { name: '杈藉畞鐪�', code: '210000', value: 0 }, + { name: '榛戦緳姹熺渷', code: '230000', value: 0 }, + { name: '婀栧崡鐪�', code: '430000', value: 0 }, + { name: '瀹夊窘鐪�', code: '340000', value: 0 }, + { name: '灞变笢鐪�', code: '370000', value: 0 }, + { name: '鏂扮枂缁村惥灏旇嚜娌诲尯', code: '650000', value: 0 }, + { name: '姹熻嫃鐪�', code: '320000', value: 0 }, + { name: '娴欐睙鐪�', code: '330000', value: 0 }, + { name: '姹熻タ鐪�', code: '360000', value: 0 }, + { name: '婀栧寳鐪�', code: '420000', value: 0 }, + { name: '骞胯タ澹棌鑷不鍖�', code: '450000', value: 0 }, + { name: '鐢樿們鐪�', code: '620000', value: 0 }, + { name: '灞辫タ鐪�', code: '140000', value: 0 }, + { name: '鍐呰挋鍙よ嚜娌诲尯', code: '150000', value: 0 }, + { name: '闄曡タ鐪�', code: '610000', value: 0 }, + { name: '鍚夋灄鐪�', code: '220000', value: 0 }, + { name: '绂忓缓鐪�', code: '350000', value: 0 }, + { name: '璐靛窞鐪�', code: '520000', value: 0 }, + { name: '骞夸笢鐪�', code: '440000', value: 0 }, + { name: '闈掓捣鐪�', code: '630000', value: 0 }, + { name: '瑗胯棌鑷不鍖�', code: '540000', value: 0 }, + { name: '瀹佸鍥炴棌鑷不鍖�', code: '640000', value: 0 }, + { name: '鍥涘窛鐪�', code: '510000', value: 0 }, + { name: '瀹佸鐪�', code: '640000', value: 0 }, + { name: '娴峰崡鐪�', code: '460000', value: 0 }, + { name: '鍙版咕鐪�', code: '710000', value: 0 }, + { name: '棣欐腐鐗瑰埆琛屾斂鍖�', code: '810000', value: 0 }, + { name: '婢抽棬鐗瑰埆琛屾斂鍖�', code: '820003', value: 0 }, + { name: '鍗楁捣璇稿矝', code: '', value: 0 }, ] + let totalNum = 0 + mapList.value.forEach(i => { + totalNum += i.yearNum + }) mapData.forEach(item => { item.monthNum = 0 item.yearNum = 0 mapList.value.forEach(ite => { - if (item.name == ite.name) { - item.value = ite.value + if (item.code == ite.code) { + item.value = 0 item.monthNum = ite.monthNum item.yearNum = ite.yearNum + if (totalNum > 0) { + item.rate = ((ite.yearNum / totalNum) * 100).toFixed(2) + item.value = (ite.yearNum / totalNum).toFixed(4) + + } } }) }) @@ -554,10 +629,14 @@ visualMap: { type: 'piecewise', pieces: [ - { min: 100000, max: 99999999999, label: '鍑哄簱閲�10w浠ヤ笂', color: '#be6f2b' }, - { min: 50000, max: 100000, label: '鍑哄簱閲�5-10w', color: '#c39332' }, - { min: 20000, max: 50000, label: '鍑哄簱閲�2-5w', color: '#5ecbaf' }, - { min: -1, max: 20000, label: '鍑哄簱閲�2w浠ヤ笅', color: '#325a9b' }, + { min: 0.05, max: 99999999999, label: '璋冩嫧閲忓崰姣�5%浠ヤ笂', color: '#be6f2b' }, + { min: 0.02, max: 0.05, label: '璋冩嫧閲忓崰姣�2%~5%', color: '#c39332' }, + { min: 0.01, max: 0.02, label: '璋冩嫧閲忓崰姣�1%~2%', color: '#5ecbaf' }, + { min: -1, max: 0.01, label: '璋冩嫧閲忓崰姣�1%浠ヤ笅', color: '#3561a4' }, + // { min: 100000, max: 99999999999, label: '鍑哄簱閲�10w浠ヤ笂', color: '#be6f2b' }, + // { min: 50000, max: 100000, label: '鍑哄簱閲�5-10w', color: '#c39332' }, + // { min: 20000, max: 50000, label: '鍑哄簱閲�2-5w', color: '#5ecbaf' }, + // { min: -1, max: 20000, label: '鍑哄簱閲�2w浠ヤ笅', color: '#3561a4' }, ], itemWidth: 22, itemHeight: 22, @@ -595,8 +674,8 @@ center: [105.194115019531, 36.582111640625], // 鍦板浘涓績浣嶇疆锛� 姝ゅ鐨勭含搴︿笌涓嬮潰鐨刢enter鐩稿樊1搴︽槸褰㈡垚闃村奖鐨勮窛绂伙紝鍙嚜宸遍殢鎰忚皟鏁� itemStyle: { areaColor: '#152e4a', //鍦板浘闃村奖鐨勯鑹� - borderColor: '#f7f7f7', // 鐪佷唤杈规棰滆壊 - borderWidth: 0.1, // 鐪佷唤杈规瀹藉害 + borderColor: '#779dc8', // 鐪佷唤杈规棰滆壊 + borderWidth: 0.5, // 鐪佷唤杈规瀹藉害 // shadowBlur: 5, // 鐪佷唤杈规鑱氱劍 }, emphasis: { @@ -637,11 +716,12 @@ }, itemStyle: { show: true, - color: '#00114F', // 楂樹寒鏂囧瓧棰滆壊 + color: '#fff', // 楂樹寒鏂囧瓧棰滆壊 borderColor: '#a4d0ec', // 楂樹寒杈规棰滆壊 - areaColor: '#63d5c1', //楂樹寒鍖哄煙棰滆壊 + areaColor: '#0056FF', //楂樹寒鍖哄煙棰滆壊 }, }, + selectedMode: false, label: { // 鍦板浘鏍囨敞 show: false, @@ -657,20 +737,27 @@ return `<div class="map-tip-box"> <div class="item-state-con title"> <div class="icon"></div> - <span>${params.data.name}</span> + <span>${params.data.name}</span> </div> <div class="item-state-con"> <span class="dot bj"></span> <span class="item-state-num"> - <span class="text">鏈湀鍑哄簱閲忥細</span> - <span class="num">${params.data.monthNum}涓囨敮</span> + <span class="text">鏈湀璋冩嫧閲忥細</span> + <span class="num">${params.data.monthNum}绠�</span> </span> </div> - <div class="item-state-con"> + <div class="item-state-con"> <span class="dot yj"></span> <span class="item-state-num"> - <span class="text">鏈勾鍑哄簱閲忥細</span> - <span class="num">${params.data.yearNum}涓囨敮</span> + <span class="text">鏈勾璋冩嫧閲忥細</span> + <span class="num">${params.data.yearNum}绠�</span> + </span> + </div> + <div class="item-state-con"> + <span class="dot yj"></span> + <span class="item-state-num"> + <span class="text">璋冩嫧閲忓崰姣旓細</span> + <span class="num">${params.data.rate || 0}%</span> </span> </div> </div>` @@ -700,6 +787,7 @@ mapList.value = temp.map(item => { item.value = item.monthNum item.name = item.provinceName + item.code = item.provinceCode return item }) initMap() @@ -728,6 +816,39 @@ borderColor: '#fff' }, }, + dataZoom: [ + { + type: 'slider', // 婊戝姩鏉$被鍨� + orient: 'vertical', + left: 'left', + start: 0, // 璧峰浣嶇疆锛堢櫨鍒嗘瘮锛� + end: 40, // 缁撴潫浣嶇疆锛堢櫨鍒嗘瘮锛夛紝鎺у埗鍒濆鏄剧ず鑼冨洿 + width: 1, + backgroundColor: '#04141d', // 婊戝姩鏉¤儗鏅壊 + // dataBackground: 'none', + dataBackground: { + areaStyle: { opacity: 0 }, // 璁剧疆鑳屾櫙閫忔槑 + lineStyle: { opacity: 0 } // 璁剧疆鑳屾櫙閫忔槑 + }, + borderColor: '#04141e', // 杈规棰滆壊 + moveOnMouseWheel: true, + // showDetail: false, // 闅愯棌閫変腑鑼冨洿鐨勬枃瀛� + }, + { + type: 'inside', // 鐢ㄤ簬鐩戝惉婊氳疆浜嬩欢 + orient: 'vertical', + start: 0, + end: 40, + minSpan: 40, + dataBackground: { + areaStyle: { opacity: 0 } // 璁剧疆鑳屾櫙閫忔槑 + }, + maxSpan: 40, + zoomLock: true, // 閿佸畾缂╂斁锛堜粎鍏佽骞崇Щ锛� + moveOnMouseWheel: true, // 鍚敤婊氳疆骞崇Щ + // zoomOnMouseWheel: false // 绂佺敤婊氳疆缂╂斁 + } + ], grid: { left: '3%', right: '4%', @@ -737,6 +858,9 @@ }, xAxis: { type: 'value', + axisLabel: { + color: '#D2E0FF' + }, splitLine: { show: true, lineStyle: { @@ -749,6 +873,9 @@ yAxis: { axisTick: { show: false, + }, + axisLabel: { + color: '#D2E0FF' }, type: 'category', axisLine: { @@ -766,7 +893,7 @@ show: true, textStyle: { color: '#000000', - fontSize: 10 + fontSize: 12 } }, emphasis: { @@ -802,7 +929,11 @@ stack: 'total', barWidth: 14, label: { - show: true + show: true, + textStyle: { + color: '#000000', + fontSize: 12 + } }, emphasis: { focus: 'series' @@ -837,7 +968,11 @@ barWidth: 14, stack: 'total', label: { - show: true + show: true, + textStyle: { + color: '#000000', + fontSize: 12 + } }, textStyle: { color: '#000000', @@ -853,13 +988,13 @@ y2: 0, colorStops: [{ offset: 0, - color: '#71f3ce' + color: '#73f7d1' }, { offset: 1, - color: '#4da999' + color: '#58beaa' }] } - } + }, }, emphasis: { focus: 'series' @@ -885,7 +1020,7 @@ const dataList1 = ref([]) const getData1 = () => { - getStorearriveGoodsList({ + arriveGoodsList({ factoryCode: activeCity.value.code }).then(res => { dataList1.value = res.data || [] @@ -896,24 +1031,46 @@ const transportTask = ref([]) const taskCode = ref('') const showModal = ref(false) +const modalLoading = ref(false) const modalInfo = ref({}) const modalTab = ref(0) const pager = ref({ page: 0, - rows: 10 + rows: 50 }) -const modalTabClick = (val) => { - modalTab.value = val -} const taskClick = (item) => { + modalLoading.value = true + showModal.value = true kzorderInfo({ contractNumber: item.contractNumber }).then(res => { modalInfo.value = res.data - showModal.value = true - console.log('modalInfo.value', modalInfo.value) + // const apiKey = 'd9a554b1808ce10a12a932ed9b0db1d0' + const apiKey = '3916a7b434e7f13ae1a0af64e88ec0a3' + if (modalInfo.value.gisList && modalInfo.value.gisList.length > 0) { + const gisInfo = modalInfo.value.gisList[0] + if (gisInfo && gisInfo.gisList && gisInfo.gisList.length > 0) { + const adsInfo = gisInfo.gisList[gisInfo.gisList.length - 1] + const location = adsInfo.lon1 + ',' + adsInfo.lat1 + axios.get(`https://restapi.amap.com/v3/geocode/regeo?key=${apiKey}&location=${location}`).then(res => { + console.log('res', res.data) + if (res.data.status == 1) { + modalInfo.value.position = res.data.regeocode.formatted_address + } + }) + } + } + + modalLoading.value = false nextTick(() => { initGdMap() }) + }, () => { + modalLoading.value = false }) +} +const closeModal = () => { + showModal.value = false + showModal1.value = false + modalInfo.value = {} } @@ -966,7 +1123,7 @@ image: fahuoImg, // 鍥炬爣鍥剧墖URL imageSize: new AMap.Size(28, 32), // 鍥炬爣瀹為檯澶у皬 }), - title: '鏍囪鐐�1', // 榧犳爣鎮仠鏃舵樉绀虹殑鏍囬 + title: obj.deliveryEnterprise, // 榧犳爣鎮仠鏃舵樉绀虹殑鏍囬 }) map.add(marker1) const marker2 = new AMap.Marker({ @@ -976,7 +1133,7 @@ image: shouImg, // 鍥炬爣鍥剧墖URL imageSize: new AMap.Size(28, 32), // 鍥炬爣瀹為檯澶у皬 }), - title: '鏍囪鐐�1', // 榧犳爣鎮仠鏃舵樉绀虹殑鏍囬 + title: obj.receiveEnterprise, // 榧犳爣鎮仠鏃舵樉绀虹殑鏍囬 }) map.add(marker2) // 缁樺埗杞ㄨ抗 @@ -996,8 +1153,9 @@ }) map.add(polyline) } +const isLoadingTask = ref(false) const getData2 = () => { - + isLoadingTask.value = true getStoreTaskList({ pager: pager.value, parameters: { @@ -1005,13 +1163,18 @@ facrotyCodeList: activeCity.value.code ? [activeCity.value.code] : [] } }).then(res => { + isLoadingTask.value = false let temp = res.data.rows || [] transportTask.value = temp.map(item => { - if (item.transportDate) { - item.transportDate = item.transportDate.slice(5, 16) + if (item.createDate) { + item.createDate = item.createDate.slice(5, 16) } return item }) + console.log('isLoadingTask', isLoadingTask.value) + + }, () => { + isLoadingTask.value = false }) } @@ -1020,7 +1183,7 @@ const cityList = ref() const getCity = () => { kzfactoryList().then(res => { - cityList.value = res.data + cityList.value = [{ name: '鍏ㄧ渷', code: '' }, ...res.data] }) } const activeCity = ref({ name: '鍏ㄧ渷', code: '' }) @@ -1045,6 +1208,15 @@ show: false, position: 'center' }, + emphasis: { + // 璁剧疆鎮诞鏃舵牱寮忎负绌� + scale: false, // 鍏抽棴鏀惧ぇ鏁堟灉 + itemStyle: { + shadowBlur: 0, // 闃村奖妯$硦搴︿负 0 + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0)', + }, + }, color: colors, labelLine: { show: false @@ -1060,9 +1232,12 @@ } const activeTab1 = ref(0) +const loading1 = ref(false) const StockOutData = ref({}) const getStockOut = () => { + loading1.value = true kztotalOutQtyNum({ type: activeTab1.value, factoryCode: activeCity.value.code }).then(res => { + loading1.value = false if (res.code == 200) { let obj = res.data obj.currentNum = (obj.currentOutNum + obj.currentInNum).toFixed(0) * 1 @@ -1077,15 +1252,54 @@ initEchart1() } + }, () => { + loading1.value = false }) } const tab1Click = (val) => { activeTab1.value = val getStockOut() } +// footer const getData3 = () => { - getStorecenterData().then(res => { - cneterData.value = res.data || {} + getStorecenterData({ + factoryCode: activeCity.value.code + }).then(res => { + const obj = res.data || {} + console.log('obj', obj) + + // 8灏忔椂 璁″垝 浠婃棩 + // obj.hoursAbility = 6000 + // obj.maxAbility = 8000 + // obj.currentPlanNum = 22000 + // obj.crrentOutNum = 7000 + + obj.level1 = ((obj.hoursAbility / obj.maxAbility) * 100).toFixed(2) + '%' + if (obj.currentPlanNum >= obj.hoursAbility) { + obj.level2 = '100%' + obj.level22 = (((obj.currentPlanNum - obj.hoursAbility) / (obj.maxAbility - obj.hoursAbility)) * 100).toFixed(2) + obj.level22 = obj.level22 > 100 ? '100%' : obj.level22 + '%' + } else { + obj.level2 = ((obj.currentPlanNum / obj.hoursAbility) * 100).toFixed(2) + '%' + obj.level22 = 0 + } + if (obj.crrentOutNum >= obj.hoursAbility) { + obj.level3 = '100%' + obj.level33 = (((obj.crrentOutNum - obj.hoursAbility) / (obj.maxAbility - obj.hoursAbility)) * 100).toFixed(2) + obj.level33 = obj.level33 > 100 ? '100%' : obj.level33 + '%' + } else { + obj.level3 = ((obj.crrentOutNum / obj.hoursAbility) * 100).toFixed(2) + '%' + obj.level33 = 0 + } + + // console.log('obj1', obj.level1); + // console.log('obj2', obj.level2); + // console.log('obj22', obj.level22); + // console.log('obj3', obj.level3); + // console.log('obj33', obj.level33); + + cneterData.value = obj + }) } @@ -1100,9 +1314,9 @@ legend: { itemGap: 12, // icon: 'circle', - right: '16%', + right: '12%', top: '0%', - data: ['鎬诲簱瀛�', '褰撳墠搴撳瓨', '搴撳瓨鍒╃敤鐜�'], + data: ['鎬诲簱瀹�', '褰撳墠搴撳瓨', '搴撳瓨鍒╃敤鐜�'], itemWidth: 20, itemHeight: 10, textStyle: { @@ -1118,7 +1332,33 @@ containLabel: true }, tooltip: { - trigger: 'axis' + trigger: 'axis', + formatter: function (params) { + // 閬嶅巻鎮诞鏃剁殑鎵�鏈夌偣锛屽畾鍒跺寲鏄剧ず鍐呭 + let result = `<div style="width: 160px">${params[0].name}</div>` + params.forEach((item) => { + if (item.seriesName === '鎬诲簱瀹�') { + result += ` + <div style="display: flex;align-items: center;justify-content: space-between;margin-top: 2px;"> + <div style="display: flex;align-items: center;"><div style="width: 10px;height: 10px; border-radius: 50%;background-color: #5e9bca;margin-right: 4px;"></div><div>${item.seriesName}</div></div> + <div><strong>${item.value}</strong></div> + </div>` + } else if (item.seriesName === '褰撳墠搴撳瓨') { + result += ` + <div style="display: flex;align-items: center;justify-content: space-between;margin-top: 2px;"> + <div style="display: flex;align-items: center;"><div style="width: 10px;height: 10px; border-radius: 50%;background-color: #e2a44f;margin-right: 4px;"></div><div>${item.seriesName}</div></div> + <div><strong>${item.value}</strong></div> + </div>` + } else if (item.seriesName === '搴撳瓨鍒╃敤鐜�') { + result += ` + <div style="display: flex;align-items: center;justify-content: space-between;margin-top: 2px;"> + <div style="display: flex;align-items: center;"><div style="width: 10px;height: 10px; border-radius: 50%;background-color: #b2bcd1;margin-right: 4px;"></div><div>${item.seriesName}</div></div> + <div><strong>${item.value}%</strong></div> + </div>` + } + }) + return result + } }, xAxis: [{ nameGap: 5, @@ -1131,7 +1371,6 @@ }, axisLabel: { color: '#869CC9' - // fontSize: 24, }, axisTick: { show: false, @@ -1143,11 +1382,10 @@ nameTextStyle: { color: '#869CC9', }, - name: '涓囨敮', + name: '绠�', nameGap: 16, type: 'value', axisLabel: { - show: true, color: "#869CC9", }, axisLine: { @@ -1167,17 +1405,20 @@ name: '%', nameGap: 16, min: 0, - max: 100, - interval: 25, + // max: 100, axisLabel: { - formatter: '{value}' + color: "#869CC9", + }, + nameTextStyle: { + color: '#869CC9', + padding: [0, 0, 0, 12] }, splitLine: false } ], series: [ { - name: '鎬诲簱瀛�', + name: '鎬诲簱瀹�', type: 'bar', barWidth: 10, barGap: '60%', @@ -1249,11 +1490,14 @@ color: "#9eabc2" }, yAxisIndex: 1, + tooltip: { + show: true, + formatter: '{c}' + '%', + }, label: { show: false, position: 'top', color: '#fff', - // formatter: '{c}' + '%', }, data: data5.value.detailList.map(i => i.useRate) } @@ -1274,7 +1518,7 @@ // icon: 'circle', right: '10%', top: '0', - data: ['鍑哄簱鑳藉姏', '褰撴棩鍑哄簱閲�', '搴撳瓨鍒╃敤鐜�'], + data: ['鍑哄簱鑳藉姏', '褰撴棩鍑哄簱閲�', '鍑哄簱鍒╃敤鐜�'], itemWidth: 20, itemHeight: 10, textStyle: { @@ -1282,15 +1526,41 @@ borderColor: '#fff' }, }, + tooltip: { + trigger: 'axis', + formatter: function (params) { + // 閬嶅巻鎮诞鏃剁殑鎵�鏈夌偣锛屽畾鍒跺寲鏄剧ず鍐呭 + let result = `<div style="width: 160px">${params[0].name}</div>` + params.forEach((item) => { + if (item.seriesName === '鍑哄簱鑳藉姏') { + result += ` + <div style="display: flex;align-items: center;justify-content: space-between;margin-top: 2px;"> + <div style="display: flex;align-items: center;"><div style="width: 10px;height: 10px; border-radius: 50%;background-color: #487af3;margin-right: 4px;"></div><div>${item.seriesName}</div></div> + <div><strong>${item.value}</strong></div> + </div>` + } else if (item.seriesName === '褰撴棩鍑哄簱閲�') { + result += ` + <div style="display: flex;align-items: center;justify-content: space-between;margin-top: 2px;"> + <div style="display: flex;align-items: center;"><div style="width: 10px;height: 10px; border-radius: 50%;background-color: #e2a44f;margin-right: 4px;"></div><div>${item.seriesName}</div></div> + <div><strong>${item.value}</strong></div> + </div>` + } else if (item.seriesName === '鍑哄簱鍒╃敤鐜�') { + result += ` + <div style="display: flex;align-items: center;justify-content: space-between;margin-top: 2px;"> + <div style="display: flex;align-items: center;"><div style="width: 10px;height: 10px; border-radius: 50%;background-color: #b0bcd3;margin-right: 4px;"></div><div>${item.seriesName}</div></div> + <div><strong>${item.value}%</strong></div> + </div>` + } + }) + return result + } + }, grid: { left: '3%', right: '0%', bottom: '3%', top: '18%', containLabel: true - }, - tooltip: { - trigger: 'axis' }, xAxis: [{ nameGap: 5, @@ -1302,8 +1572,10 @@ }, }, axisLabel: { - color: '#869CC9' - // fontSize: 24, + color: "#869CC9", + }, + nameTextStyle: { + color: '#869CC9', }, axisTick: { show: false, @@ -1312,15 +1584,15 @@ }], yAxis: [ { - nameTextStyle: { - color: '#869CC9', - }, - name: '涓囨敮', + name: '绠�', nameGap: 16, type: 'value', axisLabel: { - show: true, color: "#869CC9", + }, + nameTextStyle: { + color: '#869CC9', + padding: [0, 0, 0, 12] }, axisLine: { show: true, @@ -1339,10 +1611,12 @@ name: '%', nameGap: 16, min: 0, - max: 100, - interval: 25, axisLabel: { - formatter: '{value}' + color: "#869CC9", + }, + nameTextStyle: { + color: '#869CC9', + padding: [0, 0, 0, 12] }, splitLine: false } @@ -1415,7 +1689,7 @@ barGap: '-100%' // 璁剧疆鏌卞瓙瀹屽叏閲嶅彔 }, { - name: '搴撳瓨鍒╃敤鐜�', + name: '鍑哄簱鍒╃敤鐜�', type: 'line', smooth: false, showAllSymbol: true, @@ -1428,7 +1702,6 @@ show: false, position: 'top', color: '#fff', - // formatter: '{c}' + '%', }, data: data6.value.detailList.map(i => i.useRate) } @@ -1447,9 +1720,9 @@ legend: { itemGap: 12, // icon: 'circle', - right: '16%', + right: '10%', top: '0%', - data: ['鎬诲簱瀛�', '褰撳墠搴撳瓨', '搴撳瓨鍒╃敤鐜�'], + data: ['褰撴棩鍙敤杩愬姏', '褰撴棩鎻愭姤杩愬姏', '杞﹁締鍒╃敤鐜�'], itemWidth: 20, itemHeight: 10, textStyle: { @@ -1457,15 +1730,41 @@ borderColor: '#fff' }, }, + tooltip: { + trigger: 'axis', + formatter: function (params) { + // 閬嶅巻鎮诞鏃剁殑鎵�鏈夌偣锛屽畾鍒跺寲鏄剧ず鍐呭 + let result = `<div style="width: 160px">${params[0].name}</div>` + params.forEach((item) => { + if (item.seriesName === '褰撴棩鍙敤杩愬姏') { + result += ` + <div style="display: flex;align-items: center;justify-content: space-between;margin-top: 2px;"> + <div style="display: flex;align-items: center;"><div style="width: 10px;height: 10px; border-radius: 50%;background-color: #88d9cc;margin-right: 4px;"></div><div>${item.seriesName}</div></div> + <div><strong>${item.value}</strong></div> + </div>` + } else if (item.seriesName === '褰撴棩鎻愭姤杩愬姏') { + result += ` + <div style="display: flex;align-items: center;justify-content: space-between;margin-top: 2px;"> + <div style="display: flex;align-items: center;"><div style="width: 10px;height: 10px; border-radius: 50%;background-color: #e2a44f;margin-right: 4px;"></div><div>${item.seriesName}</div></div> + <div><strong>${item.value}</strong></div> + </div>` + } else if (item.seriesName === '杞﹁締鍒╃敤鐜�') { + result += ` + <div style="display: flex;align-items: center;justify-content: space-between;margin-top: 2px;"> + <div style="display: flex;align-items: center;"><div style="width: 10px;height: 10px; border-radius: 50%;background-color: #b0bcd3;margin-right: 4px;"></div><div>${item.seriesName}</div></div> + <div><strong>${item.value}%</strong></div> + </div>` + } + }) + return result + } + }, grid: { left: '3%', right: '0%', bottom: '3%', top: '18%', containLabel: true - }, - tooltip: { - trigger: 'axis' }, xAxis: [{ nameGap: 5, @@ -1477,8 +1776,11 @@ }, }, axisLabel: { - color: '#869CC9' - // fontSize: 24, + color: "#869CC9", + }, + nameTextStyle: { + color: '#869CC9', + padding: [0, 0, 0, 12] }, axisTick: { show: false, @@ -1490,7 +1792,7 @@ nameTextStyle: { color: '#869CC9', }, - name: '涓囨敮', + name: '杈�', nameGap: 16, type: 'value', axisLabel: { @@ -1514,17 +1816,19 @@ name: '%', nameGap: 16, min: 0, - max: 100, - interval: 25, axisLabel: { - formatter: '{value}' + color: "#869CC9", + }, + nameTextStyle: { + color: '#869CC9', + padding: [0, 0, 0, 12] }, splitLine: false } ], series: [ { - name: '鎬诲簱瀛�', + name: '褰撴棩鍙敤杩愬姏', type: 'bar', barWidth: 10, barGap: '60%', @@ -1538,11 +1842,11 @@ color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ { offset: 0, - color: '#2e6bf3' + color: '#73f0c6' }, { offset: 1, - color: '#5fcbab' + color: '#3f8ca6' } ], false), lineStyle: { @@ -1551,10 +1855,10 @@ }, barBorderRadius: [30, 30, 0, 0], }, - data: data7.value.detailList.map(i => i.totalNum) + data: data7.value.detailList.map(i => (i.totalNum - i.zaituNum)) }, { - name: '褰撳墠搴撳瓨', + name: '褰撴棩鎻愭姤杩愬姏', type: 'bar', barWidth: 10, label: { @@ -1567,15 +1871,15 @@ color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ { offset: 0, - color: '#eda13a' + color: '#ed7e32' }, { offset: 0.6, - color: '#dfb44e' + color: '#e99b5c' }, { offset: 1, - color: '#ccc16c' + color: '#e7a774' } ], false), lineStyle: { @@ -1587,7 +1891,7 @@ data: data7.value.detailList.map(i => i.currentNum) }, { - name: '搴撳瓨鍒╃敤鐜�', + name: '杞﹁締鍒╃敤鐜�', type: 'line', smooth: false, showAllSymbol: true, @@ -1600,7 +1904,6 @@ show: false, position: 'top', color: '#fff', - // formatter: '{c}' + '%', }, data: data7.value.detailList.map(i => i.useRate) } @@ -1615,21 +1918,29 @@ kzinventoryUseRate().then(res => { data5.value = res.data data5.value.detailList.forEach(item => { - item.useRate = item.useRate * 100 + if (item.useRate) { + item.useRate = (item.useRate * 100).toFixed(1) + } + }) initEchart5() }) outAbilityUseRate().then(res => { data6.value = res.data data6.value.detailList.forEach(item => { - item.useRate = item.useRate * 100 + if (item.useRate) { + item.useRate = (item.useRate * 100).toFixed(1) + } }) initEchart6() }) tranportAbilityUseRate().then(res => { data7.value = res.data data7.value.detailList.forEach(item => { - item.useRate = item.useRate * 100 + // item.useRate = item.useRate * 100 + if (item.useRate) { + item.useRate = (item.useRate * 100).toFixed(1) + } }) initEchart7() }) @@ -1652,7 +1963,7 @@ initialSlide: 0, direction: 'vertical', //绔栫洿鏂瑰悜 slidesPerView: 5, - autoplay: autoplayFlag(transportTask.value, 5, 4000), + autoplay: autoplayFlag(transportTask.value, 5, 6000), observer: true, //淇敼swiper鑷繁鎴栧瓙鍏冪礌鏃讹紝鑷姩鍒濆鍖杝wiper }) } @@ -1669,6 +1980,11 @@ getCity() changeCity() getData5() + setInterval(() => { + getCity() + changeCity() + getData5() + }, 1000 * 60 * 10) setTimeout(() => { loopFn1() }, 12000) @@ -1729,6 +2045,8 @@ .left_box_one { margin-top: 20px; padding: 0px 10px 30px 20px; + position: relative; + height: 160px; .content_wrap { display: flex; @@ -1848,9 +2166,22 @@ } .list_wrap { + position: relative; + .list { height: 200px; overflow: hidden; + } + + .empty { + display: flex; + justify-content: center; + align-items: center; + height: 200px; + + img { + width: 144px; + } } .line { @@ -1873,7 +2204,7 @@ } .status { - flex: 5; + flex: 3.2; } } @@ -1923,6 +2254,9 @@ .left { display: flex; align-items: center; + position: relative; + + img { width: 16px; @@ -1971,8 +2305,37 @@ .static_wrap { display: flex; justify-content: space-between; - align-items: center; margin: 30px 0 14px; + + .tooltip_wrap { + position: relative; + + &:hover { + .tooltip { + display: block; + } + } + + .tooltip { + display: none; + background: rgba(0, 30, 63, 0.6); + border: 1px solid #003F82; + backdrop-filter: blur(3px); + padding: 10px; + font-size: 15px; + color: #fff; + line-height: 19px; + font-weight: 400; + border-radius: 6px; + width: 230px; + position: absolute; + line-height: 24px; + left: 100%; + top: 50%; + transform: translate(20px, -42%); + z-index: 999999999999999; + } + } .item { display: flex; @@ -2041,47 +2404,18 @@ height: 76px; .content { - flex: 5; + width: 80%; height: 16px; background: rgba(255, 255, 255, 0.13); border-radius: 8px; - margin-right: 4px; + margin-right: 6px; display: flex; position: relative; - .node { - position: absolute; - left: 69%; - top: -20px; - width: 22px; - height: 70px; - z-index: 999; - overflow: hidden; - - .node_icon { - background-color: #051623; - height: 16px; - - .icon { - background-color: #25333f; - height: 16px; - width: 16px; - position: absolute; - top: 20px; - right: -8px; - border-radius: 50%; - overflow: hidden; - } - - .icon2 { - right: 12px; - } - } - } } .box { - width: 40%; + width: 80%; height: 16px; background: linear-gradient(270deg, #FF9F02 0%, #FFEA70 100%); border-radius: 8px; @@ -2092,6 +2426,7 @@ .tag { position: absolute; + z-index: 99999; bottom: -30px; right: 0; transform: translate(50%, 0); @@ -2102,6 +2437,9 @@ border-radius: 12px; display: flex; align-items: center; + justify-content: center; + min-width: 76px; + border: 1px solid #FECE01; .icon { position: absolute; @@ -2116,8 +2454,17 @@ } } + .tooltip_wrap { + .tooltip { + z-index: 9999999999; + top: 34px; + transform: translate(70px, -42%); + } + } + .tag1 { background-color: #28F0CC; + border: 1px solid #28F0CC; .icon { background-color: #28F0CC; @@ -2126,9 +2473,50 @@ } .box1 { - width: 70%; + width: 10%; z-index: 9; - background: linear-gradient(270deg, #15FDC8 0%, #006BFF 100%); + background: linear-gradient(270deg, #68dfd3 0%, #006BFF 100%); + } + + .box11 { + background: linear-gradient(270deg, #75f8cc 0%, #68dfd3 100%); + } + + .box22 { + background: linear-gradient(270deg, #f2a43b 0%, #ecbb61 100%); + } + + .box23 { + background: linear-gradient(270deg, #f4b34a 0%, #FFEA70 100%); + } + + .tooltip_wrap { + /* position: relative; */ + + &:hover { + .tooltip { + display: block; + } + } + + .tooltip { + display: none; + background: #071b32; + border: 1px solid #003F82; + /* backdrop-filter: blur(3px); */ + padding: 10px; + font-size: 15px; + color: #fff; + line-height: 19px; + font-weight: 400; + border-radius: 6px; + width: 200px; + position: absolute; + z-index: 99999999; + left: 100%; + top: 50%; + transform: translate(30px, -42%); + } } .scale { @@ -2137,14 +2525,22 @@ left: 0; font-size: 16px; color: #D2E0FF; + + .tooltip_wrap { + .tooltip { + width: 240px; + transform: translate(20px, -50%); + } + } } .scale1 { - left: 84%; + left: 92%; + min-width: 36px; } .side { - flex: 2; + flex: 1; height: 16px; background: rgba(255, 255, 255, 0.13); border-radius: 8px; @@ -2167,7 +2563,7 @@ .modal1 { width: 500px; - height: 224px; + height: 192px; background: rgba(0, 86, 255, 0.1); backdrop-filter: blur(5px); padding: 12px 30px; @@ -2175,10 +2571,13 @@ top: 36px; left: 12px; border: 1px solid #4ba7f7; + z-index: 999999; - .list { - height: 192px; - overflow: auto; + .content { + .list { + height: 128px; + overflow: auto; + } .line { display: flex; @@ -2192,7 +2591,14 @@ } .item { - flex: 2; + flex: 3; + } + + .addr { + flex: 5; + display: flex; + flex-wrap: nowrap; + overflow: hidden; } } @@ -2224,6 +2630,118 @@ } } } + + .question { + display: flex; + align-items: center; + + &:hover { + .hover_wrap { + display: block; + } + } + + .hover_wrap { + display: none; + position: absolute; + left: 130px; + z-index: 999; + top: -5px; + width: 420px; + height: 148px; + background: rgba(0, 30, 63, 0.6); + border: 1px solid #003F82; + backdrop-filter: blur(3px); + padding: 10px; + font-size: 13px; + color: #ebf1fb; + line-height: 19px; + font-weight: 400; + border-radius: 6px; + + div { + margin-bottom: 3px; + } + + .triangle { + width: 12px; + height: 12px; + position: absolute; + top: 10px; + left: -6px; + transform: rotate(45deg); + border-left: 1px solid #003F82; + border-bottom: 1px solid #003F82; + background: rgba(0, 30, 63, 0.6); + backdrop-filter: blur(3px); + } + + .title { + font-weight: bold; + font-size: 14px; + color: #e2ebfd; + } + } + } +} + +.question1 { + display: flex; + align-items: center; + + .hover_con { + position: relative; + + &:hover { + .hover_wrap { + display: block; + } + } + } + + + .hover_wrap { + display: none; + + position: absolute; + left: 108%; + z-index: 999; + top: -5px; + width: 212px; + height: 62px; + background: rgba(0, 30, 63, 0.6); + border: 1px solid #003F82; + backdrop-filter: blur(3px); + padding: 10px; + font-size: 15px; + color: #e9f0ff; + line-height: 19px; + font-weight: 400; + border-radius: 6px; + + div { + margin-bottom: 3px; + } + + + .title { + color: #e2ebfd; + } + } +} + +.triangle { + width: 12px; + height: 12px; + position: absolute; + top: 36%; + transform: translate(-50%, -50%); + left: -6px; + transform: rotate(45deg); + border-left: 1px solid #003F82; + border-bottom: 1px solid #003F82; + background: rgba(0, 30, 63, 0.6); + /* backdrop-filter: blur(3px); */ } .main_header { @@ -2333,7 +2851,7 @@ width: 600px; height: 556px; background: rgba(0, 30, 63, 0.5); - border: 1px solid #c6eef7; + /* border: 1px solid #c6eef7; */ backdrop-filter: blur(5px); position: fixed; top: 20%; @@ -2343,24 +2861,48 @@ padding: 24px; #map-container { - width: 300px; - height: 180px; + width: 260px; + height: 320px; position: absolute; - top: 220px; - right: 10px; + top: 190px; + right: 20px; z-index: 999999; - :deep(.amap-markers){ + border-radius: 2px; + + :deep(.amap-markers) { left: -12px !important; top: -32px !important; + } + } + + .stock { + display: flex; + align-items: center; + color: #dd5d2a; + margin-bottom: 8px; + + img { + margin-right: 6px; + width: 14px; } } .title_head { display: flex; align-items: center; - font-weight: bold; - font-size: 17px; - margin-bottom: 20px; + justify-content: space-between; + margin-bottom: 8px; + + .left { + display: flex; + align-items: center; + font-weight: bold; + font-size: 17px; + } + + .tit_status { + color: #af8832; + } img { width: 20px; @@ -2373,12 +2915,12 @@ flex-wrap: wrap; background-color: #0d2845; border-radius: 4px; - padding: 10px 20px 0; + padding: 10px 20px 0px; margin-bottom: 16px; .item { display: flex; - align-items: center; + /* align-items: center; */ font-size: 13px; width: 55%; margin-bottom: 8px; @@ -2393,10 +2935,16 @@ background-color: #fff; border-radius: 50%; margin-right: 4px; + margin-top: 7px; } .la { color: #01D9FE; + width: 70px; + } + + .val { + flex: 1; } } } @@ -2417,11 +2965,13 @@ .fu_list { height: 310px; + width: 290px; margin-top: 20px; overflow: auto; - .fu_item { + position: relative; + .item_title { margin-bottom: 6px; @@ -2438,12 +2988,13 @@ } .separate { - height: calc(100% - 125px); - width: 1px; - border: 1px dashed #CCCCCC; + height: calc(100% - 8px); + /* width: 1px; */ + border: 1px dashed #576783; + /* border: 1px dashed red; */ position: absolute; - left: 26px; - top: 51px; + left: 10px; + top: 20px; z-index: -1; } @@ -2498,6 +3049,8 @@ .text { color: #b1bfdc; + margin-bottom: 6px; + width: 100%; } .icon { @@ -2510,7 +3063,6 @@ .h2 { display: flex; align-items: center; - height: 24px; } .h1 {} @@ -2518,7 +3070,6 @@ .time { padding-left: 39px; font-size: 12px; - margin-top: 3px; } } } @@ -2534,7 +3085,7 @@ top: 0; left: 0; z-index: 9999; - background-color: rgba(0, 0, 0, 0.1); + /* background-color: rgba(0, 0, 0, 0.0); */ /* background-color: red; */ } @@ -2553,6 +3104,12 @@ font-weight: 500; font-size: 16px; color: #FFFFFF; + position: relative; + + .hover_wrap { + left: 175px; + height: 80px; + } .icon { width: 16px; @@ -2675,4 +3232,4 @@ object-fit: cover; z-index: -1; } -</style> \ No newline at end of file +</style> -- Gitblit v1.9.3