123456789101112131415161718192021222324252627282930 |
- <script setup lang="ts">
- import { computed } from 'vue'
- const props = defineProps<{
- href?: string
- noIcon?: boolean
- }>()
- const isExternal = computed(() => props.href && /^[a-z]+:/i.test(props.href))
- </script>
- <template>
- <component :is="href ? 'a' : 'span'" class="link-item" :class="{ link: href }" :href="href" :target="isExternal ? '_blank' : undefined" :rel="isExternal ? 'noopener noreferrer' : undefined">
- <slot />
- <ElIcon v-if="isExternal && !noIcon">
- <i-ri-external-link-line class="link-icon" />
- </ElIcon>
- </component>
- </template>
- <style scoped>
- .link-item {
- display: flex;
- align-items: center;
- }
- .el-icon {
- margin-left: 4px;
- }
- </style>
|