be945f68890aee812b119e5ea769f68f4dc6488f.svn-base 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. <template>
  2. <a-layout-sider
  3. :class="['sider', isDesktop() ? null : 'shadow', theme, fixSiderbar ? 'ant-fixed-sidemenu' : null ]"
  4. width="208px"
  5. :collapsible="collapsible"
  6. v-model="collapsed"
  7. :trigger="null">
  8. <logo />
  9. <s-menu
  10. :collapsed="collapsed"
  11. :menu="menus"
  12. :theme="theme"
  13. @select="onSelect"
  14. @updateMenuTitle="onUpdateMenuTitle"
  15. :mode="mode"
  16. :style="smenuStyle">
  17. </s-menu>
  18. </a-layout-sider>
  19. </template>
  20. <script>
  21. import ALayoutSider from 'ant-design-vue/es/layout/Sider'
  22. import Logo from '../tools/Logo'
  23. import SMenu from './index'
  24. import { mixin, mixinDevice } from '@/utils/mixin.js'
  25. export default {
  26. name: "SideMenu",
  27. components: { ALayoutSider, Logo, SMenu },
  28. mixins: [mixin, mixinDevice],
  29. props: {
  30. mode: {
  31. type: String,
  32. required: false,
  33. default: 'inline'
  34. },
  35. theme: {
  36. type: String,
  37. required: false,
  38. default: 'dark'
  39. },
  40. collapsible: {
  41. type: Boolean,
  42. required: false,
  43. default: false
  44. },
  45. collapsed: {
  46. type: Boolean,
  47. required: false,
  48. default: false
  49. },
  50. menus: {
  51. type: Array,
  52. required: true
  53. }
  54. },
  55. computed:{
  56. smenuStyle() {
  57. let style = { 'padding': '0' }
  58. if (this.fixSiderbar) {
  59. style['height'] = 'calc(100% - 59px)'
  60. style['overflow'] = 'auto'
  61. style['overflow-x'] = 'hidden'
  62. }
  63. return style
  64. }
  65. },
  66. methods: {
  67. onSelect (obj) {
  68. this.$emit('menuSelect', obj)
  69. },
  70. onUpdateMenuTitle (obj) {
  71. this.$emit('updateMenuTitle', obj)
  72. }
  73. }
  74. }
  75. </script>
  76. <style lang="less" scoped>
  77. /* update_begin author:sunjianlei date:20190509 for: 修改侧边导航栏滚动条的样式 */
  78. .sider {
  79. @scrollBarSize: 10px;
  80. ul.ant-menu {
  81. height: calc(100vh - 59px);
  82. overflow: auto;
  83. /* 定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/
  84. &::-webkit-scrollbar {
  85. width: @scrollBarSize;
  86. height: @scrollBarSize;
  87. background-color: transparent;
  88. display: none;
  89. }
  90. & .-o-scrollbar {
  91. display: none;
  92. }
  93. /* 兼容IE */
  94. -ms-overflow-style: none;
  95. -ms-scroll-chaining: chained;
  96. -ms-content-zooming: zoom;
  97. -ms-scroll-rails: none;
  98. -ms-content-zoom-limit-min: 100%;
  99. -ms-content-zoom-limit-max: 500%;
  100. -ms-scroll-snap-type: proximity;
  101. -ms-scroll-snap-points-x: snapList(100%, 200%, 300%, 400%, 500%);
  102. /* 定义滚动条轨道 */
  103. &::-webkit-scrollbar-track {
  104. background-color: transparent;
  105. }
  106. /* 定义滑块 */
  107. &::-webkit-scrollbar-thumb {
  108. border-radius: @scrollBarSize;
  109. background-color: #eee;
  110. box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.1);
  111. &:hover {
  112. background-color: #dddddd;
  113. }
  114. &:active {
  115. background-color: #bbbbbb;
  116. }
  117. }
  118. }
  119. /** 暗色系滚动条样式 */
  120. &.dark ul.ant-menu {
  121. &::-webkit-scrollbar-thumb {
  122. background-color: #666666;
  123. &:hover {
  124. background-color: #808080;
  125. }
  126. &:active {
  127. background-color: #999999;
  128. }
  129. }
  130. }
  131. }
  132. /* update_end author:sunjianlei date:20190509 for: 修改侧边导航栏滚动条的样式 */
  133. </style>
  134. <!-- update_begin author:sunjianlei date:20190530 for: 选中首页的时候不显示背景颜色 -->
  135. <style lang="less">
  136. .ant-menu.ant-menu-root {
  137. & > .ant-menu-item:first-child {
  138. background-color: transparent;
  139. & > a, & > a:hover {
  140. color: rgba(0, 0, 0, 0.65);
  141. }
  142. &.ant-menu-item-selected {
  143. & > a, & > a:hover {
  144. color: @primary-color;
  145. }
  146. }
  147. }
  148. &.ant-menu-dark > .ant-menu-item:first-child {
  149. & > a, & > a:hover {
  150. color: rgba(255, 255, 255, 0.65);
  151. }
  152. &.ant-menu-item-selected {
  153. & > a, & > a:hover {
  154. color: rgba(255, 255, 255, 1);
  155. }
  156. }
  157. }
  158. }
  159. </style>
  160. <!-- update_end author:sunjianlei date:20190530 for: 选中首页的时候不显示背景颜色 -->