SideMenu.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. <template>
  2. <a-layout-sider
  3. :theme="sideTheme"
  4. :class="['side-menu', isMobile ? null : 'shadow']"
  5. width="256px"
  6. :collapsible="collapsible"
  7. v-model="collapsed"
  8. :trigger="null"
  9. >
  10. <div :class="['logo', theme]">
  11. <a-dropdown>
  12. <div class="header-avatar" style="cursor: pointer">
  13. <!-- <router-link to="/agreement/agreement"> -->
  14. <div class="logo-title">
  15. <img
  16. src="@/assets/img/title.png"
  17. style="width: 30px; height: 30px"
  18. />
  19. <h1 style="font-size: 18px; margin-right: 5px">晋掌柜控制台</h1>
  20. <a-icon type="caret-down" />
  21. </div>
  22. <!-- </router-link> -->
  23. </div>
  24. <a-menu :class="['avatar-menu']" slot="overlay">
  25. 切换到
  26. <a-menu-item>
  27. <div
  28. style="display: flex; align-items: center"
  29. @click="toShopkeeper"
  30. >
  31. <img
  32. src="@/assets/img/new_logo.png"
  33. style="width: 20px; height: 20px"
  34. />
  35. <h1 style="font-size: 18px; margin-left: 5px">掌柜科技</h1>
  36. </div>
  37. </a-menu-item>
  38. <a-menu-item>
  39. <div style="display: flex; align-items: center" @click="toIndex">
  40. <img
  41. src="@/assets/img/title.png"
  42. style="width: 20px; height: 20px"
  43. />
  44. <h1 style="font-size: 18px; margin-left: 5px">晋掌柜控制台</h1>
  45. </div>
  46. </a-menu-item>
  47. <!-- <a-menu-item @click="Back">
  48. <a-icon style="margin-right: 8px" type="poweroff" />
  49. <span>返回掌柜</span>
  50. </a-menu-item> -->
  51. </a-menu>
  52. </a-dropdown>
  53. </div>
  54. <a-menu
  55. style="width: 256px"
  56. :default-selected-keys="['1']"
  57. mode="inline"
  58. @click="handleClick"
  59. >
  60. <a-sub-menu v-for="item in menuData" :key="item.id">
  61. <span slot="title"
  62. ><a-icon :type="item.icon" /><span>{{ item.name }}</span></span
  63. >
  64. <a-menu-item
  65. v-for="val in item.children"
  66. :key="val.id"
  67. v-show="val.type == 1"
  68. >
  69. <div @click="routerChange(val, item)">{{ val.name }}</div>
  70. </a-menu-item>
  71. <a-sub-menu
  72. v-for="(val, index) in item.children"
  73. :key="index"
  74. v-show="val.type == 0"
  75. >
  76. <span slot="title"
  77. ><span>{{ val.name }}</span></span
  78. >
  79. <a-menu-item
  80. v-for="three in val.children"
  81. :key="three.id"
  82. v-show="three.name != '团队管理'"
  83. >
  84. <div @click="routerChange(three, val)">
  85. {{ three.name }}
  86. </div>
  87. </a-menu-item>
  88. </a-sub-menu>
  89. </a-sub-menu>
  90. </a-menu>
  91. </a-layout-sider>
  92. </template>
  93. <script>
  94. // import IMenu from "./menu";
  95. import { mapState, mapGetters } from "vuex";
  96. import Cookies from "js-cookie";
  97. import CryptoJS from "crypto-js";
  98. export default {
  99. name: "SideMenu",
  100. // components: { IMenu },
  101. props: {
  102. collapsible: {
  103. type: Boolean,
  104. required: false,
  105. default: false,
  106. },
  107. collapsed: {
  108. type: Boolean,
  109. required: false,
  110. default: false,
  111. },
  112. menuData: {
  113. type: Array,
  114. required: true,
  115. },
  116. theme: {
  117. type: String,
  118. required: false,
  119. default: "dark",
  120. },
  121. },
  122. data() {
  123. return {
  124. process: process.env.VUE_APP_BASE_URL,
  125. };
  126. },
  127. computed: {
  128. sideTheme() {
  129. return this.theme == "light" ? this.theme : "dark";
  130. },
  131. ...mapState("setting", ["isMobile", "systemName"]),
  132. ...mapGetters("setting", ["firstMenu", "subMenu", "menuData"]),
  133. },
  134. created() {
  135. // console.log(this.menuData);
  136. },
  137. methods: {
  138. handleClick(e) {
  139. console.log("click", e);
  140. },
  141. onSelect(obj) {
  142. this.$emit("menuSelect", obj);
  143. },
  144. routerChange(val, parent) {
  145. // console.log(val, parent);
  146. // console.log(this.$router);
  147. this.$router.replace({
  148. path: "/" + parent.url + "/" + val.url,
  149. });
  150. },
  151. toIndex() {
  152. this.$router.replace({
  153. path: "/index",
  154. });
  155. },
  156. toShopkeeper() {
  157. let token = CryptoJS.AES.encrypt(
  158. Cookies.get("Authorization").split(" ")[1],
  159. "token"
  160. ).toString();
  161. window.location.href = this.process + "/#/login?token=" + token;
  162. },
  163. },
  164. };
  165. </script>
  166. <style lang="less" scoped>
  167. @import "index";
  168. .ant-layout .ant-layout-sider {
  169. overflow-y: auto;
  170. overflow-x: hidden;
  171. scrollbar-color: #000 !important;
  172. scrollbar-width: thin;
  173. -ms-overflow-style: none;
  174. position: relative;
  175. /* 滚动条轨道样式 */
  176. // &::-webkit-scrollbar {
  177. // width: 8px; /* 设置滚动条宽度 */
  178. // }
  179. /* 滚动条滑块样式 */
  180. &::-webkit-scrollbar-thumb {
  181. background-color: blue !important; /* 设置滑块背景颜色 */
  182. border-radius: 4px; /* 设置滑块圆角 */
  183. }
  184. /* 滚动条轨道hover状态样式 */
  185. &::-webkit-scrollbar-track:hover {
  186. background-color: #f1f1f1; /* 设置轨道hover状态时的背景颜色 */
  187. }
  188. /* 滚动条滑块hover状态样式 */
  189. &::-webkit-scrollbar-thumb:hover {
  190. background-color: #555; /* 设置滑块hover状态时的背景颜色 */
  191. }
  192. }
  193. .ant-layout .ant-layout-sider::-webkit-scrollbar-button {
  194. display: none;
  195. }
  196. .ant-layout .ant-layout-sider::-webkit-scrollbar-thumb {
  197. border-radius: 8px;
  198. box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
  199. background: #666666;
  200. }
  201. .avatar-menu {
  202. width: 200px;
  203. padding-left: 5px;
  204. }
  205. .logo-title {
  206. padding: 10px;
  207. }
  208. .logo-title:hover {
  209. background: #f8f9fd;
  210. box-shadow: inset 0px 0px 4px 0px rgba(0, 0, 0, 0.1);
  211. border-radius: 4px;
  212. }
  213. /deep/.el-drawer__body{
  214. padding: 0 20px;
  215. box-sizing: border-box;
  216. }
  217. </style>