From 1046f687b35cdcdbafab6e0bbb17cbb3d1982a8b Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期四, 07 三月 2024 10:47:06 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/views/home/data-chart/index.vue | 219 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 219 insertions(+), 0 deletions(-) diff --git a/src/views/home/data-chart/index.vue b/src/views/home/data-chart/index.vue new file mode 100644 index 0000000..2421e0a --- /dev/null +++ b/src/views/home/data-chart/index.vue @@ -0,0 +1,219 @@ +<template> + <div class="data-chart-container"> + <el-card class="data-card" :body-style="{ height: '100%' }"> + <div class="card-content"> + <div class="title-container"> + <h1>杩愮淮鐩戞帶鎶ヨ〃</h1> + <div class="select-container"> + <el-select v-model="company" placeholder="璇烽�夋嫨杩愮淮鍏徃" @change="companyChange"> + <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> + </el-option> + </el-select> + </div> + <div class="date-container"> + <el-date-picker v-model="dateRange" type="daterange" range-separator="鑷�" start-placeholder="寮�濮嬫棩鏈�" + end-placeholder="缁撴潫鏃ユ湡"> + </el-date-picker> + </div> + </div> + <div class="chart-container"> + <div id="chartContent" ref="chartContent"></div> + </div> + </div> + </el-card> + </div> +</template> + +<script> +import * as echarts from 'echarts'; +let lineChart = null; +let observer = null; +export default { + name: 'DataChart', + data() { + return { + dateRange: '', + company: '', + options: [ + { label: 'XX杩愮淮鍏徃1', value: 'XX杩愮淮鍏徃1' }, + { label: 'XX杩愮淮鍏徃2', value: 'XX杩愮淮鍏徃2' }, + { label: 'XX杩愮淮鍏徃3', value: 'XX杩愮淮鍏徃3' }, + { label: 'XX杩愮淮鍏徃4', value: 'XX杩愮淮鍏徃4' }, + ], + dataList: [ + { + name: 'XX杩愮淮鍏徃1', + state: { '1鏈�': 1000, '2鏈�': 2131, '3鏈�': 1233, '4鏈�': 2132, '5鏈�': 3211 }, + state2: { '1鏈�': 123, '2鏈�': 213, '3鏈�': 1412, '4鏈�': 23, '5鏈�': 123 } + }, + { + name: 'XX杩愮淮鍏徃2', + state: { '1鏈�': 213, '2鏈�': 2131, '3鏈�': 1233, '4鏈�': 2132, '5鏈�': 3211 }, + state2: { '1鏈�': 123, '2鏈�': 123, '3鏈�': 1412, '4鏈�': 23, '5鏈�': 123 } + }, + { + name: 'XX杩愮淮鍏徃3', + state: { '1鏈�': 1000, '2鏈�': 2131, '3鏈�': 1233, '4鏈�': 2132, '5鏈�': 3211, '6鏈�': 1321 }, + state2: { '1鏈�': 123, '2鏈�': 213, '3鏈�': 123, '4鏈�': 23, '5鏈�': 123 } + }, + { + name: 'XX杩愮淮鍏徃4', + state: { '1鏈�': 1000, '2鏈�': 2131, '3鏈�': 1233, '4鏈�': 2132, '5鏈�': 3211 }, + state2: { '1鏈�': 123, '2鏈�': 613, '3鏈�': 1412, '4鏈�': 2336, '5鏈�': 123 } + }, + { + name: 'XX杩愮淮鍏徃5', + state: { '1鏈�': 1000, '2鏈�': 433, '3鏈�': 1233, '4鏈�': 2132, '5鏈�': 8886 }, + state2: { '1鏈�': 123, '2鏈�': 213, '3鏈�': 1412, '4鏈�': 23, '5鏈�': 123 } + }, + ], + } + }, + methods: { + initChart() { + const option = { + legend: { + right: '2%', + top: '5%', + icon: 'rect', + data: [ + { + + name: '姝e父鏁�', + itemStyle: { + color: 'rgba(62, 144, 247, 1)' + } + }, + { + name: '寮傚父鏁�', + itemStyle: { + color: 'rgba(85, 192, 191, 1)' + } + }, + ], + }, + grid: { + left: 0, + right: 0, + bottom: 0, + top: '20%', + containLabel: true + }, + tooltip: {}, + xAxis: { + type: 'category', + data: Object.keys(this.acitveData.state), + }, + yAxis: {}, + series: [ + { + name: '姝e父鏁�', + data: Object.entries(this.acitveData.state).map(([key, value]) => value), + type: 'line', + itemStyle: { + color: 'rgba(62, 144, 247, 1)' + } + }, + { + name: '寮傚父鏁�', + data: Object.entries(this.acitveData.state2).map(([key, value]) => value), + type: 'line', + itemStyle: { + color: 'rgba(85, 192, 191, 1)' + } + } + ] + }; + lineChart.setOption(option, true); + }, + + + companyChange() { + this.acitveData = this.dataList.find((item) => { + return item.name === this.company; + }); + if (this.acitveData) { + this.initChart(); + } + }, + + // 鐩戝惉鍙樺寲 + observe() { + if (!observer) { + observer = new ResizeObserver(entries => { + this.handleResize(); + }) + } + observer.observe(this.$refs.chartContent); + }, + // 绐楀彛鍙樻崲 + handleResize() { + if (lineChart) { + lineChart.resize(); + } + } + + }, + mounted() { + this.acitveData = this.dataList[0]; + this.company = this.acitveData.name; + lineChart = echarts.init(this.$refs.chartContent); + this.initChart(); + this.observe(); + }, + beforeDestroy() { + if (lineChart) { + lineChart.dispose(); + observer.unobserve(this.$refs.chartContent); + } + }, +} +</script> + +<style lang="scss" scoped> +.data-chart-container { + height: 400px; + margin-bottom: 20px; + + .data-card { + height: 100%; + + .card-content { + width: 100%; + height: 100%; + position: relative; + } + } +} + +.title-container { + position: absolute; + display: flex; + justify-content: space-between; + align-items: center; + z-index: 2; + + + .more-button { + cursor: pointer; + font-size: 16px; + padding: 0 10px; + } +} + +.chart-container { + + width: 100%; + height: 100%; + + #chartContent { + width: 100%; + height: 100%; + } +} + +.select-container { + margin: 0 20px; + width: 180px; +} +</style> \ No newline at end of file -- Gitblit v1.8.0