From c47e02ce2df67fe5426bf186add45d141ddfbc00 Mon Sep 17 00:00:00 2001
From: wangting <wangting@vci-tech.com>
Date: 星期五, 20 十二月 2024 18:18:13 +0800
Subject: [PATCH] 图标管理

---
 Source/plt-web/plt-web-ui/src/components/PLT-basic-component/input-icon.vue |   84 ++++++++++++++++++++++++++----------------
 1 files changed, 52 insertions(+), 32 deletions(-)

diff --git a/Source/plt-web/plt-web-ui/src/components/PLT-basic-component/input-icon.vue b/Source/plt-web/plt-web-ui/src/components/PLT-basic-component/input-icon.vue
index 2617ce8..156d397 100644
--- a/Source/plt-web/plt-web-ui/src/components/PLT-basic-component/input-icon.vue
+++ b/Source/plt-web/plt-web-ui/src/components/PLT-basic-component/input-icon.vue
@@ -17,21 +17,21 @@
           <span class="tag-group__title">鍒嗙被</span>
           <el-tag
             v-for="item in types"
-            :key="item"
-            :type="checkedTypes.includes(item)?'success':'info'" size="small"
-            effect="plain" @click="changeType(item)">
-            {{ item }}
+            :key="item.value"
+            :type="checkedTypes.includes(item.value)?'success':'info'" size="small"
+            effect="plain" @click="changeType(item.value)">
+            {{ item.label }}
           </el-tag>
         </div>
-        <avue-input v-model="searchText" placeholder="鏌ヨ" size="mini" prefixIcon="el-icon-search" style="width: 300px;max-width: 30%"></avue-input>
+        <avue-input v-model="searchText" @change="handleSearch" placeholder="鏌ヨ" size="mini" prefixIcon="el-icon-search" style="width: 300px;max-width: 30%"></avue-input>
       </div>
       <div style="height: 60vh">
         <el-tabs v-model="activeName" @tab-click="handleTabClick">
-          <el-tab-pane v-for="item in iconList" :label="item.label" :name="item.label">
+          <el-tab-pane v-for="item in iconList" :label="item.lable" :name="item.lable" style="height: calc(60vh - 80px);;overflow: auto ">
             <div class="iconList">
-              <div class="iconItem" v-for="svg in item.list" :data-value="svg.name" @click="checkSvg(svg,item.type)">
-                <div v-html="svg.svg"></div>
-                <span>{{svg.name.split(':')[1]}}</span>
+              <div class="iconItem" v-for="svg in item.list" :data-value="svg.name" @click="checkSvg(svg,item.lable)">
+                <div v-html="svg.content"></div>
+                <!--<span>{{svg.name.split(':')[1]}}</span>-->
               </div>
             </div>
           </el-tab-pane>
@@ -79,11 +79,21 @@
   data(){
     return {
       visible: false,
-      types: ['鏍囩涓�' , '鏍囩浜�' ,  '鏍囩涓�' , '鏍囩鍥�','鏍囩浜�'  ],
+      types: [{
+        label:'鎸夐挳',
+        value:0
+      },{
+        label:'鏍囩浜�',
+        value:1
+      },{
+        label:'鏍囩涓�',
+        value:2
+      }],
       checkedTypes:[],
       searchText:'',
       activeName:'',
       svgHtml:'',
+      allIconList:[],
       iconList:[]
     }
   },
@@ -100,14 +110,16 @@
     } else {
       this.iconList = getStore({ name:'icons'});
     }
+    this.allIconList=this.iconList;
     if(this.iconList && this.iconList.length>0){
-      this.activeName=this.iconList[0].label;
+      this.activeName=this.iconList[0].lable;
     }else {
       getIcons().then(res => {
         this.iconList=res.data.data;
+        this.allIconList=this.iconList;
         store.dispatch("setIcons", this.iconList);
         if(this.iconList&&this.iconList.length>0) {
-          this.activeName=this.iconList[0].label;
+          this.activeName=this.iconList[0].lable;
         }
       })
     }
@@ -116,27 +128,10 @@
     dialogClose() {
       this.visible = false;
     },
-    handleFocus() {debugger;
+    handleFocus() {
       if (!this.disabled) {
         if(this.iconList&&this.iconList.length>0) {
-          this.activeName=this.iconList[0].label;
-        }else {
-          if (!validatenull(this.$store.state.icons)) {
-            this.iconList = this.$store.state.icons;
-          } else {
-            this.iconList = getStore({ name:'icons'});
-          }
-          if(this.iconList && this.iconList.length>0){
-            this.activeName=this.iconList[0].label;
-          }else {
-            getIcons().then(res => {
-              this.iconList=res.data.data;
-              store.dispatch("setIcons", this.iconList);
-              if(this.iconList&&this.iconList.length>0) {
-                this.activeName=this.iconList[0].label;
-              }
-            })
-          }
+          this.activeName=this.iconList[0].lable;
         }
         this.visible = true;
       }
@@ -148,16 +143,41 @@
       }else {
         this.checkedTypes.push(type)
       }
+      //鎸夌収鍒嗙被杩囨护鍥炬爣
+      if(this.checkedTypes.length==0){
+        this.iconList=this.allIconList
+      }else{
+        const checkedTypes=JSON.stringify(this.checkedTypes);
+        this.iconList=this.allIconList.filter(item=> {
+          return checkedTypes.indexOf(JSON.stringify(item.groups))!=-1;
+        })
+      }
+      this.activeName=this.iconList[0].lable;
     },
     handleTabClick(tab, event){
 
+    },
+    handleSearch(data){
+      if(data.value==''){
+        this.iconList=this.allIconList;
+      }
+      let iconList=[]
+      this.allIconList.forEach(item=> {
+        iconList.push({
+          lable:item.lable,
+          list: item.list.filter(iconItem=>{
+            return iconItem.name.replace(item.lable,'').indexOf(data.value)!=-1;
+          })
+        })
+      })
+      this.iconList=iconList;
     },
     clearValue(){
       this.svgHtml='';
       this.$emit('input','')
     },
     checkSvg(item){
-      this.svgHtml=item.svg;
+      this.svgHtml=item.content;
       this.$emit('input',item.name)
       this.dialogClose();
     }

--
Gitblit v1.9.3