|  | @@ -1,14 +1,20 @@
 | 
	
		
			
				|  |  |  <!-- @author zhengjie -->
 | 
	
		
			
				|  |  |  <template>
 | 
	
		
			
				|  |  |    <div class="icon-body">
 | 
	
		
			
				|  |  | -    <el-input v-model="name" style="position: relative;" clearable placeholder="请输入图标名称" @clear="filterIcons" @input="filterIcons">
 | 
	
		
			
				|  |  | +    <el-input v-model="name" class="icon-search" 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>
 | 
	
		
			
				|  |  | +      <el-scrollbar>
 | 
	
		
			
				|  |  | +        <div class="list-container">
 | 
	
		
			
				|  |  | +          <div v-for="(item, index) in iconList" class="icon-item-wrapper" :key="index" @click="selectedIcon(item)">
 | 
	
		
			
				|  |  | +            <div :class="['icon-item', { active: activeIcon === item }]">
 | 
	
		
			
				|  |  | +              <svg-icon :icon-class="item" class-name="icon" style="height: 30px;width: 16px;" />
 | 
	
		
			
				|  |  | +              <span :title="item">{{ item }}</span>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +      </el-scrollbar>
 | 
	
		
			
				|  |  |      </div>
 | 
	
		
			
				|  |  |    </div>
 | 
	
		
			
				|  |  |  </template>
 | 
	
	
		
			
				|  | @@ -17,6 +23,11 @@
 | 
	
		
			
				|  |  |  import icons from './requireIcons'
 | 
	
		
			
				|  |  |  export default {
 | 
	
		
			
				|  |  |    name: 'IconSelect',
 | 
	
		
			
				|  |  | +  props: {
 | 
	
		
			
				|  |  | +    activeIcon: {
 | 
	
		
			
				|  |  | +      type: String
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  |    data() {
 | 
	
		
			
				|  |  |      return {
 | 
	
		
			
				|  |  |        name: '',
 | 
	
	
		
			
				|  | @@ -46,22 +57,55 @@ export default {
 | 
	
		
			
				|  |  |    .icon-body {
 | 
	
		
			
				|  |  |      width: 100%;
 | 
	
		
			
				|  |  |      padding: 10px;
 | 
	
		
			
				|  |  | +    .icon-search {
 | 
	
		
			
				|  |  | +      position: relative;
 | 
	
		
			
				|  |  | +      margin-bottom: 5px;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |      .icon-list {
 | 
	
		
			
				|  |  |        height: 200px;
 | 
	
		
			
				|  |  | -      overflow-y: scroll;
 | 
	
		
			
				|  |  | -      div {
 | 
	
		
			
				|  |  | -        height: 30px;
 | 
	
		
			
				|  |  | -        line-height: 30px;
 | 
	
		
			
				|  |  | -        margin-bottom: -5px;
 | 
	
		
			
				|  |  | -        cursor: pointer;
 | 
	
		
			
				|  |  | -        width: 33%;
 | 
	
		
			
				|  |  | -        float: left;
 | 
	
		
			
				|  |  | +      ::v-deep .el-scrollbar {
 | 
	
		
			
				|  |  | +        height: 100%;
 | 
	
		
			
				|  |  | +        .el-scrollbar__wrap {
 | 
	
		
			
				|  |  | +          overflow-x: hidden;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -      span {
 | 
	
		
			
				|  |  | -        display: inline-block;
 | 
	
		
			
				|  |  | -        vertical-align: -0.15em;
 | 
	
		
			
				|  |  | -        fill: currentColor;
 | 
	
		
			
				|  |  | -        overflow: hidden;
 | 
	
		
			
				|  |  | +      .list-container {
 | 
	
		
			
				|  |  | +        display: flex;
 | 
	
		
			
				|  |  | +        flex-wrap: wrap;
 | 
	
		
			
				|  |  | +        .icon-item-wrapper {
 | 
	
		
			
				|  |  | +          width: calc(100% / 3);
 | 
	
		
			
				|  |  | +          height: 30px;
 | 
	
		
			
				|  |  | +          line-height: 30px;
 | 
	
		
			
				|  |  | +          margin-bottom: -5px;
 | 
	
		
			
				|  |  | +          cursor: pointer;
 | 
	
		
			
				|  |  | +          display: flex;
 | 
	
		
			
				|  |  | +          .icon-item {
 | 
	
		
			
				|  |  | +            display: flex;
 | 
	
		
			
				|  |  | +            max-width: 100%;
 | 
	
		
			
				|  |  | +            height: 100%;
 | 
	
		
			
				|  |  | +            padding: 0 2px;
 | 
	
		
			
				|  |  | +            &:hover {
 | 
	
		
			
				|  |  | +              background: #ececec;
 | 
	
		
			
				|  |  | +              border-radius: 5px;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            .icon {
 | 
	
		
			
				|  |  | +              flex-shrink: 0;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            span {
 | 
	
		
			
				|  |  | +              display: inline-block;
 | 
	
		
			
				|  |  | +              vertical-align: -0.15em;
 | 
	
		
			
				|  |  | +              fill: currentColor;
 | 
	
		
			
				|  |  | +              padding-left: 2px;
 | 
	
		
			
				|  |  | +              overflow: hidden;
 | 
	
		
			
				|  |  | +              text-overflow: ellipsis;
 | 
	
		
			
				|  |  | +              white-space: nowrap;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          .icon-item.active {
 | 
	
		
			
				|  |  | +            background: #ececec;
 | 
	
		
			
				|  |  | +            border-radius: 5px;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 |