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