From e181f04c642204e79749af93fa921875ff6c21ba Mon Sep 17 00:00:00 2001
From: baoshiwei <baoshiwei@shlanbao.cn>
Date: 星期二, 20 五月 2025 10:46:35 +0800
Subject: [PATCH] refactor(qms): 重构趋势图展示逻辑

---
 src/components/IconSelect/index.vue |   53 ++++++++++++++++++++++++++---------------------------
 1 files changed, 26 insertions(+), 27 deletions(-)

diff --git a/src/components/IconSelect/index.vue b/src/components/IconSelect/index.vue
index 330c44f..3bfde4d 100644
--- a/src/components/IconSelect/index.vue
+++ b/src/components/IconSelect/index.vue
@@ -1,25 +1,25 @@
 <template>
-  <div class="relative" :style="{ width: width }">
-    <el-input v-model="modelValue" readonly @click="visible = !visible" placeholder="鐐瑰嚮閫夋嫨鍥炬爣">
+  <div class="relative" :style="{ 'width': width }">
+    <el-input v-model="modelValue" readonly placeholder="鐐瑰嚮閫夋嫨鍥炬爣" @click="visible = !visible">
       <template #prepend>
-        <svg-icon :icon-class="modelValue as string"></svg-icon>
+        <svg-icon :icon-class="modelValue" />
       </template>
     </el-input>
 
     <el-popover shadow="none" :visible="visible" placement="bottom-end" trigger="click" :width="450">
       <template #reference>
-        <div @click="visible = !visible" class="cursor-pointer text-[#999] absolute right-[10px] top-0 height-[32px] leading-[32px]">
+        <div class="cursor-pointer text-[#999] absolute right-[10px] top-0 height-[32px] leading-[32px]" @click="visible = !visible">
           <i-ep-caret-top v-show="visible"></i-ep-caret-top>
           <i-ep-caret-bottom v-show="!visible"></i-ep-caret-bottom>
         </div>
       </template>
 
-      <el-input class="p-2" v-model="filterValue" placeholder="鎼滅储鍥炬爣" clearable @input="filterIcons" />
+      <el-input v-model="filterValue" class="p-2" placeholder="鎼滅储鍥炬爣" clearable @input="filterIcons" />
 
       <el-scrollbar height="w-[200px]">
         <ul class="icon-list">
           <el-tooltip v-for="(iconName, index) in iconNames" :key="index" :content="iconName" placement="bottom" effect="light">
-            <li class="icon-item" @click="selectedIcon(iconName)">
+            <li :class="['icon-item', { active: modelValue == iconName }]" @click="selectedIcon(iconName)">
               <svg-icon color="var(--el-text-color-regular)" :icon-class="iconName" />
             </li>
           </el-tooltip>
@@ -31,17 +31,11 @@
 
 <script setup lang="ts">
 import icons from '@/components/IconSelect/requireIcons';
+import { propTypes } from '@/utils/propTypes';
 
 const props = defineProps({
-    modelValue: {
-        type: String,
-        require: true
-    },
-    width: {
-        type: String,
-        require: false,
-        default: '400px'
-    }
+  modelValue: propTypes.string.isRequired,
+  width: propTypes.string.def('400px')
 });
 
 const emit = defineEmits(['update:modelValue']);
@@ -55,26 +49,27 @@
  * 绛涢�夊浘鏍�
  */
 const filterIcons = () => {
-    if (filterValue.value) {
-        iconNames.value = icons.filter(iconName =>
-            iconName.includes(filterValue.value)
-        );
-    } else {
-        iconNames.value = icons;
-    }
-}
-
+  if (filterValue.value) {
+    iconNames.value = icons.filter((iconName) => iconName.includes(filterValue.value));
+  } else {
+    iconNames.value = icons;
+  }
+};
 /**
  * 閫夋嫨鍥炬爣
  * @param iconName 閫夋嫨鐨勫浘鏍囧悕绉�
  */
 const selectedIcon = (iconName: string) => {
-    emit('update:modelValue', iconName);
-    visible.value = false;
-}
+  emit('update:modelValue', iconName);
+  visible.value = false;
+};
 </script>
 
 <style scoped lang="scss">
+.el-scrollbar {
+  max-height: calc(50vh - 100px) !important;
+  overflow-y: auto;
+}
 .el-divider--horizontal {
   margin: 10px auto !important;
 }
@@ -101,5 +96,9 @@
       transform: scaleX(1.1);
     }
   }
+  .active {
+    border-color: var(--el-color-primary);
+    color: var(--el-color-primary);
+  }
 }
 </style>

--
Gitblit v1.9.3