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> |