111 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
| 	<!-- #ifdef APP-NVUE -->
 | |
| 	<text :style="styleObj" class="uni-icons" @click="_onClick">{{unicode}}</text>
 | |
| 	<!-- #endif -->
 | |
| 	<!-- #ifndef APP-NVUE -->
 | |
| 	<text :style="styleObj" class="uni-icons" :class="['uniui-'+type,customPrefix,customPrefix?type:'']" @click="_onClick">
 | |
| 		<slot></slot>
 | |
| 	</text>
 | |
| 	<!-- #endif -->
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| 	import { fontData } from './uniicons_file_vue.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: ''
 | |
| 			},
 | |
| 			fontFamily: {
 | |
| 				type: String,
 | |
| 				default: ''
 | |
| 			}
 | |
| 		},
 | |
| 		data() {
 | |
| 			return {
 | |
| 				icons: fontData
 | |
| 			}
 | |
| 		},
 | |
| 		computed: {
 | |
| 			unicode() {
 | |
| 				let code = this.icons.find(v => v.font_class === this.type)
 | |
| 				if (code) {
 | |
| 					return code.unicode
 | |
| 				}
 | |
| 				return ''
 | |
| 			},
 | |
| 			iconSize() {
 | |
| 				return getVal(this.size)
 | |
| 			},
 | |
| 			styleObj() {
 | |
| 				if (this.fontFamily !== '') {
 | |
| 					return `color: ${this.color}; font-size: ${this.iconSize}; font-family: ${this.fontFamily};`
 | |
| 				}
 | |
| 				return `color: ${this.color}; font-size: ${this.iconSize};`
 | |
| 			}
 | |
| 		},
 | |
| 		methods: {
 | |
| 			_onClick() {
 | |
| 				this.$emit('click')
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| </script>
 | |
| 
 | |
| <style lang="scss">
 | |
| 	/* #ifndef APP-NVUE */
 | |
| 	@import './uniicons.css';
 | |
| 
 | |
| 	@font-face {
 | |
| 		font-family: uniicons;
 | |
| 		src: url('./uniicons.ttf');
 | |
| 	}
 | |
| 
 | |
| 	/* #endif */
 | |
| 	.uni-icons {
 | |
| 		font-family: uniicons;
 | |
| 		text-decoration: none;
 | |
| 		text-align: center;
 | |
| 	}
 | |
| </style>
 |