zhangjie 2 月之前
父节点
当前提交
e3eaa144a5

+ 116 - 0
src/components/NumberRange.vue

@@ -0,0 +1,116 @@
+<template>
+  <div class="number-range">
+    <el-input-number
+      v-model="value.min"
+      :min="minLimit"
+      :max="maxLimit"
+      :precision="precision"
+      :step="step"
+      :controls="controls"
+      :placeholder="minPlaceholder"
+      @change="handleChange"
+    ></el-input-number>
+    <span class="separator">-</span>
+    <el-input-number
+      v-model="value.max"
+      :min="minLimit"
+      :max="maxLimit"
+      :precision="precision"
+      :step="step"
+      :controls="controls"
+      :placeholder="maxPlaceholder"
+      @change="handleChange"
+    ></el-input-number>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "number-range",
+  props: {
+    minValue: {
+      type: Number,
+      default: undefined,
+    },
+    maxValue: {
+      type: Number,
+      default: undefined,
+    },
+    minLimit: {
+      type: Number,
+      default: 0,
+    },
+    maxLimit: {
+      type: Number,
+      default: 100,
+    },
+    precision: {
+      type: Number,
+      default: 1,
+    },
+    step: {
+      type: Number,
+      default: 0.1,
+    },
+    controls: {
+      type: Boolean,
+      default: false,
+    },
+    minPlaceholder: {
+      type: String,
+      default: "最小值",
+    },
+    maxPlaceholder: {
+      type: String,
+      default: "最大值",
+    },
+  },
+  data() {
+    return {
+      value: {
+        min: undefined,
+        max: undefined,
+      },
+    };
+  },
+  created() {
+    this.$watch(
+      function () {
+        return [this.minValue, this.maxValue];
+      },
+      function () {
+        this.updateData();
+      },
+      {
+        immediate: true,
+      }
+    );
+  },
+  methods: {
+    updateData() {
+      this.value = {
+        min: this.minValue || this.minValue === 0 ? this.minValue : undefined,
+        max: this.maxValue || this.maxValue === 0 ? this.maxValue : undefined,
+      };
+    },
+    handleChange() {
+      this.$emit("update:minValue", this.value.min);
+      this.$emit("update:maxValue", this.value.max);
+      this.$emit("change", this.value);
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.number-range {
+  display: inline-flex;
+  align-items: center;
+  .separator {
+    margin: 0 8px;
+  }
+  .el-input-number {
+    width: 120px;
+  }
+}
+</style>

+ 46 - 39
src/modules/admin/components/school/SchoolSetAi.vue

@@ -8,7 +8,7 @@
     >
       <!-- 是否开启AI智能评卷 -->
       <el-form-item prop="enable" label="是否开启AI智能评卷:">
-        <el-radio-group v-model="formData.enable">
+        <el-radio-group v-model="formData.enable" @change="enableChange">
           <el-radio
             v-for="item in OPEN_STATUS"
             :key="item.value"
@@ -18,48 +18,50 @@
         </el-radio-group>
       </el-form-item>
 
-      <!-- 大模型类型 -->
-      <el-form-item prop="modelType" label="大模型类型:">
-        <el-radio-group
-          v-model="formData.modelType"
-          @change="handleModelTypeChange"
-        >
-          <el-radio
-            v-for="item in MODEL_TYPES"
-            :key="item.value"
-            :label="item.value"
-            >{{ item.label }}</el-radio
+      <template v-if="formData.enable">
+        <!-- 大模型类型 -->
+        <el-form-item prop="modelType" label="大模型类型:">
+          <el-radio-group
+            v-model="formData.modelType"
+            @change="handleModelTypeChange"
           >
-        </el-radio-group>
-      </el-form-item>
+            <el-radio
+              v-for="item in MODEL_TYPES"
+              :key="item.value"
+              :label="item.value"
+              >{{ item.label }}</el-radio
+            >
+          </el-radio-group>
+        </el-form-item>
 
-      <!-- 本地大模型地址 -->
-      <el-form-item
-        v-if="formData.modelType === 'LOCAL'"
-        prop="url"
-        label="大模型地址:"
-      >
-        <el-input
-          v-model.trim="formData.url"
-          placeholder="请输入大模型地址"
-          clearable
+        <!-- 本地大模型地址 -->
+        <el-form-item
+          v-if="formData.modelType === 'LOCAL'"
+          prop="url"
+          label="大模型地址:"
         >
-        </el-input>
-      </el-form-item>
+          <el-input
+            v-model.trim="formData.url"
+            placeholder="请输入大模型地址"
+            clearable
+          >
+          </el-input>
+        </el-form-item>
 
-      <!-- OCR识别地址 -->
-      <el-form-item
-        v-if="formData.modelType === 'LOCAL'"
-        prop="ocrUrl"
-        label="OCR识别地址:"
-      >
-        <el-input
-          v-model.trim="formData.ocrUrl"
-          placeholder="请输入OCR识别地址"
-          clearable
+        <!-- OCR识别地址 -->
+        <el-form-item
+          v-if="formData.modelType === 'LOCAL'"
+          prop="ocrUrl"
+          label="OCR识别地址:"
         >
-        </el-input>
-      </el-form-item>
+          <el-input
+            v-model.trim="formData.ocrUrl"
+            placeholder="请输入OCR识别地址"
+            clearable
+          >
+          </el-input>
+        </el-form-item>
+      </template>
     </el-form>
   </div>
 </template>
@@ -69,7 +71,7 @@ import { OPEN_STATUS } from "../../../../constants/enumerate";
 import { schoolSetAiInfo, schoolSetAiUpdate } from "../../api";
 
 const initFormData = {
-  enable: false,
+  enable: true,
   modelType: "CLOUD",
   url: "",
   ocrUrl: "",
@@ -153,6 +155,11 @@ export default {
       }
       this.cachedFormData = JSON.parse(JSON.stringify(this.formData));
     },
+    enableChange() {
+      this.formData.modelType = "CLOUD";
+      this.formData.url = "";
+      this.formData.ocrUrl = "";
+    },
     checkConfigChanged() {
       if (!this.cachedFormData) return false;
       return (

+ 0 - 5
src/modules/mark/components/markParam/MarkParamGroup.vue

@@ -89,7 +89,6 @@
             <el-button
               class="btn-primary"
               type="text"
-              :disabled="checkMarkTypeDiabled(scope.row)"
               @click="toSetMarkType(scope.row)"
               >评卷方式设置</el-button
             >
@@ -386,10 +385,6 @@ export default {
         });
       });
     },
-    checkMarkTypeDiabled(row) {
-      // 设置了双评且AI智能评卷为人机双评的,禁止编辑评卷方式
-      return row.doubleRate > 0 && this.aiMarkType === "MAN_MACHINE";
-    },
     toSetMarkType(row) {
       this.curRow = row;
       this.$refs.ModifyMarkType.open();

+ 48 - 18
src/modules/mark/components/markParam/ModifyMarkAiLevelAnswer.vue

@@ -11,24 +11,34 @@
   >
     <div class="modify-mark-ai-level-answer">
       <el-form ref="FormRef" :model="form" :rules="rules" label-width="100px">
-        <el-form-item label="分值:" prop="minScore">
-          <el-input-number
-            v-model="form.minScore"
-            :min="0"
-            :max="100"
-            :precision="1"
-            :step="0.1"
-            :controls="false"
-          ></el-input-number>
-          <el-input-number
-            v-model="form.maxScore"
-            :min="0"
-            :max="100"
-            :precision="1"
-            :step="0.1"
-            :controls="false"
-          ></el-input-number>
-        </el-form-item>
+        <el-row>
+          <el-col :span="11">
+            <el-form-item label="分值区间:" prop="minScore">
+              <el-input-number
+                v-model="form.minScore"
+                :min="0"
+                :max="100"
+                :precision="1"
+                :step="0.1"
+                :controls="false"
+                placeholder="最小分"
+              ></el-input-number>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item prop="maxScore" label-width="0px">
+              <el-input-number
+                v-model="form.maxScore"
+                :min="0"
+                :max="100"
+                :precision="1"
+                :step="0.1"
+                :controls="false"
+                placeholder="最大分"
+              ></el-input-number>
+            </el-form-item>
+          </el-col>
+        </el-row>
         <el-form-item label="标答内容:" prop="answer">
           <el-input
             v-model="form.answer"
@@ -72,6 +82,26 @@ export default {
                 callback();
               }
             },
+            trigger: "change",
+          },
+        ],
+        maxScore: [
+          { required: true, message: "请输入最大分", trigger: "change" },
+          {
+            validator: (rule, value, callback) => {
+              if (value < 0 || value > 100) {
+                callback(new Error("最大分必须在0-100之间"));
+              } else if (
+                value &&
+                this.form.minScore &&
+                value <= this.form.minScore
+              ) {
+                callback(new Error("最大分必须大于最小分"));
+              } else {
+                callback();
+              }
+            },
+            trigger: "change",
           },
         ],
         answer: [

+ 6 - 3
src/modules/mark/components/markParam/ModifyMarkAiSet.vue

@@ -31,13 +31,16 @@
           <el-form-item label="最小分:" prop="minScore">
             <el-input-number
               v-model="form.minScore"
-              :min="0"
-              :max="100"
+              :min="0.1"
+              :max="200"
               :precision="1"
-              :step="0.5"
+              :step="0.1"
               :controls="false"
             ></el-input-number>
           </el-form-item>
+          <el-form-item label="小题满分:">
+            {{ group.totalScore }}
+          </el-form-item>
         </el-form>
 
         <!-- 标答列表 -->

+ 27 - 25
src/modules/print/components/BarCodeCheck.vue

@@ -10,28 +10,30 @@
     append-to-body
     @open="initData"
   >
-    <el-form
-      ref="modalFormComp"
-      :model="modalForm"
-      :rules="rules"
-      :key="modalForm.id"
-      label-width="120px"
-    >
-      <el-form-item label="考场起始条码:" prop="packageCodeStart">
-        <el-input
-          v-model.trim="modalForm.packageCodeStart"
-          placeholder="请扫描考场起始条码"
-          clearable
-        ></el-input>
-      </el-form-item>
-      <el-form-item label="考场结束条码:" prop="packageCodeEnd">
-        <el-input
-          v-model.trim="modalForm.packageCodeEnd"
-          placeholder="请扫描考场结束条码"
-          clearable
-        ></el-input>
-      </el-form-item>
-    </el-form>
+    <div @keyup.enter="confirm">
+      <el-form
+        ref="modalFormComp"
+        :model="modalForm"
+        :rules="rules"
+        :key="modalForm.id"
+        label-width="120px"
+      >
+        <el-form-item label="考场起始条码:" prop="packageCodeStart">
+          <el-input
+            v-model.trim="modalForm.packageCodeStart"
+            placeholder="请扫描考场起始条码"
+            clearable
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="考场结束条码:" prop="packageCodeEnd">
+          <el-input
+            v-model.trim="modalForm.packageCodeEnd"
+            placeholder="请扫描考场结束条码"
+            clearable
+          ></el-input>
+        </el-form-item>
+      </el-form>
+    </div>
     <div class="tips-info">
       <p>
         注:考场条码在条码枪扫描后会自动校验,校验通过后会自动清空输入框内容。
@@ -41,7 +43,7 @@
       </p>
     </div>
     <div slot="footer">
-      <el-button type="primary" :disabled="isSubmit" @click="submit"
+      <el-button type="primary" :disabled="isSubmit" @click="confirm"
         >确认</el-button
       >
       <el-button @click="cancel">取消</el-button>
@@ -105,7 +107,7 @@ export default {
       this.modalIsShow = false;
       this.$refs.modalFormComp.resetFields();
     },
-    async submit() {
+    async confirm() {
       const valid = await this.$refs.modalFormComp.validate().catch(() => {});
       if (!valid) return;
 
@@ -116,7 +118,7 @@ export default {
       if (!res) return;
 
       this.$message.success("保存成功!");
-      this.cancel();
+      this.initData();
     },
   },
 };