Link.vue 1.47 KB
<template>
    <component :is="linkProps(to).is" v-bind="linkProps(to)">
        <slot/>
    </component>
</template>

<script>
    import {isExternal} from '@/utils/validate';

    export default {
        props: {
            to: {
                type: String,
                required: true
            },
            target: {
                type: String,
                default: ''
            }
        },
        methods: {
            linkProps(url) {
                if (isExternal(url)) {
                    if (this.target === '_blank') {
                        return {
                            is: 'a',
                            href: '#' + url,
                            target: '_blank',
                            rel: 'noopener'
                        };
                    } else {
                        return {
                            is: 'a',
                            href: '#/iframe/index?url=' + encodeURIComponent(url),
                            rel: 'noopener'
                        };
                    }
                }
                if (this.target === '_blank') {
                    return {
                        is: 'a',
                        href: '#' + url,
                        target: '_blank',
                        rel: 'noopener'
                    };
                }
                return {
                    is: 'router-link',
                    to: url
                };
            }
        }
    };
</script>