72 lines
1.8 KiB
Vue
Raw Normal View History

2022-12-05 23:01:12 +08:00
<template>
2023-03-11 10:15:06 +08:00
<el-breadcrumb separator="/" class="flex sm:text-sm lg:text-base">
2022-12-05 23:01:12 +08:00
<transition-group name="breadcrumb">
<!--<el-breadcrumb-item :to="{ path: '/' }" class="text-blue=">Dashboard</el-breadcrumb-item>-->
<el-breadcrumb-item v-for="(item, index) in breadcrumbs" :key="index" class="text">{{ item }}</el-breadcrumb-item>
</transition-group>
</el-breadcrumb>
</template>
<script lang="ts" setup>
import router from '/admin/router'
import { watch, onMounted, ref } from 'vue'
import { useAppStore } from '/admin/stores/modules/app'
import { RouteLocationNormalizedLoaded } from 'vue-router'
const appStore = useAppStore()
const breadcrumbs = ref<string[]>([])
// 监听当前路由的变化
watch(router.currentRoute, (newValue, oldValue) => {
2023-03-01 15:11:53 +08:00
// 激活菜单
if (newValue.meta.active_menu) {
2023-03-11 11:13:26 +08:00
appStore.setActiveMenu(newValue.meta.active_menu as string)
2022-12-05 23:01:12 +08:00
}
setActiveMenu(newValue)
2022-12-05 23:01:12 +08:00
getBreadcrumbs(newValue)
})
// get init breadcrumb
onMounted(() => {
setActiveMenu(router.currentRoute.value)
getBreadcrumbs(router.currentRoute.value)
})
2023-03-11 11:13:26 +08:00
const setActiveMenu = (route: RouteLocationNormalizedLoaded) => {
if (route.path !== '/') {
2023-03-01 15:11:53 +08:00
// 如果是内页,并且设置激活菜单
if (route.meta.active_menu) {
2023-03-11 11:13:26 +08:00
appStore.setActiveMenu(route.meta.active_menu as string)
2023-03-01 15:11:53 +08:00
} else {
appStore.setActiveMenu(route.path)
2023-03-01 15:11:53 +08:00
}
2022-12-05 23:01:12 +08:00
}
}
2022-12-05 23:01:12 +08:00
// get breadcrums
function getBreadcrumbs(newRoute: RouteLocationNormalizedLoaded) {
breadcrumbs.value = []
breadcrumbs.value.push('首页')
newRoute.matched.forEach(m => {
if (m.meta.title !== undefined) {
breadcrumbs.value.push(m.meta?.title as string)
}
})
}
</script>
<style>
.breadcrumb-leave-active {
transition: all 1s linear;
}
.breadcrumb-leave-to {
opacity: 0;
transition: all 0.3s linear;
}
2023-03-11 10:15:06 +08:00
.el-breadcrumb {
font-size: 13px;
}
2022-12-05 23:01:12 +08:00
</style>