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