vue自定义实现icon选择器

<template>

  <div>

    <span class="iconStyle" @click="selectIcon">

      <i :class="value" />

    </span>

    <div class="iconTitle">选择图标</div>

    <el-dialog

      title=""

      :visible.sync="dialogVisible"

      width="40%"

      :close-on-click-modal="false"

      :modal="false"

      :show-close="false"

    >

      <div class="iconList">

        <el-tabs v-model="activeName">

          <el-tab-pane

            v-for="item in list"

            :key="item.label"

            :name="item.label"

            :label="item.label"

          >

            <el-scrollbar wrap-class="scrollbar-wrapper">

              <span class="icon" v-for="(item, index) in item.list" :key="item">

                <i

                  :key="item"

                  :class="[item]"

                  :style="{ color: showIndex == index ? '#3a84ff' : '' }"

                  @click="setIcon(item, index)"

                ></i>

              </span>

            </el-scrollbar>

          </el-tab-pane>

        </el-tabs>

      </div>

      <span slot="footer" class="dialog-footer">

        <el-button type="primary" @click="dialogVisible = false"

          >确定</el-button

        >

        <el-button @click="cancel">取消</el-button>

      </span>

    </el-dialog>

  </div>

</template>

  <script>

export default {

  name: "selectIcon",

  model: {

    prop: "value",

    event: "input",

  },

  props: {

    value: {

      type: String,

      default: "",

    },

  },

  data() {

    return {

      dialogVisible: false,

      activeName: "系统图标",

      showIndex: 0,

      list: [

        // {

        //   label: "线框",

        //   list: [

        //     "el-icon-eleme",

        //     "el-icon-delete",

        //     "el-icon-setting",

        //     "el-icon-user",

        //     "el-icon-phone-outline",

        //     "el-icon-more-outline",

        //     "el-icon-star-off",

        //     "el-icon-goods",

        //     "el-icon-warning-outline",

        //     "el-icon-zoom-in",

        //     "el-icon-zoom-out",

        //     "el-icon-remove-outline",

        //     "el-icon-circle-plus-outline",

        //     "el-icon-circle-check",

        //     "el-icon-circle-close",

        //     "el-icon-help",

        //     "el-icon-minus",

        //     "el-icon-plus",

        //     "el-icon-check",

        //     "el-icon-close",

        //     "el-icon-picture-outline",

        //     "el-icon-picture-outline-round",

        //     "el-icon-upload2",

        //     "el-icon-download",

        //     "el-icon-camera",

        //     "el-icon-video-camera",

        //     "el-icon-bell",

        //     "el-icon-bottom-left",

        //     "el-icon-bottom-right",

        //     "el-icon-back",

        //     "el-icon-right",

        //     "el-icon-bottom",

        //     "el-icon-top",

        //     "el-icon-top-left",

        //     "el-icon-top-right",

        //     "el-icon-arrow-left",

        //     "el-icon-arrow-right",

        //     "el-icon-arrow-down",

        //     "el-icon-arrow-up",

        //     "el-icon-d-arrow-left",

        //     "el-icon-d-arrow-right",

        //     "el-icon-video-pause",

        //     "el-icon-video-play",

        //     "el-icon-refresh",

        //     "el-icon-refresh-right",

        //     "el-icon-refresh-left",

        //     "el-icon-finished",

        //     "el-icon-sort",

        //     "el-icon-sort-up",

        //     "el-icon-sort-down",

        //     "el-icon-rank",

        //     "el-icon-loading",

        //     "el-icon-view",

        //     "el-icon-c-scale-to-original",

        //     "el-icon-date",

        //     "el-icon-edit",

        //     "el-icon-edit-outline",

        //     "el-icon-folder",

        //     "el-icon-folder-opened",

        //     "el-icon-folder-add",

        //     "el-icon-folder-remove",

        //     "el-icon-folder-delete",

        //     "el-icon-folder-checked",

        //     "el-icon-tickets",

        //     "el-icon-document-remove",

        //     "el-icon-document-delete",

        //     "el-icon-document-copy",

        //     "el-icon-document-checked",

        //     "el-icon-document",

        //     "el-icon-document-add",

        //     "el-icon-printer",

        //     "el-icon-paperclip",

        //     "el-icon-takeaway-box",

        //     "el-icon-search",

        //     "el-icon-monitor",

        //     "el-icon-attract",

        //     "el-icon-mobile",

        //     "el-icon-scissors",

        //     "el-icon-umbrella",

        //     "el-icon-headset",

        //     "el-icon-brush",

        //     "el-icon-mouse",

        //     "el-icon-coordinate",

        //     "el-icon-magic-stick",

        //     "el-icon-reading",

        //     "el-icon-data-line",

        //     "el-icon-data-board",

        //     "el-icon-pie-chart",

        //     "el-icon-data-analysis",

        //     "el-icon-collection-tag",

        //     "el-icon-film",

        //     "el-icon-suitcase",

        //     "el-icon-suitcase-1",

        //     "el-icon-receiving",

        //     "el-icon-collection",

        //     "el-icon-files",

        //     "el-icon-notebook-1",

        //     "el-icon-notebook-2",

        //     "el-icon-toilet-paper",

        //     "el-icon-office-building",

        //     "el-icon-school",

        //     "el-icon-table-lamp",

        //     "el-icon-house",

        //     "el-icon-no-smoking",

        //     "el-icon-smoking",

        //     "el-icon-shopping-cart-full",

        //     "el-icon-shopping-cart-1",

        //     "el-icon-shopping-cart-2",

        //     "el-icon-shopping-bag-1",

        //     "el-icon-shopping-bag-2",

        //     "el-icon-sold-out",

        //     "el-icon-sell",

        //     "el-icon-present",

        //     "el-icon-box",

        //     "el-icon-bank-card",

        //     "el-icon-money",

        //     "el-icon-coin",

        //     "el-icon-wallet",

        //     "el-icon-discount",

        //     "el-icon-price-tag",

        //     "el-icon-news",

        //     "el-icon-guide",

        //     "el-icon-male",

        //     "el-icon-female",

        //     "el-icon-thumb",

        //     "el-icon-cpu",

        //     "el-icon-link",

        //     "el-icon-connection",

        //     "el-icon-open",

        //     "el-icon-turn-off",

        //     "el-icon-set-up",

        //     "el-icon-chat-round",

        //     "el-icon-chat-line-round",

        //     "el-icon-chat-square",

        //     "el-icon-chat-dot-round",

        //     "el-icon-chat-dot-square",

        //     "el-icon-chat-line-square",

        //     "el-icon-message",

        //     "el-icon-postcard",

        //     "el-icon-position",

        //     "el-icon-turn-off-microphone",

        //     "el-icon-microphone",

        //     "el-icon-close-notification",

        //     "el-icon-bangzhu",

        //     "el-icon-time",

        //     "el-icon-odometer",

        //     "el-icon-crop",

        //     "el-icon-aim",

        //     "el-icon-switch-button",

        //     "el-icon-full-screen",

        //     "el-icon-copy-document",

        //     "el-icon-mic",

        //     "el-icon-stopwatch",

        //     "el-icon-medal-1",

        //     "el-icon-medal",

        //     "el-icon-trophy",

        //     "el-icon-trophy-1",

        //     "el-icon-first-aid-kit",

        //     "el-icon-discover",

        //     "el-icon-place",

        //     "el-icon-location",

        //     "el-icon-location-outline",

        //     "el-icon-location-information",

        //     "el-icon-add-location",

        //     "el-icon-delete-location",

        //     "el-icon-map-location",

        //     "el-icon-alarm-clock",

        //     "el-icon-timer",

        //     "el-icon-watch-1",

        //     "el-icon-watch",

        //     "el-icon-lock",

        //     "el-icon-unlock",

        //     "el-icon-key",

        //     "el-icon-service",

        //     "el-icon-mobile-phone",

        //     "el-icon-bicycle",

        //     "el-icon-truck",

        //     "el-icon-ship",

        //     "el-icon-basketball",

        //     "el-icon-football",

        //     "el-icon-soccer",

        //     "el-icon-baseball",

        //     "el-icon-wind-power",

        //     "el-icon-light-rain",

        //     "el-icon-lightning",

        //     "el-icon-heavy-rain",

        //     "el-icon-sunrise",

        //     "el-icon-sunrise-1",

        //     "el-icon-sunset",

        //     "el-icon-sunny",

        //     "el-icon-cloudy",

        //     "el-icon-partly-cloudy",

        //     "el-icon-cloudy-and-sunny",

        //     "el-icon-moon",

        //     "el-icon-moon-night",

        //     "el-icon-dish",

        //     "el-icon-dish-1",

        //     "el-icon-food",

        //     "el-icon-chicken",

        //     "el-icon-fork-spoon",

        //     "el-icon-knife-fork",

        //     "el-icon-burger",

        //     "el-icon-tableware",

        //     "el-icon-sugar",

        //     "el-icon-dessert",

        //     "el-icon-ice-cream",

        //     "el-icon-hot-water",

        //     "el-icon-water-cup",

        //     "el-icon-coffee-cup",

        //     "el-icon-cold-drink",

        //     "el-icon-goblet",

        //     "el-icon-goblet-full",

        //     "el-icon-goblet-square",

        //     "el-icon-goblet-square-full",

        //     "el-icon-refrigerator",

        //     "el-icon-grape",

        //     "el-icon-watermelon",

        //     "el-icon-cherry",

        //     "el-icon-apple",

        //     "el-icon-pear",

        //     "el-icon-orange",

        //     "el-icon-coffee",

        //     "el-icon-ice-tea",

        //     "el-icon-ice-drink",

        //     "el-icon-milk-tea",

        //     "el-icon-potato-strips",

        //     "el-icon-lollipop",

        //     "el-icon-ice-cream-square",

        //     "el-icon-ice-cream-round",

        //   ],

        // },

        {

          label: "系统图标",

          list: [

            "el-icon-question",

            "el-icon-platform-eleme",

            "el-icon-delete-solid",

            "el-icon-s-tools",

            "el-icon-user-solid",

            "el-icon-phone",

            "el-icon-more",

            "el-icon-star-on",

            "el-icon-s-goods",

            "el-icon-warning",

            "el-icon-info",

            "el-icon-remove",

            "el-icon-circle-plus",

            "el-icon-success",

            "el-icon-error",

            "el-icon-s-help",

            "el-icon-picture",

            "el-icon-upload",

            "el-icon-camera-solid",

            "el-icon-video-camera-solid",

            "el-icon-message-solid",

            "el-icon-s-cooperation",

            "el-icon-s-order",

            "el-icon-s-platform",

            "el-icon-s-fold",

            "el-icon-s-unfold",

            "el-icon-s-operation",

            "el-icon-s-promotion",

            "el-icon-s-home",

            "el-icon-s-release",

            "el-icon-s-ticket",

            "el-icon-s-management",

            "el-icon-s-open",

            "el-icon-s-shop",

            "el-icon-s-marketing",

            "el-icon-s-flag",

            "el-icon-s-comment",

            "el-icon-s-finance",

            "el-icon-s-claim",

            "el-icon-s-custom",

            "el-icon-s-opportunity",

            "el-icon-s-data",

            "el-icon-s-check",

            "el-icon-s-grid",

            "el-icon-menu",

            "el-icon-share",

            "el-icon-d-caret",

            "el-icon-caret-left",

            "el-icon-caret-right",

            "el-icon-caret-bottom",

            "el-icon-caret-top",

          ],

        },

      ],

    };

  },

  methods: {

    setIcon(row, index) {

      this.showIndex = index;

      this.$emit("input", row);

    },

    cancel() {

        this.dialogVisible = false

        this.showIndex = 0;

        this.$emit('cancelIcon')

    },

    selectIcon() {

      this.dialogVisible = true;

    },

  },

};

</script>

  <style scoped lang="scss">

.iconList {

  .el-tab-pane {

    .el-scrollbar {

      width: 600px;

      height: 388px;

      overflow-x: hidden !important;

      .icon {

        display: inline-block;

        width: calc((100% - 60px) / 6);

        height: 40px;

        border: 1px solid #ededed;

        text-align: center;

        box-sizing: border-box;

        line-height: 38px;

        margin-right: 10px;

        border-radius: 3px;

        margin-top: 10px;

        cursor: pointer;

        &:nth-child(-n + 6) {

          margin-top: 0;

        }

        i {

          font-size: 16px;

          color: #303133;

          transition: all 100ms;

        }

        &:hover {

          box-shadow: 0 4px 12px 0 rgba(0, 0, 0, 0.15);

          i {

            transform: scale(1.5);

          }

        }

      }

    }

  }

}

.iconStyle {

  display: inline-block;

  width: 85px;

  height: 85px;

  border-radius: 50%;

  border: 1px solid #ccc;

  text-align: center;

  line-height: 116px;

  cursor: pointer;

  i {

    font-size: 60px;

    color: #3a84ff;

  }

}

.iconTitle {

    margin-left: 15px;

    margin-top: 3px;

}

</style>

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值