topNav.vue 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. <template>
  2. <div class="card_head">
  3. <el-image style="height: 35px;width: 35px;flex: none;" :src="require('@/assets/logo3.png')"></el-image>
  4. <div class="head_title">智配送安全追溯AI管理平台</div>
  5. <!-- <i class="card_unpack" :class="iconFlag ? 'el-icon-s-unfold' : 'el-icon-s-fold'" @click="getUnpack"></i> -->
  6. <div style="width: 1200px;flex: none;margin-left: 20px;">
  7. <el-menu mode="horizontal" :default-active="$route.path" class="el-menu-vertical-demo" router @open="handleOpen"
  8. @close="handleClose">
  9. <template v-for="menu in menus">
  10. <template v-if="menu.children && menu.children.length > 0">
  11. <el-submenu :index="menu.path" :key="menu.name">
  12. <template slot="title">
  13. <i :class="menu.meta.icon" class="menu_icon iconfont"></i>
  14. <span>{{ menu.meta.title }}</span>
  15. </template>
  16. <template v-for="subMenu in menu.children">
  17. <el-menu-item :index="subMenu.path" :key="subMenu.name">
  18. <i :class="subMenu.meta.icon" class="menu_icon iconfont"></i>
  19. <span slot="title">{{ subMenu.meta.title }}</span>
  20. </el-menu-item>
  21. </template>
  22. </el-submenu>
  23. </template>
  24. <template v-else>
  25. <el-menu-item :index="menu.path" :key="menu.name">
  26. <i :class="menu.meta.icon" class="menu_icon iconfont"></i>
  27. <span slot="title">{{menu.meta.title}}</span>
  28. </el-menu-item>
  29. </template>
  30. </template>
  31. </el-menu>
  32. </div>
  33. </div>
  34. </template>
  35. <script>
  36. export default {
  37. name: 'TopNav',
  38. props: {
  39. iconFlag: {
  40. type: Boolean,
  41. default: () => false,
  42. },
  43. menus: {
  44. type: Array,
  45. default: () => [],
  46. },
  47. },
  48. data() {
  49. return {
  50. }
  51. },
  52. methods: {
  53. handleOpen(key, keyPath) {
  54. // console.log(key, keyPath);
  55. this.$router.push(key)
  56. },
  57. handleClose(key, keyPath) {
  58. // console.log(key, keyPath);
  59. },
  60. getUnpack() {
  61. this.$emit('getUnpack', this.iconFlag)
  62. },
  63. },
  64. }
  65. </script>
  66. <style lang="scss">
  67. .el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,
  68. .el-menu--horizontal>.el-menu-item:not(.is-disabled):hover,
  69. .el-menu--horizontal>.el-submenu .el-submenu__title:hover {
  70. background-color: unset;
  71. color: #409EFF;
  72. }
  73. .el-menu--horizontal .el-menu-item:not(.is-disabled):focus,
  74. .el-menu--horizontal .el-menu-item:not(.is-disabled):hover {
  75. color: #409EFF;
  76. .menu_icon {
  77. color: #409EFF;
  78. }
  79. }
  80. .el-submenu__title i {
  81. color: #ffffff;
  82. }
  83. .el-menu--horizontal>.el-submenu:focus .el-submenu__title,
  84. .el-menu--horizontal>.el-submenu:hover .el-submenu__title {
  85. color: #ffffff;
  86. }
  87. .el-menu--horizontal .el-menu .el-menu-item,
  88. .el-menu--horizontal .el-menu .el-submenu__title {
  89. color: #ffffff;
  90. }
  91. .el-menu--horizontal .el-menu .el-menu-item.is-active,
  92. .el-menu--horizontal .el-menu .el-submenu.is-active>.el-submenu__title {
  93. color: #409EFF;
  94. }
  95. // 选中样式
  96. .el-menu--horizontal>.el-menu-item.is-active {
  97. position: relative !important;
  98. border-bottom: unset;
  99. color: #ffffff;
  100. overflow: hidden;
  101. background-image: linear-gradient(to top, rgba(23, 77, 135, .25), rgba(64, 158, 255, .3), rgba(64, 158, 255, .09));
  102. }
  103. .el-menu--popup {
  104. padding: unset;
  105. background-image: linear-gradient(to top, rgba(28, 59, 91, 0.8) 0%, rgba(28, 59, 91, 0.8) 100%);
  106. border: 1px solid #409EFF;
  107. position: relative;
  108. }
  109. .el-menu--horizontal .el-menu .el-menu-item,
  110. .el-menu--horizontal .el-menu .el-submenu__title {
  111. background-color: unset;
  112. }
  113. .el-menu--horizontal>.el-menu-item.is-active::after {
  114. content: '';
  115. position: absolute;
  116. bottom: -20px;
  117. left: calc(50% - 30px);
  118. right: 0;
  119. height: 40px;
  120. width: 60px;
  121. filter: blur(1em);
  122. background-image: radial-gradient(circle, #afe9ff, #409EFF, rgba(64, 158, 255, .5));
  123. }
  124. .el-menu--horizontal>.el-submenu.is-active .el-submenu__title {
  125. position: relative !important;
  126. border-bottom: unset;
  127. color: #ffffff;
  128. overflow: hidden;
  129. background-image: linear-gradient(to top, rgba(64, 158, 255, .5), rgba(64, 158, 255, .3), rgba(64, 158, 255, .2));
  130. }
  131. .el-menu--horizontal>.el-submenu.is-active .el-submenu__title::after {
  132. content: '';
  133. position: absolute;
  134. bottom: -20px;
  135. left: calc(50% - 30px);
  136. right: 0;
  137. height: 40px;
  138. width: 60px;
  139. filter: blur(1em);
  140. background-image: radial-gradient(circle, #afe9ff, #409EFF, rgba(64, 158, 255, .5));
  141. }
  142. .el-dropdown {
  143. color: #ffffff;
  144. }
  145. .el-menu--horizontal>.el-menu-item {
  146. color: #ffffff;
  147. height: 58px;
  148. }
  149. .el-menu-item i {
  150. color: #ffffff;
  151. }
  152. .el-menu--horizontal>.el-submenu .el-submenu__title {
  153. color: #ffffff;
  154. }
  155. .el-menu.el-menu--horizontal {
  156. border: unset !important;
  157. }
  158. .el-menu {
  159. background-color: unset !important;
  160. }
  161. .card_head {
  162. display: flex;
  163. align-items: center;
  164. }
  165. .head_title {
  166. flex: none;
  167. font-weight: bold;
  168. font-size: 16px;
  169. // color: rgb(35, 49, 105);
  170. margin-left: 10px;
  171. background-image: -webkit-linear-gradient(top, #ffffff, #ffffff, #ffffff, #000000);
  172. -webkit-background-clip: text;
  173. -webkit-text-fill-color: transparent;
  174. }
  175. .card_unpack {
  176. cursor: pointer;
  177. font-size: 25px;
  178. margin-left: 10px;
  179. }
  180. .menu_icon {
  181. margin-right: 6px;
  182. }
  183. </style>