Files
opencatd-open/frontend/src/components/dashboard/BreadcrumbHeader.vue
Sakurasan 15f17f4e8d frontend
2025-04-16 18:14:53 +08:00

81 lines
2.1 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<!-- Breadcrumb and Title -->
<div class="flex justify-between items-center mb-4">
<h1 class="text-lg font-medium">{{ displayTitle }}</h1>
<div class="text-xs breadcrumbs">
<ul>
<li v-for="(item, index) in breadcrumbItems" :key="index">
<template v-if="item.path">
<a
:href="item.path"
class="text-gray-500"
>
{{ item.name }}
</a>
</template>
<template v-else>
<span class="text-gray-500">{{ item.name }}</span>
</template>
</li>
</ul>
</div>
</div>
</template>
<script setup>
import { ref, computed, onMounted } from 'vue';
import { useRoute } from 'vue-router';
const props = defineProps({
title: {
type: String,
default: null // 默认为null将从路由中获取
},
// Optional custom breadcrumb items
customBreadcrumbs: {
type: Array,
default: () => []
}
});
const route = useRoute();
// Generate breadcrumb items based on current route
// 生成面包屑项
const breadcrumbItems = computed(() => {
if (props.customBreadcrumbs.length > 0) {
return props.customBreadcrumbs;
}
// 获取当前路径并分割成段
const pathSegments = route.path.split('/').filter(segment => segment);
return pathSegments.map((segment, index) => {
const name = segment.charAt(0).toUpperCase() + segment.slice(1);
// 对于最后一段,不设置链接
if (index === pathSegments.length - 1) {
return { name, path: '' };
}
// 创建到此段的路径
const path = '/' + pathSegments.slice(0, index + 1).join('/');
return { name, path };
});
});
// 显示的标题:如果提供了自定义标题则使用,否则使用当前路径的最后一段
const displayTitle = computed(() => {
if (props.title) {
return props.title;
}
const pathSegments = route.path.split('/').filter(segment => segment);
if (pathSegments.length > 0) {
const lastSegment = pathSegments[pathSegments.length - 1];
return lastSegment.charAt(0).toUpperCase() + lastSegment.slice(1);
}
return 'Dashboard';
});
</script>