Admin.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. <template>
  2. <div class="admin">
  3. <div class="home-header">
  4. <div class="head-menu menu-list"></div>
  5. <div class="head-user menu-list">
  6. <ul>
  7. <li @click="toSelectSchool">
  8. <i class="el-icon-s-home"></i>
  9. <span>切换学校</span>
  10. </li>
  11. <li class="menu-item menu-item-account" @click="toResetPwd">
  12. <i class="icon icon-account"></i>
  13. <span :title="username">{{ username }}</span>
  14. </li>
  15. <li class="menu-item menu-item-logout" @click="toLogout">
  16. <i class="el-icon-switch-button" title="退出登录"></i>
  17. <span>退出</span>
  18. </li>
  19. </ul>
  20. </div>
  21. </div>
  22. <div class="home-navs">
  23. <div class="head-logo">
  24. <div class="head-logo-content">
  25. <h1>知学知考</h1>
  26. </div>
  27. </div>
  28. <el-menu
  29. class="el-menu-home"
  30. active-text-color="#705eff"
  31. text-color="#383b4a"
  32. router
  33. :default-active="curRouteName"
  34. :default-openeds="curSubMenuNames"
  35. >
  36. <el-submenu
  37. v-for="submenu in menus"
  38. :key="submenu.url"
  39. :index="submenu.url"
  40. >
  41. <template slot="title">
  42. <span>{{ submenu.name }}</span>
  43. </template>
  44. <el-menu-item
  45. v-for="nav in submenu.children"
  46. :key="nav.url"
  47. :index="nav.url"
  48. :route="{ name: nav.url }"
  49. >
  50. <span>{{ nav.name }}</span>
  51. </el-menu-item>
  52. </el-submenu>
  53. </el-menu>
  54. </div>
  55. <div class="home-body">
  56. <div class="home-body-content">
  57. <div class="home-breadcrumb" v-if="breadcrumbs.length">
  58. <span class="breadcrumb-tips">
  59. <i class="icon icon-location"></i>
  60. <span>当前所在位置:</span>
  61. </span>
  62. <el-breadcrumb separator="/">
  63. <el-breadcrumb-item
  64. v-for="(bread, index) in breadcrumbs"
  65. :key="index"
  66. >{{ bread.name }}</el-breadcrumb-item
  67. >
  68. </el-breadcrumb>
  69. </div>
  70. <!-- home-view: page detail -->
  71. <div class="home-view">
  72. <router-view />
  73. </div>
  74. </div>
  75. </div>
  76. <!-- 修改密码 -->
  77. <reset-pwd
  78. ref="ResetPwd"
  79. :user-info="userInfo"
  80. @modified="logoutAction"
  81. ></reset-pwd>
  82. </div>
  83. </template>
  84. <script>
  85. import localNavs from "@/constants/adminNavs";
  86. import { SYS_ADMIN_NAME } from "@/constants/enumerate";
  87. import { logout } from "@/modules/login/api";
  88. import ResetPwd from "../../base/components/ResetPwd";
  89. import { logoutHandle } from "@/plugins/logout";
  90. export default {
  91. name: "home",
  92. components: { ResetPwd },
  93. data() {
  94. const user = this.$ls.get("user", { id: "", realName: "", roleList: [] });
  95. return {
  96. menus: [],
  97. privileges: [],
  98. curRouteName: "",
  99. curSubMenuNames: [],
  100. breadcrumbs: [],
  101. username: user.realName,
  102. userInfo: {
  103. pwdCount: 0,
  104. mobileNumber: 1,
  105. userId: user.id,
  106. },
  107. };
  108. },
  109. watch: {
  110. $route(val) {
  111. if (val.name === "Admin") return;
  112. this.actCurNav();
  113. },
  114. },
  115. created() {
  116. const loginName = this.$ls.get("user", { loginName: "" }).loginName;
  117. if (loginName !== SYS_ADMIN_NAME) {
  118. this.$message.error("非法操作!");
  119. this.$router.replace({ name: "Login" });
  120. return;
  121. }
  122. if (this.$route.name === "Admin") {
  123. this.$router.replace({
  124. name: "SchoolManage",
  125. });
  126. }
  127. this.initData();
  128. },
  129. methods: {
  130. initData() {
  131. this.privileges = localNavs;
  132. this.menus = this.getMenu();
  133. this.curSubMenuNames = this.menus.map((item) => item.url);
  134. if (this.$route.name === "Admin") {
  135. const firstRouteName = this.getFirstRouter();
  136. this.$router.replace({
  137. name: firstRouteName,
  138. });
  139. return;
  140. }
  141. this.actCurNav();
  142. },
  143. getFirstRouter() {
  144. let childNavs = this.privileges;
  145. let firstRouteName = "";
  146. while (childNavs.length) {
  147. firstRouteName = childNavs[0].url;
  148. childNavs = this.privileges.filter(
  149. (item) => item.parentId === childNavs[0].id
  150. );
  151. }
  152. return firstRouteName;
  153. },
  154. getMenu() {
  155. let menus = this.privileges.filter((item) => item.parentId === "-1");
  156. const toTree = (menus) => {
  157. menus.forEach((menu) => {
  158. const children = this.privileges.filter(
  159. (item) => item.parentId === menu.id
  160. );
  161. if (children.length) {
  162. menu.children = children;
  163. toTree(menu.children);
  164. }
  165. });
  166. };
  167. toTree(menus);
  168. return menus;
  169. },
  170. actCurNav() {
  171. this.curRouteName = this.$route.name;
  172. let breadcrumbs = [];
  173. let curBreadcrumb = this.privileges.find(
  174. (item) => item.url === this.curRouteName
  175. );
  176. breadcrumbs.push({ ...curBreadcrumb });
  177. while (curBreadcrumb && curBreadcrumb.parentId !== "-1") {
  178. curBreadcrumb = this.privileges.find(
  179. (item) => item.id === curBreadcrumb.parentId
  180. );
  181. if (curBreadcrumb) breadcrumbs.unshift({ ...curBreadcrumb });
  182. }
  183. this.breadcrumbs = breadcrumbs;
  184. },
  185. toLogout() {
  186. this.$confirm("确定要退出登录吗?", "提示", {
  187. type: "warning",
  188. })
  189. .then(() => {
  190. this.logoutAction();
  191. })
  192. .catch(() => {});
  193. },
  194. async logoutAction() {
  195. await logout().catch(() => {});
  196. logoutHandle();
  197. },
  198. toSelectSchool() {
  199. this.$router.push({ name: "SelectSchool" });
  200. },
  201. toResetPwd() {
  202. this.$refs.ResetPwd.open();
  203. },
  204. },
  205. };
  206. </script>