瀏覽代碼

feat: 阶段拦截

zhangjie 8 月之前
父節點
當前提交
8711e90fd7

+ 12 - 0
src/modules/grading/leader/LeaderGrading.vue

@@ -166,6 +166,7 @@ import SimpleImagePreview from "@/components/SimpleImagePreview";
 import ModifyLeaderGrading from "../components/ModifyLeaderGrading";
 import GradeRibbon from "../components/GradeRibbon";
 import { levelNameTransform } from "@/plugins/utils";
+import { checkMarkValid } from "@/modules/login/check";
 
 import {
   paperList,
@@ -300,6 +301,17 @@ export default {
     async getSubjectDetail() {
       const curSubject = await subjectDetail(this.subjectId);
       this.setCurSubject(curSubject || {});
+
+      const res = checkMarkValid(
+        this.$ls.get("user"),
+        curSubject.stage,
+        "LEVEL"
+      );
+      if (!res.valid) {
+        this.$router.replace({ name: "Login" });
+        this.$Message.error(res.message);
+        return Promise.reject(res.message);
+      }
     },
     async getList() {
       this.clearMultiplePaper();

+ 14 - 0
src/modules/grading/marker/MarkerGrading.vue

@@ -170,6 +170,7 @@ import GradeActionRough from "../components/GradeActionRough";
 import SimpleImagePreview from "@/components/SimpleImagePreview";
 import GradeRibbon from "../components/GradeRibbon";
 import { levelNameTransform } from "@/plugins/utils";
+import { checkMarkValid } from "@/modules/login/check";
 
 import {
   markerTaskList,
@@ -326,6 +327,19 @@ export default {
       const curSubject = await subjectDetail(this.subjectId);
       this.setCurSubject(curSubject || {});
       this.filter.stage = this.curSubject.stage;
+
+      const res = checkMarkValid(
+        this.$ls.get("user"),
+        curSubject.stage,
+        "LEVEL"
+      );
+      console.log(res);
+
+      if (!res.valid) {
+        this.$router.replace({ name: "Login" });
+        this.$Message.error(res.message);
+        return Promise.reject(res.message);
+      }
     },
     async getList() {
       this.clearMultiplePaper();

+ 9 - 49
src/modules/login/LoginHome.vue

@@ -56,9 +56,10 @@
 <script>
 import { mapMutations } from "vuex";
 import { username, password } from "@/plugins/formRules";
-import { login, subjectDetail } from "@/api";
+import { login } from "@/api";
 import ResetPwd from "./ResetPwd";
 import { MARK_LEADER_RIGHTS } from "@/constants/enumerate";
+import { getFirstRoute } from "./check";
 
 export default {
   name: "login",
@@ -73,29 +74,6 @@ export default {
         loginName: username,
         password,
       },
-      rightRoutes: {
-        ADMIN: {
-          router: "WorkManage",
-        },
-        MARKER_LEVEL: {
-          router: "MarkerGrading",
-        },
-        MARKER_SCORE: {
-          router: "MarkerMarking",
-        },
-        MARK_LEADER_LEVEL: {
-          router: "LeaderGrading",
-        },
-        MARK_LEADER_SCORE: {
-          router: "LeaderMarking",
-        },
-        INSPECTION: {
-          router: "Inspection",
-        },
-        QC: {
-          router: "Quality",
-        },
-      },
       isSubmit: false,
     };
   },
@@ -165,36 +143,18 @@ export default {
         subjectId: `${data.workId}-${data.subject}`,
       };
       // 根据角色跳转不同的路由
-      const { role, markRight } = data;
-      let routerType = role;
-      if (role.includes("MARK")) {
-        const levelStages = ["LEVEL", "ROUGH_LEVEL"];
-        const curSubject = await subjectDetail(params.subjectId);
-        const stage = levelStages.includes(curSubject.stage)
-          ? "LEVEL"
-          : curSubject.stage;
-        routerType = `${role}_${stage}`;
-
-        if (stage === "INIT") {
-          this.$Message.error("当前工作未开启分档!");
-          return;
-        }
-        if (role === "MARKER") {
-          if (
-            (levelStages.includes(stage) && markRight === "ALLOW_SCORING") ||
-            (stage === "SCORE" && markRight === "ALLOW_LEVELING")
-          ) {
-            this.$Message.error("您的权限不够!");
-            return;
-          }
-        }
+      const result = await getFirstRoute(data);
+      if (!result.valid) {
+        this.$Message.error(result.message);
+        return;
+      }
 
+      if (data.role.includes("MARK")) {
         this.initRibbonSet(data.id);
       }
 
-      const routerName = this.rightRoutes[routerType].router;
       this.$router.push({
-        name: routerName,
+        name: result.data,
         params,
       });
     },

+ 71 - 0
src/modules/login/check.js

@@ -0,0 +1,71 @@
+import { subjectDetail } from "@/api";
+
+const firstRoutes = {
+  ADMIN: "WorkManage",
+  MARKER_LEVEL: "MarkerGrading",
+  MARKER_SCORE: "MarkerMarking",
+  MARK_LEADER_LEVEL: "LeaderGrading",
+  MARK_LEADER_SCORE: "LeaderMarking",
+  INSPECTION: "Inspection",
+  QC: "Quality",
+};
+const levelStages = ["LEVEL", "ROUGH_LEVEL"];
+const markRoles = ["MARKER", "MARK_LEADER"];
+
+export async function getFirstRoute(userData) {
+  const { workId, subject, role } = userData;
+  let routerType = role;
+  if (markRoles.includes(routerType)) {
+    const subjectId = `${workId}-${subject}`;
+    const curSubject = await subjectDetail(subjectId);
+
+    const mRes = checkMarkValid(userData, curSubject.stage);
+    if (!mRes.valid) {
+      return mRes;
+    }
+
+    const stage = levelStages.includes(curSubject.stage)
+      ? "LEVEL"
+      : curSubject.stage;
+    routerType = `${role}_${stage}`;
+  }
+
+  const routerName = firstRoutes[routerType];
+  return {
+    valid: true,
+    data: routerName,
+  };
+}
+
+export function checkMarkValid(userData, stage, pageStage = "") {
+  const { role, markRight } = userData;
+
+  if (stage === "INIT") {
+    return {
+      valid: false,
+      message: "当前工作未开启分档!",
+    };
+  }
+  if (role === "MARKER") {
+    if (
+      (levelStages.includes(stage) && markRight === "ALLOW_SCORING") ||
+      (stage === "SCORE" && markRight === "ALLOW_LEVELING")
+    ) {
+      return {
+        valid: false,
+        message: "您的权限不够!",
+      };
+    }
+  }
+
+  if (pageStage && stage !== pageStage) {
+    return {
+      valid: false,
+      message: "阶段错误!",
+    };
+  }
+
+  return {
+    valid: true,
+  };
+}

+ 16 - 4
src/modules/mark/leader/LeaderMarking.vue

@@ -107,6 +107,7 @@ import LeaderProgress from "../../grading/leader/LeaderProgress";
 import MarkerImageView from "../../grading/marker/MarkerImageView";
 import MarkerHistory from "../../grading/marker/MarkerHistory";
 import GradeRibbon from "../../grading/components/GradeRibbon";
+import { checkMarkValid } from "@/modules/login/check";
 
 import {
   paperList,
@@ -193,10 +194,10 @@ export default {
       "setShortcut",
       "clearState",
     ]),
-    initData() {
-      this.getWorkLevels();
-      this.getSubjectDetail();
-      this.getParamsSetInfo();
+    async initData() {
+      await this.getSubjectDetail();
+      await this.getWorkLevels();
+      await this.getParamsSetInfo();
     },
     async getParamsSetInfo() {
       const data = await getParamsSet(this.workId);
@@ -205,6 +206,17 @@ export default {
     async getSubjectDetail() {
       const curSubject = await subjectDetail(this.subjectId);
       this.setCurSubject(curSubject || {});
+
+      const res = checkMarkValid(
+        this.$ls.get("user"),
+        curSubject.stage,
+        "SCORE"
+      );
+      if (!res.valid) {
+        this.$router.replace({ name: "Login" });
+        this.$Message.error(res.message);
+        return Promise.reject(res.message);
+      }
     },
     async getList() {
       let data = {

+ 16 - 4
src/modules/mark/marker/MarkerMarking.vue

@@ -134,6 +134,7 @@ import {
   paperTaskPass,
   markConfirmLevelChange,
 } from "@/api";
+import { checkMarkValid } from "@/modules/login/check";
 
 export default {
   name: "marker-marking",
@@ -235,10 +236,10 @@ export default {
       "setShortcut",
       "clearState",
     ]),
-    initData() {
-      this.getParamsSetInfo();
-      this.getWorkLevels();
-      this.getSubjectDetail();
+    async initData() {
+      await this.getSubjectDetail();
+      await this.getParamsSetInfo();
+      await this.getWorkLevels();
     },
     async getParamsSetInfo() {
       const data = await getParamsSet(this.workId);
@@ -249,6 +250,17 @@ export default {
     async getSubjectDetail() {
       const curSubject = await subjectDetail(this.subjectId);
       this.setCurSubject(curSubject || {});
+
+      const res = checkMarkValid(
+        this.$ls.get("user"),
+        curSubject.stage,
+        "SCORE"
+      );
+      if (!res.valid) {
+        this.$router.replace({ name: "Login" });
+        this.$Message.error(res.message);
+        return Promise.reject(res.message);
+      }
     },
     async getList() {
       const datas = {