69 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
<!-- @author zhengjie -->
 | 
						|
<template>
 | 
						|
  <div class="icon-body">
 | 
						|
    <el-input v-model="name" style="position: relative;" clearable placeholder="请输入图标名称" @clear="filterIcons" @input.native="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>
 |