VBreadcrumd.vue 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <script setup lang="ts">
  2. import { useRouter, useRoute } from 'vue-router'
  3. const router = useRouter()
  4. const route = useRoute()
  5. const path = computed(() => {
  6. const path = route.path
  7. // 检查URL中是否包含'detail'
  8. if (path.includes('/detail')) {
  9. // 获取'detail'的位置
  10. const detailIndex = path.indexOf('/detail')
  11. // 从开始到'/detail'前一个'/'的位置的子串
  12. const lastSlashIndex = path.lastIndexOf('/', detailIndex - 1)
  13. // 如果找到了'/'
  14. if (lastSlashIndex !== -1) {
  15. // 获取上一段字符串
  16. return path.substring(lastSlashIndex + 1, detailIndex)
  17. }
  18. } else if (path.includes('/add-vgm')) {
  19. const detailIndex = path.indexOf('/add-vgm')
  20. const lastSlashIndex = path.lastIndexOf('/', detailIndex - 1)
  21. if (lastSlashIndex !== -1) {
  22. return path.substring(lastSlashIndex + 1, detailIndex)
  23. }
  24. }
  25. // 如果没有找到或者不符合条件,则返回null
  26. return null
  27. })
  28. const mapPathName = {
  29. booking: 'Booking',
  30. tracking: 'Tracking',
  31. 'public-tracking': 'Public Tracking'
  32. }
  33. const handleGoBack = () => {
  34. router.push({ path: '/' + path.value })
  35. }
  36. const pathName = computed(() => {
  37. return mapPathName[path.value]
  38. })
  39. </script>
  40. <template>
  41. <div class="v-breadcrumd" v-if="path">
  42. <span class="font_family icon-icon_back_b" @click="handleGoBack"></span>
  43. <span style="color: var(--color-neutral-3)">{{ pathName }}</span>
  44. <span class="interval">|</span>
  45. <span style="font-weight: 700">Detail</span>
  46. </div>
  47. <div v-else></div>
  48. </template>
  49. <style lang="scss" scoped>
  50. .v-breadcrumd {
  51. display: flex;
  52. align-items: center;
  53. gap: 4px;
  54. .icon-icon_back_b {
  55. font-size: 18px;
  56. cursor: pointer;
  57. }
  58. .interval {
  59. margin: 0 2px;
  60. color: var(--color-neutral-3);
  61. transform: rotate(20deg);
  62. }
  63. }
  64. </style>