From 18e9c3c8c5c05fb14b13d2a30a69af0165496f33 Mon Sep 17 00:00:00 2001 From: liukangdong <898885815@qq.com> Date: 星期四, 31 十月 2024 17:46:10 +0800 Subject: [PATCH] Merge branch 'master' of http://139.186.142.91:10010/r/productDev/dmvisit --- screen/src/views/LogisticsCenter.vue | 1058 ++++++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 803 insertions(+), 255 deletions(-) diff --git a/screen/src/views/LogisticsCenter.vue b/screen/src/views/LogisticsCenter.vue index 096746a..101762b 100644 --- a/screen/src/views/LogisticsCenter.vue +++ b/screen/src/views/LogisticsCenter.vue @@ -29,8 +29,8 @@ </div> <div class="content_wrap"> <div class="num_wrap"> - <div class="num_list"> - <div class="num" v-for="i in '200000'"> + <div class="num_list" v-if="cneterData.yearOutTotal"> + <div class="num" v-for="i in cneterData.yearOutTotal + ''"> {{ i }} <img class="bg" src="@/assets/images/LogisticsCenter/bg_number@2x.png" alt=""> </div> @@ -39,9 +39,10 @@ <div class="unit_wrap"> <span class="la">鍚屾瘮</span> <img src="@/assets/images/ic_up.png" class="icon" alt=""> - <span>10.2%</span> + <span v-if="cneterData.yearOutTotalOnYear || cneterData.yearOutTotalOnYear == 0">{{ + cneterData.yearOutTotalOnYear }} %</span> <span class="la" style="margin-left: 30px;margin-right: 10px;">绱鍑哄簱杞︽</span> - <span>3900</span> + <span>{{ cneterData.yearOutTimes || '' }}</span> </div> </div> @@ -77,7 +78,8 @@ </div> <div class="search_wrap"> <img src="@/assets/images/LogisticsCenter/ic_search@2x.png" alt=""> - <span>璁㈠崟鏌ヨ</span> + <input class="input" type="text" @blur="getData2" v-model="taskCode"> + <!-- <span>璁㈠崟鏌ヨ</span> --> </div> </div> <div class="list_wrap"> @@ -87,11 +89,11 @@ <span class="item">浣嶇疆</span> <span class="item">浠诲姟涓嬭揪鏃堕棿</span> </div> - <div class="line" v-for="i in 5"> - <span class="item">鐨朅23bbb</span> - <span class="item">11</span> - <span class="item">11</span> - <span class="item">11</span> + <div class="line" v-for="(item, i) in transportTask" :key="i"> + <span class="item">{{ item.carNo }}</span> + <span class="item">{{ item.statusStr }}</span> + <span class="item">{{ item.address }}</span> + <span class="item">{{ item.taskDate }}</span> </div> </div> </div> @@ -108,30 +110,39 @@ <span>鍏ㄧ渷</span> <img src="@/assets/images/LogisticsCenter/bottom.png" class="icon" alt=""> </div> + <div class="select_op"> + <div class="line">鍚堣偉浠�</div> + <div class="line">鍚堣偉浠�</div> + <div class="line">鍚堣偉浠�</div> + <div class="line">鍚堣偉浠�</div> + </div> </div> <div class="static_wrap"> <div class="item"> <img src="@/assets/images/LogisticsCenter/ic_jinrijihua@2x.png" alt=""> <div class="content"> <div class="name">浠婃棩璁″垝閲�</div> - <div class="num"><span>1000</span>涓囨敮</div> - <div class="unit">杞︽锛�10</div> + <div class="num"><span>{{ cneterData.outPlanTotal }}</span>涓囨敮</div> + <div class="unit">杞︽锛歿{ cneterData.outPlanTimes }}</div> </div> </div> <div class="item"> <img src="@/assets/images/LogisticsCenter/ic_jinrichuku@2x.png" alt=""> <div class="content"> <div class="name">浠婃棩鍑哄簱閲�</div> - <div class="num"><span class="today">1000</span>涓囨敮</div> - <div class="unit">杞︽锛�10</div> + <div class="num"><span class="today">{{ cneterData.outTotal }}</span>涓囨敮</div> + <div class="unit">杞︽锛歿{ cneterData.outTimes }}</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="finish">1000</span>涓囨敮</div> - <div class="unit">杞︽锛�10</div> + <div class="num" v-if="cneterData.outPlanTotal && cneterData.outTotal"><span class="finish">{{ + cneterData.outPlanTotal - cneterData.outTotal }}</span>涓囨敮</div> + <div class="unit" v-if="cneterData.outPlanTotal && cneterData.outTotal">杞︽锛歿{ cneterData.outPlanTimes + - + cneterData.outTimes }}</div> </div> </div> </div> @@ -140,7 +151,9 @@ <span class="num">80%</span> </div> </div> - <div class="center_box_two"></div> + <div class="center_box_two"> + <div class="echart_map" ref="mapEchart" id="echart_map"></div> + </div> </div> <div class="right_box"> <div class="com_header"> @@ -159,8 +172,8 @@ </div> <div class="content_wrap"> <div class="num_wrap"> - <div class="num_list"> - <div class="num" v-for="i in '200000'"> + <div class="num_list" v-if="cneterData.yearInTotal"> + <div class="num" v-for="i in cneterData.yearInTotal + ''"> {{ i }} <img class="bg" src="@/assets/images/LogisticsCenter/bg_number@2x.png" alt=""> </div> @@ -169,9 +182,9 @@ <div class="unit_wrap"> <span class="la">鍚屾瘮</span> <img src="@/assets/images/ic_up.png" class="icon" alt=""> - <span>10.2%</span> + <span>{{ cneterData.yearInTotalOnYear }}%</span> <span class="la" style="margin-left: 30px;margin-right: 10px;">绱鍑哄簱杞︽</span> - <span>3900</span> + <span>{{ cneterData.yearInTimes }}</span> </div> </div> @@ -180,7 +193,7 @@ <div class="echart_wrap"> <div class="echart3" id="echart3"></div> <div class="pie_text"> - <div class="fs30">30%</div> + <!-- <div class="fs30">{{ cneterData.PlanTotal }}%</div> --> </div> </div> <div class="text">璁″垝瀹屾垚閲�</div> @@ -194,11 +207,11 @@ <div>杩涢攢瀛樿繍钀�</div> </div> <div class="tabs"> - <div class="tab active">7澶�</div> + <div :class="{ active: activeTabs == 0 }" class="tab" @click="tabsClick4(0)">7澶�</div> <div class="separate"></div> - <div class="tab">30澶�</div> + <div :class="{ active: activeTabs == 1 }" class="tab" @click="tabsClick4(1)">30澶�</div> <div class="separate"></div> - <div class="tab">1骞�</div> + <div :class="{ active: activeTabs == 2 }" class="tab" @click="tabsClick4(2)">1骞�</div> </div> </div> <div class="echart4_wrap"> @@ -223,12 +236,21 @@ </template> <script setup> -import { ref, onMounted } from 'vue' +import { ref, onMounted, nextTick } from 'vue' import VScaleScreen from 'v-scale-screen' import Percent from '@/components/percent.vue' import dayjs from 'dayjs' - import * as echarts from 'echarts' +import chinaJSON from '@/assets/china.json' +import { + getStoreOperationList, + getStorearriveGoodsList, + getStorecenterData, + getStoreenergyDataList, + getStorelastMonthOil, + getStoreTaskList, +} from '@/api' + const weekMap = ['鏄熸湡鏃�', '鏄熸湡涓�', '鏄熸湡浜�', '鏄熸湡涓�', '鏄熸湡鍥�', '鏄熸湡浜�', '鏄熸湡鍏�',] const date = ref(dayjs().format('YYYY.MM.DD')) const week = ref(weekMap[new Date().getDay()]) @@ -240,35 +262,30 @@ }, 1000) -const colors = ['#0193FE', '#FFB642', '#5fc6d5'] -const StockOutData = ref([]) -const getStockOut = () => { - let arr = [] - arr.push({ name: '璁垮', value: 20 }) - arr.push({ name: '鍏虫柟', value: 30 }) - arr.sort((a, b) => b.value - a.value) - StockOutData.value = arr - initEchart1() -} -const initEchart1 = () => { +const initEchart2 = () => { const myChart = echarts.init(document.getElementById('echart1')) const option = { - tooltip: { - trigger: 'item' - }, series: [ { type: 'pie', - radius: ['72%', '96%'], + radius: ['86%', '100%'], label: { show: false, position: 'center' + }, + padAngle: 5, + itemStyle: { + borderRadius: 10 }, color: colors, labelLine: { show: false }, - data: StockOutData.value + data: [ + { value: 1048, name: 'Search Engine' }, + { value: 735, name: 'Direct' }, + { value: 580, name: 'Email' } + ] } ] } @@ -304,6 +321,398 @@ myChart.resize() }) } + +const mapEchart = ref() +const initMap = () => { + var myChart = echarts.init(mapEchart.value) + echarts.registerMap('china', chinaJSON) + var points = [ + // 鐐瑰潗鏍� + { value: [110.81, 33.40], itemStyle: { color: '#c1bb1f' }, name: '鍖椾含', total: 0, bj: 0, yj: 0, yx: 0, tj: 0, dw: 0 }, + { value: [116.55, 40.01], itemStyle: { color: '#3eef1d' }, name: '鍖椾含', total: 0, bj: 0, yj: 0, yx: 0, tj: 0, dw: 0 }, + { value: [113.11, 28.40], itemStyle: { color: '#3eef1d' }, name: '鍖椾含', total: 5, bj: 0, yj: 0, yx: 5, tj: 0, dw: 0 }, + { value: [106.44, 29.50], itemStyle: { color: '#3eef1d' }, name: '鍖椾含', total: 10, bj: 0, yj: 0, yx: 10, tj: 0, dw: 0 }, + { value: [112.85, 38.95], itemStyle: { color: '#3eef1d' }, name: '鍖椾含', total: 8, bj: 0, yj: 0, yx: 8, tj: 0, dw: 0 }, + { value: [82.78, 43.27], itemStyle: { color: '#3eef1d' }, name: '鍖椾含', total: 18, bj: 0, yj: 0, yx: 18, tj: 0, dw: 0 } + ] + var lineToLf = [ + { name: '11', coords: [[110.81, 33.40], [116.55, 40.01]], lineStyle: { color: '#c1bb1f' } }, + { name: '22', coords: [[113.11, 28.40], [116.55, 40.01]], lineStyle: { color: '#3eef1d' } }, + { name: '33', coords: [[106.44, 29.50], [116.55, 40.01]], lineStyle: { color: '#3eef1d' } }, + { name: '44', coords: [[112.85, 38.95], [116.55, 40.01]], lineStyle: { color: '#3eef1d' } }, + { name: '55', coords: [[82.78, 43.27], [116.55, 40.01]], lineStyle: { color: '#3eef1d' } } + ] + const option = { + backgroundColor: 'transparent', // 璁剧疆鑳屾櫙鑹查�忔槑 + // 蹇呴』璁剧疆 + tooltip: { + show: false + }, + // 鍦板浘闃村奖閰嶇疆 + geo: { + map: 'china', + // 杩欓噷蹇呴』瀹氫箟锛屼笉鐒跺悗闈eries閲岄潰涓嶇敓鏁� + tooltip: { + show: false + }, + label: { + show: false + }, + zoom: 1.6, + silent: true, // 涓嶅搷搴旈紶鏍囨椂闂� + show: true, + roam: false, // 鍦板浘缂╂斁鍜屽钩绉� + aspectScale: 0.75, // scale 鍦板浘鐨勯暱瀹芥瘮 + itemStyle: { + borderColor: '#2d5f9c', + borderWidth: 1, + areaColor: '#2d5f9c', + shadowColor: 'rgba(1,34,73,0.48)', + shadowBlur: 10, + shadowOffsetX: -10, // + shadowOffsetY: 10 + }, + select: { + disabled: true + }, + emphasis: { + disabled: true, + areaColor: '#00F1FF' + }, + // 鍦板浘鍖哄煙鐨勫杈瑰舰 鍥惧舰鏍峰紡 闃村奖鏁堟灉 + // z鍊煎皬鐨勫浘褰細琚珃鍊煎ぇ鐨勫浘褰㈣鐩� + top: '30.2%', + left: 'center', + // 鍘婚櫎鍗楁捣璇稿矝闃村奖 series map閲岄潰娌℃湁姝ゅ睘鎬� + regions: [{ + name: '鍗楁捣璇稿矝', + selected: false, + emphasis: { + disabled: true + }, + itemStyle: { + areaColor: '#00000000', + borderColor: '#00000000' + } + }], + z: 1 + }, + series: [ + // 鍦板浘閰嶇疆 + { + type: 'map', + map: 'china', + zoom: 1.6, + tooltip: { + show: false + }, + label: { + show: true, // 鏄剧ず鐪佷唤鍚嶇О + color: '#fff', + fontSize: 13, + shadowColor: '#fff', + shadowBlur: 10, + shadowOffsetX: 2, + shadowOffsetY: 2, + textBorderColor: '#fff', + // rotate: 90, + align: 'center' + }, + top: '28%', + left: 'center', + aspectScale: 0.75, + roam: false, // 鍦板浘缂╂斁鍜屽钩绉� + itemStyle: { + borderColor: '#4278a3', // 鐪佸垎鐣岀嚎棰滆壊 闃村奖鏁堟灉鐨� + borderWidth: 1, + areaColor: '#1d3f71', + opacity: 1 + }, + // 鍘婚櫎閫変腑鐘舵�� + select: { + disabled: true + }, + emphasis: { // 鑱氱劍鍚庨鑹� + disabled: false, // 寮�鍚珮浜� + label: { + align: 'center', + color: '#04CFF5' + }, + itemStyle: { + color: '#ffffff', + areaColor: '#3c87b2'// 闃村奖鏁堟灉 榧犳爣绉诲姩涓婂幓鐨勯鑹� + } + }, + z: 2 + }, + // 鐐� + { + name: 'companyPoint', + type: 'effectScatter', + coordinateSystem: 'geo', + showEffectOn: 'render', + // zlevel: 2, // zlevel鐢ㄤ簬 Canvas 鍒嗗眰 鐩稿悓鐨勭粯鍒跺湪鍚屼竴涓猚anvas涓� + rippleEffect: { + number: 3, // 娉㈢汗鏁伴噺 + period: 10, // 鍔ㄧ敾鍛ㄦ湡 鏁板�艰秺澶э紝娉㈠姩瓒婃參 + scale: 3.5, // 鍔ㄧ敾涓尝绾圭殑鏈�澶х缉鏀炬瘮渚� + brushType: 'stroke' // 娉㈢汗鐨勭粯鍒舵柟寮� stroke fill + }, + label: { + show: false, + position: 'right', + formatter: '{b}', + color: '#97e9e1', + fontSize: 14 + }, + symbol: 'circle', + symbolSize: 8, + data: points, + tooltip: { + show: true, + backgroundColor: 'rgba(0,0,0,0)', + padding: 0, + borderWidth: 0, + extraCssText: 'box-shadow: 0 0 0 rgba(0, 0, 0, 0);', // 鍘婚櫎box-shadow闃村奖 + formatter: (params) => { + return `<div class="map-tip-box"> + <div class="item-state-con title"> + <div class="icon"></div> + <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.total}涓囨敮</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.yx}涓囨敮</span> + </span> + </div> + </div>` + } + }, + z: 4 + }, + // 鍦板浘绾跨殑鍔ㄧ敾鏁堟灉 + // { + // name: 'arrowline', + // type: 'lines', + // // zlevel: 1, + // effect: { + // show: true, + // period: 3, // 绠ご鎸囧悜閫熷害锛屽�艰秺灏忛�熷害瓒婂揩 + // trailLength: 0.1, // 鐗规晥灏捐抗闀垮害[0,1]鍊艰秺澶э紝灏捐抗瓒婇暱閲� + // symbol: 'arrow', // 绠ご鍥炬爣 + // symbolSize: 6 // 鍥炬爣澶у皬 + // }, + // lineStyle: { + // color: '#1DE9B6', + // width: 2, // 绾挎潯瀹藉害 + // opacity: 0.1, // 灏捐抗绾挎潯閫忔槑搴� + // curveness: 0.2 // 灏捐抗绾挎潯鏇茬洿搴� + // }, + // data: lineToLf, + // z: 3 + // } + ] + } + myChart.setOption(option) + window.addEventListener('resize', function () {//鎵ц + myChart.resize() + }) +} +const initEnergy = (list) => { + var myChart = echarts.init(document.querySelector('.energyRef')) + // 缁樺埗鍥捐〃 + myChart.setOption({ + tooltip: { + trigger: 'axis', + axisPointer: { + // Use axis to trigger tooltip + type: 'shadow' // 'shadow' as default; can also be 'line' or 'shadow' + } + }, + legend: { + itemGap: 24, + // icon: 'circle', + right: '12px', + top: '16px', + itemWidth: 28, + itemHeight: 14, + textStyle: { + color: '#fff', + borderColor: '#fff' + }, + }, + grid: { + left: '3%', + right: '4%', + bottom: '3%', + top: '15%', + containLabel: true + }, + xAxis: { + type: 'value', + splitLine: { + show: true, + lineStyle: { + //杩欓噷杈撳叆绾挎潯鐨勬牱寮� + color: 'rgba(255,255,255,0.14)' + }, + splitNumber: 4 + } + }, + yAxis: { + axisTick: { + show: false, + }, + type: 'category', + axisLine: { + show: false + }, + data: list.map(i => i.dateStr) + }, + series: [ + { + name: '鍦ㄩ��', + type: 'bar', + stack: 'total', + barWidth: 14, + label: { + show: true + }, + emphasis: { + focus: 'series' + }, + data: list.map(i => i.inTransitNum), + itemStyle: { + normal: { + color: { + type: 'linear', + x: 0, + y: 0, + x2: 1, + y2: 0, + colorStops: [{ + offset: 0, + color: '#204d75' + }, { + offset: 1, + color: '#2f6eae' + }] + } + } + }, + }, + { + name: '鍒拌揣', + type: 'bar', + barWidth: 14, + stack: 'total', + label: { + show: true + }, + itemStyle: { + normal: { + color: { + type: 'linear', + x: 0, + y: 0, + x2: 1, + y2: 0, + colorStops: [{ + offset: 0, + color: '#3e8593' + }, { + offset: 1, + color: '#5cc2d2' + }] + } + } + }, + emphasis: { + focus: 'series' + }, + data: list.map(i => i.arriveNum) + } + ] + }) + window.addEventListener('resize', function () {//鎵ц + myChart.resize() + }) +} +const getData1 = () => { + getStorearriveGoodsList().then(res => { + initEnergy(res.data || []) + }) +} + +const transportTask = ref([]) +const taskCode = ref('') +const getData2 = () => { + getStoreTaskList({ code: taskCode.value }).then(res => { + let temp = res.data || [] + temp = temp.splice(0, 5) + transportTask.value = temp.map(item => { + item.taskDate = item.taskDate.slice(5, 16) + return item + }) + }) +} + +const cneterData = ref({}) +const colors = ['#0193FE', '#FFB642'] +const StockOutData = ref([]) +const initEchart1 = () => { + const myChart = echarts.init(document.getElementById('echart1')) + const option = { + tooltip: { + trigger: 'item' + }, + series: [ + { + type: 'pie', + radius: ['72%', '96%'], + label: { + show: false, + position: 'center' + }, + color: colors, + labelLine: { + show: false + }, + data: StockOutData.value + } + ] + } + myChart.setOption(option) + window.addEventListener('resize', function () { // 鎵ц + myChart.resize() + }) +} +const getStockOut = () => { + let arr = [] + arr.push({ name: '鐪佸唴', value: (cneterData.value.yearProvinceRata * 100).toFixed(0) + '%' }) + arr.push({ name: '鐪佸', value: ((1 - cneterData.value.yearProvinceRata) * 100).toFixed(0) + '%' }) + arr.sort((a, b) => b.value - a.value) + StockOutData.value = arr + initEchart1() +} +const getData3 = () => { + getStorecenterData().then(res => { + cneterData.value = res.data || {} + getStockOut() + }) +} + +const activeTabs = ref(0) +const dataList4 = ref([]) const initEchart4 = () => { // 鍩轰簬鍑嗗濂界殑dom锛屽垵濮嬪寲echarts瀹炰緥 const myChart = echarts.init(document.getElementById('echart4')) @@ -311,29 +720,29 @@ myChart.setOption({ tooltip: { trigger: 'axis', + backgroundColor: '#091123', axisPointer: { type: 'line' }, - formatter: function (params) { - setTimeout(() => { - console.log('params', params) - }) - return ` - <div style="background-color: #091123;margin: -12px;padding: 14px;border: 2px solid rgba(1,217,254,0.5);color: #fff;"> - <div>${params[0].name}鎬婚攢鍞(涓囧厓)</div> - <div style="display: flex;align-items: center;"> - <div style="width: 10px;height: 10px;border-radius: 50%;background-color: #ebbf40;"></div> - <div style="margin: 0 4px 0 6px;">鎬婚攢鍞�</div> - <span style="color: #ebbf40;">${params[0].value}</span> - </div> - </div> - ` - } + // formatter: function (params) { + // setTimeout(() => { + // }) + // return ` + // <div style="background-color: #091123;margin: -12px;padding: 14px;border: 2px solid rgba(1,217,254,0.5);color: #fff;"> + // <div>${params[0].name}鎬婚攢鍞(涓囧厓)</div> + // <div style="display: flex;align-items: center;"> + // <div style="width: 10px;height: 10px;border-radius: 50%;background-color: #ebbf40;"></div> + // <div style="margin: 0 4px 0 6px;">鎬婚攢鍞�</div> + // <span style="color: #ebbf40;">${params[0].value}</span> + // </div> + // </div> + // ` + // } }, xAxis: { type: 'category', boundaryGap: false, - data: [1, 2, 3, 4, 5, 5] + data: dataList4.value.map(i => i.dateStr) }, yAxis: { type: 'value', @@ -351,6 +760,19 @@ splitNumber: 4 } }, + legend: { + itemGap: 24, + icon: 'rect', + right: '12px', + top: '0', + itemWidth: 16, + itemHeight: 2, + textStyle: { + color: '#fff', + borderColor: '#fff' + }, + data: ['鎬诲叆搴撻噺', '鎬诲嚭搴撻噺', '搴撳瓨閲�'] + }, grid: { top: '18%', left: '0%', @@ -358,16 +780,13 @@ bottom: '2%', containLabel: true }, - legend: { - data: ['鎬诲叆搴撻噺', '鎬诲嚭搴撻噺'] - }, series: [ { name: '鎬诲叆搴撻噺', - data: [10, 2, 30, 4, 4, 30].map(i => { + data: dataList4.value.map(item => { return { - name: i, - value: i, + name: item.dateStr, + value: item.totalInNum, } }), type: 'line', @@ -411,20 +830,20 @@ width: 1.5, // 绾挎潯绮楃粏 }, symbol: 'circle', - symbolSize: 10, + symbolSize: 4, itemStyle: { - normal: { - color: '#4191f6', //鎶樼嚎鐐圭殑棰滆壊 - }, + color: "#4190f4", + borderColor: "rgba(255,255,255,.3)", + borderWidth: 4, }, smooth: true }, { name: '鎬诲嚭搴撻噺', - data: [30, 2, 10, 4, 4, 20].map(i => { + data: dataList4.value.map(item => { return { - name: i, - value: i, + name: item.dateStr, + value: item.totalOutNum, } }), type: 'line', @@ -462,14 +881,65 @@ width: 2, // 绾挎潯绮楃粏 }, symbol: 'circle', - symbolSize: 10, + symbolSize: 4, itemStyle: { - normal: { - color: '#F3BD00', //鎶樼嚎鐐圭殑棰滆壊 - }, + color: "#F3BD00", + borderColor: "rgba(255,255,255,.3)", + borderWidth: 4, }, smooth: true - } + }, + { + name: '搴撳瓨閲�', + data: dataList4.value.map(item => { + return { + name: item.dateStr, + value: item.stockNum, + } + }), + type: 'line', + areaStyle: { + normal: { + color: { + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [{ + offset: 0, + color: "rgba(218, 233, 250)" // 0% 澶勭殑棰滆壊 + }, { + offset: 1, + color: "#1b1b12" // 100% 澶勭殑棰滆壊 + }], + globalCoord: false // 缂虹渷涓� false + } + } + }, + lineStyle: { // 绾挎潯鏍峰紡 + color: { + type: 'linear', + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [{ + offset: 0, color: '#fff' // 0% 澶勭殑棰滆壊 + }, { + offset: 1, color: '#fff' // 100% 澶勭殑棰滆壊 + }], + }, + width: 2, // 绾挎潯绮楃粏 + }, + symbol: 'circle', + symbolSize: 4, + itemStyle: { + color: "#fff", + borderColor: "rgba(255,255,255,.3)", + borderWidth: 4, + }, + smooth: true + }, ] }) @@ -477,212 +947,243 @@ myChart.resize() }) } +const tabsClick4 = (tab) => { + activeTabs.value = tab + getData4() +} +const getData4 = () => { // 杩涢攢瀛樿繍钀� + getStoreOperationList({ queryType: activeTabs.value }).then(res => { + console.log('res', res) + dataList4.value = res.data || [] + initEchart4() + }) +} + +const dataList5 = ref([]) const initEchart5 = () => { // 鍩轰簬鍑嗗濂界殑dom锛屽垵濮嬪寲echarts瀹炰緥 const myChart = echarts.init(document.getElementById('echart5')) // 缁樺埗鍥捐〃 myChart.setOption({ - tooltip: { - trigger: 'axis', - axisPointer: { - type: 'cross', - crossStyle: { - color: '#999' - } - } - }, - toolbox: { - feature: { - dataView: { show: true, readOnly: false }, - magicType: { show: true, type: ['line', 'bar'] }, - restore: { show: true }, - saveAsImage: { show: true } - } - }, legend: { - data: ['Evaporation', 'Precipitation', 'Temperature'] + itemGap: 12, + // icon: 'circle', + right: '12px', + top: '0', + data: ['鎬诲簱瀛�', '褰撳墠搴撳瓨', '搴撳瓨鍒╃敤鐜�'], + itemWidth: 20, + itemHeight: 10, + textStyle: { + color: '#fff', + borderColor: '#fff' + }, }, - xAxis: [ - { - type: 'category', - data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], - axisPointer: { - type: 'shadow' - } - } - ], - yAxis: [ - { - type: 'value', - name: 'Precipitation', - min: 0, - max: 250, - interval: 50, - axisLabel: { - formatter: '{value} ml' - } - }, - { - type: 'value', - name: 'Temperature', - min: 0, - max: 25, - interval: 5, - axisLabel: { - formatter: '{value} 掳C' - } - } - ], - series: [ - { - name: 'Evaporation', - type: 'bar', - tooltip: { - valueFormatter: function (value) { - return value + ' ml' - } - }, - data: [ - 2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3 - ] - }, - { - name: 'Precipitation', - type: 'bar', - tooltip: { - valueFormatter: function (value) { - return value + ' ml' - } - }, - data: [ - 2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3 - ] - }, - { - name: 'Temperature', - type: 'line', - yAxisIndex: 1, - tooltip: { - valueFormatter: function (value) { - return value + ' 掳C' - } - }, - data: [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2] - } - ] - }) - - window.addEventListener('resize', function () {//鎵ц - myChart.resize() - }) -} - -const arr = ['#68e2e3', '#50afd3', '#377cdb', '#d5ae3a'] -const initEnergy = () => { - var myChart = echarts.init(document.querySelector('.energyRef')) - // 缁樺埗鍥捐〃 - const arr = ['#68e2e3', '#50afd3', '#377cdb', '#d5ae3a'] - myChart.setOption({ grid: { - top: '20%', - left: '2%', - right: '2%', - bottom: '4%', + left: '3%', + right: '0%', + bottom: '3%', + top: '24%', containLabel: true }, tooltip: { - trigger: 'axis', - axisPointer: { - type: 'line' - }, + trigger: 'axis' }, - xAxis: { + xAxis: [{ + nameGap: 5, type: 'category', - data: [1, 2, 3, 4, 4, 5] - }, - yAxis: { - type: 'value', - name: 'kw路h', - nameTextStyle: { - padding: [0, 0, 4, -30] // 鍥涗釜鏁板瓧鍒嗗埆涓轰笂鍙充笅宸︿笌鍘熶綅缃窛绂� - }, - splitLine: { + axisLine: { show: true, lineStyle: { - //杩欓噷杈撳叆绾挎潯鐨勬牱寮� - color: 'rgba(255,255,255,0.14)', - } + color: '#999' + }, + }, + axisLabel: { + color: '#869CC9' + // fontSize: 24, + }, + axisTick: { + show: false, + }, + data: dataList5.value.map(i => i.placeName), + }], + yAxis: [ + { + nameTextStyle: { + color: '#869CC9', + }, + offset: 0, + name: '涓囨敮', + type: 'value', + axisLabel: { + show: true, + color: "#869CC9", + }, + axisLine: { + show: true, + }, + splitLine: { + show: true, + lineStyle: { + width: 1, + color: "rgba(49,105,129,0.4)", + type: 'dashed' + } + }, + }, + { + type: 'value', + name: '%', + min: 0, + max: 100, + // interval: 5, + axisLabel: { + formatter: '{value}' + }, + splitLine: false } - }, + ], series: [ { - data: [1, 2, 3, 4, 5], + name: '鎬诲簱瀛�', type: 'bar', - barWidth: 10, + barWidth: 8, + barGap: '60%', + label: { + show: false, + position: 'top', + color: '#fff', + }, itemStyle: { - normal: { - color: new echarts.graphic.LinearGradient( - 0, 0, 0, 1, - [ - { offset: 0, color: arr[1] }, - { offset: 1, color: '#080807' } - ] - ), - barBorderRadius: [10, 10, 0, 0] - } - } + color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ + { + offset: 0, + color: '#5bc7d5' + }, + { + offset: 1, + color: '#1a3f55' + } + ], false), + lineStyle: { + width: 1, + type: 'solid' + }, + barBorderRadius: [30, 30, 0, 0], + }, + data: dataList5.value.map(i => i.totalStockNum) + }, + { + name: '褰撳墠搴撳瓨', + type: 'bar', + barWidth: 8, + label: { + show: false, + position: 'top', + color: '#fff', + }, + itemStyle: { + color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ + { + offset: 0, + color: '#edaf3d' + }, + { + offset: 1, + color: '#323522' + } + ], false), + lineStyle: { + width: 1, + type: 'solid' + }, + barBorderRadius: [30, 30, 0, 0], + }, + data: dataList5.value.map(i => i.nowStockNum) + }, + { + name: '搴撳瓨鍒╃敤鐜�', + type: 'line', + smooth: true, + showAllSymbol: true, + symbol: 'none', + lineStyle: { + color: "#3d87e5" + }, + label: { + show: false, + position: 'top', + color: '#fff', + }, + data: dataList5.value.map(i => i.stockRataNum) } ] }) + window.addEventListener('resize', function () {//鎵ц myChart.resize() }) } -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 getData5 = () => { + getStoreenergyDataList({ queryType: activeTabs.value }).then(res => { + console.log('res', res) + dataList5.value = res.data || [] + initEchart5() }) } +const initData = () => { + getData1() + getData2() + getData3() + getData4() + getData5() +} + onMounted(() => { - initEnergy() - getStockOut() - initEchart2() - initEchart3() - initEchart4() - initEchart5() + initData() + + initMap() + // initEchart2() + // initEchart3() + // initEchart4() + // initEchart5() }) </script> +<style lang="scss"> +.map-tip-box { + background-color: rgba(6, 25, 48, .8); + padding: 10px 30px; + padding-left: 20px; + border-radius: 4px; + backdrop-filter: blur(10px); + color: #D2E0FF; + font-size: 12px; + border: 1px solid #D2E0FF; + .icon { + width: 12px; + height: 14px; + background-image: url('@/assets/images/FireFighting/ic_location@2x.png'); + background-repeat: no-repeat; + background-position: center; + background-size: cover; + margin-right: 6px; + } + + .title { + font-size: 14px; + font-weight: 600; + display: flex; + align-items: center + } + + .item-state-con { + margin-bottom: 6px; + } +} +</style> <style lang="scss" scoped> div { box-sizing: border-box; @@ -698,7 +1199,6 @@ .left_box_one { margin-top: 20px; padding: 0px 10px 30px 20px; - border: 1px solid; .content_wrap { display: flex; @@ -786,11 +1286,17 @@ .left_box_two { margin-bottom: 20px; - border: 1px solid; + position: relative; + + .second_title { + position: absolute; + top: 14px; + left: 20px; + } .energy_wrap { width: 100%; - height: 250px; + height: 300px; .energyRef { width: 100%; @@ -802,7 +1308,6 @@ .left_box_three { width: 440px; padding: 0 15px; - border: 1px solid; .second_title { margin-bottom: 10px; @@ -821,11 +1326,12 @@ } .item { - flex: 1; + flex: 4; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } + } .header { @@ -839,13 +1345,15 @@ .center_box { flex: 1; padding: 0 20px; - margin: 0 40px; + margin: 0 20px; + display: flex; + flex-direction: column; .center_box_one { background: rgba(255, 255, 255, 0.02); height: 230px; border-top: 2px solid #306ba1; - padding-top: 20px; + padding: 20px 20px 0; .header_wrap { display: flex; @@ -853,6 +1361,12 @@ margin-bottom: 28px; font-weight: bold; font-size: 18px; + position: relative; + &:hover{ + .select_op{ + display: block; + } + } background-image: -webkit-linear-gradient(top, #ffffff 0%, #c8ddff 66%, @@ -884,6 +1398,23 @@ .icon { width: 14px; margin-left: 2px; + } + } + .select_op{ + position: absolute; + top: 26px; + right: 0px; + width: 90px; + z-index: 11; + display: none; + background: radial-gradient( 64% 83% at 50% 50%, rgba(19,88,173,0.8) 0%, rgba(5,18,32,0.86) 100%); + .line{ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + cursor: pointer; + color: #fff; } } } @@ -964,7 +1495,14 @@ .center_box_two { width: 100%; - border: 1px solid; + flex: 1; + + /* border: 1px solid; */ + .echart_map { + width: 100%; + height: 100%; + /* transform: scale(.2); */ + } } } @@ -1251,11 +1789,17 @@ height: 28px; border-radius: 14px; border: 1px solid #869CC9; + padding-left: 8px; + margin-right: 12px; img { width: 14px; height: 14px; margin-right: 3px; + } + + .input { + flex: 1; } } @@ -1265,6 +1809,10 @@ font-size: 14px; color: #d2e0ff; + .tab { + cursor: pointer; + } + .separate { width: 1px; height: 14px; -- Gitblit v1.9.3