top-menu.vue 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <template>
  2. <div class="top-menu">
  3. <el-menu :default-active="activeIndex"
  4. mode="horizontal"
  5. text-color="#333">
  6. <template v-for="(item,index) in items">
  7. <el-menu-item :index="item.parentId+''"
  8. @click.native="openMenu(item)"
  9. :key="index">
  10. <template slot="title">
  11. <i :class="item.icon"></i>
  12. <span>{{item.label}}</span>
  13. </template>
  14. </el-menu-item>
  15. </template>
  16. </el-menu>
  17. </div>
  18. </template>
  19. <script>
  20. import { mapGetters } from "vuex";
  21. export default {
  22. name: "top-menu",
  23. data() {
  24. return {
  25. activeIndex: "0",
  26. items: []
  27. };
  28. },
  29. created() {
  30. },
  31. computed: {
  32. ...mapGetters(["tagCurrent", "menu"])
  33. },
  34. methods: {
  35. openMenu(item) {
  36. this.$store.dispatch("GetMenu", item.parentId).then(data => {
  37. if (data.length !== 0) {
  38. this.$router.$avueRouter.formatRoutes(data, true);
  39. }
  40. let itemActive,
  41. childItemActive = 0;
  42. if (item.path) {
  43. itemActive = item;
  44. } else {
  45. if (this.menu[childItemActive].length == 0) {
  46. itemActive = this.menu[childItemActive];
  47. } else {
  48. itemActive = this.menu[childItemActive].children[childItemActive];
  49. }
  50. }
  51. this.$router.push({
  52. path: this.$router.$avueRouter.getPath({
  53. name: itemActive.label,
  54. src: itemActive.path
  55. })
  56. });
  57. });
  58. }
  59. }
  60. };
  61. </script>