Ver Fonte

待办调试

zhangjie há 3 anos atrás
pai
commit
e97d7d3086

+ 92 - 92
src/assets/styles/icons.scss

@@ -1,92 +1,92 @@
-// icon
-.icon {
-  display: inline-block;
-  vertical-align: middle;
-  width: 16px;
-  height: 16px;
-  background-repeat: no-repeat;
-  background-size: 100% 100%;
-
-  // home
-  &-location {
-    background-image: url(../images/icon-location.png);
-    width: 10px;
-    height: 10px;
-  }
-  // navs
-  &-exam {
-    background-image: url(../images/icon-exam.png);
-  }
-  &-report {
-    background-image: url(../images/icon-report.png);
-  }
-  &-base {
-    width: 14px;
-    background-image: url(../images/icon-base.png);
-  }
-  &-customer {
-    background-image: url(../images/icon-customer.png);
-  }
-  &-workspace {
-    background-image: url(../images/icon-workspace.png);
-  }
-  &-book {
-    background-image: url(../images/icon-book.png);
-  }
-
-  &-account {
-    background-image: url(../images/icon-account.png);
-  }
-  &-logout {
-    background-image: url(../images/icon-logout.png);
-  }
-
-  // login
-  &-phone {
-    background-image: url(../images/icon-phone.png);
-    width: 14px;
-    height: 16px;
-  }
-  &-password {
-    background-image: url(../images/icon-password.png);
-    width: 14px;
-    height: 14px;
-  }
-  &-checkcode {
-    background-image: url(../images/icon-checkcode.png);
-    width: 14px;
-    height: 16px;
-  }
-  // other
-  &-error {
-    background-image: url(../images/icon-error.png);
-    width: 16px;
-    height: 16px;
-  }
-  &-search {
-    background-image: url(../images/icon-search.png);
-    width: 14px;
-    height: 14px;
-  }
-  &-download {
-    background-image: url(../images/icon-download.png);
-    width: 14px;
-    height: 14px;
-  }
-  &-close {
-    background-image: url(../images/icon-close.png);
-  }
-  &-close-act {
-    background-image: url(../images/icon-close-act.png);
-  }
-  &-files {
-    background-image: url(../images/icon-files.png);
-    width: 14px;
-    height: 12px;
-  }
-  &-files-act {
-    background-image: url(../images/icon-files-act.png);
-    width: 14px;
-    height: 12px;
-  }
-}
+// icon
+.icon {
+  display: inline-block;
+  vertical-align: middle;
+  width: 16px;
+  height: 16px;
+  background-repeat: no-repeat;
+  background-size: 100% 100%;
+
+  // home
+  &-location {
+    background-image: url(../images/icon-location.png);
+    width: 10px;
+    height: 10px;
+  }
+  // navs
+  &-exam {
+    background-image: url(../images/icon-exam.png);
+  }
+  &-report {
+    background-image: url(../images/icon-report.png);
+  }
+  &-base {
+    width: 14px;
+    background-image: url(../images/icon-base.png);
+  }
+  &-customer {
+    background-image: url(../images/icon-customer.png);
+  }
+  &-workspace {
+    background-image: url(../images/icon-workspace.png);
+  }
+  &-book {
+    background-image: url(../images/icon-book.png);
+  }
+
+  &-account {
+    background-image: url(../images/icon-account.png);
+  }
+  &-logout {
+    background-image: url(../images/icon-logout.png);
+  }
+
+  // login
+  &-phone {
+    background-image: url(../images/icon-phone.png);
+    width: 14px;
+    height: 16px;
+  }
+  &-password {
+    background-image: url(../images/icon-password.png);
+    width: 14px;
+    height: 14px;
+  }
+  &-checkcode {
+    background-image: url(../images/icon-checkcode.png);
+    width: 14px;
+    height: 16px;
+  }
+  // other
+  &-error {
+    background-image: url(../images/icon-error.png);
+    width: 16px;
+    height: 16px;
+  }
+  &-search {
+    background-image: url(../images/icon-search.png);
+    width: 14px;
+    height: 14px;
+  }
+  &-download {
+    background-image: url(../images/icon-download.png);
+    width: 14px;
+    height: 14px;
+  }
+  &-close {
+    background-image: url(../images/icon-close.png);
+  }
+  &-close-act {
+    background-image: url(../images/icon-close-act.png);
+  }
+  &-files {
+    background-image: url(../images/icon-files.png);
+    width: 14px;
+    height: 12px;
+  }
+  &-files-act {
+    background-image: url(../images/icon-files-act.png);
+    width: 14px;
+    height: 12px;
+  }
+}

+ 2 - 2
src/assets/styles/pages.scss

@@ -1091,8 +1091,8 @@
     border: none;
     outline: none;
 
-    &:hover,
-    &.is-active {
+    &:not(.is-disabled):hover,
+    &:not(.is-disabled).is-active {
       color: $--color-success;
     }
   }

+ 1 - 0
src/modules/admin/views/Admin.vue

@@ -1,6 +1,7 @@
 <template>
   <div class="admin">
     <div class="home-header">
+      <div class="head-menu menu-list"></div>
       <div class="head-user menu-list">
         <ul>
           <li @click="toSelectSchool">

+ 6 - 6
src/modules/analysis/components/ModifyBaseConfig.vue

@@ -7,11 +7,12 @@
     append-to-body
     fullscreen
     @opened="visibleChange"
+    @closed="dialogClosed"
   >
     <div slot="title">
       基础配置<span class="color-gray-2 ml-2">{{ insCont }}</span>
     </div>
-    <div class="part-box part-box-pad">
+    <div v-if="dataReady" class="part-box part-box-pad">
       <el-steps :active="curStep" align-center finish-status="success">
         <el-step
           v-for="(item, ind) in steps"
@@ -132,6 +133,9 @@ export default {
       await this.getData();
       this.dataReady = true;
     },
+    dialogClosed() {
+      this.$emit("closed");
+    },
     cancel() {
       this.modalIsShow = false;
     },
@@ -165,11 +169,7 @@ export default {
       });
 
       const nextStep = this.steps.findIndex(item => item.status !== "success");
-      if (
-        nextStep > -1 &&
-        nextStep !== this.steps.length - 1 &&
-        this.steps[nextStep].status === "wait"
-      ) {
+      if (nextStep > -1 && this.steps[nextStep].status === "wait") {
         this.curStep = nextStep;
         this.steps[this.curStep].status = "process";
       }

+ 49 - 13
src/modules/analysis/components/baseConfig/DiagnoseConfig.vue

@@ -77,13 +77,45 @@
 import { mapState } from "vuex";
 import ProficiencyEdit from "./ProficiencyEdit.vue";
 import { updatePaperDefine } from "../../api";
+import { deepCopy } from "@/plugins/utils";
 
 const initModalForm = {
   knowledgeInterpret: "课程标准规定的学科内容",
   abilityInterpret: "经学习与训练内化而成的心理结构",
   totalScore: 100,
-  passScore: 100,
-  gradeModuleDefineParamList: []
+  passScore: 60,
+  gradeModuleDefineParamList: [
+    {
+      level: "A",
+      title: "熟练掌握",
+      startRate: 90,
+      endRate: 100
+    },
+    {
+      level: "B",
+      title: "较好掌握",
+      startRate: 75,
+      endRate: 90
+    },
+    {
+      level: "C",
+      title: "基本掌握",
+      startRate: 55,
+      endRate: 75
+    },
+    {
+      level: "D",
+      title: "部分掌握",
+      startRate: 40,
+      endRate: 55
+    },
+    {
+      level: "E",
+      title: "没有掌握,需从头再学",
+      startRate: 0,
+      endRate: 40
+    }
+  ]
 };
 
 export default {
@@ -169,17 +201,21 @@ export default {
   },
   methods: {
     initData() {
-      this.modalForm = this.$objAssign(initModalForm, this.defineList);
-      this.modalForm.gradeModuleDefineParamList = this.defineList.gradeModuleKnowledgeDefineParamList.map(
-        item => {
-          return {
-            level: item.level,
-            title: item.define.split(":")[0],
-            startRate: item.min * 100,
-            endRate: item.max * 100
-          };
-        }
-      );
+      if (this.defineList) {
+        this.modalForm = this.$objAssign(initModalForm, this.defineList);
+        this.modalForm.gradeModuleDefineParamList = this.defineList.gradeModuleKnowledgeDefineParamList.map(
+          item => {
+            return {
+              level: item.level,
+              title: item.define.split(":")[0],
+              startRate: item.min * 100,
+              endRate: item.max * 100
+            };
+          }
+        );
+      } else {
+        this.modalForm = deepCopy(initModalForm);
+      }
     },
     paramChange(data) {
       this.modalForm.gradeModuleDefineParamList = data;

+ 6 - 3
src/modules/analysis/components/baseConfig/baseConfigsStore.js

@@ -9,7 +9,7 @@ const state = {
   baseInfo: {},
   dimensionList: [],
   structList: [],
-  defineList: {},
+  defineList: null,
   evaluationList: []
 };
 
@@ -55,8 +55,11 @@ const actions = {
       paperNumber: state.baseInfo.paperNumber,
       paperType: state.baseInfo.paperType
     };
-    const data = await paperDefineList(datas).catch(() => {});
-    if (!data) return Promise.reject();
+    let err = false;
+    const data = await paperDefineList(datas).catch(() => {
+      err = true;
+    });
+    if (err) return Promise.reject();
     commit("setDefineList", data);
   },
   async fetchEvaluationList({ state, commit }) {

+ 1 - 0
src/modules/exam/components/WaitTaskAnalysis.vue

@@ -40,6 +40,7 @@
     <modify-base-config
       ref="ModifyBaseConfig"
       :instance="curTask"
+      @closed="taskModified"
     ></modify-base-config>
   </div>
 </template>

+ 398 - 398
src/views/Home.vue

@@ -1,398 +1,398 @@
-<template>
-  <div class="home">
-    <div class="home-header">
-      <div class="head-menu menu-list">
-        <ul>
-          <li
-            v-for="(menu, index) in menus"
-            :key="index"
-            :class="[
-              'menu-item',
-              { 'menu-item-act': curMenu.url === menu.url }
-            ]"
-            @click="toMenu(menu)"
-          >
-            <i
-              :class="[
-                'icon',
-                MENU_ICONS[menu.url]
-                  ? `icon-${MENU_ICONS[menu.url]}`
-                  : 'icon-workspace'
-              ]"
-            ></i>
-            <span>{{ menu.name }}</span>
-          </li>
-        </ul>
-      </div>
-      <div class="head-user menu-list">
-        <ul>
-          <li v-if="schoolName" @click="toSelectSchool" title="切换学校">
-            <i class="el-icon-s-home"></i>
-            <span>{{ schoolName }}</span>
-          </li>
-          <li class="menu-item menu-item-account" @click="toResetPwd">
-            <i class="icon icon-account"></i>
-            <span :title="username">{{ username }}</span>
-          </li>
-          <li class="menu-item" @click="toLogout">
-            <i class="icon icon-logout" title="退出登录"></i>
-          </li>
-        </ul>
-      </div>
-    </div>
-
-    <div class="home-navs">
-      <div class="head-logo">
-        <div class="head-logo-content">
-          <img v-if="schoolLogo" :src="schoolLogo" alt="知学知考" />
-          <h1 v-else>知学知考</h1>
-        </div>
-      </div>
-
-      <el-menu
-        v-if="curMenu.children && curMenu.children.length"
-        class="el-menu-home"
-        active-text-color="#3a5ae5"
-        text-color="#434656"
-        router
-        :default-active="curRouteName"
-        :default-openeds="curSubMenuNames"
-      >
-        <template v-for="submenu in curMenu.children">
-          <el-submenu
-            v-if="submenu.children && submenu.children.length"
-            :key="submenu.id"
-            :index="submenu.url"
-          >
-            <span slot="title">{{ submenu.name }}</span>
-            <el-menu-item
-              v-for="nav in submenu.children"
-              :key="nav.id"
-              :index="nav.url"
-              :route="{ name: nav.url }"
-            >
-              <span>{{ nav.name }}</span>
-              <span
-                class="nav-item-info"
-                v-if="nav.url === 'WaitTask' && waitTaskCount"
-                >{{ waitTaskCount }}</span
-              >
-            </el-menu-item>
-          </el-submenu>
-          <el-menu-item
-            v-else
-            :key="submenu.id"
-            :index="submenu.url"
-            :route="{ name: submenu.url }"
-          >
-            <span>{{ submenu.name }}</span>
-          </el-menu-item>
-        </template>
-      </el-menu>
-    </div>
-
-    <div class="home-body">
-      <div class="home-main">
-        <div class="home-breadcrumb" v-if="breadcrumbs.length">
-          <span class="breadcrumb-tips">
-            <i class="icon icon-location"></i>
-            <span>当前所在位置:</span>
-          </span>
-          <el-breadcrumb separator="/">
-            <el-breadcrumb-item v-for="bread in breadcrumbs" :key="bread.url">{{
-              bread.name
-            }}</el-breadcrumb-item>
-          </el-breadcrumb>
-        </div>
-
-        <!-- home-view: page detail -->
-        <div class="home-view">
-          <router-view />
-        </div>
-      </div>
-    </div>
-
-    <!-- 修改密码 -->
-    <reset-pwd
-      :user-info="userInfo"
-      ref="ResetPwd"
-      @modified="resetPwdModified"
-    ></reset-pwd>
-  </div>
-</template>
-
-<script>
-import { mapState, mapActions } from "vuex";
-import localMenus from "@/constants/menus-data";
-import { sysMenu, logout } from "../modules/login/api";
-import ResetPwd from "../modules/base/components/ResetPwd";
-import { SYS_ADMIN_NAME } from "@/constants/enumerate";
-
-const MENU_ICONS = {
-  base: "base",
-  exam: "exam",
-  customer: "customer",
-  stmms: "book"
-};
-
-export default {
-  name: "home",
-  components: { ResetPwd },
-  data() {
-    const user = this.$ls.get("user", { id: "", realName: "", roleList: [] });
-    const IS_SUPER_ADMIN = user.loginName === SYS_ADMIN_NAME;
-
-    return {
-      MENU_ICONS,
-      privileges: [],
-      menus: [],
-      curMenu: { url: "", children: [] },
-      curRouteName: "",
-      curSubMenuNames: [],
-      breadcrumbs: [],
-      validRoutes: [],
-      username: user.realName,
-      userRoles: user.roleList,
-      schoolLogo: this.$ls.get("schoolLogo"),
-      schoolName: this.$ls.get("schoolName"),
-      userInfo: {
-        pwdCount: 0,
-        mobileNumber: 1,
-        userId: user.id
-      },
-      IS_SUPER_ADMIN
-    };
-  },
-  watch: {
-    $route(val) {
-      if (val.name === "Home") return;
-      this.routerChange();
-    }
-  },
-  computed: {
-    ...mapState("exam", ["waitTaskCount"])
-  },
-  created() {
-    this.initData();
-  },
-  methods: {
-    ...mapActions("exam", ["updateWaitTaskCount"]),
-    initData1() {
-      // 开发阶段专用
-      this.initPrivilegeMap(localMenus);
-      this.privileges = this.transformMenu(localMenus);
-      this.menus = this.getMenu();
-
-      if (this.$route.name === "Home") {
-        this.toMenu(this.menus[0]);
-        return;
-      }
-
-      if (!this.validRoutes.includes(this.$route.name)) {
-        this.$router.replace({
-          name: "404"
-        });
-        return;
-      }
-
-      this.updateBreadcrumbs();
-      const curMenu = this.menus.find(
-        menu => menu.url === this.breadcrumbs[0].url
-      );
-      this.menuChange(curMenu);
-      if (
-        this.validRoutes.includes("WaitTask") &&
-        this.curMenu.url === "exam"
-      ) {
-        this.updateWaitTaskCount();
-      }
-    },
-    async initData() {
-      const data = await sysMenu();
-      this.initPrivilegeMap(data.privileges);
-      this.privileges = this.transformMenu(data.privileges);
-      this.menus = this.getMenu();
-
-      if (this.$route.name === "Home") {
-        this.toMenu(this.menus[0]);
-        return;
-      }
-
-      if (!this.validRoutes.includes(this.$route.name)) {
-        this.$router.replace({
-          name: "404"
-        });
-        return;
-      }
-
-      this.updateBreadcrumbs();
-      const curMenu = this.menus.find(
-        menu => menu.url === this.breadcrumbs[0].url
-      );
-      this.menuChange(curMenu);
-
-      if (
-        this.validRoutes.includes("WaitTask") &&
-        this.curMenu.url === "exam"
-      ) {
-        this.updateWaitTaskCount();
-      }
-    },
-    transformMenu(list) {
-      return list.map(item => {
-        return {
-          id: item.id,
-          parentId: item.parentId,
-          name: item.name,
-          type: item.type,
-          url: item.url
-        };
-      });
-    },
-    getMenu() {
-      const getChildren = id => {
-        return this.privileges
-          .filter(item => item.parentId === id)
-          .map(item => {
-            return { ...item };
-          });
-      };
-
-      let menus = getChildren("-1");
-      let validRoutes = [];
-      const toTree = menus => {
-        menus.forEach(menu => {
-          const children = getChildren(menu.id);
-          if (children.length) {
-            menu.children = children;
-            toTree(menu.children);
-          } else {
-            validRoutes.push(menu.url);
-          }
-        });
-      };
-      toTree(menus);
-
-      this.validRoutes = validRoutes;
-      // console.log(JSON.stringify(menus));
-      return menus;
-    },
-    getCurMenuFirstRouter() {
-      let firstRouteName = "";
-      let menu = this.curMenu;
-      while (menu) {
-        firstRouteName = menu.url;
-        menu = menu.children && menu.children[0];
-      }
-
-      return firstRouteName;
-    },
-    initPrivilegeMap(data) {
-      let privilegeMap = {};
-      const pageSetTypes = ["conditions", "buttons", "lists", "links"];
-      data.forEach(item => {
-        const isPage = pageSetTypes.some(
-          type => item[type] && item[type].length
-        );
-        if (!isPage) return;
-        privilegeMap[item.url] = [];
-        pageSetTypes.forEach((type, index) => {
-          if (item[type] && item[type].length) {
-            item[type].forEach(elem => {
-              privilegeMap[item.url].push(
-                `${elem.type}_${elem.url}`.toLowerCase()
-              );
-            });
-          }
-        });
-      });
-      this.$store.commit("setPrivilegeMap", privilegeMap);
-      this.$ls.set("privilegeMap", privilegeMap);
-    },
-    menuChange(menu) {
-      this.curMenu = menu;
-
-      this.curSubMenuNames = this.privileges
-        .filter(item => item.parentId === menu.id)
-        .map(item => item.url);
-    },
-    toMenu(menu) {
-      if (this.curMenu.url === menu.url) return;
-      this.menuChange(menu);
-      const firstRouteName = this.getCurMenuFirstRouter();
-      this.$router.replace({
-        name: firstRouteName
-      });
-    },
-    updateBreadcrumbs() {
-      this.curRouteName = this.$route.name;
-      let breadcrumbs = [];
-      let curBreadcrumb = this.privileges.find(
-        item => item.url === this.curRouteName
-      );
-      breadcrumbs.push({ ...curBreadcrumb });
-
-      while (curBreadcrumb && curBreadcrumb.parentId !== "-1") {
-        curBreadcrumb = this.privileges.find(
-          item => item.id === curBreadcrumb.parentId
-        );
-        if (curBreadcrumb) breadcrumbs.unshift({ ...curBreadcrumb });
-      }
-
-      this.breadcrumbs = breadcrumbs;
-    },
-    routerChange() {
-      this.updateBreadcrumbs();
-
-      if (
-        this.validRoutes.includes("WaitTask") &&
-        this.curMenu.url === "exam"
-      ) {
-        this.updateWaitTaskCount();
-      }
-    },
-    toLogout() {
-      this.$confirm("确定要退出登录吗?", "提示", {
-        type: "warning"
-      })
-        .then(() => {
-          this.logoutAction();
-        })
-        .catch(() => {});
-    },
-    async logoutAction() {
-      await logout();
-      this.$ls.clear();
-      this.$router.push({ name: "Login" });
-    },
-    toSelectSchool() {
-      if (this.IS_SUPER_ADMIN) this.$router.push({ name: "SelectSchool" });
-    },
-    toResetPwd() {
-      if (this.IS_SUPER_ADMIN) return;
-      this.$refs.ResetPwd.open();
-    },
-    resetPwdModified() {
-      this.logoutAction();
-    },
-    // other
-    getSubMenus(menu) {
-      return this.privileges.filter(
-        m => m.parentId === menu.id && m.type === "MENU"
-      );
-    },
-    getFirstRouter() {
-      let childNavs = this.privileges;
-      let firstRouteName = "";
-      while (childNavs.length) {
-        firstRouteName = childNavs[0].url;
-        childNavs = this.privileges.filter(
-          item => item.parentId === childNavs[0].id
-        );
-      }
-
-      return firstRouteName;
-    }
-  }
-};
-</script>
+<template>
+  <div class="home">
+    <div class="home-header">
+      <div class="head-menu menu-list">
+        <ul>
+          <li
+            v-for="(menu, index) in menus"
+            :key="index"
+            :class="[
+              'menu-item',
+              { 'menu-item-act': curMenu.url === menu.url }
+            ]"
+            @click="toMenu(menu)"
+          >
+            <i
+              :class="[
+                'icon',
+                MENU_ICONS[menu.url]
+                  ? `icon-${MENU_ICONS[menu.url]}`
+                  : 'icon-workspace'
+              ]"
+            ></i>
+            <span>{{ menu.name }}</span>
+          </li>
+        </ul>
+      </div>
+      <div class="head-user menu-list">
+        <ul>
+          <li v-if="schoolName" @click="toSelectSchool" title="切换学校">
+            <i class="el-icon-s-home"></i>
+            <span>{{ schoolName }}</span>
+          </li>
+          <li class="menu-item menu-item-account" @click="toResetPwd">
+            <i class="icon icon-account"></i>
+            <span :title="username">{{ username }}</span>
+          </li>
+          <li class="menu-item" @click="toLogout">
+            <i class="icon icon-logout" title="退出登录"></i>
+          </li>
+        </ul>
+      </div>
+    </div>
+
+    <div class="home-navs">
+      <div class="head-logo">
+        <div class="head-logo-content">
+          <img v-if="schoolLogo" :src="schoolLogo" alt="知学知考" />
+          <h1 v-else>知学知考</h1>
+        </div>
+      </div>
+
+      <el-menu
+        v-if="curMenu.children && curMenu.children.length"
+        class="el-menu-home"
+        active-text-color="#3a5ae5"
+        text-color="#434656"
+        router
+        :default-active="curRouteName"
+        :default-openeds="curSubMenuNames"
+      >
+        <template v-for="submenu in curMenu.children">
+          <el-submenu
+            v-if="submenu.children && submenu.children.length"
+            :key="submenu.id"
+            :index="submenu.url"
+          >
+            <span slot="title">{{ submenu.name }}</span>
+            <el-menu-item
+              v-for="nav in submenu.children"
+              :key="nav.id"
+              :index="nav.url"
+              :route="{ name: nav.url }"
+            >
+              <span>{{ nav.name }}</span>
+              <span
+                class="nav-item-info"
+                v-if="nav.url === 'WaitTask' && waitTaskCount"
+                >{{ waitTaskCount }}</span
+              >
+            </el-menu-item>
+          </el-submenu>
+          <el-menu-item
+            v-else
+            :key="submenu.id"
+            :index="submenu.url"
+            :route="{ name: submenu.url }"
+          >
+            <span>{{ submenu.name }}</span>
+          </el-menu-item>
+        </template>
+      </el-menu>
+    </div>
+
+    <div class="home-body">
+      <div class="home-main">
+        <div class="home-breadcrumb" v-if="breadcrumbs.length">
+          <span class="breadcrumb-tips">
+            <i class="icon icon-location"></i>
+            <span>当前所在位置:</span>
+          </span>
+          <el-breadcrumb separator="/">
+            <el-breadcrumb-item v-for="bread in breadcrumbs" :key="bread.url">{{
+              bread.name
+            }}</el-breadcrumb-item>
+          </el-breadcrumb>
+        </div>
+
+        <!-- home-view: page detail -->
+        <div class="home-view">
+          <router-view />
+        </div>
+      </div>
+    </div>
+
+    <!-- 修改密码 -->
+    <reset-pwd
+      :user-info="userInfo"
+      ref="ResetPwd"
+      @modified="resetPwdModified"
+    ></reset-pwd>
+  </div>
+</template>
+
+<script>
+import { mapState, mapActions } from "vuex";
+import localMenus from "@/constants/menus-data";
+import { sysMenu, logout } from "../modules/login/api";
+import ResetPwd from "../modules/base/components/ResetPwd";
+import { SYS_ADMIN_NAME } from "@/constants/enumerate";
+
+const MENU_ICONS = {
+  base: "base",
+  exam: "exam",
+  customer: "customer",
+  stmms: "book"
+};
+
+export default {
+  name: "home",
+  components: { ResetPwd },
+  data() {
+    const user = this.$ls.get("user", { id: "", realName: "", roleList: [] });
+    const IS_SUPER_ADMIN = user.loginName === SYS_ADMIN_NAME;
+
+    return {
+      MENU_ICONS,
+      privileges: [],
+      menus: [],
+      curMenu: { url: "", children: [] },
+      curRouteName: "",
+      curSubMenuNames: [],
+      breadcrumbs: [],
+      validRoutes: [],
+      username: user.realName,
+      userRoles: user.roleList,
+      schoolLogo: this.$ls.get("schoolLogo"),
+      schoolName: this.$ls.get("schoolName"),
+      userInfo: {
+        pwdCount: 0,
+        mobileNumber: 1,
+        userId: user.id
+      },
+      IS_SUPER_ADMIN
+    };
+  },
+  watch: {
+    $route(val) {
+      if (val.name === "Home") return;
+      this.routerChange();
+    }
+  },
+  computed: {
+    ...mapState("exam", ["waitTaskCount"])
+  },
+  created() {
+    this.initData();
+  },
+  methods: {
+    ...mapActions("exam", ["updateWaitTaskCount"]),
+    initData1() {
+      // 开发阶段专用
+      this.initPrivilegeMap(localMenus);
+      this.privileges = this.transformMenu(localMenus);
+      this.menus = this.getMenu();
+
+      if (this.$route.name === "Home") {
+        this.toMenu(this.menus[0]);
+        return;
+      }
+
+      if (!this.validRoutes.includes(this.$route.name)) {
+        this.$router.replace({
+          name: "404"
+        });
+        return;
+      }
+
+      this.updateBreadcrumbs();
+      const curMenu = this.menus.find(
+        menu => menu.url === this.breadcrumbs[0].url
+      );
+      this.menuChange(curMenu);
+      if (
+        this.validRoutes.includes("WaitTask") &&
+        this.curMenu.url === "exam"
+      ) {
+        this.updateWaitTaskCount();
+      }
+    },
+    async initData() {
+      const data = await sysMenu();
+      this.initPrivilegeMap(data.privileges);
+      this.privileges = this.transformMenu(data.privileges);
+      this.menus = this.getMenu();
+
+      if (this.$route.name === "Home") {
+        this.toMenu(this.menus[0]);
+        return;
+      }
+
+      if (!this.validRoutes.includes(this.$route.name)) {
+        this.$router.replace({
+          name: "404"
+        });
+        return;
+      }
+
+      this.updateBreadcrumbs();
+      const curMenu = this.menus.find(
+        menu => menu.url === this.breadcrumbs[0].url
+      );
+      this.menuChange(curMenu);
+
+      if (
+        this.validRoutes.includes("WaitTask") &&
+        this.curMenu.url === "exam"
+      ) {
+        this.updateWaitTaskCount();
+      }
+    },
+    transformMenu(list) {
+      return list.map(item => {
+        return {
+          id: item.id,
+          parentId: item.parentId,
+          name: item.name,
+          type: item.type,
+          url: item.url
+        };
+      });
+    },
+    getMenu() {
+      const getChildren = id => {
+        return this.privileges
+          .filter(item => item.parentId === id)
+          .map(item => {
+            return { ...item };
+          });
+      };
+
+      let menus = getChildren("-1");
+      let validRoutes = [];
+      const toTree = menus => {
+        menus.forEach(menu => {
+          const children = getChildren(menu.id);
+          if (children.length) {
+            menu.children = children;
+            toTree(menu.children);
+          } else {
+            validRoutes.push(menu.url);
+          }
+        });
+      };
+      toTree(menus);
+
+      this.validRoutes = validRoutes;
+      // console.log(JSON.stringify(menus));
+      return menus;
+    },
+    getCurMenuFirstRouter() {
+      let firstRouteName = "";
+      let menu = this.curMenu;
+      while (menu) {
+        firstRouteName = menu.url;
+        menu = menu.children && menu.children[0];
+      }
+
+      return firstRouteName;
+    },
+    initPrivilegeMap(data) {
+      let privilegeMap = {};
+      const pageSetTypes = ["conditions", "buttons", "lists", "links"];
+      data.forEach(item => {
+        const isPage = pageSetTypes.some(
+          type => item[type] && item[type].length
+        );
+        if (!isPage) return;
+        privilegeMap[item.url] = [];
+        pageSetTypes.forEach((type, index) => {
+          if (item[type] && item[type].length) {
+            item[type].forEach(elem => {
+              privilegeMap[item.url].push(
+                `${elem.type}_${elem.url}`.toLowerCase()
+              );
+            });
+          }
+        });
+      });
+      this.$store.commit("setPrivilegeMap", privilegeMap);
+      this.$ls.set("privilegeMap", privilegeMap);
+    },
+    menuChange(menu) {
+      this.curMenu = menu;
+
+      this.curSubMenuNames = this.privileges
+        .filter(item => item.parentId === menu.id)
+        .map(item => item.url);
+    },
+    toMenu(menu) {
+      if (this.curMenu.url === menu.url) return;
+      this.menuChange(menu);
+      const firstRouteName = this.getCurMenuFirstRouter();
+      this.$router.replace({
+        name: firstRouteName
+      });
+    },
+    updateBreadcrumbs() {
+      this.curRouteName = this.$route.name;
+      let breadcrumbs = [];
+      let curBreadcrumb = this.privileges.find(
+        item => item.url === this.curRouteName
+      );
+      breadcrumbs.push({ ...curBreadcrumb });
+
+      while (curBreadcrumb && curBreadcrumb.parentId !== "-1") {
+        curBreadcrumb = this.privileges.find(
+          item => item.id === curBreadcrumb.parentId
+        );
+        if (curBreadcrumb) breadcrumbs.unshift({ ...curBreadcrumb });
+      }
+
+      this.breadcrumbs = breadcrumbs;
+    },
+    routerChange() {
+      this.updateBreadcrumbs();
+
+      if (
+        this.validRoutes.includes("WaitTask") &&
+        this.curMenu.url === "exam"
+      ) {
+        this.updateWaitTaskCount();
+      }
+    },
+    toLogout() {
+      this.$confirm("确定要退出登录吗?", "提示", {
+        type: "warning"
+      })
+        .then(() => {
+          this.logoutAction();
+        })
+        .catch(() => {});
+    },
+    async logoutAction() {
+      await logout();
+      this.$ls.clear();
+      this.$router.push({ name: "Login" });
+    },
+    toSelectSchool() {
+      if (this.IS_SUPER_ADMIN) this.$router.push({ name: "SelectSchool" });
+    },
+    toResetPwd() {
+      if (this.IS_SUPER_ADMIN) return;
+      this.$refs.ResetPwd.open();
+    },
+    resetPwdModified() {
+      this.logoutAction();
+    },
+    // other
+    getSubMenus(menu) {
+      return this.privileges.filter(
+        m => m.parentId === menu.id && m.type === "MENU"
+      );
+    },
+    getFirstRouter() {
+      let childNavs = this.privileges;
+      let firstRouteName = "";
+      while (childNavs.length) {
+        firstRouteName = childNavs[0].url;
+        childNavs = this.privileges.filter(
+          item => item.parentId === childNavs[0].id
+        );
+      }
+
+      return firstRouteName;
+    }
+  }
+};
+</script>