| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 | 
							- <template>
 
-   <view
 
-       class="u-icon"
 
-       @tap="clickHandler"
 
-       :class="['u-icon--' + labelPos]"
 
-   >
 
-     <image
 
-         class="u-icon__img"
 
-         v-if="isImg"
 
-         :src="name"
 
-         :mode="imgMode"
 
-         :style="[imgStyle, $u.addStyle(customStyle)]"
 
-     ></image>
 
-     <text
 
-         v-else
 
-         class="u-icon__icon"
 
-         :class="uClasses"
 
-         :style="[iconStyle, $u.addStyle(customStyle)]"
 
-         :hover-class="hoverClass"
 
-     >{{ icon }}
 
-     </text>
 
-     <!-- 这里进行空字符串判断,如果仅仅是v-if="label",可能会出现传递0的时候,结果也无法显示 -->
 
-     <text
 
-         v-if="label !== ''"
 
-         class="u-icon__label"
 
-         :style="{
 
- 			color: labelColor,
 
- 			fontSize: $u.addUnit(labelSize),
 
- 			marginLeft: labelPos == 'right' ? $u.addUnit(space) : 0,
 
- 			marginTop: labelPos == 'bottom' ? $u.addUnit(space) : 0,
 
- 			marginRight: labelPos == 'left' ? $u.addUnit(space) : 0,
 
- 			marginBottom: labelPos == 'top' ? $u.addUnit(space) : 0,
 
- 		}"
 
-     >{{ label }}
 
-     </text>
 
-   </view>
 
- </template>
 
- <script>
 
- // #ifdef APP-NVUE
 
- // nvue通过weex的dom模块引入字体,相关文档地址如下:
 
- // https://weex.apache.org/zh/docs/modules/dom.html#addrule
 
- const fontUrl = 'https://at.alicdn.com/t/font_2225171_8kdcwk4po24.ttf'
 
- const domModule = weex.requireModule('dom')
 
- domModule.addRule('fontFace', {
 
-   'fontFamily': "uicon-iconfont",
 
-   'src': `url('${fontUrl}')`
 
- })
 
- // #endif
 
- // 引入图标名称,已经对应的unicode
 
- import icons from './icons'
 
- import props from './props.js';
 
- ;
 
- /**
 
-  * icon 图标
 
-  * @description 基于字体的图标集,包含了大多数常见场景的图标。
 
-  * @tutorial https://www.uviewui.com/components/icon.html
 
-  * @property {String}      name      图标名称,见示例图标集
 
-  * @property {String}      color      图标颜色,可接受主题色 (默认 color['u-content-color'] )
 
-  * @property {String | Number}  size      图标字体大小,单位px (默认 '16px' )
 
-  * @property {Boolean}      bold      是否显示粗体 (默认 false )
 
-  * @property {String | Number}  index      点击图标的时候传递事件出去的index(用于区分点击了哪一个)
 
-  * @property {String}      hoverClass    图标按下去的样式类,用法同uni的view组件的hoverClass参数,详情见官网
 
-  * @property {String}      customPrefix  自定义扩展前缀,方便用户扩展自己的图标库 (默认 'uicon' )
 
-  * @property {String | Number}  label      图标右侧的label文字
 
-  * @property {String}      labelPos    label相对于图标的位置,只能right或bottom (默认 'right' )
 
-  * @property {String | Number}  labelSize    label字体大小,单位px (默认 '15px' )
 
-  * @property {String}      labelColor    图标右侧的label文字颜色 ( 默认 color['u-content-color'] )
 
-  * @property {String | Number}  space      label与图标的距离,单位px (默认 '3px' )
 
-  * @property {String}      imgMode      图片的mode
 
-  * @property {String | Number}  width      显示图片小图标时的宽度
 
-  * @property {String | Number}  height      显示图片小图标时的高度
 
-  * @property {String | Number}  top        图标在垂直方向上的定位 用于解决某些情况下,让图标垂直居中的用途  (默认 0 )
 
-  * @property {Boolean}      stop      是否阻止事件传播 (默认 false )
 
-  * @property {Object}      customStyle    icon的样式,对象形式
 
-  * @event {Function} click 点击图标时触发
 
-  * @event {Function} touchstart 事件触摸时触发
 
-  * @example <u-icon name="photo" color="#2979ff" size="28"></u-icon>
 
-  */
 
- export default {
 
-   name: 'u-icon',
 
-   data() {
 
-     return {}
 
-   },
 
-   mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
 
-   computed: {
 
-     uClasses() {
 
-       let classes = []
 
-       classes.push(this.customPrefix + '-' + this.name)
 
-       // // uView的自定义图标类名为u-iconfont
 
-       // if (this.customPrefix == 'uicon') {
 
-       // 	classes.push('u-iconfont')
 
-       // } else {
 
-       // 	classes.push(this.customPrefix)
 
-       // }
 
-       // 主题色,通过类配置
 
-       if (this.color && uni.$u.config.type.includes(this.color)) classes.push('u-icon__icon--' + this.color)
 
-       // 阿里,头条,百度小程序通过数组绑定类名时,无法直接使用[a, b, c]的形式,否则无法识别
 
-       // 故需将其拆成一个字符串的形式,通过空格隔开各个类名
 
-       //#ifdef MP-ALIPAY || MP-TOUTIAO || MP-BAIDU
 
-       classes = classes.join(' ')
 
-       //#endif
 
-       return classes
 
-     },
 
-     iconStyle() {
 
-       let style = {}
 
-       style = {
 
-         fontSize: uni.$u.addUnit(this.size),
 
-         lineHeight: uni.$u.addUnit(this.size),
 
-         fontWeight: this.bold ? 'bold' : 'normal',
 
-         // 某些特殊情况需要设置一个到顶部的距离,才能更好的垂直居中
 
-         top: uni.$u.addUnit(this.top)
 
-       }
 
-       // 非主题色值时,才当作颜色值
 
-       if (this.color && !uni.$u.config.type.includes(this.color)) style.color = this.color
 
-       return style
 
-     },
 
-     // 判断传入的name属性,是否图片路径,只要带有"/"均认为是图片形式
 
-     isImg() {
 
-       return this.name.indexOf('/') !== -1
 
-     },
 
-     imgStyle() {
 
-       let style = {}
 
-       // 如果设置width和height属性,则优先使用,否则使用size属性
 
-       style.width = this.width ? uni.$u.addUnit(this.width) : uni.$u.addUnit(this.size)
 
-       style.height = this.height ? uni.$u.addUnit(this.height) : uni.$u.addUnit(this.size)
 
-       return style
 
-     },
 
-     // 通过图标名,查找对应的图标
 
-     icon() {
 
-       // 如果内置的图标中找不到对应的图标,就直接返回name值,因为用户可能传入的是unicode代码
 
-       return icons['uicon-' + this.name] || this.name
 
-     }
 
-   },
 
-   methods: {
 
-     clickHandler(e) {
 
-       this.$emit('click', this.index)
 
-       // 是否阻止事件冒泡
 
-       this.stop && this.preventEvent(e)
 
-     }
 
-   }
 
- }
 
- </script>
 
- <style lang="scss" scoped>
 
- @import "../../libs/css/components.scss";
 
- // 变量定义
 
- $u-icon-primary: $u-primary !default;
 
- $u-icon-success: $u-success !default;
 
- $u-icon-info: $u-info !default;
 
- $u-icon-warning: $u-warning !default;
 
- $u-icon-error: $u-error !default;
 
- $u-icon-label-line-height: 1 !default;
 
- /* #ifndef APP-NVUE */
 
- // 非nvue下加载字体
 
- @font-face {
 
-   font-family: 'uicon-iconfont';
 
-   src: url('https://at.alicdn.com/t/font_2225171_8kdcwk4po24.ttf') format('truetype');
 
- }
 
- /* #endif */
 
- .u-icon {
 
-   /* #ifndef APP-NVUE */
 
-   display: flex;
 
-   /* #endif */
 
-   align-items: center;
 
-   &--left {
 
-     flex-direction: row-reverse;
 
-     align-items: center;
 
-   }
 
-   &--right {
 
-     flex-direction: row;
 
-     align-items: center;
 
-   }
 
-   &--top {
 
-     flex-direction: column-reverse;
 
-     justify-content: center;
 
-   }
 
-   &--bottom {
 
-     flex-direction: column;
 
-     justify-content: center;
 
-   }
 
-   &__icon {
 
-     font-family: uicon-iconfont;
 
-     position: relative;
 
-     @include flex;
 
-     align-items: center;
 
-     &--primary {
 
-       color: $u-icon-primary;
 
-     }
 
-     &--success {
 
-       color: $u-icon-success;
 
-     }
 
-     &--error {
 
-       color: $u-icon-error;
 
-     }
 
-     &--warning {
 
-       color: $u-icon-warning;
 
-     }
 
-     &--info {
 
-       color: $u-icon-info;
 
-     }
 
-   }
 
-   &__img {
 
-     /* #ifndef APP-NVUE */
 
-     height: auto;
 
-     will-change: transform;
 
-     /* #endif */
 
-   }
 
-   &__label {
 
-     /* #ifndef APP-NVUE */
 
-     line-height: $u-icon-label-line-height;
 
-     /* #endif */
 
-   }
 
- }
 
- </style>
 
 
  |