123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- <script setup lang="ts">
- import { computed } from 'vue'
- import { icons } from '@/utils/common'
- import { ArrowRight } from '@element-plus/icons-vue'
- import { useRoute, useRouter } from 'vue-router'
- const route = useRoute()
- const router = useRouter()
- const breadcrumbList: any = computed(() => {
- return route.matched
- })
- console.log(breadcrumbList)
- const isUnicode = (val: string | undefined) => {
- if (!val) return false
- return !/ue/g.test(val)
- }
- const onBreadcrumbClick = (item: any, index: number) => {
- if (index !== breadcrumbList.value.length - 1) router.push(item.path)
- }
- </script>
- <template>
- <div class="breadcrumb-box">
- <el-breadcrumb :separator-icon="ArrowRight">
- <transition-group appear name="breadcrumb">
- <el-breadcrumb-item v-for="(item, index) in breadcrumbList" :key="item.path">
- <div class="el-breadcrumb__inner is-link" @click="onBreadcrumbClick(item, index)">
- <el-icon class="breadcrumb-icon" v-if="isUnicode(item.meta.icon as string)">
- <component :is="item.meta.icon"></component>
- </el-icon>
- <i v-else class="iconfont el-icon breadcrumb-icon">{{ icons[item.meta.icon] }}</i>
- <span class="breadcrumb-title">{{ item.meta.title }}</span>
- </div>
- </el-breadcrumb-item>
- </transition-group>
- </el-breadcrumb>
- </div>
- </template>
- <style scoped lang="scss">
- .breadcrumb-box {
- display: flex;
- align-items: center;
- padding-right: 50px;
- overflow: hidden;
- mask-image: linear-gradient(90deg, #000000 0%, #000000 calc(100% - 50px), transparent);
- color: #fff;
- .iconfont {
- width: 16px;
- color: #fff;
- }
- .el-breadcrumb {
- white-space: nowrap;
- .el-breadcrumb__item {
- position: relative;
- display: inline-block;
- float: none;
- .el-breadcrumb__inner {
- display: inline-flex;
- color: #fff;
- .breadcrumb-icon {
- margin-right: 6px;
- font-size: 16px;
- }
- }
- :deep(.el-breadcrumb__separator) {
- position: relative;
- }
- }
- }
- }
- .no-icon {
- .el-breadcrumb {
- .el-breadcrumb__item {
- top: -2px;
- :deep(.el-breadcrumb__separator) {
- top: 2px;
- }
- }
- }
- }
- </style>
|