| 
									
										
										
										
											2023-03-18 10:59:05 +08:00
										 |  |  | <!-- @author zhengjie --> | 
					
						
							|  |  |  | <template> | 
					
						
							|  |  |  |   <div class="icon-body"> | 
					
						
							|  |  |  |     <el-input v-model="name" style="position: relative;" clearable placeholder="请输入图标名称" @clear="filterIcons" @input="filterIcons"> | 
					
						
							|  |  |  |       <i slot="suffix" class="el-icon-search el-input__icon" /> | 
					
						
							|  |  |  |     </el-input> | 
					
						
							|  |  |  |     <div class="icon-list"> | 
					
						
							|  |  |  |       <div v-for="(item, index) in iconList" :key="index" @click="selectedIcon(item)"> | 
					
						
							|  |  |  |         <svg-icon :icon-class="item" style="height: 30px;width: 16px;" /> | 
					
						
							|  |  |  |         <span>{{ item }}</span> | 
					
						
							|  |  |  |       </div> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |   </div> | 
					
						
							|  |  |  | </template> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <script> | 
					
						
							|  |  |  | import icons from './requireIcons' | 
					
						
							|  |  |  | export default { | 
					
						
							|  |  |  |   name: 'IconSelect', | 
					
						
							|  |  |  |   data() { | 
					
						
							|  |  |  |     return { | 
					
						
							|  |  |  |       name: '', | 
					
						
							|  |  |  |       iconList: icons | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  |   methods: { | 
					
						
							|  |  |  |     filterIcons() { | 
					
						
							|  |  |  |       this.iconList = icons | 
					
						
							|  |  |  |       if (this.name) { | 
					
						
							|  |  |  |         this.iconList = this.iconList.filter(item => item.includes(this.name)) | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     selectedIcon(name) { | 
					
						
							|  |  |  |       this.$emit('selected', name) | 
					
						
							|  |  |  |       document.body.click() | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     reset() { | 
					
						
							|  |  |  |       this.name = '' | 
					
						
							|  |  |  |       this.iconList = icons | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | </script> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <style rel="stylesheet/scss" lang="scss" scoped> | 
					
						
							|  |  |  |   .icon-body { | 
					
						
							|  |  |  |     width: 100%; | 
					
						
							|  |  |  |     padding: 10px; | 
					
						
							|  |  |  |     .icon-list { | 
					
						
							|  |  |  |       height: 200px; | 
					
						
							|  |  |  |       overflow-y: scroll; | 
					
						
							|  |  |  |       div { | 
					
						
							|  |  |  |         height: 30px; | 
					
						
							|  |  |  |         line-height: 30px; | 
					
						
							|  |  |  |         margin-bottom: -5px; | 
					
						
							|  |  |  |         cursor: pointer; | 
					
						
							|  |  |  |         width: 33%; | 
					
						
							|  |  |  |         float: left; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       span { | 
					
						
							|  |  |  |         display: inline-block; | 
					
						
							|  |  |  |         vertical-align: -0.15em; | 
					
						
							|  |  |  |         fill: currentColor; | 
					
						
							|  |  |  |         overflow: hidden; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | </style> |