Browse Source

feat: 评卷员自动绑定设置

zhangjie 3 weeks ago
parent
commit
676f81d14a

+ 9 - 0
src/modules/admin/api.js

@@ -138,6 +138,15 @@ export const schoolSetRecognitionInfo = (schoolId) => {
 export const schoolSetRecognitionUpdate = (datas) => {
   return $postParam("/api/admin/set/objective/omr/save", datas);
 };
+// mark set
+export const schoolSetMarkerUpdate = (datas) => {
+  return $post("/api/admin/set/bind/marker/set/save", datas);
+};
+export const schoolSetMarkeInfo = (schoolId) => {
+  return $postParam("/api/admin/set/bind/marker/set/select", {
+    schoolId,
+  });
+};
 
 // 数据同步 school database sync
 export const schoolSetDatabaseSyncBaseinfo = (schoolId) => {

+ 6 - 0
src/modules/admin/components/school/SchoolSetBase.vue

@@ -27,6 +27,7 @@ import SchoolSetTarget from "./SchoolSetTarget.vue";
 import SchoolSetRecognition from "./SchoolSetRecognition.vue";
 import SchoolSetRobot from "./SchoolSetRobot.vue";
 import SchoolSetAi from "./SchoolSetAi.vue";
+import SchoolSetMark from "./SchoolSetMark.vue";
 
 export default {
   name: "school-set-base",
@@ -39,6 +40,7 @@ export default {
     SchoolSetRecognition,
     SchoolSetRobot,
     SchoolSetAi,
+    SchoolSetMark,
   },
   props: {
     school: {
@@ -84,6 +86,10 @@ export default {
           name: "AI智能评卷设置",
           val: "ai",
         },
+        {
+          name: "评卷员自动绑定设置",
+          val: "mark",
+        },
       ],
       // 记录各个组件的配置是否有变更
       configChangedMap: {},

+ 122 - 0
src/modules/admin/components/school/SchoolSetMark.vue

@@ -0,0 +1,122 @@
+<template>
+  <div class="school-set-mark part-box part-box-pad">
+    <el-form
+      v-if="fields.length"
+      ref="modalFormComp"
+      :model="modalForm"
+      :rules="rules"
+      label-width="140px"
+    >
+      <el-form-item
+        v-for="field in fields"
+        :key="field.code"
+        :prop="field.prop"
+        :label="field.name + ':'"
+      >
+        <template v-if="field.options">
+          <el-radio-group v-model="field.value">
+            <el-radio
+              v-for="item in field.options"
+              :key="item.value"
+              :label="item.value"
+              >{{ item.label }}</el-radio
+            >
+          </el-radio-group>
+        </template>
+        <template v-else>
+          <el-radio-group v-model="field.enable" @change="resetVal(field)">
+            <el-radio
+              v-for="item in OPEN_STATUS"
+              :key="item.value"
+              :label="item.value"
+              >{{ item.label }}</el-radio
+            >
+          </el-radio-group>
+          <br />
+          <el-input
+            v-if="field.enable"
+            v-model.trim="field.value"
+            placeholder="请输入内容"
+            clearable
+          >
+          </el-input>
+        </template>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" :loading="loading" @click="confirm"
+          >保存</el-button
+        >
+      </el-form-item>
+    </el-form>
+  </div>
+</template>
+
+<script>
+import { schoolSetMarkeInfo, schoolSetMarkerUpdate } from "../../api";
+import { OPEN_STATUS } from "../../../../constants/enumerate";
+
+export default {
+  name: "school-set-mark",
+  props: {
+    school: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+  },
+  data() {
+    return {
+      loading: false,
+      OPEN_STATUS,
+      modalForm: {},
+      fields: [],
+      rules: {},
+    };
+  },
+  mounted() {
+    this.initData();
+  },
+  methods: {
+    async initData() {
+      const data = await schoolSetMarkeInfo(this.school.id);
+      this.fields = data.result || [];
+      this.fields.forEach((field) => {
+        field.prop = field.code.split(".").join("_");
+        this.$set(this.modalForm, field.prop, field.value);
+        if (field.options) return;
+
+        this.rules[field.prop] = [
+          {
+            validator: (rule, value, callback) => {
+              if (!field.value && field.enable) {
+                return callback(new Error(`请输入${field.name}`));
+              }
+
+              callback();
+            },
+            trigger: "change",
+          },
+        ];
+      });
+    },
+    resetVal(field) {
+      if (!field.enable) field.value = "";
+    },
+    async confirm() {
+      const valid = await this.$refs.modalFormComp.validate().catch(() => {});
+      if (!valid) return;
+
+      if (this.loading) return;
+      this.loading = true;
+      const datas = { param: this.fields, schoolId: this.school.id };
+      const res = await schoolSetMarkerUpdate(datas).catch(() => {});
+      this.loading = false;
+      if (!res) return;
+
+      this.$message.success("修改成功!");
+      this.initData();
+    },
+  },
+};
+</script>