index.vue 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <template>
  2. <div class="slide">
  3. <el-menu :default-active="activeName" @select="selectHandle">
  4. <sub-menu :nav="nav" v-for="nav in navs" :key="nav.name" />
  5. </el-menu>
  6. </div>
  7. </template>
  8. <script>
  9. import subMenu from './submenu'
  10. import navs from '@/state/navs'
  11. import { attach } from '@/constant/view'
  12. export default {
  13. setup() {
  14. console.log(navs)
  15. return { navs }
  16. },
  17. computed: {
  18. activeName() {
  19. let routeName = this.$route.name
  20. return attach[routeName] ? attach[routeName] : routeName
  21. }
  22. },
  23. methods: {
  24. queryNav(navs, name) {
  25. for (let nav of navs) {
  26. if (nav.name === name) {
  27. return nav
  28. } else if (nav.children) {
  29. const qNav = this.queryNav(nav.children, name)
  30. if (qNav) return qNav
  31. }
  32. }
  33. },
  34. selectHandle(data) {
  35. const nav = this.queryNav(this.navs, data)
  36. const config = nav && nav.meta && nav.meta.default
  37. ? nav.meta.default : {}
  38. this.$router.push({name: data, ...config})
  39. }
  40. },
  41. components: {
  42. 'sub-menu': subMenu
  43. }
  44. }
  45. </script>
  46. <style lang="scss" scoped>
  47. .slide {
  48. background-color: #0C0E2E;
  49. padding: 16px 0;
  50. }
  51. </style>