Files
CNCEC_APP/uni_modules/uview-pro/components/u-link/u-link.vue
T
2026-03-25 14:54:15 +08:00

90 lines
2.6 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<text
class="u-link"
@tap.stop="openLink"
:style="{
color: color,
fontSize: fontSize + 'rpx',
borderBottom: underLine ? `1px solid ${lineColor ? lineColor : color}` : 'none',
paddingBottom: underLine ? '0rpx' : '0'
}"
>
<slot></slot>
</text>
</template>
<script lang="ts">
export default {
name: 'u-link',
options: {
addGlobalClass: true,
// #ifndef MP-TOUTIAO
virtualHost: true,
// #endif
styleIsolation: 'shared'
}
};
</script>
<script setup lang="ts">
import { $u } from '../..';
import { LinkProps } from './types';
/**
* link 超链接
* @description 该组件为超链接组件,在不同平台有不同表现形式:在APP平台会通过plus环境打开内置浏览器,在小程序中把链接复制到粘贴板,同时提示信息,在H5中通过window.open打开链接。
* @tutorial https://uviewpro.cn/zh/components/link.html
* @property {String} color 文字颜色(默认var(--u-content-color)
* @property {String Number} font-size 字体大小,单位rpx(默认28)
* @property {Boolean} under-line 是否显示下划线(默认false)
* @property {String} href 跳转的链接,要带上http(s)
* @property {String} line-color 下划线颜色,默认同color参数颜色
* @property {String} mp-tips 各个小程序平台把链接复制到粘贴板后的提示语(默认“链接已复制,请在浏览器打开”)
* @example <u-link href="https://uviewpro.cn">蜀道难,难于上青天</u-link>
*/
const props = defineProps(LinkProps);
const emit = defineEmits(['click']);
/**
* 打开链接方法
* 不同平台有不同表现形式
*/
function openLink() {
if (!props.defaultClick) {
emit('click', props.href);
return;
}
// #ifdef APP-PLUS
if (typeof plus !== 'undefined' && plus.runtime) {
plus.runtime.openURL(props.href);
}
// #endif
// #ifdef H5
if (typeof window !== 'undefined') {
window.open(props.href);
}
// #endif
// #ifdef MP
if (typeof uni !== 'undefined' && uni.setClipboardData) {
uni.setClipboardData({
data: props.href,
success: () => {
uni.hideToast();
if (typeof $u !== 'undefined' && $u.toast && props.mpTips) {
$u.toast(props.mpTips);
}
}
});
}
// #endif
}
</script>
<style lang="scss" scoped>
@import '../../libs/css/style.components.scss';
.u-link {
line-height: 1;
}
</style>