side-nav.vue 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <style>
  2. .side-nav {
  3. width: 100%;
  4. box-sizing: border-box;
  5. border-right: 1px solid #eaeefa;
  6. li {
  7. list-style: none;
  8. }
  9. ul {
  10. padding: 0;
  11. margin: 0;
  12. }
  13. .nav-item {
  14. a {
  15. font-size:18px;
  16. color:#5e6d82;
  17. line-height: 32px;
  18. height: 32px;
  19. margin: 10px 0;
  20. padding: 0 0 0 10px;
  21. text-decoration: none;
  22. border-left: 2px solid transparent;
  23. display: block;
  24. &.active {
  25. color: #20a0ff;
  26. border-left-color: #20a0ff;
  27. }
  28. }
  29. .nav-item {
  30. a {
  31. font-size: 14px;
  32. padding-left: 20px;
  33. &:hover {
  34. background-color: #eee;
  35. }
  36. }
  37. }
  38. }
  39. .nav-group__title {
  40. color: #99a9bf;
  41. padding-left: 15px;
  42. line-height: 32px;
  43. }
  44. }
  45. </style>
  46. <template>
  47. <div class="side-nav">
  48. <ul>
  49. <li class="nav-item" v-for="item in data">
  50. <a v-if="!item.path">{{item.name}}</a>
  51. <router-link
  52. v-else
  53. active-class="active"
  54. :to="base + item.path"
  55. exact
  56. v-text="item.title || item.name">
  57. </router-link>
  58. <ul class="pure-menu-list sub-nav" v-if="item.children">
  59. <li class="nav-item" v-for="navItem in item.children">
  60. <router-link
  61. class=""
  62. active-class="active"
  63. :to="base + navItem.path"
  64. exact
  65. v-text="navItem.title || navItem.name">
  66. </router-link>
  67. </li>
  68. </ul>
  69. <template v-if="item.groups">
  70. <div class="nav-group" v-for="group in item.groups">
  71. <div class="nav-group__title">{{group.groupName}}</div>
  72. <ul class="pure-menu-list">
  73. <li
  74. class="nav-item"
  75. v-for="navItem in group.list"
  76. v-if="!navItem.disabled">
  77. <router-link
  78. active-class="active"
  79. :to="base + navItem.path"
  80. exact
  81. v-text="navItem.title"></router-link>
  82. </li>
  83. </ul>
  84. </div>
  85. </template>
  86. </li>
  87. </ul>
  88. </div>
  89. </template>
  90. <script>
  91. export default {
  92. props: {
  93. data: Array,
  94. base: {
  95. type: String,
  96. default: ''
  97. }
  98. },
  99. data() {
  100. return {
  101. highlights: [],
  102. navState: []
  103. };
  104. }
  105. };
  106. </script>