| 对比新文件 |
| | |
| | | <template>
|
| | | <component :is="type" v-bind="linkProps()">
|
| | | <slot />
|
| | | </component>
|
| | | </template>
|
| | |
|
| | | <script setup>
|
| | | import { isExternal } from '@/utils/validate'
|
| | |
|
| | | const props = defineProps({
|
| | | to: {
|
| | | type: [String, Object],
|
| | | required: true
|
| | | }
|
| | | })
|
| | |
|
| | | const isExt = computed(() => {
|
| | | return isExternal(props.to)
|
| | | })
|
| | |
|
| | | const type = computed(() => {
|
| | | if (isExt.value) {
|
| | | return 'a'
|
| | | }
|
| | | return 'router-link'
|
| | | })
|
| | |
|
| | | function linkProps() {
|
| | | if (isExt.value) {
|
| | | return {
|
| | | href: props.to,
|
| | | target: '_blank',
|
| | | rel: 'noopener'
|
| | | }
|
| | | }
|
| | | return {
|
| | | to: props.to
|
| | | }
|
| | | }
|
| | | </script>
|