Blame view

src/components/Breadcrumb/index.vue 2.11 KB
be966eff   jack   1.添加文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
  <template>
    <el-breadcrumb class="app-breadcrumb" separator="/">
      <transition-group name="breadcrumb">
        <el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path">
          <span
            v-if="item.redirect==='noRedirect'||index==levelList.length-1"
            class="no-redirect"
          >{{ item.meta.title }}</span>
          <a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
        </el-breadcrumb-item>
      </transition-group>
    </el-breadcrumb>
  </template>
  
  <script>
  import pathToRegexp from 'path-to-regexp'
  
  export default {
    data() {
      return {
        levelList: null
      }
    },
    watch: {
      $route() {
        this.getBreadcrumb()
      }
    },
    created() {
      this.getBreadcrumb()
    },
    methods: {
      getBreadcrumb() {
        // only show routes with meta.title
        let matched = this.$route.matched.filter(
          item => item.meta && item.meta.title
        )
        const first = matched[0]
  
        if (!this.isDashboard(first)) {
8510e248   jack   1.增加公告交互
41
          matched = [{ path: '/home', meta: { title: '首页' }}].concat(
be966eff   jack   1.添加文件
42
43
44
45
46
47
48
49
50
51
52
53
54
55
            matched
          )
        }
  
        this.levelList = matched.filter(
          item => item.meta && item.meta.title && item.meta.breadcrumb !== false
        )
      },
      isDashboard(route) {
        const name = route && route.name
        if (!name) {
          return false
        }
        return (
8510e248   jack   1.增加公告交互
56
          name.trim().toLocaleLowerCase() === 'Home'.toLocaleLowerCase()
be966eff   jack   1.添加文件
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
        )
      },
      pathCompile(path) {
        // To solve this problem https://github.com/PanJiaChen/vue-element-admin/issues/561
        const { params } = this.$route
        var toPath = pathToRegexp.compile(path)
        return toPath(params)
      },
      handleLink(item) {
        const { redirect, path } = item
        if (redirect) {
          this.$router.push(redirect)
          return
        }
        this.$router.push(this.pathCompile(path))
      }
    }
  }
  </script>
  
  <style lang="scss" scoped>
  .app-breadcrumb.el-breadcrumb {
    display: inline-block;
    font-size: 14px;
    line-height: 50px;
    margin-left: 8px;
  
    .no-redirect {
      color: #97a8be;
      cursor: text;
    }
  }
  .dec {
    display: block;
    font-size: 10px;
    color: #ccc;
  }
  </style>