Navside.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
  1. <template>
  2. <div :class="NavsideClass">
  3. <div class="logoContainer">
  4. <img src="../assets/img/nav/logo.png" height="40" width="180"/>
  5. </div>
  6. <div class="userContainer">
  7. <img src="../assets/img/nav/head.png" height="51" width="51"/>
  8. <span>{{ ShopName }}</span>
  9. <em>{{ userLevelText }}</em>
  10. </div>
  11. <el-row :class="[{'shortnav':isCollapse},{'longNav':!isCollapse}]">
  12. <el-col :span="24">
  13. <el-menu
  14. :default-active="userLevelDeafult"
  15. class="el-menu-vertical-demo"
  16. @open="handleOpen"
  17. @close="handleClose"
  18. @select="handleSelect"
  19. background-color="#ffffff"
  20. text-color="#777777"
  21. active-text-color="#fff"
  22. router
  23. >
  24. <el-menu-item :index="nav.clmid" :route="nav.clmurl" v-for="nav in navs"
  25. v-if="nav.show == userLevel">
  26. <i :class="nav.icon"></i>
  27. <span slot="title">{{ nav.clmname }}</span>
  28. </el-menu-item>
  29. </el-menu>
  30. </el-col>
  31. </el-row>
  32. </div>
  33. </template>
  34. <script>
  35. import Navs from '../api/Navs';
  36. import {
  37. ManagerSelfQuery,
  38. ShopListQuery
  39. } from '../api/getApiRes.js'
  40. let qs = require('qs');
  41. export default {
  42. data() {
  43. return {
  44. wildState: 0,
  45. navs: [],
  46. ShopName: '',
  47. userLevelText: '',
  48. NavsideClass: 'Navside',
  49. userLevel: 0,
  50. userLevelDeafult: "",
  51. }
  52. },
  53. props: ['isCollapse'],
  54. mounted() {
  55. this.userLevelDeafult = this.$route.meta.clmid;
  56. this.getTableQuery();
  57. this.getManagerSelfQuery();
  58. if (document.body.clientWidth < 1024) {
  59. this.NavsideClass = 'NavsideShort'
  60. } else {
  61. this.NavsideClass = 'Navside'
  62. }
  63. },
  64. methods: {
  65. handleSelect(i, s, t) {
  66. // this.$emit('TabsAdd', i);//触发事件
  67. },
  68. getTableQuery() {
  69. // 菜单
  70. this.navs = Navs;
  71. },
  72. getManagerSelfQuery() {
  73. let that = this;
  74. let param = {
  75. token: localStorage.token,
  76. };
  77. let postdata = qs.stringify(param);
  78. ManagerSelfQuery(postdata).then(res => {
  79. let json = res;
  80. if (json.Code == 0) {
  81. that.userLevelText = json.Rs.Role.Name;
  82. // 1 会员 2 系统 3 店铺 4 教练
  83. switch (parseInt(json.Rs.Role.Id)) {
  84. case 1:
  85. that.userLevel = 1;
  86. break;
  87. case 2:
  88. that.userLevel = 2;
  89. break;
  90. case 3:
  91. that.userLevel = 3;
  92. break;
  93. case 4:
  94. that.userLevel = 4;
  95. break;
  96. }
  97. localStorage.shopId = json.Rs.ShopId;
  98. this.panelSelect(json.Rs.ShopId);
  99. } else {
  100. if (json.Code == 1010) {
  101. that.$message.error(json.Memo + ' 错误码:' + json.Code);
  102. that.$router.push({path: '/login', query: {status: 1}});
  103. return false
  104. } else {
  105. that.$message.error(json.Memo + ' 错误码:' + json.Code);
  106. }
  107. }
  108. })
  109. },
  110. // 获取所属店铺
  111. panelSelect(ShopId) {
  112. let that = this;
  113. let param = {
  114. token: localStorage.token,
  115. };
  116. let postdata = qs.stringify(param);
  117. ShopListQuery(postdata).then(res => {
  118. let json = res;
  119. if (json.Code == 0) {
  120. json.Rs.map(function (item) {
  121. if (item.ShopID == ShopId) {
  122. that.ShopName = item.ShopName;
  123. }
  124. })
  125. } else {
  126. that.$message.error(json.Memo + ' 错误码:' + json.Code);
  127. }
  128. })
  129. },
  130. handleOpen(key, keyPath) {
  131. // console.log(key, keyPath);
  132. },
  133. handleClose(key, keyPath) {
  134. // console.log(key, keyPath);
  135. },
  136. },
  137. watch: {
  138. $route(to, from) {
  139. this.userLevelDeafult = to.meta.clmid
  140. },
  141. },
  142. }
  143. </script>
  144. <style scoped>
  145. /*注释*/
  146. .Navside {
  147. width: 100%;
  148. height: 910px;
  149. /*height: 100%;*/
  150. overflow: hidden;
  151. display: block;
  152. margin: 0 auto;
  153. overflow-y: scroll;
  154. /*overflow-y: hidden;*/
  155. background-color: #fff;
  156. z-index: 4444;
  157. }
  158. .NavsideShort {
  159. width: 100%;
  160. height: 100%;
  161. /*height: 710px;*/
  162. overflow: hidden;
  163. display: block;
  164. margin: 0 auto;
  165. /*overflow-y: scroll;*/
  166. overflow-y: scroll;
  167. background-color: #fff;
  168. z-index: 4444
  169. }
  170. .Navside::-webkit-scrollbar { /*滚动条整体样式*/
  171. width: 3px; /*高宽分别对应横竖滚动条的尺寸*/
  172. height: 1px;
  173. }
  174. .Navside::-webkit-scrollbar-thumb { /*滚动条里面小方块*/
  175. border-radius: 3px;
  176. -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
  177. background: #f5f5f5;
  178. }
  179. .Navside::-webkit-scrollbar-track { /*滚动条里面轨道*/
  180. -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
  181. border-radius: 3px;
  182. background: #f5f5f5;
  183. }
  184. .NavsideShort::-webkit-scrollbar { /*滚动条整体样式*/
  185. width: 3px; /*高宽分别对应横竖滚动条的尺寸*/
  186. height: 1px;
  187. }
  188. .NavsideShort::-webkit-scrollbar-thumb { /*滚动条里面小方块*/
  189. border-radius: 3px;
  190. -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
  191. background: #f5f5f5;
  192. }
  193. .NavsideShort::-webkit-scrollbar-track { /*滚动条里面轨道*/
  194. -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
  195. border-radius: 3px;
  196. background: #f5f5f5;
  197. }
  198. .logoContainer {
  199. width: 256px;
  200. height: 72px;
  201. overflow: hidden;
  202. display: block;
  203. margin: 0 auto;
  204. background: #3799FF;
  205. }
  206. .logoContainer img {
  207. width: 100%;
  208. height: 100%;
  209. overflow: hidden;
  210. display: block;
  211. margin: 0 auto;
  212. margin-top: 1px;
  213. }
  214. .userContainer {
  215. width: 100%;
  216. overflow: hidden;
  217. display: block;
  218. margin: 0 auto;
  219. margin-bottom: 16px;
  220. padding-top: 19px;
  221. padding-bottom: 19px;
  222. border-bottom: 1px solid #F0F2F5;
  223. background: #fff;
  224. }
  225. .userContainer img {
  226. overflow: hidden;
  227. display: block;
  228. margin: 0 auto;
  229. margin-bottom: 16px;
  230. }
  231. .userContainer span {
  232. width: 100%;
  233. overflow: hidden;
  234. display: block;
  235. margin: 0 auto;
  236. color: #565656;
  237. font-size: 16px;
  238. }
  239. .userContainer em {
  240. width: 125px;
  241. height: 26px;
  242. line-height: 26px;
  243. text-align: center;
  244. color: #fff;
  245. overflow: hidden;
  246. display: block;
  247. margin: 0 auto;
  248. background: #E75296;
  249. border-radius: 250px;
  250. font-style: normal;
  251. margin-top: 8px;
  252. font-size: 16px;
  253. }
  254. /deep/ .el-menu {
  255. border: none;
  256. }
  257. /deep/ .el-menu-item {
  258. }
  259. /deep/ .el-menu-item span {
  260. text-align: left;
  261. float: left;
  262. margin-left: 70px;
  263. }
  264. /deep/ .el-menu-item.is-active {
  265. background-color: #3799FF !important;
  266. color: #fff !important;
  267. }
  268. /deep/ .el-menu-item:hover {
  269. background-color: #3799FF !important;
  270. color: #fff !important;
  271. }
  272. /deep/ .el-menu-item:hover i {
  273. color: #fff !important;
  274. }
  275. /deep/ .el-menu-item i {
  276. position: relative;
  277. float: left;
  278. line-height: 55px;
  279. left: 60px;
  280. }
  281. /*ipad only*/
  282. @media(min-width:1025px) and (max-width: 1366px){
  283. .userContainer {
  284. width: 80%;
  285. }
  286. .el-menu-item span {
  287. text-align: left;
  288. float: left;
  289. margin-left: 20px;
  290. line-height: 40px;
  291. }
  292. .userContainer em {
  293. width: 100%;
  294. overflow: hidden;
  295. display: block;
  296. margin: 0 auto;
  297. font-size: 12px;
  298. }
  299. .el-menu-item {
  300. padding: 0 !important;
  301. margin: 0;
  302. }
  303. .el-menu-item i {
  304. left: 20px;
  305. padding: 0;
  306. margin: 0;
  307. float: left;
  308. line-height: 40px;
  309. }
  310. /deep/ .el-tooltip {
  311. padding: 0 !important;
  312. }
  313. .userContainer span {
  314. font-size: 12px;
  315. }
  316. .el-menu-item, .el-submenu__title {
  317. height: 40px;
  318. }
  319. }
  320. @media(min-width:960px) and (max-width: 1024px){
  321. .el-container.is-vertical {
  322. left: 60px;
  323. }
  324. .el-menu-item span {
  325. text-align: left;
  326. float: left;
  327. margin-left: 5px;
  328. line-height: 20px;
  329. font-size: 12px;
  330. height: 30px;
  331. line-height: 30px;
  332. }
  333. .el-menu-item i {
  334. /*left: 20px;*/
  335. /*padding: 0;*/
  336. /*margin: 0;*/
  337. /*float: left;*/
  338. /*line-height: 20px;*/
  339. display: none;
  340. }
  341. .userContainer em {
  342. width: 100%;
  343. overflow: hidden;
  344. display: block;
  345. margin: 0 auto;
  346. font-size: 12px;
  347. }
  348. .el-menu-item {
  349. padding: 0 !important;
  350. margin: 0;
  351. }
  352. /deep/ .el-tooltip {
  353. padding: 0 !important;
  354. }
  355. .userContainer span {
  356. font-size: 12px;
  357. }
  358. .el-menu-item, .el-submenu__title {
  359. height: 30px;
  360. line-height: 30px;
  361. }
  362. }
  363. </style>