<template> 
 | 
    <text class="uni-tag" v-if="text" :class="classes" :style="customStyle" @click="onClick">{{text}}</text> 
 | 
</template> 
 | 
  
 | 
<script> 
 | 
    /** 
 | 
     * Tag 标签 
 | 
     * @description 用于展示1个或多个文字标签,可点击切换选中、不选中的状态 
 | 
     * @tutorial https://ext.dcloud.net.cn/plugin?id=35 
 | 
     * @property {String} text 标签内容 
 | 
     * @property {String} size = [default|small|mini] 大小尺寸 
 | 
     *     @value default 正常 
 | 
     *     @value small 小尺寸 
 | 
     *     @value mini 迷你尺寸 
 | 
     * @property {String} type = [default|primary|success|warning|error]  颜色类型 
 | 
     *     @value default 灰色 
 | 
     *     @value primary 蓝色 
 | 
     *     @value success 绿色 
 | 
     *     @value warning 黄色 
 | 
     *     @value error 红色 
 | 
     * @property {Boolean} disabled = [true|false] 是否为禁用状态 
 | 
     * @property {Boolean} inverted = [true|false] 是否无需背景颜色(空心标签) 
 | 
     * @property {Boolean} circle = [true|false] 是否为圆角 
 | 
     * @event {Function} click 点击 Tag 触发事件 
 | 
     */ 
 | 
  
 | 
    export default { 
 | 
        name: "UniTag", 
 | 
        emits: ['click'], 
 | 
        props: { 
 | 
            type: { 
 | 
                // 标签类型default、primary、success、warning、error、royal 
 | 
                type: String, 
 | 
                default: "default" 
 | 
            }, 
 | 
            size: { 
 | 
                // 标签大小 normal, small 
 | 
                type: String, 
 | 
                default: "normal" 
 | 
            }, 
 | 
            // 标签内容 
 | 
            text: { 
 | 
                type: String, 
 | 
                default: "" 
 | 
            }, 
 | 
            disabled: { 
 | 
                // 是否为禁用状态 
 | 
                type: [Boolean, String], 
 | 
                default: false 
 | 
            }, 
 | 
            inverted: { 
 | 
                // 是否为空心 
 | 
                type: [Boolean, String], 
 | 
                default: false 
 | 
            }, 
 | 
            circle: { 
 | 
                // 是否为圆角样式 
 | 
                type: [Boolean, String], 
 | 
                default: false 
 | 
            }, 
 | 
            mark: { 
 | 
                // 是否为标记样式 
 | 
                type: [Boolean, String], 
 | 
                default: false 
 | 
            }, 
 | 
            customStyle: { 
 | 
                type: String, 
 | 
                default: '' 
 | 
            } 
 | 
        }, 
 | 
        computed: { 
 | 
            classes() { 
 | 
                const { 
 | 
                    type, 
 | 
                    disabled, 
 | 
                    inverted, 
 | 
                    circle, 
 | 
                    mark, 
 | 
                    size, 
 | 
                    isTrue 
 | 
                } = this 
 | 
                const classArr = [ 
 | 
                    'uni-tag--' + type, 
 | 
                    'uni-tag--' + size, 
 | 
                    isTrue(disabled) ? 'uni-tag--disabled' : '', 
 | 
                    isTrue(inverted) ? 'uni-tag--' + type + '--inverted' : '', 
 | 
                    isTrue(circle) ? 'uni-tag--circle' : '', 
 | 
                    isTrue(mark) ? 'uni-tag--mark' : '', 
 | 
                    // type === 'default' ? 'uni-tag--default' : 'uni-tag-text', 
 | 
                    isTrue(inverted) ? 'uni-tag--inverted uni-tag-text--' + type : '', 
 | 
                    size === 'small' ? 'uni-tag-text--small' : '' 
 | 
                ] 
 | 
                // 返回类的字符串,兼容字节小程序 
 | 
                return classArr.join(' ') 
 | 
            } 
 | 
        }, 
 | 
        methods: { 
 | 
            isTrue(value) { 
 | 
                return value === true || value === 'true' 
 | 
            }, 
 | 
            onClick() { 
 | 
                if (this.isTrue(this.disabled)) return 
 | 
                this.$emit("click"); 
 | 
            } 
 | 
        } 
 | 
    }; 
 | 
</script> 
 | 
  
 | 
<style lang="scss" scoped> 
 | 
    $uni-primary: #2979ff !default; 
 | 
    $uni-success: #18bc37 !default; 
 | 
    $uni-warning: #f3a73f !default; 
 | 
    $uni-error: #e43d33 !default; 
 | 
    $uni-info: #8f939c !default; 
 | 
  
 | 
  
 | 
    $tag-default-pd: 4px 7px; 
 | 
    $tag-small-pd: 2px 5px; 
 | 
    $tag-mini-pd: 1px 3px; 
 | 
  
 | 
    .uni-tag { 
 | 
        line-height: 14px; 
 | 
        font-size: 12px; 
 | 
        font-weight: 200; 
 | 
        padding: $tag-default-pd; 
 | 
        color: #fff; 
 | 
        border-radius: 3px; 
 | 
        background-color: $uni-info; 
 | 
        border-width: 1rpx; 
 | 
        border-style: solid; 
 | 
        border-color: $uni-info; 
 | 
        /* #ifdef H5 */ 
 | 
        cursor: pointer; 
 | 
        /* #endif */ 
 | 
  
 | 
        // size attr 
 | 
        &--default { 
 | 
            font-size: 12px; 
 | 
        } 
 | 
  
 | 
        &--default--inverted { 
 | 
            color: $uni-info; 
 | 
            border-color: $uni-info; 
 | 
        } 
 | 
  
 | 
        &--small { 
 | 
            padding: $tag-small-pd; 
 | 
            font-size: 12px; 
 | 
            border-radius: 2px; 
 | 
        } 
 | 
  
 | 
        &--mini { 
 | 
            padding: $tag-mini-pd; 
 | 
            font-size: 12px; 
 | 
            border-radius: 2px; 
 | 
        } 
 | 
  
 | 
        // type attr 
 | 
        &--primary { 
 | 
            background-color: $uni-primary; 
 | 
            border-color: $uni-primary; 
 | 
            color: #fff; 
 | 
        } 
 | 
  
 | 
        &--success { 
 | 
            color: #fff; 
 | 
            background-color: $uni-success; 
 | 
            border-color: $uni-success; 
 | 
        } 
 | 
  
 | 
        &--warning { 
 | 
            color: #fff; 
 | 
            background-color: $uni-warning; 
 | 
            border-color: $uni-warning; 
 | 
        } 
 | 
  
 | 
        &--error { 
 | 
            color: #fff; 
 | 
            background-color: $uni-error; 
 | 
            border-color: $uni-error; 
 | 
        } 
 | 
  
 | 
        &--primary--inverted { 
 | 
            color: $uni-primary; 
 | 
            border-color: $uni-primary; 
 | 
        } 
 | 
  
 | 
        &--success--inverted { 
 | 
            color: $uni-success; 
 | 
            border-color: $uni-success; 
 | 
        } 
 | 
  
 | 
        &--warning--inverted { 
 | 
            color: $uni-warning; 
 | 
            border-color: $uni-warning; 
 | 
        } 
 | 
  
 | 
        &--error--inverted { 
 | 
            color: $uni-error; 
 | 
            border-color: $uni-error; 
 | 
        } 
 | 
  
 | 
        &--inverted { 
 | 
            background-color: #fff; 
 | 
        } 
 | 
  
 | 
        // other attr 
 | 
        &--circle { 
 | 
            border-radius: 15px !important; 
 | 
        } 
 | 
  
 | 
        &--mark { 
 | 
            border-top-left-radius: 0 !important; 
 | 
            border-bottom-left-radius: 0 !important; 
 | 
            border-top-right-radius: 15px !important; 
 | 
            border-bottom-right-radius: 15px !important; 
 | 
        } 
 | 
  
 | 
        &--disabled { 
 | 
            opacity: 0.5; 
 | 
            /* #ifdef H5 */ 
 | 
            cursor: not-allowed; 
 | 
            /* #endif */ 
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
    .uni-tag-text { 
 | 
        color: #fff; 
 | 
        font-size: 14px; 
 | 
  
 | 
        &--primary { 
 | 
            color: $uni-primary; 
 | 
        } 
 | 
  
 | 
        &--success { 
 | 
            color: $uni-success; 
 | 
        } 
 | 
  
 | 
        &--warning { 
 | 
            color: $uni-warning; 
 | 
        } 
 | 
  
 | 
        &--error { 
 | 
            color: $uni-error; 
 | 
        } 
 | 
  
 | 
        &--small { 
 | 
            font-size: 12px; 
 | 
        } 
 | 
    } 
 | 
</style> 
 |