|  |  |  | 
|---|
|  |  |  | <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="" /> --> | 
|---|
|  |  |  | <img src="@/assets/images/maintitle.gif" class="main_header_bg" alt="" /> | 
|---|
|  |  |  | <div class="title">全省物流在途</div> | 
|---|
|  |  |  | <div class="time_wrap"> | 
|---|
|  |  |  | <span class="date">{{ date }}</span> | 
|---|
|  |  |  | 
|---|
|  |  |  | </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> | 
|---|
|  |  |  | 
|---|
|  |  |  | <div class="icon icon2"></div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> --> | 
|---|
|  |  |  | <div class="box"> | 
|---|
|  |  |  | <div class="tag"> | 
|---|
|  |  |  | <div :style="{width: cneterData.level3}" :class="{box23: cneterData.crrentOutNum >= cneterData.hoursAbility}" class="box" > | 
|---|
|  |  |  | <div v-if="cneterData.crrentOutNum < cneterData.hoursAbility" class="tag"> | 
|---|
|  |  |  | <div class="icon"></div> | 
|---|
|  |  |  | <span>今日出库</span> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <div class="box box1"> | 
|---|
|  |  |  | <div class="tag tag1"> | 
|---|
|  |  |  | <div :style="{width: cneterData.level2}" class="box box1"> | 
|---|
|  |  |  | <div v-if="cneterData.hoursAbility >= cneterData.currentPlanNum" class="tag tag1"> | 
|---|
|  |  |  | <div class="icon"></div> | 
|---|
|  |  |  | <span>当日计划</span> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <!-- <div class="side"> | 
|---|
|  |  |  | <div class="box"></div> | 
|---|
|  |  |  | <div class="side"> | 
|---|
|  |  |  | <div v-if="cneterData.crrentOutNum >= cneterData.hoursAbility" :style="{width: cneterData.level33}" class="box box22" > | 
|---|
|  |  |  | <div class="tag"> | 
|---|
|  |  |  | <div class="icon"></div> | 
|---|
|  |  |  | <span>今日出库</span> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <div v-if="cneterData.hoursAbility <= cneterData.currentPlanNum" :style="{width: cneterData.level22}" class="box box1 box11"> | 
|---|
|  |  |  | <div class="tag tag1"> | 
|---|
|  |  |  | <div class="icon"></div> | 
|---|
|  |  |  | <span>当日计划</span> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <!-- <div class="box"></div> --> | 
|---|
|  |  |  | <div class="scale" style="left: -12px;">8h</div> | 
|---|
|  |  |  | <div class="scale scale1">最大</div> | 
|---|
|  |  |  | </div> --> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | 
|---|
|  |  |  | </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"> | 
|---|
|  |  |  | <div class="item_title"> | 
|---|
|  |  |  | <div class="icon"> | 
|---|
|  |  |  | <img v-if="item.key == 0 && k != 0" src="@/assets/images/LogisticsCenter/ic_dingdan@2x.png" | 
|---|
|  |  |  | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <div class="modal_mask" v-if="showModal" @click="showModal = false"></div> | 
|---|
|  |  |  | <div class="modal_mask" v-if="showModal" @click="closeModal"></div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <!-- <Loading v-if="isLoading" /> --> | 
|---|
|  |  |  | </v-scale-screen> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | 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 'vue3-loading-spinner'; | 
|---|
|  |  |  | // import 'vue3-loading-spinner/dist/style.css'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import { | 
|---|
|  |  |  | getStoreOperationList, | 
|---|
|  |  |  | getStorearriveGoodsList, | 
|---|
|  |  |  | 
|---|
|  |  |  | 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 isLoading = ref(false); | 
|---|
|  |  |  | // | 
|---|
|  |  |  | const mapList = ref([]) | 
|---|
|  |  |  | const mapEchart = ref() | 
|---|
|  |  |  | 
|---|
|  |  |  | { name: '台湾省', value: 0 }, | 
|---|
|  |  |  | { name: '香港特别行政区', value: 0 }, | 
|---|
|  |  |  | { name: '澳门特别行政区', value: 0 }, | 
|---|
|  |  |  | { name: '南海诸岛', value: 0 }, | 
|---|
|  |  |  | ] | 
|---|
|  |  |  | mapData.forEach(item => { | 
|---|
|  |  |  | item.monthNum = 0 | 
|---|
|  |  |  | 
|---|
|  |  |  | { 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: -1, max: 20000, label: '出库量2w以下', color: '#3561a4' }, | 
|---|
|  |  |  | ], | 
|---|
|  |  |  | itemWidth: 22, | 
|---|
|  |  |  | itemHeight: 22, | 
|---|
|  |  |  | 
|---|
|  |  |  | center: [105.194115019531, 36.582111640625], // 地图中心位置, 此处的纬度与下面的center相差1度是形成阴影的距离,可自己随意调整 | 
|---|
|  |  |  | itemStyle: { | 
|---|
|  |  |  | areaColor: '#152e4a', //地图阴影的颜色 | 
|---|
|  |  |  | borderColor: '#f7f7f7', // 省份边框颜色 | 
|---|
|  |  |  | borderWidth: 0.1, // 省份边框宽度 | 
|---|
|  |  |  | borderColor: '#779dc8', // 省份边框颜色 | 
|---|
|  |  |  | borderWidth: 0.5, // 省份边框宽度 | 
|---|
|  |  |  | // shadowBlur: 5, // 省份边框聚焦 | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | emphasis: { | 
|---|
|  |  |  | 
|---|
|  |  |  | page: 0, | 
|---|
|  |  |  | rows: 10 | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | const modalTabClick = (val) => { | 
|---|
|  |  |  | modalTab.value = val | 
|---|
|  |  |  | } | 
|---|
|  |  |  | const taskClick = (item) => { | 
|---|
|  |  |  | isLoading.value = true | 
|---|
|  |  |  | kzorderInfo({ contractNumber: item.contractNumber }).then(res => { | 
|---|
|  |  |  | modalInfo.value = res.data | 
|---|
|  |  |  | showModal.value = true | 
|---|
|  |  |  | console.log('modalInfo.value', modalInfo.value) | 
|---|
|  |  |  | isLoading.value = false | 
|---|
|  |  |  | nextTick(() => { | 
|---|
|  |  |  | initGdMap() | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | }, () => { | 
|---|
|  |  |  | isLoading.value = false | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | const closeModal = () => { | 
|---|
|  |  |  | showModal.value = false | 
|---|
|  |  |  | modalInfo.value = {} | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | 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 = 5000 | 
|---|
|  |  |  | // 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 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | getCity() | 
|---|
|  |  |  | changeCity() | 
|---|
|  |  |  | getData5() | 
|---|
|  |  |  | setInterval(() => { | 
|---|
|  |  |  | getCity() | 
|---|
|  |  |  | changeCity() | 
|---|
|  |  |  | getData5() | 
|---|
|  |  |  | }, 1000 * 60 * 10) | 
|---|
|  |  |  | setTimeout(() => { | 
|---|
|  |  |  | loopFn1() | 
|---|
|  |  |  | }, 12000) | 
|---|
|  |  |  | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | 
|---|
|  |  |  | border-radius: 12px; | 
|---|
|  |  |  | display: flex; | 
|---|
|  |  |  | align-items: center; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | justify-content: center; | 
|---|
|  |  |  | min-width: 76px; | 
|---|
|  |  |  | border: 1px solid #fff; | 
|---|
|  |  |  | .icon { | 
|---|
|  |  |  | position: absolute; | 
|---|
|  |  |  | top: 1px; | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .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%); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .scale { | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .scale1 { | 
|---|
|  |  |  | left: 84%; | 
|---|
|  |  |  | min-width: 36px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .side { | 
|---|
|  |  |  | flex: 2; | 
|---|
|  |  |  | flex: 1; | 
|---|
|  |  |  | height: 16px; | 
|---|
|  |  |  | background: rgba(255, 255, 255, 0.13); | 
|---|
|  |  |  | border-radius: 8px; | 
|---|
|  |  |  | 
|---|
|  |  |  | top: 220px; | 
|---|
|  |  |  | right: 10px; | 
|---|
|  |  |  | z-index: 999999; | 
|---|
|  |  |  | :deep(.amap-markers){ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | :deep(.amap-markers) { | 
|---|
|  |  |  | left: -12px !important; | 
|---|
|  |  |  | top: -32px !important; | 
|---|
|  |  |  | } | 
|---|