index.vue 2.17 KB
<style lang="scss" scoped>
    .menu-icons-container {
        padding: 1px 0;
        overflow: hidden;

        .icon-item {
            width: 45px;
            height: 45px;
            border: 1px solid #efefef;
            margin-right: -1px;
            margin-top: -1px;
            padding: 10px;
            text-align: center;
            float: left;
            font-size: 20px;
            line-height: 1;
            color: #24292e;
            cursor: pointer;

            &.selected {
                background-color: $primary;
                border-color: $primary;
                color: #fff;
                &:hover {
                    color: #fff;
                }
            }

            &:hover {
                color: $primary;
            }
        }

        span {
            display: block;
            font-size: 16px;
            margin-top: 10px;
        }

        .disabled {
            pointer-events: none;
        }
    }
</style>

<template>
    <div class="menu-icons-container">
        <div
            v-for="item of svgIcons"
            :key="item"
            :class="`icon-item${value === item?' selected':''}`"
            @click="handleClick(item,$event)"
        >
            <svg-icon :icon-class="item" class-name="disabled"/>
        </div>
    </div>
</template>

<script>
    import svgIcons from './svg-icons';
    import elementIcons from './element-icons';

    export default {
        name: 'MenuIcons',
        props: {
            value: {
                type: String,
                default: ''
            }
        },
        data() {
            return {
                svgIcons,
                elementIcons
            };
        },
        methods: {
            generateIconCode(symbol) {
                return `<svg-icon icon-class="${symbol}" />`;
            },
            generateElementIconCode(symbol) {
                return `<i class="el-icon-${symbol}" />`;
            },
            handleClick(item, event) {
                if (this.value === item) {
                    this.$emit('input', '');
                    return;
                }
                this.$emit('input', item);
            }
        }
    };
</script>