From 38a50cb176a78aa5bf5b9f550eb1aab520b402a6 Mon Sep 17 00:00:00 2001 From: ZhangXianQiang <1135831638@qq.com> Date: 星期四, 07 三月 2024 14:53:43 +0800 Subject: [PATCH] fix:图片修改 --- src/views/daoAnOffice/right/analysis/index.vue | 397 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 391 insertions(+), 6 deletions(-) diff --git a/src/views/daoAnOffice/right/analysis/index.vue b/src/views/daoAnOffice/right/analysis/index.vue index 394c160..04adfe9 100644 --- a/src/views/daoAnOffice/right/analysis/index.vue +++ b/src/views/daoAnOffice/right/analysis/index.vue @@ -1,27 +1,372 @@ <!-- 浜ら�氬畨鍏ㄥ舰鍔跨爺鍒ゅ垎鏋� --> + <template> <RightTitle title="浜ら�氬畨鍏ㄥ舰鍔跨爺鍒ゅ垎鏋�"> <template #top> <div class="select-container flex"> - <div class="item whitespace-no-wrap cursor-pointer" v-for="item in selectItems" :key="item.itemIndex"> + <div class="item whitespace-no-wrap cursor-pointer" :class="{ 'select-active': item.isActive }" + v-for="item in selectItems" :key="item.itemIndex" @click="changeChart(item)"> {{ item.name }} </div> </div> </template> + <template #content> - <div id="analysisChart"></div> + <div class="charts-container"> + <div id="analysisChart" ref="analysisChart"></div> + <div class="type-select-container" v-show="isShowSelect"> + <el-select v-model="typeValue" class="select-style" @change="setConfig"> + <el-option v-for="item in testData1" :key="item.name" :label="item.name" :value="item.name" /> + </el-select> + </div> + </div> </template> </RightTitle> </template> <script setup> import RightTitle from "@/components/right-title"; -import { ref } from 'vue'; +import * as echarts from 'echarts'; +import { ref, onMounted } from 'vue'; + +// dom +const analysisChart = ref(null); + +// echart瀹炰緥 +let echartObject = null; + +// type閫夋嫨 +const typeValue = ref(''); + +// 鏄惁鏄剧ず涓嬫媺妗� +const isShowSelect = ref(true); + + const selectItems = ref([ - { itemIndex: 1, name: '鏃堕棿缁熻', isActive: false }, - { itemIndex: 2, name: '琛楅亾缁熻', isActive: true }, + { itemIndex: 1, name: '鏃堕棿缁熻', isActive: true }, + { itemIndex: 2, name: '琛楅亾缁熻', isActive: false }, ]); + +const testData = ref([ + { name: '濂庡厜濉旇閬�', state1: 1400, state2: 3533, state3: 2316 }, + { name: '钂查槼琛楅亾', state1: 1820, state2: 4281, state3: 3064 }, + { name: '鑱氭簮闀�', state1: 972, state2: 2124, state3: 1500 }, + { name: '閾舵潖琛楅亾', state1: 1109, state2: 2876, state3: 1500 }, + { name: '鐭崇緤闀�', state1: 972, state2: 2124, state3: 1500 }, + { name: '榫欐睜闀�', state1: 972, state2: 2124, state3: 1500 }, + { name: '澶╅┈闀�', state1: 972, state2: 4000, state3: 1500 }, + { name: '鐜夊爞琛楅亾', state1: 972, state2: 2878, state3: 1500 }, + { name: '鐏屽彛琛楅亾', state1: 972, state2: 2124, state3: 1500 }, +]); + +const testData1 = ref([ + { + name: '閮芥睙鍫板競', + state: { '2023-1': 1000, '2023-2': 2000, '2023-3': 1233, '2023-4': 2132, '2023-5': 2999 }, + state2: { '2023-1': 12312, '2023-2': 2312, '2023-3': 2111, '2023-4': 2132, '2023-5': 2999 } + }, + { + name: '濂庡厜濉旇閬�', + state: { '2023-1': 21, '2023-2': 12, '2023-3': 224, '2023-4': 662, '2023-5': 71 }, + state2: { '2023-1': 12312, '2023-2': 21, '2023-3': 2111, '2023-4': 2132, '2023-5': 2999 } + }, + { + name: '钂查槼琛楅亾', + state: { '2023-1': 1000, '2023-2': 2131, '2023-3': 1233, '2023-4': 2132, '2023-5': 3211 }, + state2: { '2023-1': 12312, '2023-2': 23123, '2023-3': 2111, '2023-4': 2132, '2023-5': 2999 } + }, + { + name: '鑱氭簮闀�', + state: { '2023-1': 1000, '2023-2': 500, '2023-3': 1111, '2023-4': 2132, '2023-5': 2999 }, + state2: { '2023-1': 12312, '2023-2': 2222, '2023-3': 2111, '2023-4': 2132, '2023-5': 2999 } + }, + { + name: '閾舵潖琛楅亾', + state: { '2023-1': 1000, '2023-2': 2000, '2023-3': 1233, '2023-4': 2132, '2023-5': 12 }, + state2: { '2023-1': 1231, '2023-2': 121, '2023-3': 123, '2023-4': 321, '2023-5': 2999 } + }, + { + name: '鐭崇緤闀�', + state: { '2023-1': 1000, '2023-2': 8334, '2023-3': 1233, '2023-4': 123, '2023-5': 0 }, + state2: { '2023-1': 12312, '2023-2': 512, '2023-3': 241, '2023-4': 2132, '2023-5': 2999 } + }, +]); +let acitveData = ref(testData1.value[0]); + + +// 鍦嗘煴鍥捐〃 +const barConfig = ref({ + legend: { + right: '0', + icon: 'circle', + textStyle: { + color: 'rgba(77, 118, 176, 1)' + }, + data: [ + { + name: '閱夐┚', + itemStyle: { + color: 'rgba(0, 168, 217, 1)' + } + }, + { + name: '閰掗┚', + itemStyle: { + color: 'rgba(207, 178, 73, 1)' + } + }, + { + name: '鍏朵粬', + itemStyle: { + color: 'rgba(43, 176, 109, 1)' + } + }, + ] + + }, + tooltip: {}, + grid: { + left: 0, + right: 0, + bottom: 0, + top: '15%', + containLabel: true + }, + dataset: { + dimensions: ['name', 'state1', 'state2', 'state3'], + source: testData.value + }, + xAxis: { + type: 'category', + axisTick: false, + axisLabel: { + fontSize: 14, + color: '#4D76B0', + margin: 15 + }, + axisLine: { + lineStyle: { + color: '#4d76b033' + } + } + }, + yAxis: { + axisLabel: { + fontSize: 14, + color: '#4D76B0', + }, + splitLine: { + lineStyle: { + color: '#4d76b033' + } + } + }, + series: [ + { + type: 'bar', + name: '閱夐┚', + barWidth: 13, + barGap: '50%', + label: { + show: true, // 鏄剧ず鏍囩 + position: 'top', // 鏍囩浣嶇疆 + color: 'rgba(0, 168, 217, 1)', // 鏍囩棰滆壊 + fontSize: 10, + }, + itemStyle: { + // 璁剧疆娓愬彉鑹� + color: new echarts.graphic.LinearGradient( + 0, 1, 0, 0, + [ + { offset: 0, color: 'rgba(14, 32, 54, 1)' }, // 0% 澶勭殑棰滆壊 + { offset: 1, color: 'rgba(0, 168, 217, 1)' } // 100% 澶勭殑棰滆壊 + ] + ) + }, + }, + { + type: 'bar', + name: '閰掗┚', + barWidth: 13, + barGap: '50%', + label: { + show: true, // 鏄剧ず鏍囩 + position: 'top', // 鏍囩浣嶇疆 + color: 'rgba(207, 178, 73, 1)', // 鏍囩棰滆壊 + fontSize: 10, + }, + itemStyle: { + // 璁剧疆娓愬彉鑹� + color: new echarts.graphic.LinearGradient( + 0, 1, 0, 0, + [ + { offset: 0, color: 'rgba(14, 31, 53, 1)' }, // 0% 澶勭殑棰滆壊 + { offset: 1, color: 'rgba(207, 178, 73, 1)' } // 100% 澶勭殑棰滆壊 + ] + ) + }, + }, + { + type: 'bar', + name: '鍏朵粬', + barWidth: 13, + barGap: '50%', + label: { + show: true, // 鏄剧ず鏍囩 + position: 'top', // 鏍囩浣嶇疆 + color: 'rgba(43, 176, 109, 1)', // 鏍囩棰滆壊 + fontSize: 10, + }, + itemStyle: { + // 璁剧疆娓愬彉鑹� + color: new echarts.graphic.LinearGradient( + 0, 1, 0, 0, + [ + { offset: 0, color: 'rgba(14, 31, 53, 1)' }, // 0% 澶勭殑棰滆壊 + { offset: 1, color: 'rgba(43, 176, 109, 1)' } // 100% 澶勭殑棰滆壊 + ] + ) + }, + }, + ] +}); + + +// line閰嶇疆 +const lineConfig = ref(null); + + + +// 鍥捐〃鏇存崲 +const changeChart = (selectItem) => { + selectItems.value.map(item => item.isActive = false); + selectItem.isActive = true; + if (selectItem.itemIndex == 1) { + echartObject.setOption(lineConfig.value, true); + isShowSelect.value = true; + } else { + echartObject.setOption(barConfig.value, true); + isShowSelect.value = false; + } +} + +// 閰嶇疆鏁版嵁 +const setConfig = () => { + acitveData.value = testData1.value.find((item) => item.name === typeValue.value); + lineConfig.value = { + legend: { + right: '12%', + icon: 'circle', + textStyle: { + color: 'rgba(77, 118, 176, 1)' + }, + data: [ + { + + name: '閰掗┚', + itemStyle: { + color: 'rgba(207, 178, 73, 1)' + } + }, + { + name: '鍏朵粬', + itemStyle: { + color: 'rgba(43, 176, 109, 1)' + } + }, + ], + }, + tooltip: { + show: true, + trigger: 'axis', + backgroundColor: '#000001cc', + borderWidth: 0, + textStyle: { + color: '#4D76B0', + fontSize: 16 + }, + axisPointer: { + type: 'shadow', + lable: { + color: '#000000' + } + }, + padding: [20, 25], + formatter: function (params) { + let temp = params[0].name + '<br/>'; + params.forEach(element => { + temp += element.seriesName + ':' + `<span style="color:${element.componentIndex === 1 ? '#2bb06d' : '#cfb249'}">${element.value}</span>` + '<br/>'; + }); + return temp; + } + }, + grid: { + left: 0, + right: 0, + bottom: 0, + top: '15%', + containLabel: true + }, + xAxis: { + type: 'category', + data: Object.keys(acitveData.value.state), + axisLabel: { + fontSize: 14, + color: '#4D76B0', + margin: 15 + }, + + axisTick: false, + axisLine: { + lineStyle: { + color: '#4d76b033' + } + } + }, + yAxis: { + type: 'value', + axisLabel: { + fontSize: 14, + color: '#4D76B0' + }, + splitLine: { + lineStyle: { + color: '#4d76b033' + } + } + }, + series: [ + { + name: '閰掗┚', + data: Object.entries(acitveData.value.state).map(([key, value]) => value), + type: 'line', + smooth: true, + itemStyle: { + color: 'rgba(207, 178, 73, 1)' + } + }, + { + name: '鍏朵粬', + data: Object.entries(acitveData.value.state2).map(([key, value]) => value), + type: 'line', + smooth: true, + itemStyle: { + color: 'rgba(43, 176, 109, 1)' + } + } + ] + } + echartObject.setOption(lineConfig.value, true); +} + + +// 鎸傝浇 +onMounted(() => { + echartObject = echarts.init(analysisChart.value); + typeValue.value = testData1.value[0].name; + setConfig(); +}) </script> <style lang="scss" scoped> @@ -32,13 +377,53 @@ .item { margin: 0 8px; padding: 10px 14px; - font-size: 12px; + font-size: 14px; background: rgba(67, 102, 155, 0.4); border: 1px solid rgba(47, 91, 157, 0.8); flex-shrink: 0; + color: #5B83BD; + font-family: 'PingFang SC'; +} + +.select-active { + color: #fff; } .item:last-child { margin-right: 0; } + +.charts-container { + width: 100%; + height: 280px; + padding: 20px; + background-color: rgba(17, 34, 58, 0.6); + border: 1px solid rgba(47, 91, 157, 0.8); + position: relative; +} + +.type-select-container { + position: absolute; + right: 20px; + top: 14px; + width: 120px; + height: 23px; +} + +#analysisChart { + width: 100%; + height: 100%; + box-sizing: border-box; +} + +::v-deep .el-input.el-input--suffix { + .el-input__wrapper { + background: rgba(67, 102, 155, 0.4) !important; + border: 1px solid rgba(47, 91, 157, 0.8); + } + + .el-input__inner { + color: #4481DD; + } +} </style> \ No newline at end of file -- Gitblit v1.8.0