From aa05304d221b1883d746e686f390d6f3fba598a7 Mon Sep 17 00:00:00 2001
From: ZhangXianQiang <1135831638@qq.com>
Date: 星期五, 24 五月 2024 09:36:09 +0800
Subject: [PATCH] feat:动态数据中心

---
 src/views/home/data-view/index.vue |  202 ++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 155 insertions(+), 47 deletions(-)

diff --git a/src/views/home/data-view/index.vue b/src/views/home/data-view/index.vue
index f92b236..01aa966 100644
--- a/src/views/home/data-view/index.vue
+++ b/src/views/home/data-view/index.vue
@@ -5,43 +5,65 @@
         <h1 class="title">杩愮淮鎶ヨ〃</h1>
       </el-col>
     </el-row>
-    <el-row :gutter="20" class="data-plane">
-      <el-col :xs='24' :md="6" :xl="{ span: '4-8' }" :sm="12" v-for="item, index in dataList" :key="item.id">
-        <div class="col-content">
-          <el-card>
-            <el-row type="flex" align="middle" justify="space-between">
-              <el-col :xl="8" :lg="8" :md="10" :sm="8" :xs="6">
-                <div class="icon-container" :style="{ backgroundColor: iconList[index].color }">
-                  <i :class="iconList[index].icon" class="icon-font"></i>
-                </div>
-              </el-col>
-              <el-col :xl="14" :lg="14" :md="12" :sm="14" :xs="16">
-                <div class="data-info">
-                  <div class="data-num">{{ item.num }}</div>
-                  <div class="data-lable">{{ item.type }}</div>
-                </div>
-              </el-col>
-            </el-row>
-          </el-card>
-        </div>
-      </el-col>
 
-    </el-row>
+
+    <el-card class="map-wrapper">
+      <el-row>
+        <el-col :span="5">
+          <div class="select-container">
+            <div class="select-label">
+              鏁版嵁婧�
+            </div>
+            <el-select v-model="selectOption" placeholder="璇烽�夋嫨">
+              <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
+              </el-option>
+            </el-select>
+          </div>
+
+        </el-col>
+        <el-col :offset="17" :span="2">
+          <el-button type="primary" @click="toScreen">鍙鍖栧ぇ灞�</el-button>
+        </el-col>
+      </el-row>
+      <el-row :gutter="40" class="data-plane" style="height: 100%;">
+        <el-col :xs='24' :md="24" :sm="24" :lg="6" :xl="6" style="height: 100%;">
+          <data-icon :activeData="activeData"></data-icon>
+        </el-col>
+        <el-col :xs='24' :md="24" :sm="24" :lg="12" :xl="12" style="height: 100%;">
+          <data-map @filterData="filterData"></data-map>
+        </el-col>
+        <el-col :xs='24' :md="24" :sm="24" :lg="6" :xl="6" style="height: 100%;">
+          <data-hola :activeData="activeData"></data-hola>
+        </el-col>
+      </el-row>
+    </el-card>
+
   </div>
-
 </template>
 
 <script>
+// import DataPlane from './components/data-plane.vue';
+
+import DataMap from './components/data-map.vue';
+import DataIcon from './components/data-icon.vue';
+import DataHola from './components/data-hola.vue';
+
 export default {
   name: 'DataView',
+  components: {
+    DataMap,
+    DataIcon,
+    DataHola,
+    // DataPlane
+  },
   data() {
     return {
       dataList: [
         { id: 1, type: '宸ュ崟鏁�', num: 523, },
         { id: 2, type: '鎭㈠鏁�', num: 50, },
         { id: 3, type: '寰呮仮澶嶆暟', num: 523, },
-        { id: 4, type: '浜х敓杩濈害浜嬮」鏁�', num: 123, },
-        { id: 5, type: '浜х敓杩濈害璐d换涔�', num: 512323, },
+        { id: 4, type: '瓒呮湡鏈鐞嗘暟', num: 123, },
+        { id: 5, type: '瓒呮湡璐d换鏁�', num: 512323, },
       ],
       iconList: [
         { icon: 'el-icon-tickets', color: '#7868d9' },
@@ -49,8 +71,103 @@
         { icon: 'el-icon-edit', color: '#3da7f8' },
         { icon: 'el-icon-warning', color: '#ffbe40' },
         { icon: 'el-icon-error', color: '#fe640d' },
-      ]
+      ],
+      totalList: [
+        {
+          "name": "鑽e幙",
+          "data1": 3,
+          "data2": 82,
+          "data3": 5,
+          "data4": 95,
+          "data5": 50
+        },
+        {
+          "name": "璐′簳鍖�",
+          "data1": 1,
+          "data2": 94,
+          "data3": 38,
+          "data4": 60,
+          "data5": 87
+        },
+        {
+          "name": "鑷祦浜曞尯",
+          "data1": 15,
+          "data2": 57,
+          "data3": 81,
+          "data4": 77,
+          "data5": 85
+        },
+        {
+          "name": "娌挎哗鍖�",
+          "data1": 8,
+          "data2": 7,
+          "data3": 60,
+          "data4": 77,
+          "data5": 43
+        },
+        {
+          "name": "瀵岄『鍘�",
+          "data1": 40,
+          "data2": 75,
+          "data3": 50,
+          "data4": 69,
+          "data5": 79
+        },
+        {
+          "name": "澶у畨鍖�",
+          "data1": 68,
+          "data2": 38,
+          "data3": 27,
+          "data4": 43,
+          "data5": 95
+        }
+      ],
+      activeData: { name: '鑷础甯�', data1: 0, data2: 0, data3: 0, data4: 0, data5: 0 },
+      options: [
+        {
+          value: 1,
+          label: '鐪佸巺鏁版嵁'
+        },
+        {
+          value: 2,
+          label: '甯傚眬鏁版嵁'
+        },
+        {
+          value: 3,
+          label: '鍏畨閮ㄦ暟鎹�'
+        },
+      ],
+      selectOption: 1
     }
+  },
+  methods: {
+    filterData(name) {
+      if (name) {
+        this.activeData = this.totalList.find(item => item.name === name);
+      } else {
+        this.countTotal();
+      }
+
+    },
+    countTotal() {
+      let data = {};
+      this.totalList.forEach((item) => {
+        Object.keys(item).forEach((key) => {
+          data[key] = data[key] ? data[key] + item[key] : item[key];
+        });
+      });
+      data.name = '鑷础甯�';
+      this.activeData = data;
+    },
+
+    toScreen() {
+      this.$router.push({
+        path: '/screen'
+      })
+    }
+  },
+  created() {
+    this.countTotal();
   }
 }
 </script>
@@ -59,6 +176,7 @@
 .data-container {
   margin-bottom: 20px;
 }
+
 .title {
   text-align: left;
 }
@@ -71,32 +189,22 @@
   margin-bottom: 10px;
 }
 
-.icon-container {
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  border-radius: 8px;
+.map-wrapper {
+  // background-color: rgb(48, 65, 86);
 
-  .icon-font {
-    font-size: 30px;
-    color: #fff;
-  }
 }
 
-.data-info {
+.data-plane {
+  aspect-ratio: 6/2;
+}
+
+.select-container {
   display: flex;
-  height: 100%;
-  flex-direction: column;
-  justify-content: center;
-  text-align: left;
-
-  .data-num {
-    font-size: 32px;
-  }
-
-  .data-lable {
+  align-items: center;
+  .select-label {
+    color: #666;
+    margin-right: 20px;
     font-size: 16px;
-    text-indent: 3px;
   }
 }
 
@@ -105,4 +213,4 @@
     width: 20%;
   }
 }
-</style>
\ No newline at end of file
+</style>

--
Gitblit v1.8.0