1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- <template>
- <el-breadcrumb separator="/" class="flex">
- <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) => {
- // 激活菜单
- if (newValue.meta.active_menu) {
- appStore.setActiveMenu(newValue.meta.active_menu)
- }
- setActiveMenu(newValue)
- getBreadcrumbs(newValue)
- })
- // get init breadcrumb
- onMounted(() => {
- setActiveMenu(router.currentRoute.value)
- getBreadcrumbs(router.currentRoute.value)
- })
- const setActiveMenu = route => {
- if (route.path !== '/') {
- // 如果是内页,并且设置激活菜单
- if (route.meta.active_menu) {
- appStore.setActiveMenu(route.meta.active_menu)
- } else {
- appStore.setActiveMenu(route.path)
- }
- }
- }
- // 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;
- }
- </style>
|