129 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | ||
| 	<a v-if="isShowA" class="uni-link" :href="href"
 | ||
| 		:class="{'uni-link--withline':showUnderLine===true||showUnderLine==='true'}"
 | ||
| 		:style="{color,fontSize:fontSize+'px'}" :download="download">
 | ||
| 		<slot>{{text}}</slot>
 | ||
| 	</a>
 | ||
| 	<!-- #ifndef APP-NVUE -->
 | ||
| 	<text v-else class="uni-link" :class="{'uni-link--withline':showUnderLine===true||showUnderLine==='true'}"
 | ||
| 		:style="{color,fontSize:fontSize+'px'}" @click="openURL">
 | ||
| 		<slot>{{text}}</slot>
 | ||
| 	</text>
 | ||
| 	<!-- #endif -->
 | ||
| 	<!-- #ifdef APP-NVUE -->
 | ||
| 	<text v-else class="uni-link" :class="{'uni-link--withline':showUnderLine===true||showUnderLine==='true'}"
 | ||
| 		:style="{color,fontSize:fontSize+'px'}" @click="openURL">
 | ||
| 		{{text}}
 | ||
| 	</text>
 | ||
| 	<!-- #endif -->
 | ||
| </template>
 | ||
| 
 | ||
| <script>
 | ||
| 	/**
 | ||
| 	 * Link 外部网页超链接组件
 | ||
| 	 * @description uni-link是一个外部网页超链接组件,在小程序内复制url,在app内打开外部浏览器,在h5端打开新网页
 | ||
| 	 * @tutorial https://ext.dcloud.net.cn/plugin?id=1182
 | ||
| 	 * @property {String} href 点击后打开的外部网页url
 | ||
| 	 * @property {String} text 显示的文字
 | ||
| 	 * @property {String} downlaod H5平台下载文件名
 | ||
| 	 * @property {Boolean} showUnderLine 是否显示下划线
 | ||
| 	 * @property {String} copyTips 在小程序端复制链接时显示的提示语
 | ||
| 	 * @property {String} color 链接文字颜色
 | ||
| 	 * @property {String} fontSize 链接文字大小
 | ||
| 	 * @example * <uni-link href="https://ext.dcloud.net.cn" text="https://ext.dcloud.net.cn"></uni-link>
 | ||
| 	 */
 | ||
| 	export default {
 | ||
| 		name: 'uniLink',
 | ||
| 		props: {
 | ||
| 			href: {
 | ||
| 				type: String,
 | ||
| 				default: ''
 | ||
| 			},
 | ||
| 			text: {
 | ||
| 				type: String,
 | ||
| 				default: ''
 | ||
| 			},
 | ||
| 			download: {
 | ||
| 				type: String,
 | ||
| 				default: ''
 | ||
| 			},
 | ||
| 			showUnderLine: {
 | ||
| 				type: [Boolean, String],
 | ||
| 				default: true
 | ||
| 			},
 | ||
| 			copyTips: {
 | ||
| 				type: String,
 | ||
| 				default: '已自动复制网址,请在手机浏览器里粘贴该网址'
 | ||
| 			},
 | ||
| 			color: {
 | ||
| 				type: String,
 | ||
| 				default: '#999999'
 | ||
| 			},
 | ||
| 			fontSize: {
 | ||
| 				type: [Number, String],
 | ||
| 				default: 14
 | ||
| 			}
 | ||
| 		},
 | ||
| 		computed: {
 | ||
| 			isShowA() {
 | ||
| 				// #ifdef H5
 | ||
| 				this._isH5 = true;
 | ||
| 				// #endif
 | ||
| 				if ((this.isMail() || this.isTel()) && this._isH5 === true) {
 | ||
| 					return true;
 | ||
| 				}
 | ||
| 				return false;
 | ||
| 			}
 | ||
| 		},
 | ||
| 		created() {
 | ||
| 			this._isH5 = null;
 | ||
| 		},
 | ||
| 		methods: {
 | ||
| 			isMail() {
 | ||
| 				return this.href.startsWith('mailto:');
 | ||
| 			},
 | ||
| 			isTel() {
 | ||
| 				return this.href.startsWith('tel:');
 | ||
| 			},
 | ||
| 			openURL() {
 | ||
| 				// #ifdef APP-PLUS
 | ||
| 				if (this.isTel()) {
 | ||
| 					this.makePhoneCall(this.href.replace('tel:', ''));
 | ||
| 				} else {
 | ||
| 					plus.runtime.openURL(this.href);
 | ||
| 				}
 | ||
| 				// #endif
 | ||
| 				// #ifdef H5
 | ||
| 				window.open(this.href)
 | ||
| 				// #endif
 | ||
| 				// #ifdef MP
 | ||
| 				uni.setClipboardData({
 | ||
| 					data: this.href
 | ||
| 				});
 | ||
| 				uni.showModal({
 | ||
| 					content: this.copyTips,
 | ||
| 					showCancel: false
 | ||
| 				});
 | ||
| 				// #endif
 | ||
| 			},
 | ||
| 			makePhoneCall(phoneNumber) {
 | ||
| 				uni.makePhoneCall({
 | ||
| 					phoneNumber
 | ||
| 				})
 | ||
| 			}
 | ||
| 		}
 | ||
| 	}
 | ||
| </script>
 | ||
| 
 | ||
| <style>
 | ||
| 	/* #ifndef APP-NVUE */
 | ||
| 	.uni-link {
 | ||
| 		cursor: pointer;
 | ||
| 	}
 | ||
| 
 | ||
| 	/* #endif */
 | ||
| 	.uni-link--withline {
 | ||
| 		text-decoration: underline;
 | ||
| 	}
 | ||
| </style>
 |