150 lines
3.4 KiB
Vue
150 lines
3.4 KiB
Vue
<template>
|
||
<!-- #ifndef APP-NVUE -->
|
||
<text :style="{ color:getColor, fontSize: getSize, fontWeight: fontWeight}" class="fui-icon"
|
||
:class="[!getColor && !primary?'fui-icon__color':'',primary && (!color || color===true)?'fui-icon__active-color':'',disabled?'fui-icon__not-allowed':'',customPrefix && customPrefix!==true?customPrefix:'',customPrefix && customPrefix!==true?name:'']"
|
||
@click="handleClick">{{ icons[name] || '' }}</text>
|
||
<!-- #endif -->
|
||
<!-- #ifdef APP-NVUE -->
|
||
<text
|
||
:style="{ color: primary && (!color || color===true)?primaryColor:getColor, fontSize: getSize,lineHeight:getSize, fontWeight: fontWeight}"
|
||
class="fui-icon" :class="[customPrefix && customPrefix!==true?customPrefix:'']"
|
||
@click="handleClick">{{ customPrefix && customPrefix!==true?name:icons[name] }}</text>
|
||
<!-- #endif -->
|
||
</template>
|
||
|
||
<script>
|
||
import icons from './fui-icon.js';
|
||
// #ifdef APP-NVUE
|
||
var domModule = weex.requireModule('dom');
|
||
import fuiicons from './fui-icon.ttf'
|
||
domModule.addRule('fontFace', {
|
||
'fontFamily': 'fuiFont',
|
||
'src': "url('" + fuiicons + "')"
|
||
});
|
||
// #endif
|
||
|
||
export default {
|
||
name: "fui-icon",
|
||
emits: ['click'],
|
||
// #ifdef MP-WEIXIN
|
||
options: {
|
||
addGlobalClass: true
|
||
},
|
||
// #endif
|
||
props: {
|
||
name: {
|
||
type: String,
|
||
default: ''
|
||
},
|
||
size: {
|
||
type: [Number, String],
|
||
default: 0
|
||
},
|
||
//rpx | px
|
||
unit: {
|
||
type: String,
|
||
default: ''
|
||
},
|
||
color: {
|
||
type: String,
|
||
default: ''
|
||
},
|
||
//字重
|
||
fontWeight: {
|
||
type: [Number, String],
|
||
default: 'normal'
|
||
},
|
||
//是否禁用点击
|
||
disabled: {
|
||
type: Boolean,
|
||
default: false
|
||
},
|
||
params: {
|
||
type: [Number, String],
|
||
default: 0
|
||
},
|
||
customPrefix: {
|
||
type: String,
|
||
default: ''
|
||
},
|
||
//是否显示为主色调,color为空时有效。【内部使用】
|
||
primary: {
|
||
type: Boolean,
|
||
default: false
|
||
}
|
||
},
|
||
computed: {
|
||
getSize() {
|
||
const size = (uni.$fui && uni.$fui.fuiIcon && uni.$fui.fuiIcon.size) || 64
|
||
const unit = (uni.$fui && uni.$fui.fuiIcon && uni.$fui.fuiIcon.unit) || 'rpx'
|
||
return (this.size || size) + (this.unit || unit)
|
||
},
|
||
primaryColor() {
|
||
const app = uni && uni.$fui && uni.$fui.color;
|
||
return (app && app.primary) || '#465CFF';
|
||
},
|
||
getColor() {
|
||
const app = uni && uni.$fui && uni.$fui.fuiIcon;
|
||
let color = this.color;
|
||
if (!color || (color && color === true)) {
|
||
color = (app && app.color)
|
||
}
|
||
// #ifdef APP-NVUE
|
||
if (!color || color === true) {
|
||
color = '#333333'
|
||
}
|
||
// #endif
|
||
return color;
|
||
}
|
||
},
|
||
data() {
|
||
return {
|
||
icons: icons
|
||
};
|
||
},
|
||
methods: {
|
||
handleClick() {
|
||
if (this.disabled) return;
|
||
this.$emit('click', {
|
||
params: this.params
|
||
});
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style scoped>
|
||
/* #ifndef APP-NVUE */
|
||
/* 头条小程序组件内不能引入字体,需要在父级页面引入字体文件*/
|
||
@font-face {
|
||
font-family: fuiFont;
|
||
src: url("./fui-icon.ttf") format("truetype");
|
||
}
|
||
|
||
/* #endif */
|
||
.fui-icon {
|
||
font-family: fuiFont;
|
||
text-decoration: none;
|
||
text-align: center;
|
||
/* #ifdef H5 */
|
||
cursor: pointer;
|
||
/* #endif */
|
||
}
|
||
|
||
/* #ifndef APP-NVUE */
|
||
.fui-icon__color {
|
||
color: var(--fui-color-section, #333333) !important;
|
||
}
|
||
|
||
.fui-icon__active-color {
|
||
color: var(--fui-color-primary, #465CFF) !important;
|
||
}
|
||
|
||
/* #endif */
|
||
|
||
.fui-icon__not-allowed {
|
||
/* #ifdef H5 */
|
||
cursor: not-allowed !important;
|
||
/* #endif */
|
||
}
|
||
</style> |