zhangjie 2 жил өмнө
parent
commit
9c5f0d0fa4

+ 2 - 2
src/modules/question/api.js

@@ -39,9 +39,9 @@ export function classifyQuestionPageListApi(data) {
 }
 export function deleteQuestionApi(idList) {
   return $httpWithMsg.post(
-    `${QUESTION_API}/paper/delete`,
+    `${QUESTION_API}/question/delete`,
     {},
-    { params: idList }
+    { params: { idList } }
   );
 }
 export function moveQuestionApi(questionIdList, targetClassifyId) {

+ 10 - 10
src/modules/question/components/QuestionEditDialog.vue

@@ -60,10 +60,7 @@
 
 <script>
 import { QUESTION_TYPES } from "@/constants/constants";
-import {
-  getInitQuestionModel,
-  STRUCT_TYPE_COMP_DICT,
-} from "./model/questionModel";
+import { STRUCT_TYPE_COMP_DICT } from "./model/questionModel";
 import BooleanQuestion from "./edit/BooleanQuestion.vue";
 import FillBlankQuestion from "./edit/FillBlankQuestion.vue";
 import SelectQuestion from "./edit/SelectQuestion.vue";
@@ -120,10 +117,9 @@ export default {
     initData() {
       this.questionKey = randomCode();
       this.curQuestionType = this.question.questionType || this.curQuestionType;
-      this.questionModel = this.$objAssign(
-        getInitQuestionModel(this.curQuestionType),
-        this.question
-      );
+      this.questionModel = { ...this.question };
+      if (!this.questionModel.questionType)
+        this.questionModel.questionType = this.curQuestionType;
       this.loading = false;
     },
     cancel() {
@@ -141,9 +137,13 @@ export default {
       }).catch(() => {});
       if (confirm !== "confirm") return;
 
-      // to warning
       this.curQuestionType = item.code;
-      this.initData();
+      this.questionKey = randomCode();
+      this.questionModel = {
+        ...this.questionModel,
+        questionType: this.curQuestionType,
+      };
+      this.loading = false;
     },
     async confirm() {
       const valid = await this.$refs.QuestionEditDetail.validate().catch(

+ 6 - 1
src/modules/question/components/QuestionInfoEdit.vue

@@ -116,7 +116,12 @@ export default {
   },
   methods: {
     initData() {
-      this.modalForm = this.$objAssign(initModalForm, this.question);
+      let modalForm = this.$objAssign(initModalForm, this.question);
+      modalForm.quesProperties.forEach((item) => {
+        item.key = `${item.courseProperty.id}_${item.firstProperty.id}_${item.secondProperty.id}`;
+        item.name = `${item.courseProperty.name},${item.firstProperty.name},${item.secondProperty.name}`;
+      });
+      this.modalForm = modalForm;
     },
     coursePropertyChange(val) {
       this.selection.courseProperty = val || {};

+ 3 - 3
src/modules/question/components/edit/BankedClozeQuestion.vue

@@ -17,7 +17,7 @@
       <el-form-item
         v-for="(option, oindex) in modalForm.quesOptions"
         :key="option.nmuber"
-        :prop="`quesOptions.${oindex}.body`"
+        :prop="`quesOptions.${oindex}.optionBody`"
         :rules="optionRule"
       >
         <div class="question-edit-option">
@@ -26,7 +26,7 @@
           </div>
           <div class="option-body">
             <v-editor
-              v-model="option.body"
+              v-model="option.optionBody"
               @change="() => optionBodyChange(oindex)"
             ></v-editor>
           </div>
@@ -163,7 +163,7 @@ export default {
     },
     optionBodyChange(oindex) {
       this.$refs.modalFormComp.validateField(
-        `quesOptions.${oindex}.body`,
+        `quesOptions.${oindex}.optionBody`,
         () => {}
       );
     },

+ 7 - 0
src/modules/question/components/edit/BooleanQuestion.vue

@@ -76,6 +76,13 @@ export default {
             trigger: "change",
           },
         ],
+        quesAnswer: [
+          {
+            required: true,
+            message: "请设置答案",
+            trigger: "change",
+          },
+        ],
       },
     };
   },

+ 3 - 0
src/modules/question/components/edit/FillBlankQuestion.vue

@@ -95,6 +95,9 @@ export default {
         getInitQuestionModel("FILL_BLANK_QUESTION"),
         this.question
       );
+      this.modalForm.quesAnswer = this.question.quesAnswer
+        ? JSON.parse(this.question.quesAnswer)
+        : [];
       this.modalForm.quesAnswer = this.modalForm.quesAnswer.map((item) => {
         return {
           body: item,

+ 5 - 3
src/modules/question/components/edit/MatchQuestion.vue

@@ -98,9 +98,11 @@ export default {
   methods: {
     initData() {
       this.modalForm = this.$objAssign(getMatchQuestionModel(), this.question);
-      this.quesAnswer = this.question.quesAnswer
-        ? this.question.quesAnswer[0]
-        : null;
+      this.modalForm.courseId = this.parentQuestion.courseId;
+      this.modalForm.quesAnswer = this.question.quesAnswer
+        ? JSON.parse(this.question.quesAnswer)
+        : [];
+      this.quesAnswer = this.modalForm.quesAnswer[0] || null;
     },
     quesBodyChange() {
       this.$refs.modalFormComp.validateField(`quesBody`, () => {});

+ 1 - 1
src/modules/question/components/edit/NestedQuestion.vue

@@ -154,7 +154,7 @@ export default {
   methods: {
     initData() {
       this.modalForm = this.$objAssign(
-        getInitQuestionModel("READING_COMPREHENSION"),
+        getInitQuestionModel(this.question.questionType),
         this.question
       );
     },

+ 10 - 7
src/modules/question/components/edit/SelectQuestion.vue

@@ -15,7 +15,7 @@
       <el-form-item
         v-for="(option, oindex) in modalForm.quesOptions"
         :key="option.nmuber"
-        :prop="`quesOptions.${oindex}.body`"
+        :prop="`quesOptions.${oindex}.optionBody`"
         :rules="optionRule"
       >
         <div class="question-edit-option">
@@ -39,7 +39,7 @@
           </div>
           <div class="option-body">
             <v-editor
-              v-model="option.body"
+              v-model="option.optionBody"
               @change="() => optionBodyChange(oindex)"
             ></v-editor>
           </div>
@@ -184,12 +184,15 @@ export default {
         getInitQuestionModel("SINGLE_ANSWER_QUESTION"),
         this.question
       );
+      this.modalForm.quesAnswer = this.question.quesAnswer
+        ? JSON.parse(this.question.quesAnswer)
+        : [];
       if (this.IS_SIMPLE) {
-        this.quesAnswer = this.question.quesAnswer
-          ? this.question.quesAnswer[0]
+        this.quesAnswer = this.modalForm.quesAnswer
+          ? this.modalForm.quesAnswer[0]
           : null;
       } else {
-        this.quesAnswer = this.question.quesAnswer || [];
+        this.quesAnswer = this.modalForm.quesAnswer || [];
         this.modalForm.quesOptions.forEach((item) => {
           item.isCorrect = this.quesAnswer.includes(item.number);
         });
@@ -226,7 +229,7 @@ export default {
     },
     optionBodyChange(oindex) {
       this.$refs.modalFormComp.validateField(
-        `quesOptions.${oindex}.body`,
+        `quesOptions.${oindex}.optionBody`,
         () => {}
       );
     },
@@ -253,7 +256,7 @@ export default {
       data.quesOptions = this.modalForm.quesOptions.map((item) => {
         return {
           number: item.number,
-          body: item.body,
+          optionBody: item.optionBody,
         };
       });
       data.quesAnswer = JSON.stringify(this.modalForm.quesAnswer);

+ 3 - 0
src/modules/question/components/edit/TextAnswerQuestion.vue

@@ -82,6 +82,9 @@ export default {
         getInitQuestionModel("TEXT_ANSWER_QUESTION"),
         this.question
       );
+      this.modalForm.quesAnswer = this.question.quesAnswer
+        ? JSON.parse(this.question.quesAnswer)
+        : [];
       this.quesAnswer = this.modalForm.quesAnswer[0] || null;
     },
     quesBodyChange() {

+ 7 - 7
src/modules/question/components/model/questionModel.js

@@ -6,19 +6,19 @@ export const selectQuestion = {
   quesOptions: [
     {
       number: 1,
-      body: null,
+      optionBody: null,
     },
     {
       number: 2,
-      body: null,
+      optionBody: null,
     },
     {
       number: 3,
-      body: null,
+      optionBody: null,
     },
     {
       number: 4,
-      body: null,
+      optionBody: null,
     },
   ],
   quesAnswer: null,
@@ -28,7 +28,7 @@ export const selectQuestion = {
 export const booleanQuestion = {
   questionType: "BOOL_ANSWER_QUESTION",
   quesBody: null,
-  quesAnswer: 0,
+  quesAnswer: null,
   comment: null,
 };
 
@@ -80,11 +80,11 @@ export const bankedClozeQuestion = {
   quesOptions: [
     {
       number: 1,
-      body: null,
+      optionBody: null,
     },
     {
       number: 2,
-      body: null,
+      optionBody: null,
     },
   ],
   param: { matchingMode: 1, matchingType: 1 },

+ 11 - 4
src/modules/question/views/QuestionManage.vue

@@ -77,14 +77,13 @@
         :data="questionList"
       >
         <el-table-column label="题干">
-          <template slot-scope="scope">
+          <div slot-scope="scope" @click="toViewQuestion(scope.row)">
             <rich-text
               class="row-question-body"
               title="点击查看试题"
               :text-json="scope.row.quesBody"
-              @click="toViewQuestion(scope.row)"
             ></rich-text>
-          </template>
+          </div>
         </el-table-column>
         <el-table-column label="课程" width="120">
           <template slot-scope="scope">
@@ -172,6 +171,7 @@
     <question-edit-dialog
       ref="QuestionEditDialog"
       :question="curQuestion"
+      @modified="getList"
     ></question-edit-dialog>
     <!-- QuestionPreviewDialog -->
     <question-preview-dialog
@@ -310,11 +310,18 @@ export default {
       this.$refs.QuestionImportDialog.open();
     },
     toViewQuestion(row) {
+      console.log(row);
       this.curQuestion = row;
       this.$refs.QuestionPreviewDialog.open();
     },
     toEditQuestion(row) {
-      this.curQuestion = row;
+      this.curQuestion = {
+        ...row,
+        courseId: row.course.id,
+        courseCode: row.course.code,
+        courseName: row.course.name,
+      };
+
       this.$refs.QuestionEditDialog.open();
     },
     toMoveQuestion(row) {