From d00d85e54ff65750f0c9a097ec4b644866ad1ffa Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期五, 27 六月 2025 17:29:43 +0800
Subject: [PATCH] 静安夜施管理功能(待完成)

---
 src/views/fysp/check/components/CompSubTaskStatistic.vue |  343 ++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 280 insertions(+), 63 deletions(-)

diff --git a/src/views/fysp/check/components/CompSubTaskStatistic.vue b/src/views/fysp/check/components/CompSubTaskStatistic.vue
index bdff289..7e30a44 100644
--- a/src/views/fysp/check/components/CompSubTaskStatistic.vue
+++ b/src/views/fysp/check/components/CompSubTaskStatistic.vue
@@ -1,64 +1,216 @@
 <template>
-  <el-space>
-    <el-descriptions :column="3" size="small" border direction="vertical">
-      <el-descriptions-item label="闂鏁�">{{
-        summary.proCount
-      }}</el-descriptions-item>
-      <el-descriptions-item label="鏁存敼鏁�">{{
-        summary.changeCount
-      }}</el-descriptions-item>
-      <el-descriptions-item label="鏁存敼鐜�">{{
-        summary.changePer
-      }}</el-descriptions-item>
+  <el-row justify="end" v-loading="loading">
+    <el-descriptions :column="4" size="small" border direction="vertical">
+      <el-descriptions-item
+        label="鍦烘櫙鎬昏"
+        label-class-name="inspection-label"
+        class-name="secondary-content"
+      >
+        <template #label>
+          <el-text size="small"> 鍦烘櫙鎬昏 </el-text>
+        </template>
+        {{ progress.total }}
+      </el-descriptions-item>
+      <el-descriptions-item
+        label="宸℃煡鍦烘櫙"
+        label-class-name="inspection-label"
+        class-name="secondary-content"
+      >
+        <template #label>
+          <el-text size="small"> 宸℃煡鍦烘櫙 </el-text>
+        </template>
+        {{ progress.completedScenes }}
+      </el-descriptions-item>
+      <el-descriptions-item
+        label="宸℃煡鐐规"
+        label-class-name="inspection-label"
+        class-name="secondary-content"
+      >
+        <template #label>
+          <el-text size="small"> 宸℃煡鐐规 </el-text>
+        </template>
+        {{ progress.completedTimes }}
+      </el-descriptions-item>
+      <el-descriptions-item
+        label="澶嶆煡鐐规"
+        label-class-name="inspection-label"
+        class-name="secondary-content"
+      >
+        <template #label>
+          <el-text size="small"> 澶嶆煡鐐规 </el-text>
+        </template>
+        {{ progress.reviewTimes }}
+      </el-descriptions-item>
     </el-descriptions>
-    <el-descriptions :column="8" size="small" border direction="vertical">
-      <el-descriptions-item label="宸℃煡鐐规">{{
-        summary.total
-      }}</el-descriptions-item>
-      <el-descriptions-item label="闂鏈鏍�">{{
-        summary.proUnCheck
-      }}</el-descriptions-item>
-      <el-descriptions-item label="閮ㄥ垎瀹℃牳">{{
-        summary.proPartCheck
-      }}</el-descriptions-item>
-      <el-descriptions-item label="鍏ㄩ儴瀹℃牳">{{
-        summary.proAllCheck
-      }}</el-descriptions-item>
+
+    <el-descriptions
+      class="m-l-4"
+      :column="3"
+      size="small"
+      border
+      direction="vertical"
+    >
+      <el-descriptions-item
+        label="闂鏁�"
+        label-class-name="problem-label"
+        class-name="secondary-content"
+      >
+        <template #label>
+          <el-text size="small"> 闂鏁� </el-text>
+        </template>
+        {{ summary.proCount }}
+      </el-descriptions-item>
+      <el-descriptions-item
+        label="鏁存敼鏁�"
+        label-class-name="problem-label"
+        class-name="secondary-content"
+      >
+        <template #label>
+          <el-text size="small"> 鏁存敼鏁� </el-text>
+        </template>
+        {{ summary.changeCount }}
+      </el-descriptions-item>
+      <el-descriptions-item
+        label="鏁存敼鐜�"
+        label-class-name="problem-label"
+        :class-name="
+          summary.changePer < 1 ? 'danger-content' : 'secondary-content'
+        "
+      >
+        <template #label>
+          <el-text size="small"> 鏁存敼鐜� </el-text>
+        </template>
+        {{ formatPercent(summary.changePer) }}
+      </el-descriptions-item>
     </el-descriptions>
-    <el-descriptions :column="8" size="small" border direction="vertical">
-      <el-descriptions-item label="鏈暣鏀�">{{
-        summary.UnChange
-      }}</el-descriptions-item>
-      <el-descriptions-item label="鏁存敼鏈鏍�">{{
-        summary.changeUnCheck
-      }}</el-descriptions-item>
-      <el-descriptions-item label="閮ㄥ垎瀹℃牳">{{
-        summary.changePartCheck
-      }}</el-descriptions-item>
-      <el-descriptions-item label="鍏ㄩ儴瀹℃牳">{{
-        summary.changeAllCheck
-      }}</el-descriptions-item>
+
+    <el-descriptions
+      class="m-l-4"
+      :column="8"
+      size="small"
+      border
+      direction="vertical"
+    >
+      <el-descriptions-item
+        label="鏃犻棶棰�"
+        label-class-name="pro-check-label"
+        class-name="secondary-content"
+      >
+        <template #label>
+          <el-text size="small"> 鏃犻棶棰� </el-text>
+        </template>
+        {{ summary.noProblem }}
+      </el-descriptions-item>
+      <el-descriptions-item
+        label="闂鏈鏍�"
+        label-class-name="pro-check-label"
+        :class-name="
+          summary.proUnCheck > 0 ? 'danger-content' : 'secondary-content'
+        "
+      >
+        <template #label>
+          <el-text size="small"> 闂鏈鏍� </el-text>
+        </template>
+        {{ summary.proUnCheck }}
+      </el-descriptions-item>
+      <el-descriptions-item
+        label="閮ㄥ垎瀹℃牳"
+        label-class-name="pro-check-label"
+        :class-name="
+          summary.proPartCheck > 0 ? 'danger-content' : 'secondary-content'
+        "
+      >
+        <template #label>
+          <el-text size="small"> 閮ㄥ垎瀹℃牳 </el-text>
+        </template>
+        {{ summary.proPartCheck }}
+      </el-descriptions-item>
+      <el-descriptions-item
+        label="鍏ㄩ儴瀹℃牳"
+        label-class-name="pro-check-label"
+        class-name="secondary-content"
+      >
+        <template #label>
+          <el-text size="small"> 鍏ㄩ儴瀹℃牳 </el-text>
+        </template>
+        {{ summary.proAllCheck }}
+      </el-descriptions-item>
+      <!-- </el-descriptions>
+    <el-descriptions
+      :column="4"
+      size="small"
+      border
+      direction="vertical"
+    > -->
+      <el-descriptions-item
+        label="鏈暣鏀�"
+        label-class-name="change-check-label"
+        :class-name="
+          summary.UnChange > 0 ? 'danger-content' : 'secondary-content'
+        "
+      >
+        <template #label>
+          <el-text size="small"> 鏈暣鏀� </el-text>
+        </template>
+        {{ summary.UnChange }}
+      </el-descriptions-item>
+      <el-descriptions-item
+        label="鏁存敼鏈鏍�"
+        label-class-name="change-check-label"
+        :class-name="
+          summary.changeUnCheck > 0 ? 'danger-content' : 'secondary-content'
+        "
+      >
+        <template #label>
+          <el-text size="small"> 鏁存敼鏈鏍� </el-text>
+        </template>
+        {{ summary.changeUnCheck }}
+      </el-descriptions-item>
+      <el-descriptions-item
+        label="閮ㄥ垎瀹℃牳"
+        label-class-name="change-check-label"
+        :class-name="
+          summary.changePartCheck > 0 ? 'danger-content' : 'secondary-content'
+        "
+      >
+        <template #label>
+          <el-text size="small"> 閮ㄥ垎瀹℃牳 </el-text>
+        </template>
+        {{ summary.changePartCheck }}
+      </el-descriptions-item>
+      <el-descriptions-item
+        label="鍏ㄩ儴瀹℃牳"
+        label-class-name="change-check-label"
+        class-name="secondary-content"
+      >
+        <template #label>
+          <el-text size="small"> 鍏ㄩ儴瀹℃牳 </el-text>
+        </template>
+        {{ summary.changeAllCheck }}
+      </el-descriptions-item>
     </el-descriptions>
-  </el-space>
-  <!-- <el-space>
-    <el-tag v-for="(s, i) in summary" :key="i" :type="s.type" size="small">
-      <el-icon v-if="s.icon" color="">
-        <component :is="s.icon"></component>
-      </el-icon>
-      {{ s.name + ': ' + s.value }}
-    </el-tag>
-  </el-space> -->
+  </el-row>
 </template>
 <script>
 export default {
   props: {
-    subtasks: Array
+    loading: Boolean,
+    sceneType: Number,
+    subtasks: {
+      type: Array,
+      default: () => []
+    },
+    monitorObjList: {
+      type: Array,
+      default: () => []
+    }
   },
   computed: {
     //浠诲姟闂瀹℃牳鎯呭喌缁熻淇℃伅
     summary() {
       const _summary = {
         total: 0,
+        noProblem: 0,
         proUnCheck: 0,
         proPartCheck: 0,
         proAllCheck: 0,
@@ -68,7 +220,7 @@
         changeAllCheck: 0,
         proCount: 0,
         changeCount: 0,
-        changePer: '0%'
+        changePer: 0
       };
       this.subtasks.forEach((s) => {
         _summary.total++;
@@ -77,7 +229,7 @@
 
         // 闂瀹℃牳鎯呭喌
         if (s.data.proNum == 0) {
-          _summary.proAllCheck++;
+          _summary.noProblem++;
         } else if (s.data.proCheckedNum == 0) {
           _summary.proUnCheck++;
         } else if (s.data.proCheckedNum < s.data.proNum) {
@@ -90,10 +242,9 @@
         if (s.data.changeNum < s.data.proNum) {
           _summary.UnChange++;
         }
-
         // 鏁存敼瀹℃牳鎯呭喌
-        if (s.data.proNum == 0) {
-          _summary.changeAllCheck++;
+        else if (s.data.proNum == 0) {
+          // _summary.changeAllCheck++;
         } else if (s.data.changeNum > 0) {
           if (s.data.changeCheckedNum == 0) {
             _summary.changeUnCheck++;
@@ -106,19 +257,57 @@
       });
 
       if (_summary.proCount != 0) {
-        _summary.changePer =
-          Math.round((_summary.changeCount / _summary.proCount) * 1000) / 10 +
-          '%';
+        _summary.changePer = _summary.changeCount / _summary.proCount;
       }
-      // _summary.forEach((s, i) => {
-      //   if (i > 0) {
-      //     let per = Math.round((s.value / _summary[0].value) * 1000) / 10
-      //     if (isNaN(per)) per = 0
-      //     s.value = `${s.value}(${per}%)`
-      //   }
-      // })
-
       return _summary;
+    },
+    // 宸℃煡浠诲姟鎵ц杩涘害
+    progress() {
+      const _res = {
+        total: 0,
+        completedScenes: 0,
+        completedTimes: 0,
+        reviewTimes: 0
+      };
+
+      // Fixme 2025.5.30: 鐩墠姝ゅ鐨勭洃绠$増鏈俊鎭挓璁板綍鐨勪换鍔″畬鎴愭鏁版湁鍋忓樊锛屾墍浠ユ殏鏃跺厛鏀逛负閫氳繃宸℃煡浠诲姟鏈韩杩涜缁熻
+      /**************************************************************************************/
+      // this.monitorObjList.forEach((m) => {
+      //   if (this.sceneType == undefined || m.sceneTypeId == this.sceneType) {
+      //     _res.total++;
+      //     const times = parseInt(m.extension1);
+      //     if (times) {
+      //       _res.completedScenes++;
+      //       _res.completedTimes += times;
+      //       _res.reviewTimes += times - 1;
+      //     }
+      //   }
+      // });
+      /**************************************************************************************/
+
+      /**************************************************************************************/
+      _res.total = this.monitorObjList.filter(
+        (m) => this.sceneType == undefined || m.sceneTypeId == this.sceneType
+      ).length;
+      _res.completedTimes = this.subtasks.length;
+      const map = new Map();
+      const uniqueArr = [];
+      for (let item of this.subtasks) {
+        if (!map.has(item.data.sceneId)) {
+          map.set(item.data.sceneId, true);
+          uniqueArr.push(item);
+        }
+      }
+      _res.completedScenes = uniqueArr.length;
+      _res.reviewTimes = _res.completedTimes - _res.completedScenes;
+
+      /**************************************************************************************/
+      return _res;
+    }
+  },
+  methods: {
+    formatPercent(value) {
+      return Math.round(value * 1000) / 10 + '%';
     }
   }
 };
@@ -128,4 +317,32 @@
   padding: 0px 4px !important;
   /* font-size: 13px !important; */
 }
+
+:deep(.inspection-label) {
+  background: var(--el-color-success-light-5) !important;
+  /* color: white !important; */
+}
+
+:deep(.problem-label) {
+  background: var(--el-color-primary-light-7) !important;
+}
+
+:deep(.pro-check-label) {
+  background: var(--el-color-warning-light-7) !important;
+}
+
+:deep(.change-check-label) {
+  background: var(--el-color-danger-light-7) !important;
+}
+
+:deep(.danger-content) {
+  color: var(--el-color-danger) !important;
+  font-weight: 600 !important;
+  font-size: 17px !important;
+}
+
+:deep(.secondary-content) {
+  color: var(--el-text-color-regular) !important;
+  font-size: 12px !important;
+}
 </style>

--
Gitblit v1.9.3