index.vue 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <template>
  2. <el-breadcrumb style="padding:4px 20px;" v-if="routeMatched.length>0">
  3. <template v-for="item in routeMatched" :key="item.name">
  4. <!-- :to="item.router" @click.prevent="runRouter(item)"-->
  5. <el-breadcrumb-item >
  6. <template v-if="item.router">
  7. <span class="cip-breadcrumb-item--link" @click.prevent="runRouter(item)">{{getRouteName(item)}}</span>
  8. </template>
  9. <template v-else>
  10. {{getRouteName(item)}}
  11. </template>
  12. </el-breadcrumb-item>
  13. </template>
  14. </el-breadcrumb>
  15. </template>
  16. <script>
  17. import { computed, inject } from 'vue'
  18. import { useRoute, useRouter } from 'vue-router'
  19. import { ElBreadcrumb, ElBreadcrumbItem } from 'element-plus'
  20. import { depthFirstSearchTree, getUsingConfig } from '@cip/utils/util'
  21. import { getMenuTitle } from '../helper'
  22. export default {
  23. props: { navMenu: Array, menuNameMap: Map },
  24. components: {
  25. ElBreadcrumb, ElBreadcrumbItem
  26. },
  27. setup (props) {
  28. const cipMenu = inject('cip-menu', {})
  29. const _navMenu = computed(() => {
  30. return getUsingConfig(props.navMenu, cipMenu.navMenu)
  31. })
  32. const _menuNameMap = computed(() => {
  33. return getUsingConfig(props.menuNameMap, cipMenu.menuNameMap)
  34. })
  35. const route = useRoute()
  36. const router = useRouter()
  37. const routeMatched = computed(() => {
  38. const loop = _navMenu.value?.length ?? 0
  39. for (let i = 0; i < loop; i++) {
  40. const result = depthFirstSearchTree(_navMenu.value[i], route.name, 'name')
  41. if (result) {
  42. return result
  43. }
  44. }
  45. return []
  46. })
  47. const getRouteName = (item) => {
  48. return _menuNameMap.value.get(item.name) ? getMenuTitle(item) + '-' + _menuNameMap.value.get(item.name) : getMenuTitle(item)
  49. }
  50. const runRouter = (item) => {
  51. if (item.router) {
  52. if (typeof item.router === 'function') {
  53. item.router(router, route)
  54. } else {
  55. router.replace(item.router === true ? { name: item.name } : item.router)
  56. }
  57. }
  58. }
  59. return { routeMatched, runRouter, getRouteName }
  60. }
  61. }
  62. </script>
  63. <style lang="less">
  64. .cip-breadcrumb-item--link{
  65. cursor: pointer;
  66. color: #303133;
  67. font-weight: bold;
  68. &:hover{
  69. color: @primary;
  70. }
  71. }
  72. </style>