Browse Source

Merge branch 'main' into feature_check

Leonezhurui 4 years ago
parent
commit
a019cd8ed4
2 changed files with 87 additions and 21 deletions
  1. 3 3
      src/api/question.js
  2. 84 18
      src/components/QuestionCreator/SingleQuestionCreator.vue

+ 3 - 3
src/api/question.js

@@ -58,11 +58,11 @@ export function deleteQuestionById(id) {
 
 /**
  *  创建题目
- * @param questionvo
+ * @param questionVO
  * @returns {Promise<AxiosResponse<any>>}
  */
-export function createQuestion(questionvo) {
-  return axios.post("/api/api/question", questionvo);
+export function createQuestion(questionVO) {
+  return axios.post("/api/api/question", questionVO);
 }
 
 

+ 84 - 18
src/components/QuestionCreator/SingleQuestionCreator.vue

@@ -10,6 +10,7 @@
           <el-option :value="2" label="多选题"/>
           <el-option :value="3" label="填空题"/>
           <el-option :value="4" label="简答题"/>
+          <el-option :value="5" label="代码题"/>
         </el-select>
       </el-form-item>
       <el-form-item v-if="form.type === 1 || form.type === 2" label="选项">
@@ -32,7 +33,7 @@
             {{ option.label }}
           </el-checkbox>
         </el-checkbox-group>
-        <el-input v-if="!(form.type === 1 || form.type === 2)" placeholder="请输入题目答案"></el-input>
+        <el-input v-if="!(form.type === 1 || form.type === 2)" v-model="form.answer" placeholder="请输入题目答案"></el-input>
       </el-form-item>
       <el-form-item label="解析">
         <el-input v-model="form.analysis" placeholder="请输入题目解析"></el-input>
@@ -62,10 +63,10 @@
         ></el-cascader>
       </el-form-item>
       <el-form-item label="标签">
-        <el-input v-model="form.tag" placeholder="请输入题目标签"></el-input>
+        <el-input v-model="form.tags" placeholder="请输入题目标签"></el-input>
       </el-form-item>
       <el-form-item label="关键词">
-        <el-input v-model="form.keyword" placeholder="请输入题目关键词"></el-input>
+        <el-input v-model="form.keyPoints" placeholder="请输入题目关键词"></el-input>
       </el-form-item>
     </el-form>
     <el-button type="primary" @click="handleAckButtonClick">确定</el-button>
@@ -74,7 +75,7 @@
 </template>
 
 <script>
-import { knowledgeData } from "@/utils/knowledgeData";
+import {knowledgeData} from "@/utils/knowledgeData";
 
 export default {
   name: "SingleQuestionCreator",
@@ -103,12 +104,15 @@ export default {
         analysis: "",
         difficulty: null,
         knowledgeId: [],
-        tag: "",
-        keyword: "",
+        tags: "",
+        keyPoints: "",
       },
       knowledgeIdOptions: knowledgeData,
     }
   },
+  created() {
+    this.formatKnowledgeData(this.knowledgeIdOptions[0]);
+  },
   methods: {
     addQuestionOption() {
       let labels = ["A", "B", "C", "D", "E", "F", "G"];
@@ -122,10 +126,12 @@ export default {
       }
     },
 
-    handleAckButtonClick() {
-      this.checkFormCompletion();
-      let questionVO = this.formatQuestionVO2backend();
-      this.$api.createQuestion(questionVO);
+    async handleAckButtonClick() {
+      if (this.checkFormCompletion()) {
+        let questionVO = this.formatQuestionVO2backend();
+        let res = await this.$api.createQuestion(questionVO);
+        console.log(res);
+      }
     },
 
     checkFormCompletion() {
@@ -170,6 +176,9 @@ export default {
             return false;
           }
           break;
+        case 5:
+          this.$message.error("暂不支持新建代码题!");
+          return false;
       }
       if (this.form.analysis === "") {
         this.$message.error("未输入题目解析!");
@@ -183,15 +192,15 @@ export default {
         this.$message.error("未选择题目知识点!");
         return false;
       }
-      if (this.form.tag === "") {
+      if (this.form.tags === "") {
         this.$message.error("未输入题目标签!");
         return false;
       }
-      if (this.form.tag === "") {
+      if (this.form.tags === "") {
         this.$message.error("未输入题目标签!");
         return false;
       }
-      if (this.form.keyword === "") {
+      if (this.form.keyPoints === "") {
         this.$message.error("未输入题目关键词!");
         return false;
       }
@@ -246,17 +255,74 @@ export default {
         analysis: "",
         difficulty: null,
         knowledgeId: [],
-        tag: "",
-        keyword: "",
+        tags: "",
+        keyPoints: "",
       };
     },
 
     formatQuestionVO2backend() {
       const savedUserId = this.$store.state.user.id;
-      const createTime = this.$moment().format();
-      const lastModifiedTime = this.$moment().format();
+      const checkedUserId = this.$store.state.user.id;
+      const createTime = new Date();
+      const lastModifiedTime = new Date();
       const state = "CHECKING";
-      return { ...this.form, savedUserId, createTime, lastModifiedTime, state };
+
+      let type;
+      switch (this.form.type) {
+        case 1:
+          type = "choice";
+          break;
+        case 2:
+          type = "multiple_choice";
+          break;
+        case 3:
+          type = "blank";
+          break;
+        case 4:
+          type = "short_answer";
+          break;
+        case 5:
+          type = "code";
+          break;
+      }
+      let options = {};
+      for (let option of this.form.options) {
+        options[option.label] = option.content;
+      }
+      let multi_answer;
+      if (this.form.type === 2) {
+        multi_answer = this.form.multi_answer.sort().join("");
+      }
+      let knowledgeId = [];
+      for (let knowledgeIdElement of this.form.knowledgeId) {
+        knowledgeId.push(knowledgeIdElement[knowledgeIdElement.length - 1]);
+      }
+      let tags = [this.form.tags];
+
+      return {
+        stem: this.form.stem,
+        type,
+        options,
+        answer: (this.form.type !== 2) ? this.form.answer : multi_answer,
+        analysis: this.form.analysis,
+        difficulty: this.form.difficulty,
+        knowledgeId,
+        tags,
+        keyPoints: this.form.keyPoints,
+        savedUserId,
+        createTime,
+        lastModifiedTime,
+        state
+      };
+    },
+
+    formatKnowledgeData(knowledgeData) {
+      knowledgeData["value"] = knowledgeData.label;
+      if (knowledgeData.children !== undefined) {
+        for (let child of knowledgeData.children) {
+          this.formatKnowledgeData(child);
+        }
+      }
     },
   },
   computed: {},