From 647143f53034653d9a1a2f74aaf051d868cd37a7 Mon Sep 17 00:00:00 2001
From: 田源 <tianyuan@vci-tech.com>
Date: 星期五, 27 十二月 2024 14:28:54 +0800
Subject: [PATCH] 菜单图标放大以及图标错乱问题
---
Source/plt-web/plt-web-ui/src/components/PLT-basic-component/input-icon.vue | 121 +++++++++++++++++++++++++++-------------
1 files changed, 82 insertions(+), 39 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..1b14178 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
@@ -2,7 +2,7 @@
<div>
<el-input :width="width" :class="inputClass" :style="inputStyle" :clearable="true" :value="value"
:disabled="disabled" :placeholder="placeholder" type="text" :size="size" @clear="clearValue" @focus="handleFocus">
- <span slot="append" v-html="svgHtml"></span>
+ <span slot="append" v-html="svgHtml" style="font-size: 20px;padding:3px 10px;width:20px;height:20px;display: block" @click="handleFocus"></span>
</el-input>
<el-dialog v-dialogDrag
v-dialog-resize
@@ -17,20 +17,20 @@
<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.key"
+ :type="checkedTypes.includes(item.key)?'success':'info'" size="small"
+ effect="plain" @click="changeType(item.key)">
+ {{ item.value }}
</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 - 60px);;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>
+ <div class="iconItem" v-for="svg in item.list" :data-value="svg.name" @click="checkSvg(svg,item.lable)">
+ <div class="svgContent" v-html="svg.content"></div>
<span>{{svg.name.split(':')[1]}}</span>
</div>
</div>
@@ -47,6 +47,7 @@
import func from "@/util/func";
import store from "@/store";
import {getIcons} from "@/api/UI/Icons";
+import {getDicts} from "@/api/system/dict";
export default {
name: "input-icon",
@@ -79,11 +80,12 @@
data(){
return {
visible: false,
- types: ['鏍囩涓�' , '鏍囩浜�' , '鏍囩涓�' , '鏍囩鍥�','鏍囩浜�' ],
+ types: [],
checkedTypes:[],
searchText:'',
activeName:'',
svgHtml:'',
+ allIconList:[],
iconList:[]
}
},
@@ -95,48 +97,49 @@
}
},
created(){
+ this.getGroups();
if (!validatenull(this.$store.state.icons)) {
this.iconList = this.$store.state.icons;
} 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;
- store.dispatch("setIcons", this.iconList);
- if(this.iconList&&this.iconList.length>0) {
- this.activeName=this.iconList[0].label;
+ if (res.data.success) {
+ this.iconList = res.data.data;
+ this.allIconList = this.iconList;
+ store.dispatch("setIcons", this.iconList);
+ if (this.iconList.length > 0) {
+ this.activeName = this.iconList[0].lable;
+ }
+ } else {
+ this.$message.error(res.data.msg);
}
})
}
+
+ this.svgHtml=func.getSVGByName(this.value);
},
methods:{
+ getGroups() {
+ getDicts('EnumIconGroups').then(res => {
+ if (res.data.success) {
+ this.types = res.data.obj;
+ } else {
+ this.$message.error(res.data.msg);
+ }
+ })
+ },
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 +151,48 @@
}else {
this.checkedTypes.push(type)
}
+ //鎸夌収鍒嗙被杩囨护鍥炬爣
+ if(this.checkedTypes.length==0){
+ this.iconList=this.allIconList
+ }else{
+ const checkedTypes=JSON.stringify(this.checkedTypes);
+ const iconList=[];
+ this.allIconList.forEach(item=>{
+ iconList.push({
+ lable:item.lable,
+ list:item.list.filter(iconitem=> {
+ return checkedTypes.indexOf(iconitem.groups)!=-1;
+ })
+ })
+ })
+ this.iconList=iconList;
+ }
+ 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();
}
@@ -165,7 +200,12 @@
}
</script>
-<style scoped>
+<style scoped lang="scss">
+::v-deep{
+ .el-input-group__append, .el-input-group__prepend{
+ padding: 0;
+ }
+}
.tag-group{font-size: 14px;}
.el-tag{
margin: 0 0 10px 10px;
@@ -177,11 +217,14 @@
flex-wrap: wrap;
}
.iconList .iconItem{
- width: 65px;
- margin: 6px;
+ width: 85px;
+ margin: 6px 5px 10px 5px;
text-align: center;
}
-.iconList .iconItem div:hover{
+.iconList .iconItem .svgContent{
+ font-size: 24px;
+}
+.iconList .iconItem .svgContent:hover{
transform: scale(1.5);
}
.iconList .iconItem span{
--
Gitblit v1.9.3