63 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Vue
		
	
	
| <template>
 | |
|   <div style="display: flex; justify-content: space-between; align-items: center">
 | |
|     <div class="breadcrumb">
 | |
|       <el-breadcrumb class="app-breadcrumb" separator=">">
 | |
|         <transition-group name="breadcrumb">
 | |
|           <el-breadcrumb-item v-for="(item, index) in breadcrumbList" :key="item.path">
 | |
|             <router-link v-if="index === 0" :to="item.path">
 | |
|               {{ item.meta.title }}
 | |
|             </router-link>
 | |
|             <span v-else-if="index !== breadcrumbList.length - 1">
 | |
|               {{ item.meta.title }}
 | |
|             </span>
 | |
|             <span v-else class="no-redirect">{{ item.meta.title }}</span>
 | |
|           </el-breadcrumb-item>
 | |
|         </transition-group>
 | |
|       </el-breadcrumb>
 | |
|     </div>
 | |
|   </div>
 | |
| </template>
 | |
| 
 | |
| <script setup>
 | |
| import { ref, watch } from "vue";
 | |
| import { useRoute } from "vue-router";
 | |
| import { ElBreadcrumb, ElBreadcrumbItem } from 'element-plus'
 | |
| import "element-plus/es/components/breadcrumb/style/css";
 | |
| import "element-plus/es/components/breadcrumb-item/style/css";
 | |
| 
 | |
| defineOptions({
 | |
|   name: "LayoutBreadcrumb",
 | |
| });
 | |
| const route = useRoute();
 | |
| const breadcrumbList = ref([]);
 | |
| const fnGetBreadcrumb = () => {
 | |
|   const matched = route.matched.filter((item) => item.meta?.title);
 | |
|   if (matched[0].path === "/") matched[0].path = "/index";
 | |
|   breadcrumbList.value = matched.filter(
 | |
|     (item) => item.meta?.title && item.meta?.breadcrumb !== false
 | |
|   );
 | |
| };
 | |
| fnGetBreadcrumb();
 | |
| watch(
 | |
|   () => route,
 | |
|   () => fnGetBreadcrumb(),
 | |
|   { deep: true }
 | |
| );
 | |
| </script>
 | |
| 
 | |
| <style lang="scss" scoped>
 | |
| .app-breadcrumb.el-breadcrumb {
 | |
|   font-size: 14px;
 | |
|   line-height: var(--el-header-height);
 | |
| 
 | |
|   .no-redirect {
 | |
|     color: #97a8be;
 | |
|     cursor: text;
 | |
|   }
 | |
| 
 | |
|   .el-breadcrumb__inner a {
 | |
|     font-weight: normal;
 | |
|   }
 | |
| }
 | |
| </style>
 |