NavMenu.vue 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  1. <template v-if="menuList&&menuList.length>0">
  2. <el-menu
  3. :default-active="activeMenuIndex"
  4. :unique-opened="true"
  5. :router="true"
  6. class="nav-menu"
  7. @open="handleOpen"
  8. @close="handleClose"
  9. @select="handleSelect">
  10. <template v-for="(item,index) in menuList">
  11. <el-submenu :index="item.index" :key="index" v-if="item.node&&item.node.length>0">
  12. <template slot="title">
  13. <svg-icon :icon-class="item.icon"></svg-icon>
  14. <span>{{item.title}}</span>
  15. </template>
  16. <template v-for="(items,indexs) in item.node">
  17. <el-submenu :index="items.index" :key="indexs" v-if="items.node&&items.node.length>0" class="nav-item1">
  18. <span slot="title" class="nav-item4">{{items.title}}</span>
  19. <el-menu-item :index="itemss.index" :key="indexss" v-for="(itemss,indexss) in items.node" class="nav-item3">{{itemss.title}}</el-menu-item>
  20. </el-submenu>
  21. <el-menu-item :index="items.index" :key="indexs" v-else class="nav-item2">{{items.title}}</el-menu-item>
  22. </template>
  23. </el-submenu>
  24. <el-menu-item :index="item.index" v-else :key="index">
  25. <svg-icon :icon-class="item.icon"></svg-icon>
  26. <span slot="title">{{item.title}}</span>
  27. </el-menu-item>
  28. </template>
  29. </el-menu>
  30. </template>
  31. <script>
  32. import { getToken } from '@/utils/auth'
  33. export default {
  34. components: {},
  35. name: "navMenu",
  36. props: [ "activeMenuIndex" ],
  37. data() {
  38. return {
  39. menuList:[],
  40. codeList: getToken()&&JSON.parse(getToken())?JSON.parse(getToken()).popedom_code_list:[]
  41. };
  42. },
  43. watch: {},
  44. computed: {
  45. },
  46. methods: {
  47. handleOpen(key, keyPath) {
  48. // console.log(key, keyPath);
  49. },
  50. handleClose(key, keyPath) {
  51. // console.log(key, keyPath);
  52. },
  53. handleSelect(key) {
  54. // this.$emit("handleSelectNav",key)
  55. window.localStorage.removeItem('pageSize')
  56. window.localStorage.removeItem('pageNumber')
  57. window.localStorage.removeItem('pageSizes')
  58. window.localStorage.removeItem('pageNumbers')
  59. window.localStorage.removeItem('tabsIndex')
  60. },
  61. // 处理菜单权限
  62. handleMenu(){
  63. this.menuList = []
  64. let menuList = [
  65. {
  66. title:'数据中心',
  67. icon:'numbers-line',
  68. index:'data_center',
  69. showFlag: true
  70. },
  71. {
  72. title:'内容管理',
  73. icon:'file-list-line',
  74. index:'content_manage',
  75. node:[
  76. {
  77. title:'报纸管理',
  78. index:'newspaper_manage',
  79. code:20001
  80. },
  81. {
  82. title:'画刊管理',
  83. index:'pictorial_manage',
  84. code:20002
  85. },
  86. {
  87. title:'练习册管理',
  88. index:'workbook_manage',
  89. code:20005
  90. },
  91. {
  92. title:'评测管理',
  93. index:'evaluation_manage',
  94. code:20004
  95. },
  96. {
  97. title:'课程管理',
  98. index:'course_manage',
  99. code:20006,
  100. node:[
  101. {
  102. title:'录播课',
  103. index:'recorded_course'
  104. },
  105. {
  106. title:'直播课',
  107. index:'live_course'
  108. }
  109. ]
  110. },
  111. {
  112. title:'专辑管理',
  113. index:'album_manage',
  114. code:20003
  115. },
  116. {
  117. title:'广告管理',
  118. index:'advertise_manage',
  119. code:20007
  120. }
  121. ]
  122. },
  123. {
  124. title:'机构管理',
  125. icon:'school-line',
  126. index:'organize_manage',
  127. code:10002
  128. },
  129. {
  130. title:'系统用户',
  131. icon:'contacts-line',
  132. index:'people_manage',
  133. code:10001
  134. },
  135. {
  136. title:'兑换码管理',
  137. icon:'barcode-line',
  138. index:'cdkey_manage',
  139. code: 30001,
  140. },
  141. {
  142. title:'财务中心',
  143. icon:'money-cny-box-line',
  144. index:'finance_manage',
  145. code:40001,
  146. node:[
  147. {
  148. title:'流水管理',
  149. index:'flow_manage',
  150. }
  151. ]
  152. },
  153. {
  154. title:'系统配置',
  155. icon:'setting',
  156. index:'system_config',
  157. showFlag: getToken()&&JSON.parse(getToken()).is_inner === 'true' ? true : false,
  158. node:[
  159. {
  160. title:'邮箱配置',
  161. index:'email_setting',
  162. },
  163. {
  164. title:'导入配置',
  165. index:'export_setting',
  166. },
  167. {
  168. title:'折扣规则',
  169. index:'discount_setting',
  170. },
  171. {
  172. title:'分享配置',
  173. index:'share_setting',
  174. },
  175. {
  176. title:'订阅价格管理',
  177. index:'order_setting',
  178. },
  179. {
  180. title:'支付配置',
  181. index:'pay_setting',
  182. },
  183. {
  184. title:'预览配置',
  185. index:'preview_setting',
  186. }
  187. ]
  188. }
  189. ]
  190. menuList.forEach(item=>{
  191. if(item.showFlag){
  192. this.menuList.push(item)
  193. }else{
  194. if(this.codeList.indexOf(item.code)>-1){
  195. this.menuList.push(item)
  196. }else if(item.hasOwnProperty('node')){
  197. let obj = {
  198. title:item.title,
  199. icon:item.icon,
  200. index:item.index,
  201. node: []
  202. }
  203. item.node.forEach(items=>{
  204. if(this.codeList.indexOf(items.code)>-1){
  205. obj.node.push(items)
  206. }
  207. })
  208. if(obj.node.length>0){
  209. this.menuList.push(obj)
  210. }
  211. }
  212. }
  213. })
  214. }
  215. },
  216. created() {
  217. this.handleMenu()
  218. },
  219. mounted() {
  220. },
  221. beforeDestroy() {
  222. },
  223. };
  224. </script>
  225. <style lang="scss" scoped>
  226. .nav-menu{
  227. }
  228. </style>
  229. <style lang="scss">
  230. .nav-menu{
  231. .el-menu-item,.el-submenu__title{
  232. color: #4E5969;
  233. padding: 9px 12px !important;
  234. height: 40px;
  235. border-radius: 2px;
  236. font-size: 14px;
  237. line-height: 22px;
  238. margin: 2px 0;
  239. display: flex;
  240. width: 100%;
  241. align-items: center;
  242. &:hover,&:focus{
  243. background: #F2F3F5;
  244. }
  245. &.is-active{
  246. color: #165DFF;
  247. font-weight: 500;
  248. background: #F2F3F5;
  249. }
  250. .svg-icon{
  251. width: 14px;
  252. height: 14px;
  253. margin-right: 16px;
  254. }
  255. .el-submenu__icon-arrow{
  256. right: 12px;
  257. color: #4E5969;
  258. }
  259. }
  260. .nav-item2{
  261. padding-left: 42px !important;
  262. color: #1D2129;
  263. span{
  264. overflow: hidden;
  265. text-overflow:ellipsis;
  266. white-space: nowrap;
  267. }
  268. }
  269. .nav-item3{
  270. padding-left: 50px !important;
  271. color: #1D2129;
  272. }
  273. .nav-item4{
  274. padding-left: 30px !important;
  275. color: #1D2129;
  276. }
  277. .el-submenu.is-active{
  278. >.el-submenu__title{
  279. color: #165DFF;
  280. span{
  281. color: #165DFF;
  282. }
  283. }
  284. }
  285. }
  286. </style>