Files
schoolNews/schoolNewsWeb/src/components/base/Breadcrumb.vue

93 lines
1.8 KiB
Vue
Raw Normal View History

2025-10-07 13:31:06 +08:00
<template>
<div class="breadcrumb" v-if="items && items.length > 0">
<span v-for="(item, index) in items" :key="index" class="breadcrumb-wrapper">
<span class="breadcrumb-item">
<!-- 最后一个项目不可点击 -->
<template v-if="index === items.length - 1">
<span class="breadcrumb-text current">{{ item.title }}</span>
</template>
<!-- 其他项目可点击 -->
<template v-else>
<router-link
:to="item.path"
class="breadcrumb-link"
v-if="item.path"
>
{{ item.title }}
</router-link>
<span class="breadcrumb-text" v-else>{{ item.title }}</span>
</template>
</span>
<!-- 分隔符 -->
<span class="breadcrumb-separator" v-if="index < items.length - 1">
<i class="separator-icon"></i>
</span>
</span>
</div>
</template>
<script setup lang="ts">
// 面包屑项目接口
interface BreadcrumbItem {
title: string;
path?: string;
}
// Props
interface Props {
items: BreadcrumbItem[];
separator?: string;
}
withDefaults(defineProps<Props>(), {
separator: '/'
});
</script>
<style lang="scss" scoped>
.breadcrumb {
display: flex;
align-items: center;
font-size: 14px;
color: #666;
}
.breadcrumb-item {
display: inline-flex;
align-items: center;
}
.breadcrumb-link {
color: #1890ff;
text-decoration: none;
transition: color 0.2s ease;
&:hover {
color: #40a9ff;
}
}
.breadcrumb-text {
color: inherit;
&.current {
color: #333;
font-weight: 500;
}
}
.breadcrumb-separator {
display: inline-flex;
align-items: center;
margin: 0 8px;
color: #ccc;
}
.separator-icon::before {
content: "/";
font-size: 12px;
}
</style>