From 55bd7fb6365909a0cbcf0957333c7876bd791bb9 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期四, 21 十一月 2024 16:35:12 +0800
Subject: [PATCH] 问题整改界面 1. 优化各项状态展示效果 2. 新增左侧关键字筛选功能

---
 src/components/FYImageSelectDialog.vue                   |    2 
 src/views/fysp/check/ProCheck.vue                        |   12 
 src/views/fysp/check/ProCheckProxy.js                    |  193 +++++++++++++-----
 src/views/fysp/check/components/CompSubTaskStatistic.vue |  148 ++++++++++----
 src/components.d.ts                                      |   12 +
 src/components/SideList.vue                              |  214 ++++++++++++++++++--
 src/components/ToolBar.vue                               |    3 
 src/components/core/BaseContentLayout.vue                |    2 
 src/views/fysp/check/components/CompProblemCard.vue      |    9 
 src/views/fysp/task/TaskManage.vue                       |    4 
 10 files changed, 463 insertions(+), 136 deletions(-)

diff --git a/src/components.d.ts b/src/components.d.ts
index 0ac0d9e..611607b 100644
--- a/src/components.d.ts
+++ b/src/components.d.ts
@@ -13,21 +13,27 @@
     CompGenericWrapper: typeof import('./components/CompGenericWrapper.vue')['default']
     CompQuickSet: typeof import('./components/search-option/CompQuickSet.vue')['default']
     Content: typeof import('./components/core/Content.vue')['default']
+    ElAffix: typeof import('element-plus/es')['ElAffix']
     ElAside: typeof import('element-plus/es')['ElAside']
     ElAvatar: typeof import('element-plus/es')['ElAvatar']
     ElBadge: typeof import('element-plus/es')['ElBadge']
     ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb']
     ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem']
     ElButton: typeof import('element-plus/es')['ElButton']
+    ElCalendar: typeof import('element-plus/es')['ElCalendar']
     ElCard: typeof import('element-plus/es')['ElCard']
+    ElCascader: typeof import('element-plus/es')['ElCascader']
+    ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
     ElCol: typeof import('element-plus/es')['ElCol']
     ElCollapse: typeof import('element-plus/es')['ElCollapse']
     ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem']
     ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
     ElContainer: typeof import('element-plus/es')['ElContainer']
+    ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
     ElDescriptions: typeof import('element-plus/es')['ElDescriptions']
     ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem']
     ElDialog: typeof import('element-plus/es')['ElDialog']
+    ElDivider: typeof import('element-plus/es')['ElDivider']
     ElDrawer: typeof import('element-plus/es')['ElDrawer']
     ElEmpty: typeof import('element-plus/es')['ElEmpty']
     ElForm: typeof import('element-plus/es')['ElForm']
@@ -37,14 +43,19 @@
     ElImage: typeof import('element-plus/es')['ElImage']
     ElImageViewer: typeof import('element-plus/es')['ElImageViewer']
     ElInput: typeof import('element-plus/es')['ElInput']
+    ElLink: typeof import('element-plus/es')['ElLink']
     ElMain: typeof import('element-plus/es')['ElMain']
     ElMenu: typeof import('element-plus/es')['ElMenu']
     ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
     ElMenuItemGroup: typeof import('element-plus/es')['ElMenuItemGroup']
     ElOption: typeof import('element-plus/es')['ElOption']
+    ElPagination: typeof import('element-plus/es')['ElPagination']
     ElPopover: typeof import('element-plus/es')['ElPopover']
+    ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
+    ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
     ElRow: typeof import('element-plus/es')['ElRow']
     ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
+    ElSegmented: typeof import('element-plus/es')['ElSegmented']
     ElSelect: typeof import('element-plus/es')['ElSelect']
     ElSpace: typeof import('element-plus/es')['ElSpace']
     ElStep: typeof import('element-plus/es')['ElStep']
@@ -56,6 +67,7 @@
     ElTabs: typeof import('element-plus/es')['ElTabs']
     ElTag: typeof import('element-plus/es')['ElTag']
     ElText: typeof import('element-plus/es')['ElText']
+    ElTooltip: typeof import('element-plus/es')['ElTooltip']
     ElTree: typeof import('element-plus/es')['ElTree']
     ElUpload: typeof import('element-plus/es')['ElUpload']
     Footer: typeof import('./components/core/Footer.vue')['default']
diff --git a/src/components/FYImageSelectDialog.vue b/src/components/FYImageSelectDialog.vue
index 6816f4c..e12c42f 100644
--- a/src/components/FYImageSelectDialog.vue
+++ b/src/components/FYImageSelectDialog.vue
@@ -6,7 +6,7 @@
     width="66%"
     destroy-on-close
   >
-    <div class="main" v-loading="loading">
+    <div class="main">
       <el-row justify="end" v-if="!readonly">
         <el-text size="small" type="info" class="m-r-8"
           >鏈�澶氶�夋嫨{{ maxSelect }}寮犲浘鐗�</el-text
diff --git a/src/components/SideList.vue b/src/components/SideList.vue
index 104fde9..dc3f4ff 100644
--- a/src/components/SideList.vue
+++ b/src/components/SideList.vue
@@ -1,10 +1,55 @@
 <template>
+  <div class="state-label">
+    <el-input
+      v-model="filterText"
+      icon="Search"
+      style="width: 200px"
+      placeholder="鍏抽敭瀛楃瓫閫�"
+      clearable
+    />
+    <el-tooltip v-if="legend" placement="bottom-start" effect="dark">
+      <template #content>
+        <el-space>
+          <el-space v-for="(item, index) in stateLabels" :key="index" :size="1">
+            <el-icon :color="item.color">
+              <component :is="item.icon"></component>
+            </el-icon>
+            {{ item.name }}
+            <!-- <el-text size="small">{{ item.name }}</el-text> -->
+          </el-space>
+        </el-space>
+        <br />
+        <el-space>
+          <el-space :size="1">
+            <el-icon :size="16" color="var(--el-color-success)">
+              <Avatar />
+            </el-icon>
+            姝e湪鎵ц宸℃煡
+          </el-space>
+          <el-space :size="1">
+            <el-icon :size="16" color="var(--el-color-info)">
+              <Avatar />
+            </el-icon>
+            鏈墽琛�
+          </el-space>
+        </el-space>
+      </template>
+      <el-space>
+        <el-icon class="cursor-p" :size="16" color="var(--el-color-primary)"
+          ><QuestionFilled
+        /></el-icon>
+        <el-text size="small" class="cursor-p">瀹℃牳鐘舵�佸浘渚�</el-text>
+      </el-space>
+    </el-tooltip>
+  </div>
   <el-tree
+    ref="treeRef"
     class="el-tree"
     v-loading="isLoading"
     :data="dataList"
     :props="defaultProps"
     @node-click="handleNodeClick"
+    :filter-node-method="filterNode"
     default-expand-all
     highlight-current
     check-on-click-node
@@ -19,28 +64,80 @@
               : 'custom-tree-node'
           "
         >
-          <el-icon v-if="data.type == 0" color="var(--el-color-info)">
-            <SuccessFilled/>
+          <el-icon
+            v-if="data.status == '姝e湪鎵ц'"
+            :size="16"
+            color="var(--el-color-success)"
+            style="margin-left: -16px"
+          >
+            <Avatar />
           </el-icon>
-          <el-icon v-else-if="data.type == 1" color="var(--el-color-danger)">
+          <el-icon
+            v-if="data.status == '鏈墽琛�'"
+            :size="16"
+            color="var(--el-color-info)"
+            style="margin-left: -16px"
+          >
+            <Avatar />
+          </el-icon>
+          <!-- <el-icon :color="stateLabels[data.type].color">
+            <component :is="stateLabels[data.type].icon"></component>
+          </el-icon> -->
+          <el-icon
+            v-if="data.type == 0"
+            :size="16"
+            color="var(--el-color-info)"
+          >
+            <SuccessFilled />
+          </el-icon>
+          <el-icon
+            v-else-if="data.type == 1"
+            :size="16"
+            color="var(--el-color-danger)"
+          >
             <QuestionFilled />
           </el-icon>
-          <el-icon v-else-if="data.type == 2" color="var(--el-color-warning)">
+          <el-icon
+            v-else-if="data.type == 2"
+            :size="16"
+            color="var(--el-color-warning)"
+          >
             <QuestionFilled />
           </el-icon>
-          <el-icon v-else-if="data.type == 3" color="var(--el-color-danger)">
+          <el-icon
+            v-else-if="data.type == 3"
+            :size="16"
+            color="var(--el-color-danger)"
+          >
             <WarnTriangleFilled />
           </el-icon>
-          <el-icon v-else-if="data.type == 4" color="var(--el-color-danger)">
-            <WarningFilled/>
+          <el-icon
+            v-else-if="data.type == 4"
+            :size="16"
+            color="var(--el-color-danger)"
+          >
+            <WarningFilled />
           </el-icon>
-          <el-icon v-else-if="data.type == 5" color="var(--el-color-warning)">
-            <WarningFilled/>
+          <el-icon
+            v-else-if="data.type == 5"
+            :size="16"
+            color="var(--el-color-warning)"
+          >
+            <WarningFilled />
           </el-icon>
-          <el-icon v-else-if="data.type == 6" color="var(--el-color-success)">
-            <SuccessFilled/>
+          <el-icon
+            v-else-if="data.type == 6"
+            :size="16"
+            color="var(--el-color-success)"
+          >
+            <SuccessFilled />
           </el-icon>
-          <div>{{ node.label }}</div>
+          <!-- <el-text>{{ node.label }}</el-text> -->
+          {{ node.label }}
+          <span v-if="data.count">
+            {{ '_(' + data.count + ')' }}
+            <!-- <el-text size="small">鐐规</el-text>) -->
+          </span>
         </div>
       </slot>
     </template>
@@ -61,16 +158,59 @@
         }
       ]
     },
-    loading: Boolean
+    loading: Boolean,
+    // 鏄惁灞曠ず鍥句緥
+    legend: {
+      type: Boolean,
+      default: false
+    }
   },
   emits: ['itemClick'],
   data() {
     return {
+      filterText: '',
       defaultProps: {
         children: 'children',
         label: 'title'
       },
-      isLoading: this.loading
+      isLoading: this.loading,
+      stateLabels: [
+        {
+          color: 'var(--el-color-info)',
+          name: '鏃犻棶棰�',
+          icon: 'SuccessFilled'
+        },
+        {
+          color: 'var(--el-color-danger)',
+          name: '闂鏈鏍�',
+          icon: 'QuestionFilled'
+        },
+        {
+          color: 'var(--el-color-warning)',
+          name: '闂閮ㄥ垎瀹℃牳',
+          icon: 'QuestionFilled'
+        },
+        {
+          color: 'var(--el-color-danger)',
+          name: '鏈暣鏀�',
+          icon: 'WarnTriangleFilled'
+        },
+        {
+          color: 'var(--el-color-danger)',
+          name: '鏁存敼鏈鏍�',
+          icon: 'WarningFilled'
+        },
+        {
+          color: 'var(--el-color-warning)',
+          name: '鏁存敼閮ㄥ垎瀹℃牳',
+          icon: 'WarningFilled'
+        },
+        {
+          color: 'var(--el-color-success)',
+          name: '瀹℃牳瀹屾垚',
+          icon: 'SuccessFilled'
+        }
+      ]
     };
   },
   computed: {
@@ -89,6 +229,7 @@
       for (const [key, value] of itemMap) {
         const i = {
           title: key,
+          count: value.length,
           children: []
         };
         value.forEach((v) => {
@@ -109,6 +250,9 @@
     }
   },
   watch: {
+    filterText(val) {
+      this.$refs.treeRef.filter(val);
+    },
     loading(nValue) {
       this.isLoading = nValue;
     },
@@ -116,17 +260,17 @@
     dataList(nValue) {
       if (this.isLoading) {
         if (nValue.length > 0) {
-          this.dataList.forEach((d) => {
-            d.children.forEach((c) => {
-              c.selected = false;
-            });
-          });
+          // this.dataList.forEach((d) => {
+          //   d.children.forEach((c) => {
+          //     c.selected = false;
+          //   });
+          // });
           if (nValue[0].children.length > 0) {
             const c = nValue[0].children[0];
-            c.selected = true;
+            // c.selected = true;
             this.$emit('itemClick', c);
           } else {
-            nValue[0].selected = true;
+            // nValue[0].selected = true;
           }
         }
         this.isLoading = false;
@@ -135,16 +279,21 @@
   },
   methods: {
     handleNodeClick(data) {
-      this.dataList.forEach((d) => {
-        d.children.forEach((c) => {
-          c.selected = false;
-        });
-      });
-      data.selected = true;
+      // this.dataList.forEach((d) => {
+      //   d.children.forEach((c) => {
+      //     c.selected = false;
+      //   });
+      // });
+      // data.selected = true;
       //鐖惰妭鐐圭殑鐐瑰嚮浜嬩欢涓嶅仛浼犻��
       if (data.children == undefined) {
         this.$emit('itemClick', data);
       }
+    },
+
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.title.includes(value);
     }
   }
 };
@@ -163,4 +312,15 @@
 .selected-tree-node {
   color: var(--el-color-primary);
 }
+
+.state-label {
+  position: sticky;
+  z-index: 1;
+  top: 0;
+  background-color: white;
+  // box-shadow: var(--el-box-shadow-light);
+  border-bottom: var(--el-border);
+  display: flex;
+  padding-bottom: 4px;
+}
 </style>
diff --git a/src/components/ToolBar.vue b/src/components/ToolBar.vue
index 09c3f3b..be6a898 100644
--- a/src/components/ToolBar.vue
+++ b/src/components/ToolBar.vue
@@ -9,6 +9,7 @@
             :key="i"
             :type="b.color ? b.color : 'primary'"
             size="small"
+            plain
             @click="b.click"
             >{{ b.name }}</el-button
           >
@@ -17,7 +18,7 @@
     </el-row>
     <el-row class="tag-group" v-if="title">
       <el-space>
-        <el-tag v-for="(d, i) in descriptions" :key="i" type="info" size="small">{{
+        <el-tag v-for="(d, i) in descriptions" :key="i" :type="d.type" size="small">{{
           d.name + ': ' + d.value
         }}</el-tag>
       </el-space>
diff --git a/src/components/core/BaseContentLayout.vue b/src/components/core/BaseContentLayout.vue
index c68f43c..e5f888c 100644
--- a/src/components/core/BaseContentLayout.vue
+++ b/src/components/core/BaseContentLayout.vue
@@ -5,7 +5,7 @@
     </el-header>
     <el-container>
       <el-aside class="el-aside" :style="'height: ' + mainHeight">
-        <el-scrollbar :noresize="true">
+        <el-scrollbar :noresize="true" style="position: relative;">
           <slot name="aside"></slot>
         </el-scrollbar>
       </el-aside>
diff --git a/src/views/fysp/check/ProCheck.vue b/src/views/fysp/check/ProCheck.vue
index 0e1c719..9cda78a 100644
--- a/src/views/fysp/check/ProCheck.vue
+++ b/src/views/fysp/check/ProCheck.vue
@@ -9,6 +9,7 @@
     </template>
     <template #aside>
       <SideList
+        legend
         :items="subtasks"
         :loading="sideLoading"
         @item-click="chooseSubtask"
@@ -37,7 +38,7 @@
           @check="handleProblemCheck"
         ></CompProblemCard>
       </el-scrollbar>
-      <el-empty v-else description="鏆傛棤璁板綍" v-loading="mainLoading" />
+      <el-empty v-else description="鏆傛棤闂" v-loading="mainLoading" />
     </template>
   </BaseContentLayout>
   <CompProblemAddOrUpd
@@ -106,21 +107,23 @@
       buttons: [
         {
           name: '鏂板闂',
-          color: 'success',
+          // color: 'success',
+          color: 'primary',
           click: () => {
             this.proAddOrUpdDialogVisible = true;
           }
         },
         {
           name: '鍦烘櫙鍥剧墖',
-          color: 'warning',
+          // color: 'warning',
+          color: 'primary',
           click: () => {
             this.anyPhotoDialog = true;
           }
         },
         {
           name: '璁炬柦璁惧',
-          color: 'info',
+          color: 'primary',
           click: () => {
             this.openDeviceShowDialog();
           }
@@ -238,6 +241,7 @@
         res.forEach((s) => {
           const t = this.getSubtaskType(s);
           list.push({
+            status: s.subtask.status,
             type: t,
             title: s.stName,
             categoly: s.stPlanTime.split('T')[0],
diff --git a/src/views/fysp/check/ProCheckProxy.js b/src/views/fysp/check/ProCheckProxy.js
index bebef21..533d9d6 100644
--- a/src/views/fysp/check/ProCheckProxy.js
+++ b/src/views/fysp/check/ProCheckProxy.js
@@ -1,4 +1,4 @@
-import { $fysp } from '@/api/index'
+import { $fysp } from '@/api/index';
 
 //闂鐘舵��
 const proStatus = {
@@ -8,7 +8,7 @@
   change_unCheck: 'change_unCheck',
   change_fail: 'change_fail',
   change_pass: 'change_pass'
-}
+};
 
 export default {
   //缁熻闂
@@ -34,25 +34,26 @@
       passPer: '0%',
       //瀹℃牳鐜�
       checkPer: '0%'
-    }
+    };
 
     proList.forEach((p) => {
-      if (p.ischanged) status.changeNum++
+      if (p.ischanged) status.changeNum++;
 
-      if (p.extension3 == 'fail' || p.extension3 == 'change_fail') status.unpassNum++
+      if (p.extension3 == 'fail' || p.extension3 == 'change_fail')
+        status.unpassNum++;
       else if (
         p.extension3 == 'unCheck' ||
         p.extension3 == 'change_unCheck' ||
         (p.extension3 == 'pass' && p.ischanged)
       )
-        status.uncheckNum++
-      else status.passNum++
+        status.uncheckNum++;
+      else status.passNum++;
 
       if (p.extension3 == proStatus.pass) {
-        status.proCheckedNum++
+        status.proCheckedNum++;
       }
       if (p.extension3 == proStatus.change_pass) {
-        status.changeCheckedNum++
+        status.changeCheckedNum++;
       }
 
       status.changePer =
@@ -60,37 +61,71 @@
           (status.changeNum / status.proNum) * 100
             ? ((status.changeNum / status.proNum) * 100).toFixed(1)
             : 0
-        ) + '%'
+        ) + '%';
       status.passPer =
         String(
           (status.passNum / status.proNum) * 100
             ? ((status.passNum / status.proNum) * 100).toFixed(1)
             : 0
-        ) + '%'
+        ) + '%';
       status.checkPer =
         String(
           ((status.passNum + status.unpassNum) / status.proNum) * 100
-            ? (((status.passNum + status.unpassNum) / status.proNum) * 100).toFixed(1)
+            ? (
+                ((status.passNum + status.unpassNum) / status.proNum) *
+                100
+              ).toFixed(1)
             : 0
-        ) + '%'
-    })
+        ) + '%';
+    });
 
-    return status
+    return status;
   },
 
   //缁熻闂锛岃繑鍥炴暟缁勫舰寮�
   proStatusArray(proList) {
-    const status = this.calProStatus(proList)
+    const status = this.calProStatus(proList);
     return [
-      { name: '闂鏁�', value: status.proNum },
-      { name: '鏁存敼鏁�', value: status.changeNum },
-      { name: '寰呭鏍�', value: status.uncheckNum },
-      { name: '宸插鏍�', value: status.passNum },
-      { name: '鏈�氳繃', value: status.unpassNum },
-      { name: '鏁存敼鐜�', value: status.changePer },
-      { name: '閫氳繃鐜�', value: status.passPer },
-      { name: '瀹℃牳鐜�', value: status.checkPer }
-    ]
+      { name: '闂鏁�', value: status.proNum, type: 'info' },
+      {
+        name: '鏁存敼鏁�',
+        value: status.changeNum,
+        type: status.changeNum < status.proNum ? 'danger' : 'info'
+      },
+      {
+        name: '寰呭鏍�',
+        value: status.uncheckNum,
+        type: status.uncheckNum > 0 ? 'danger' : 'info'
+      },
+      { name: '宸插鏍�', value: status.passNum, type: 'info' },
+      // {
+      //   name: '鏈�氳繃',
+      //   value: status.unpassNum,
+      //   type: status.unpassNum > 0 ? 'danger' : 'info'
+      // },
+      {
+        name: '鏁存敼鐜�',
+        value: status.changePer,
+        type:
+          status.proNum > 0 && status.changePer != '100.0%'
+            ? 'danger'
+            : 'success'
+      },
+      // {
+      //   name: '閫氳繃鐜�',
+      //   value: status.passPer,
+      //   type:
+      //     status.proNum > 0 && status.passPer != '100.0%' ? 'danger' : 'success'
+      // },
+      {
+        name: '瀹℃牳鐜�',
+        value: status.checkPer,
+        type:
+          status.proNum > 0 && status.checkPer != '100.0%'
+            ? 'danger'
+            : 'success'
+      }
+    ];
   },
 
   //闂鍥剧墖鍜屾暣鏀瑰浘鐗�
@@ -104,33 +139,83 @@
         title: '鏁存敼鍥剧墖',
         path: []
       }
-    ]
+    ];
     if (pro.mediafileList) {
       pro.mediafileList.forEach((m) => {
-        pics[m.ischanged ? 1 : 0].path.push(`${$fysp.imgUrl}${m.extension1}${m.guid}.jpg`)
-      })
+        pics[m.ischanged ? 1 : 0].path.push(
+          `${$fysp.imgUrl}${m.extension1}${m.guid}.jpg`
+        );
+      });
     }
 
-    return pics
+    return pics;
   },
 
   //闂瀹℃牳鐘舵�佽浆鎹腑鏂�
   proStatusMap(p) {
     switch (p) {
       case proStatus.unCheck:
-        return { name: '闂鏈鏍�', type: 'warning', index: 0, checkable: true, deletable: true, changeable: false }
+        return {
+          name: '闂鏈鏍�',
+          type: 'warning',
+          index: 0,
+          checkable: true,
+          deletable: true,
+          changeable: false
+        };
       case proStatus.pass:
-        return { name: '闂閫氳繃', type: 'success', index: 1, checkable: false, deletable: true, changeable: false }
+        return {
+          name: '闂閫氳繃',
+          type: 'success',
+          index: 1,
+          checkable: false,
+          deletable: true,
+          changeable: false
+        };
       case proStatus.fail:
-        return { name: '闂涓嶉�氳繃', type: 'danger', index: 1, checkable: false, deletable: true, changeable: false }
+        return {
+          name: '闂涓嶉�氳繃',
+          type: 'danger',
+          index: 1,
+          checkable: false,
+          deletable: true,
+          changeable: false
+        };
       case proStatus.change_unCheck:
-        return { name: '鏁存敼鏈鏍�', type: 'warning', index: 2, checkable: true, deletable: false, changeable: true }
+        return {
+          name: '鏁存敼鏈鏍�',
+          type: 'warning',
+          index: 2,
+          checkable: true,
+          deletable: false,
+          changeable: true
+        };
       case proStatus.change_fail:
-        return { name: '鏁存敼涓嶉�氳繃', type: 'danger', index: 3, checkable: false, deletable: false, changeable: true }
+        return {
+          name: '鏁存敼涓嶉�氳繃',
+          type: 'danger',
+          index: 3,
+          checkable: false,
+          deletable: false,
+          changeable: true
+        };
       case proStatus.change_pass:
-        return { name: '鏁存敼閫氳繃', type: 'success', index: 3, checkable: false, deletable: false, changeable: true }
+        return {
+          name: '鏁存敼閫氳繃',
+          type: 'success',
+          index: 3,
+          checkable: false,
+          deletable: false,
+          changeable: true
+        };
       default:
-        return { name: '闂鏈鏍�', type: 'warning', index: 0, checkable: true, deletable: true }
+        return {
+          name: '闂鏈鏍�',
+          type: 'warning',
+          index: 0,
+          checkable: true,
+          deletable: true
+        };
     }
   },
 
@@ -141,18 +226,18 @@
    * @returns 涓嬩竴涓棶棰樼姸鎬�
    */
   proNextStatus(s, isPass) {
-    let status, action
+    let status, action;
     switch (s) {
       case proStatus.unCheck:
-        status = isPass ? proStatus.pass : proStatus.fail
-        action = isPass ? 0 : 1
-        break
+        status = isPass ? proStatus.pass : proStatus.fail;
+        action = isPass ? 0 : 1;
+        break;
       case proStatus.change_unCheck:
-        status = isPass ? proStatus.change_pass : proStatus.change_fail
-        action = isPass ? 2 : 3
-        break
+        status = isPass ? proStatus.change_pass : proStatus.change_fail;
+        action = isPass ? 2 : 3;
+        break;
     }
-    return { status: status, action: action }
+    return { status: status, action: action };
   },
 
   /**
@@ -161,19 +246,19 @@
    * @returns 涓嬩竴涓棶棰樼姸鎬�
    */
   proBeforeStatus(s) {
-    let status, action
+    let status, action;
     switch (s) {
       case proStatus.fail:
       case proStatus.pass:
-        status = proStatus.unCheck
-        action = 4
-        break
-      case proStatus.change_fail:  
+        status = proStatus.unCheck;
+        action = 4;
+        break;
+      case proStatus.change_fail:
       case proStatus.change_pass:
-        status = proStatus.change_unCheck
-        action = 5
-        break
+        status = proStatus.change_unCheck;
+        action = 5;
+        break;
     }
-    return { status: status, action: action }
+    return { status: status, action: action };
   }
-}
+};
diff --git a/src/views/fysp/check/components/CompProblemCard.vue b/src/views/fysp/check/components/CompProblemCard.vue
index 2b0633f..aabc5b4 100644
--- a/src/views/fysp/check/components/CompProblemCard.vue
+++ b/src/views/fysp/check/components/CompProblemCard.vue
@@ -89,9 +89,16 @@
             type="danger"
             size="small"
             @click="deletePro"
-            :disabled="!proStatus.deletable"
+            disabled
             >鍒犻櫎</el-button
           >
+          <!-- <el-button
+            type="danger"
+            size="small"
+            @click="deletePro"
+            :disabled="!proStatus.deletable"
+            >鍒犻櫎</el-button
+          > -->
           <!-- 瀹℃牳椹冲洖鎿嶄綔 -->
           <!-- <el-button
             v-if="
diff --git a/src/views/fysp/check/components/CompSubTaskStatistic.vue b/src/views/fysp/check/components/CompSubTaskStatistic.vue
index bdff289..652cf44 100644
--- a/src/views/fysp/check/components/CompSubTaskStatistic.vue
+++ b/src/views/fysp/check/components/CompSubTaskStatistic.vue
@@ -1,43 +1,76 @@
 <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-descriptions-item
+        label="闂鏁�"
+        label-class-name="problem-label"
+        class-name="secondary-content"
+        >{{ summary.proCount }}</el-descriptions-item
+      >
+      <el-descriptions-item
+        label="鏁存敼鏁�"
+        label-class-name="problem-label"
+        class-name="secondary-content"
+        >{{ summary.changeCount }}</el-descriptions-item
+      >
+      <el-descriptions-item
+        label="鏁存敼鐜�"
+        label-class-name="problem-label"
+        :class-name="summary.changePer < 0.6 ? 'danger-content' : 'secondary-content'"
+        >{{ formatPercent(summary.changePer) }}</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-item
+        label="宸℃煡鐐规"
+        label-class-name="pro-check-label"
+        class-name="secondary-content"
+        >{{ summary.total }}</el-descriptions-item
+      >
+      <el-descriptions-item
+        label="闂鏈鏍�"
+        label-class-name="pro-check-label"
+        :class-name="summary.proUnCheck > 0 ? 'danger-content' : 'secondary-content'"
+        >{{ summary.proUnCheck }}</el-descriptions-item
+      >
+      <el-descriptions-item
+        label="閮ㄥ垎瀹℃牳"
+        label-class-name="pro-check-label"
+        :class-name="summary.proPartCheck > 0 ? 'danger-content' : 'secondary-content'"
+        >{{ summary.proPartCheck }}</el-descriptions-item
+      >
+      <el-descriptions-item
+        label="鍏ㄩ儴瀹℃牳"
+        label-class-name="pro-check-label"
+        class-name="secondary-content"
+        >{{ summary.proAllCheck }}</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-item
+        label="鏈暣鏀�"
+        label-class-name="change-check-label"
+        :class-name="summary.UnChange > 0 ? 'danger-content' : 'secondary-content'"
+        >{{ summary.UnChange }}</el-descriptions-item
+      >
+      <el-descriptions-item
+        label="鏁存敼鏈鏍�"
+        label-class-name="change-check-label"
+        :class-name="summary.changeUnCheck > 0 ? 'danger-content' : 'secondary-content'"
+        >{{ summary.changeUnCheck }}</el-descriptions-item
+      >
+      <el-descriptions-item
+        label="閮ㄥ垎瀹℃牳"
+        label-class-name="change-check-label"
+        :class-name="summary.changePartCheck > 0 ? 'danger-content' : 'secondary-content'"
+        >{{ summary.changePartCheck }}</el-descriptions-item
+      >
+      <el-descriptions-item
+        label="鍏ㄩ儴瀹℃牳"
+        label-class-name="change-check-label"
+        class-name="secondary-content"
+        >{{ summary.changeAllCheck }}</el-descriptions-item
+      >
     </el-descriptions>
   </el-space>
   <!-- <el-space>
@@ -68,7 +101,7 @@
         changeAllCheck: 0,
         proCount: 0,
         changeCount: 0,
-        changePer: '0%'
+        changePer: 0
       };
       this.subtasks.forEach((s) => {
         _summary.total++;
@@ -106,19 +139,14 @@
       });
 
       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;
+    }
+  },
+  methods: {
+    formatPercent(value) {
+      return Math.round(value * 1000) / 10 + '%';
     }
   }
 };
@@ -128,4 +156,34 @@
   padding: 0px 4px !important;
   /* font-size: 13px !important; */
 }
+
+:deep(.problem-label) {
+  background: var(--el-color-primary-light-7) !important;
+}
+:deep(.problem-content) {
+  /* background: var(--el-color-danger-light-9); */
+}
+
+:deep(.pro-check-label) {
+  background: var(--el-color-success-light-7) !important;
+}
+:deep(.pro-check-content) {
+}
+
+:deep(.change-check-label) {
+  background: var(--el-color-warning-light-7) !important;
+}
+:deep(.change-check-content) {
+}
+
+: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>
diff --git a/src/views/fysp/task/TaskManage.vue b/src/views/fysp/task/TaskManage.vue
index 5685aa5..2e01f89 100644
--- a/src/views/fysp/task/TaskManage.vue
+++ b/src/views/fysp/task/TaskManage.vue
@@ -229,10 +229,10 @@
           type = 0;
           break;
         case '姝e湪鎵ц':
-          type = 1;
+          type = 5;
           break;
         case '宸茬粨鏉�':
-          type = 2;
+          type = 6;
           break;
         default:
           type = 0;

--
Gitblit v1.9.3