1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
  | <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> 
 |  
  |