<template> 
 | 
    <!-- #ifdef APP-NVUE --> 
 | 
    <text :style="{ color: color, 'font-size': iconSize }" class="uni-icons" @click="_onClick">{{unicode}}</text> 
 | 
    <!-- #endif --> 
 | 
    <!-- #ifndef APP-NVUE --> 
 | 
    <text :style="{ color: color, 'font-size': iconSize }" class="uni-icons" :class="['uniui-'+type,customPrefix,customPrefix?type:'']" @click="_onClick"></text> 
 | 
    <!-- #endif --> 
 | 
</template> 
 | 
  
 | 
<script> 
 | 
    import icons from './icons.js'; 
 | 
    const getVal = (val) => { 
 | 
        const reg = /^[0-9]*$/g 
 | 
        return (typeof val === 'number' || reg.test(val) )? val + 'px' : val; 
 | 
    }  
 | 
    // #ifdef APP-NVUE 
 | 
    var domModule = weex.requireModule('dom'); 
 | 
    import iconUrl from './uniicons.ttf' 
 | 
    domModule.addRule('fontFace', { 
 | 
        'fontFamily': "uniicons", 
 | 
        'src': "url('"+iconUrl+"')" 
 | 
    }); 
 | 
    // #endif 
 | 
  
 | 
    /** 
 | 
     * Icons 图标 
 | 
     * @description 用于展示 icons 图标 
 | 
     * @tutorial https://ext.dcloud.net.cn/plugin?id=28 
 | 
     * @property {Number} size 图标大小 
 | 
     * @property {String} type 图标图案,参考示例 
 | 
     * @property {String} color 图标颜色 
 | 
     * @property {String} customPrefix 自定义图标 
 | 
     * @event {Function} click 点击 Icon 触发事件 
 | 
     */ 
 | 
    export default { 
 | 
        name: 'UniIcons', 
 | 
        emits:['click'], 
 | 
        props: { 
 | 
            type: { 
 | 
                type: String, 
 | 
                default: '' 
 | 
            }, 
 | 
            color: { 
 | 
                type: String, 
 | 
                default: '#333333' 
 | 
            }, 
 | 
            size: { 
 | 
                type: [Number, String], 
 | 
                default: 16 
 | 
            }, 
 | 
            customPrefix:{ 
 | 
                type: String, 
 | 
                default: '' 
 | 
            } 
 | 
        }, 
 | 
        data() { 
 | 
            return { 
 | 
                icons: icons.glyphs 
 | 
            } 
 | 
        }, 
 | 
        computed:{ 
 | 
            unicode(){ 
 | 
                let code = this.icons.find(v=>v.font_class === this.type) 
 | 
                if(code){ 
 | 
                    return unescape(`%u${code.unicode}`) 
 | 
                } 
 | 
                return '' 
 | 
            }, 
 | 
            iconSize(){ 
 | 
                return getVal(this.size) 
 | 
            } 
 | 
        }, 
 | 
        methods: { 
 | 
            _onClick() { 
 | 
                this.$emit('click') 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
</script> 
 | 
  
 | 
<style lang="scss"> 
 | 
    /* #ifndef APP-NVUE */ 
 | 
    @import './uniicons.css'; 
 | 
    @font-face { 
 | 
        font-family: uniicons; 
 | 
        src: url('./uniicons.ttf') format('truetype'); 
 | 
    } 
 | 
  
 | 
    /* #endif */ 
 | 
    .uni-icons { 
 | 
        font-family: uniicons; 
 | 
        text-decoration: none; 
 | 
        text-align: center; 
 | 
    } 
 | 
  
 | 
</style> 
 |