linkItem.vue 649 B

123456789101112131415161718192021222324252627282930313233343536
  1. <script setup lang="ts">
  2. import { computed } from "vue";
  3. import { isUrl } from "@pureadmin/utils";
  4. import { menuType } from "@/layout/types";
  5. defineOptions({
  6. name: "LinkItem"
  7. });
  8. const props = defineProps<{
  9. to: menuType;
  10. }>();
  11. const isExternalLink = computed(() => isUrl(props.to.name));
  12. const getLinkProps = (item: menuType) => {
  13. if (isExternalLink.value) {
  14. return {
  15. href: item.name,
  16. target: "_blank",
  17. rel: "noopener"
  18. };
  19. }
  20. return {
  21. to: item
  22. };
  23. };
  24. </script>
  25. <template>
  26. <component
  27. :is="isExternalLink ? 'a' : 'router-link'"
  28. v-bind="getLinkProps(to)"
  29. >
  30. <slot />
  31. </component>
  32. </template>