From 0eee6264b01ce554a6082468a6a11d0b0da8e622 Mon Sep 17 00:00:00 2001
From: 龚焕茏 <2842157468@qq.com>
Date: 星期四, 11 七月 2024 09:43:30 +0800
Subject: [PATCH] feat:菜单调整、添加部门bug修复

---
 src/views/answer/sheetStatistics.vue |  223 +++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 157 insertions(+), 66 deletions(-)

diff --git a/src/views/answer/sheetStatistics.vue b/src/views/answer/sheetStatistics.vue
index b83fdfb..80973e4 100644
--- a/src/views/answer/sheetStatistics.vue
+++ b/src/views/answer/sheetStatistics.vue
@@ -2,20 +2,108 @@
   <div style="padding: 10px" ref="pageContent">
     <el-form :model="queryParam" ref="queryForm" :inline="true" style="display: flex">
       <el-form-item label="璇曞嵎锛�">
-        <el-select v-model="queryParam.examPaperId" filterable placeholder="璇曞嵎">
+        <el-select v-model="queryParam.examPaperId" filterable placeholder="璇曞嵎" @change="getType">
           <el-option v-for="item in examPaperList" :key="item.id" :value="item.id" :label="item.name" />
         </el-select>
       </el-form-item>
-      <el-form-item label="閮ㄩ棬锛�" v-if="true">
-        <el-select v-model="queryParam.departmentId" filterable placeholder="閮ㄩ棬" clearable>
+      <el-form-item label="閮ㄩ棬锛�" v-if="admin">
+        <!-- <el-select v-model="queryParam.departmentId" collapse-tags multiple filterable placeholder="閮ㄩ棬" clearable>
           <el-option v-for="item in levelEnum" :key="item.key" :value="item.key" :label="item.value" />
-        </el-select>
+        </el-select> -->
+        <el-cascader
+          clearable
+          filterable
+          v-model="queryParam.departmentId"
+          :options="levelEnum"
+          :props="{ multiple: true, emitPath: false, value: 'id', label: 'name',  checkStrictly: true }"
+          ></el-cascader>
       </el-form-item>
       <el-form-item>
         <el-button type="primary" @click="submitForm">鏌ヨ</el-button>
       </el-form-item>
-
     </el-form>
+
+    <el-row :gutter="20">
+      <el-col :xl="24" class="echarts-row">
+        <el-row :gutter="20">
+          <el-col :span="6">
+            <el-card>
+              <div class="data-item">
+                <div class="data-icon" :style="{ 'background-color': iconList[0].color }">
+                  <i class="el-icon-tickets"></i>
+                </div>
+                <div class="data-info">
+                  <div class="data-label">
+                    鎬昏�冭瘯娆℃暟
+                  </div>
+                  <div class="data-num">
+                    {{ totalInfo.examTotal }}
+                  </div>
+                </div>
+              </div>
+            </el-card>
+
+          </el-col>
+
+          <el-col :span="6">
+            <el-card>
+              <div class="data-item">
+                <div class="data-icon" :style="{ 'background-color': iconList[1].color }">
+                  <i class="el-icon-s-claim"></i>
+                </div>
+                <div class="data-info">
+                  <div class="data-label">
+                    鍙傝�冧汉鏁�
+                  </div>
+                  <div class="data-num">
+                    {{ totalInfo.factPeopleTotal }}
+                  </div>
+                </div>
+              </div>
+            </el-card>
+
+          </el-col>
+
+          <el-col :span="6">
+            <el-card>
+              <div class="data-item">
+                <div class="data-icon" :style="{ 'background-color': iconList[2].color }">
+                  <i class="el-icon-edit"></i>
+                </div>
+                <div class="data-info">
+                  <div class="data-label">
+                    骞冲潎鍒�
+                  </div>
+                  <div class="data-num">
+                    {{ totalInfo.averageScore }}
+                  </div>
+                </div>
+              </div>
+            </el-card>
+
+          </el-col>
+
+          <el-col :span="6">
+            <el-card>
+              <div class="data-item">
+                <div class="data-icon" :style="{ 'background-color': iconList[3].color }">
+                  <i class="el-icon-s-data"></i>
+                </div>
+                <div class="data-info">
+                  <div class="data-label">
+                    鍙傝�冧汉鏁扮櫨鍒嗘瘮
+                  </div>
+                  <div class="data-num">
+                    {{ totalInfo.referencePercentage }}%
+                  </div>
+                </div>
+              </div>
+            </el-card>
+          </el-col>
+        </el-row>
+      </el-col>
+    </el-row>
+
     <el-row :gutter="20">
       <el-col :xl="12" class="echarts-row">
         <el-card>
@@ -29,16 +117,6 @@
         <el-card>
           <div class="card-chart-container">
             <div id="scoreChart" ref="scoreChart" class="chart-style" v-loading="chartLoading2" />
-          </div>
-        </el-card>
-      </el-col>
-    </el-row>
-
-    <el-row :gutter="20">
-      <el-col :xl="24">
-        <el-card>
-          <div class="card-chart-container">
-            <div id="peopleChart" ref="peopleChart" class="chart-style" v-loading="chartLoading3" />
           </div>
         </el-card>
       </el-col>
@@ -70,6 +148,13 @@
   'totalAttended': '鍙備笌鑰冭瘯',
   'totalAbsent': '鏈弬涓庤�冭瘯'
 };
+
+const dataKeyMap = {
+  'factPeopleTotal': '鍙傝�冧汉鏁�',
+  'averageScore': '骞冲潎鍒�',
+  'referencePercentage': '鍙傝�冧汉鏁扮櫨鍒嗘瘮',
+};
+
 let ageChart = null;
 let scroeChart = null;
 let peopleChart = null;
@@ -77,46 +162,64 @@
 export default {
   data() {
     return {
+      totalInfo: {
+        examTotal: 0,
+        factPeopleTotal: 0,
+        averageScore: 0,
+        referencePercentage: 0
+      },
+      iconList: [
+        { icon: 'el-icon-tickets', color: '#7868d9' },
+        { icon: 'el-icon-s-claim', color: '#3eba45' },
+        { icon: 'el-icon-edit', color: '#3da7f8' },
+        { icon: 'el-icon-warning', color: '#ffbe40' },
+        { icon: 'el-icon-error', color: '#fe640d' },
+      ],
       examPaperList: [],
       chartLoading1: false,
       chartLoading2: false,
-      chartLoading3: false,
       queryParam: {
         examPaperId: '',
-        departmentId: ''
-      }
+        departmentId: [],
+        examPaperType: 1
+      },
+      admin: true
     };
   },
   mounted() {
+    if (sessionStorage.getItem('deptAdmin') == 1) {
+      this.admin = false;
+    }
     ageChart = echarts.init(this.$refs.ageChart);
     scroeChart = echarts.init(this.$refs.scoreChart);
-    peopleChart = echarts.init(this.$refs.peopleChart);
     dashboardApi.examPaperList().then(res => {
       this.examPaperList = res.response;
       this.queryParam.examPaperId = this.examPaperList[0].id
+      this.queryParam.examPaperType = this.examPaperList[0].paperType
       this.getChartData();
       this.observe();
     });
   },
   methods: {
+    getType(val) {
+      const selectedItem = this.examPaperList.find(item => item.id === val);
+      this.queryParam.examPaperType = selectedItem.paperType;
+      this.getChartData();
+    },
     getChartData() {
       this.chartLoading1 = true;
       this.chartLoading2 = true;
-      this.chartLoading3 = true;
       dashboardApi.getData(this.queryParam).then(re => {
-        const { age, score, examPeopleNum } = re.response;
-
+        const { age, score, total } = re.response;
+        this.totalInfo = total;
         const ageOption = this.barOption('骞撮緞娈电粺璁�', age, ageLabel);
         const scoreOption = this.barOption('鍒嗘暟娈电粺璁�', score, scoreLabel);
-        const peopleOption = this.pieOption('鑰冭瘯浜烘暟', examPeopleNum, pieLabel);
 
         ageChart.setOption(ageOption, true);
         scroeChart.setOption(scoreOption, true);
-        peopleChart.setOption(peopleOption, true);
 
         this.chartLoading1 = false;
         this.chartLoading2 = false;
-        this.chartLoading3 = false;
       });
     },
     barOption(title, data, labelList) {
@@ -160,43 +263,6 @@
       };
 
     },
-    pieOption(title, data, labelList) {
-      const pieData = data.map(item => {
-        return {
-          name: labelList[Object.keys(item)[0]],
-          value: Object.values(item)[0]
-        };
-      });
-      return {
-        title: {
-          text: title,
-          x: 'left'
-        },
-        color: ['#E74C3C', '#3498DB',  '#F1C40F', '#95A5A6', '#8E44AD', '#F39C12', '#D35400'],
-        tooltip: {
-          trigger: 'item'
-        },
-        legend: {
-          orient: 'horizontal',
-        },
-        series: [
-          {
-            type: 'pie',
-            radius: '50%',
-            data: pieData,
-            emphasis: {
-              itemStyle: {
-                shadowBlur: 10,
-                shadowOffsetX: 0,
-                shadowColor: 'rgba(0, 0, 0, 0.5)'
-              }
-            }
-          }
-        ]
-
-      };
-
-    },
     submitForm() {
       this.getChartData();
     },
@@ -217,9 +283,6 @@
       }
       if (scroeChart) {
         scroeChart.resize();
-      }
-      if (peopleChart) {
-        peopleChart.resize();
       }
     }
   },
@@ -245,9 +308,37 @@
   height: 400px;
 }
 
-
 .chart-style {
   width: 100%;
   height: 100%;
 }
+
+.data-item {
+  width: 100%;
+  display: flex;
+  align-items: center;
+  border-radius: 10px;
+  overflow: hidden;
+
+  .data-icon {
+    font-size: 70px;
+    padding: 20px 30px;
+    color: #fff;
+    border-radius: 10px;
+    overflow: hidden;
+    margin-right: 20px;
+  }
+
+  .data-info {
+    .data-label {
+      font-size: 18px;
+      margin-bottom: 10px;
+      color: #707070;
+    }
+
+    .data-num {
+      font-size: 28px;
+    }
+  }
+}
 </style>

--
Gitblit v1.8.0