From c46e3ad03a8c5fb27b0361d219babca0e537ad77 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期二, 30 四月 2024 13:44:39 +0800
Subject: [PATCH] 考核结果三级页面

---
 src/views/system/result/index.vue |  466 +++++++++++++++++++++++++++++-----------------------------
 1 files changed, 234 insertions(+), 232 deletions(-)

diff --git a/src/views/system/result/index.vue b/src/views/system/result/index.vue
index 2ef8485..1d139c8 100644
--- a/src/views/system/result/index.vue
+++ b/src/views/system/result/index.vue
@@ -1,248 +1,65 @@
 <template>
   <div id="warp">
+    <div>
+      <el-menu :default-active="activeIndex" class="el-menu-demo" mode="horizontal" @select="handleSelect"
+        style="margin-bottom: 10px">
+        <el-menu-item index="0">鐪佸巺鑰冩牳</el-menu-item>
+        <el-menu-item index="1">甯傚眬鑰冩牳</el-menu-item>
+      </el-menu>
+    </div>
+
     <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-date-picker v-model="date" type="date"  placeholder="閫夋嫨鏃ユ湡">
-            </el-date-picker>
           </div>
-          </div>
-
           <div class="echart-container">
             <div id="barChart" ref="barChart"></div>
           </div>
         </div>
       </el-card>
     </div>
-    <el-row :gutter="100">
-      <el-col :span="6">
-        <div class="city-warp">
-          <div class="city">
-            <div class="title">
-              鑷祦浜�
-            </div>
-            <div class="score-warp">
-              <div class="score-item">
-                <div style="font-size: 15px;margin-bottom: 15px">2024骞�4鏈�12鏃�</div>
+
+    <div>
+      <el-row :gutter="100">
+        <el-col :span="6" v-for="(city, index) in checkScoreList" :key="index">
+          <div class="city-warp">
+            <div class="city">
+              <div class="title">
+                {{ translateDeptId(parseInt(index)) }}
               </div>
-              <div class="score-item">
-                <div>瑙嗛锛�</div>
-                <div class="score">99.5</div>
+              <div class="score-warp">
+                <div class="score-item">
+                  <div style="font-size: 15px; margin-bottom: 15px">{{ formatCreateDate(city[0].createTime) }}</div>
+                </div>
+                <div v-for="(score, scoreIndex) in city" :key="scoreIndex">
+                  <div class="score-item">
+                    <div v-if="score.examineCategory == 2">杞﹁締锛�</div>
+                    <div v-else-if="score.examineCategory == 3">浜鸿劯锛�</div>
+                    <div v-else-if="score.examineCategory == 1">瑙嗛锛�</div>
+                    <div class="score">{{ score.score }}</div>
+                  </div>
+                </div>
               </div>
-              <div class="score-item">
-                <div>浜鸿劯锛�</div>
-                <div class="score">87</div>
+              <div class="bottom-publish">
+                <el-button size="medium" :type="isAnyUnpublished(city) ? 'success' : 'danger'" @click="publish(city)">
+                  {{ isAnyUnpublished(city) ? '鍙戝竷' : '鍙栨秷' }}
+                </el-button>
+                <el-button size="medium" @click="jumpDetail(index)" type="info">璇︽儏</el-button>
               </div>
-              <div class="score-item">
-                <div>杞﹁締锛�</div>
-                <div class="score">94</div>
-              </div>
-            </div>
-            <div class="bottom-publish">
-              <el-button size="medium" type="success">鍙戝竷</el-button>
-              <el-button size="medium" @click="jumpDetail" type="info">璇︽儏</el-button>
             </div>
           </div>
-        </div>
-      </el-col>
-      <el-col :span="6">
-        <div class="city-warp">
-          <div class="city">
-            <div class="title">
-              瀵岄『
-            </div>
-            <div class="score-warp">
-              <div class="score-item">
-                <div style="font-size: 15px;margin-bottom: 15px">2024骞�4鏈�12鏃�</div>
-              </div>
-              <div class="score-item">
-                <div>瑙嗛锛�</div>
-                <div class="score">99.5</div>
-              </div>
-              <div class="score-item">
-                <div>浜鸿劯锛�</div>
-                <div class="score">87</div>
-              </div>
-              <div class="score-item">
-                <div>杞﹁締锛�</div>
-                <div class="score">94</div>
-              </div>
-
-            </div>
-            <div class="bottom-publish">
-              <el-button size="medium" type="success">鍙戝竷</el-button>
-              <el-button size="medium" @click="jumpDetail" type="info">璇︽儏</el-button>
-            </div>
-          </div>
-        </div>
-      </el-col>
-      <el-col :span="6">
-        <div class="city-warp">
-          <div class="city">
-            <div class="title">
-              鑽e幙
-            </div>
-            <div class="score-warp">
-              <div class="score-item">
-                <div style="font-size: 15px;margin-bottom: 15px">2024骞�4鏈�12鏃�</div>
-              </div>
-              <div class="score-item">
-                <div>瑙嗛锛�</div>
-                <div class="score">99.5</div>
-              </div>
-              <div class="score-item">
-                <div>浜鸿劯锛�</div>
-                <div class="score">87</div>
-              </div>
-              <div class="score-item">
-                <div>杞﹁締锛�</div>
-                <div class="score">94</div>
-              </div>
-
-            </div>
-            <div class="bottom-publish">
-              <el-button size="medium" type="success">鍙戝竷</el-button>
-              <el-button size="medium" @click="jumpDetail" type="info">璇︽儏</el-button>
-            </div>
-          </div>
-        </div>
-      </el-col>
-      <el-col :span="6">
-        <div class="city-warp">
-          <div class="city">
-            <div class="title">
-              娌挎哗鍖�
-            </div>
-            <div class="score-warp">
-              <div class="score-item">
-                <div style="font-size: 15px;margin-bottom: 15px">2024骞�4鏈�12鏃�</div>
-              </div>
-              <div class="score-item">
-                <div>瑙嗛锛�</div>
-                <div class="score">99.5</div>
-              </div>
-              <div class="score-item">
-                <div>浜鸿劯锛�</div>
-                <div class="score">87</div>
-              </div>
-              <div class="score-item">
-                <div>杞﹁締锛�</div>
-                <div class="score">94</div>
-              </div>
-
-            </div>
-            <div class="bottom-publish">
-              <el-button size="medium" type="success">鍙戝竷</el-button>
-              <el-button size="medium" @click="jumpDetail" type="info">璇︽儏</el-button>
-            </div>
-          </div>
-        </div>
-      </el-col>
-
-
-    </el-row>
-
-    <el-row style="margin-top: 30px" :gutter="100">
-      <el-col :span="6">
-        <div class="city-warp">
-          <div class="city">
-            <div class="title">
-              楂樻柊鍖�
-            </div>
-            <div class="score-warp">
-              <div class="score-item">
-                <div style="font-size: 15px;margin-bottom: 15px">2024骞�4鏈�12鏃�</div>
-              </div>
-              <div class="score-item">
-                <div>瑙嗛锛�</div>
-                <div class="score">99.5</div>
-              </div>
-              <div class="score-item">
-                <div>浜鸿劯锛�</div>
-                <div class="score">87</div>
-              </div>
-              <div class="score-item">
-                <div>杞﹁締锛�</div>
-                <div class="score">94</div>
-              </div>
-            </div>
-            <div class="bottom-publish">
-              <el-button size="medium" type="success">鍙戝竷</el-button>
-              <el-button size="medium" @click="jumpDetail" type="info">璇︽儏</el-button>
-            </div>
-          </div>
-        </div>
-      </el-col>
-      <el-col :span="6">
-        <div class="city-warp">
-          <div class="city">
-            <div class="title">
-              澶у畨鍖�
-            </div>
-            <div class="score-warp">
-              <div class="score-item">
-                <div style="font-size: 15px;margin-bottom: 15px">2024骞�4鏈�12鏃�</div>
-              </div>
-              <div class="score-item">
-                <div>瑙嗛锛�</div>
-                <div class="score">99.5</div>
-              </div>
-              <div class="score-item">
-                <div>浜鸿劯锛�</div>
-                <div class="score">87</div>
-              </div>
-              <div class="score-item">
-                <div>杞﹁締锛�</div>
-                <div class="score">94</div>
-              </div>
-            </div>
-            <div class="bottom-publish">
-              <el-button size="medium" type="success">鍙戝竷</el-button>
-              <el-button size="medium" @click="jumpDetail" type="info">璇︽儏</el-button>
-            </div>
-          </div>
-        </div>
-      </el-col>
-      <el-col :span="6">
-        <div class="city-warp">
-          <div class="city">
-            <div class="title">
-              璐′簳鍖�
-            </div>
-            <div class="score-warp">
-              <div class="score-item">
-                <div style="font-size: 15px;margin-bottom: 15px">2024骞�4鏈�12鏃�</div>
-              </div>
-              <div class="score-item">
-                <div>瑙嗛锛�</div>
-                <div class="score">99.5</div>
-              </div>
-              <div class="score-item">
-                <div>浜鸿劯锛�</div>
-                <div class="score">87</div>
-              </div>
-              <div class="score-item">
-                <div>杞﹁締锛�</div>
-                <div class="score">94</div>
-              </div>
-
-            </div>
-            <div class="bottom-publish">
-              <el-button size="medium" type="success">鍙戝竷</el-button>
-              <el-button size="medium" @click="jumpDetail" type="info">璇︽儏</el-button>
-            </div>
-          </div>
-        </div>
-      </el-col>
-    </el-row>
+        </el-col>
+      </el-row>
+    </div>
   </div>
 
 </template>
 
 <script>
+import { areaSelect } from '@/api/system/dept';
+import { listScore, getScore, delScore, addScore, updateScore, publishScore } from "@/api/platform/check-score";
 import * as echarts from 'echarts';
 let observer = null;
 let chart = null;
@@ -250,8 +67,13 @@
   name: 'index',
   data() {
     return {
-      activeIndex: '1',
-      activeIndex2: '1',
+      province: {
+        id: [],
+        publish: null,
+      },
+      checkScoreList: [],
+      areaList: [],
+      activeIndex: '0',
       date: '',
       company: '',
       dataList: {
@@ -260,11 +82,31 @@
         data2: [93.7, 93.5, 94.3, 96.5, 95.3, 94.2, 93.3],
         data3: [98.3, 94.3, 93.3, 95.5, 96.8, 96.1, 95.8],
       },
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        examineTag: null,
+        createTime: null
+      },
     }
   },
+  created() {
+    this.queryParams.examineTag = this.activeIndex
+    this.getList();
+    this.areaSelect();
+  },
+  mounted() {
+    chart = echarts.init(this.$refs.barChart);
+    this.initEchart();
+  },
   methods: {
-    jumpDetail() {
-      this.$router.push("/examine/detail")
+    jumpDetail(index) {
+      this.$router.push({
+        path: '/examine/detail',
+        query: {
+          index: index,
+          examineTag: this.activeIndex
+        }
+      })
     },
     initEchart() {
       const option = {
@@ -319,17 +161,165 @@
         ]
       }
       chart.setOption(option, true);
+    },
 
-    }
+    // 璁剧疆chart
+    setChartOption(data) {
+      if (!data) return;
+      const mapData = Object.keys(data).map(key => {
+        return {
+          name: this.translateDeptId(parseInt(key)),
+          data: data[key]
+        }
+      });
+      const nameArray = mapData.map(item => item.name);
+      const data1 = this.filterData(mapData, 1);
+      const data2 = this.filterData(mapData, 2);
+      const data3 = this.filterData(mapData, 3);
+      const option = {
+        grid: {
+          left: 0,
+          right: 0,
+          bottom: 0,
+          top: '20%',
+          containLabel: true
+        },
+        legend: {
+          right: 'right',
+          top: 'top',
+          icon: 'rect',
+          orient: "vertical",
+        },
+        tooltip: {},
+        xAxis: {
+          type: 'category',
+          axisLabel: {
+          },
+          data: nameArray
+        },
+        yAxis: {
+          min: 90,
+        },
+        series: [
+          {
+            type: 'bar',
+            name: '瑙嗛鑰冩牳',
+            data: data1,
+            itemStyle: {
+              color: 'rgba(255, 165, 0, 1)'
+            }
+          },
+          {
+            type: 'bar',
+            name: '浜鸿劯鑰冩牳',
+            data: data2,
+            itemStyle: {
+              color: 'rgba(85, 192, 191, 1)'
+            }
+          },
+          {
+            type: 'bar',
+            name: '杞﹁締鑰冩牳',
+            data: data3,
+            itemStyle: {
+              color: 'rgba(62, 144, 247, 1)'
+            }
+          },
+        ]
+      }
+      chart.setOption(option, true);
+    },
+    filterData(data, tag) {
+      if (!data) return;
+      if(!Array.isArray(data)) return;
+      const tempArray = [];
+      data.forEach((item) => {
+        if(item.data.length) {
+          item.data.forEach((examine) => {
+            if(examine.examineCategory === tag) {
+              tempArray.push(examine.score);
+            }
+          })
+        }
+      })
+      return tempArray;
+    },
+    // 鍖哄煙涓嬫媺鏁版嵁
+    areaSelect() {
+      areaSelect().then(res => {
+        this.areaList = res.data;
+      })
+    },
+    translateDeptId(deptId) {
+      const department = this.areaList.find(dept => dept.id === deptId);
+      return department ? department.value : '鏈煡';
+    },
+
+    isAnyUnpublished(city) {
+      // 妫�鏌� city 鐨� score 鏁扮粍涓槸鍚︽湁浠讳綍涓�涓殑 publish 灞炴�т负 'UNPUBLISHED'
+      return city.some(score => score.publish === 'UNPUBLISHED');
+    },
+    formatCreateDate(dateString) {
+      const date = new Date(dateString);
+      const year = date.getFullYear();
+      const month = date.getMonth() + 1; // getMonth() 杩斿洖鐨勬湀浠芥槸浠� 0 寮�濮嬬殑锛屾墍浠ヨ鍔� 1
+      const day = date.getDate();
+
+      // 浣跨敤 padStart 鏂规硶纭繚鏈堜唤鍜屾棩鏈熷缁堟槸涓や綅鏁�
+      const formattedMonth = month.toString().padStart(2, '0');
+      const formattedDay = day.toString().padStart(2, '0');
+
+      return `${year}骞�${formattedMonth}鏈�${formattedDay}鍙穈;
+    },
+    /** 瀵艰埅鍒囨崲 */
+    handleSelect(key) {
+      this.activeIndex = key; // 鏇存柊褰撳墠婵�娲荤殑鑿滃崟椤�
+      this.queryParams.examineTag = key;
+      this.getList();
+    },
+    /** 鏌ヨ鑰冩牳鎴愮哗鍒楄〃 */
+    getList() {
+      this.loading = true;
+      // 鑾峰彇褰撳墠鏃ユ湡
+      const today = new Date();
+
+      // 璁$畻鏄ㄥぉ鐨勬棩鏈�
+      const yesterday = new Date(today);
+      yesterday.setDate(today.getDate() - 1);
+
+      // 灏嗘槰澶╃殑鏃ユ湡鏍煎紡鍖栦负瀛楃涓诧紝杩欓噷鍋囪鍚庣鏈熸湜鐨勬槸ISO 8601鏍煎紡
+      this.queryParams.createTime = yesterday.toISOString().split('T')[0];
+
+      console.log(this.queryParams);
+      listScore(this.queryParams).then(response => {
+        this.checkScoreList = response.data;
+        console.log(this.checkScoreList);
+        this.loading = false;
+        this.setChartOption(this.checkScoreList);
+      });
+    },
+    publish(city) {
+      let text = this.isAnyUnpublished(city) ? "鍙戝竷" : "鍙栨秷鍙戝竷";
+      const cityName = this.translateDeptId(parseInt(city[0].deptId));
+      this.province.publish = text === "鍙戝竷" ? "PUBLISHED" : "UNPUBLISHED";
+      this.province.id = city.map(city => city.id);
+      this.$modal.confirm('鏄惁纭' + text + '鑰冩牳鍚嶄负"' + cityName + '"鐨勬垚缁╋紵')
+        .then(() => {
+          return publishScore(this.province);
+        })
+        .then(() => {
+          this.getList();
+          this.$modal.msgSuccess(text + "鎴愬姛");
+        })
+        .catch(() => {
+          // 閿欒澶勭悊閫昏緫
+        });
+    },
   },
-  mounted() {
-    chart = echarts.init(this.$refs.barChart);
-    this.initEchart();
-  }
 }
 </script>
 
-<style lang = "scss" scoped>
+<style lang="scss" scoped>
 .score-warp {
   display: flex;
   flex-direction: column;
@@ -337,25 +327,32 @@
   align-items: center;
   color: #797777
 }
+
 .score-item {
   display: flex;
   flex-direction: row;
 
 }
+
 .score {
   width: 60px;
   text-align: right;
+  padding: 3px 0;
 }
+
 #warp {
-  padding: 20px;
+  padding: 0 10px;
 }
+
 .city-warp {
   display: flex;
   flex-direction: column;
   align-items: center;
   justify-content: center;
   height: 210px;
+  margin-bottom: 25px;
 }
+
 .city {
   width: 240px;
   height: 100%;
@@ -365,15 +362,18 @@
   text-align: center;
   padding: 10px 0px;
 }
+
 .bottom-publish {
   width: 100%;
   position: absolute;
   bottom: 10px;
 }
+
 .title {
   font-size: larger;
   margin-bottom: 5px;
 }
+
 .data-chart-container {
   height: 400px;
   margin-bottom: 20px;
@@ -388,6 +388,7 @@
     }
   }
 }
+
 .title-container {
   position: absolute;
   display: flex;
@@ -412,6 +413,7 @@
     height: 100%;
   }
 }
+
 .select-container {
   margin: 0 20px;
   width: 180px;

--
Gitblit v1.8.0