HomeSide.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. <template>
  2. <el-aside width="200px" v-if="menuList.length > 0">
  3. <div
  4. style="height: 50px; margin-top: 20px; margin-left: 20px; font-size: 20px"
  5. >
  6. <i class="el-icon-location"></i> <span>{{ group.name }}</span>
  7. </div>
  8. <el-menu
  9. class="el-menu-vertical-demo"
  10. background-color="#545c64"
  11. text-color="#fff"
  12. active-text-color="#ffd04b"
  13. >
  14. <el-submenu
  15. v-for="menu1 in menuList1"
  16. :key="menu1.id"
  17. :index="menu1.nodeCode"
  18. >
  19. <template slot="title">
  20. <router-link v-if="menu1.ext5" :to="{ path: menu1.ext5 }">
  21. <i class="fa fa-circle-o"></i>{{ menu1.name }}</router-link
  22. >
  23. <span v-else>{{ menu1.name }}</span>
  24. </template>
  25. <el-menu-item-group>
  26. <el-menu-item
  27. v-for="menu2 in menuList2(menu1)"
  28. :index="menu2.nodeCode"
  29. :key="menu2.id"
  30. >
  31. <router-link :to="{ path: menu2.ext5 }">
  32. <i class="fa fa-circle-o"></i>{{ menu2.name }}
  33. </router-link>
  34. </el-menu-item>
  35. </el-menu-item-group>
  36. </el-submenu>
  37. </el-menu>
  38. </el-aside>
  39. </template>
  40. <script>
  41. import { mapState } from "vuex";
  42. import { core_api } from "../../constants/constants";
  43. const routesToMenu = [
  44. {
  45. path: "/basic",
  46. name: "基础信息",
  47. groupCode: "BASIC_MENUS"
  48. },
  49. {
  50. path: "/examwork",
  51. name: "考务管理",
  52. groupCode: "EXAM_WORK_MENUS"
  53. },
  54. {
  55. path: "/questions",
  56. name: "题库",
  57. groupCode: "QUESTIONS_WORK_MENUS"
  58. },
  59. {
  60. path: "/oe",
  61. name: "网考",
  62. groupCode: "NETEXAM_WORK_MENUS"
  63. },
  64. {
  65. path: "/marking",
  66. name: "阅卷",
  67. groupCode: "MARK_WORK_MENUS"
  68. },
  69. {
  70. path: "/portal",
  71. groupCode: "PORTAL_MENUS"
  72. }
  73. ];
  74. export default {
  75. name: "HomeSide",
  76. data() {
  77. return {
  78. group: null,
  79. menuList: []
  80. };
  81. },
  82. computed: {
  83. ...mapState({ user: state => state.user }),
  84. menuList1() {
  85. return this.menuList.filter(
  86. m => m.parentId === null && m.ext1 === "menu"
  87. );
  88. }
  89. },
  90. methods: {
  91. async getUserPrivileges(groupCode) {
  92. var url = core_api + "/rolePrivilege/getUserPrivileges";
  93. const params = new URLSearchParams();
  94. params.append("groupCode", groupCode);
  95. params.append("full", false);
  96. const res = await this.$httpWithMsg.post(url, params, {
  97. headers: { "content-type": "application/x-www-form-urlencoded" }
  98. });
  99. return res.data;
  100. },
  101. menuList2(menu1) {
  102. return this.menuList.filter(
  103. m => m.parentId === menu1.id && m.ext1 === "menu"
  104. );
  105. }
  106. },
  107. async created() {
  108. this.group = routesToMenu.find(v => this.$route.path.startsWith(v.path));
  109. const groupCode = this.group && this.group.groupCode;
  110. if (groupCode) {
  111. this.menuList = await this.getUserPrivileges(groupCode);
  112. }
  113. }
  114. };
  115. </script>
  116. <style scoped>
  117. .el-menu-vertical-demo {
  118. height: calc(100vh - 60px);
  119. }
  120. .el-aside {
  121. background-color: #545c64;
  122. color: #fff;
  123. }
  124. </style>