zhangjie 2 жил өмнө
parent
commit
22a8fd7906

+ 1 - 2
src/modules/paper/components/AuditPaperApply.vue

@@ -110,10 +110,9 @@ export default {
     },
     toDetail(row) {
       this.$router.push({
-        name: "EditPaper",
+        name: "PreviewPaper",
         params: {
           id: row.id,
-          parentView: "audit-paper",
         },
       });
     },

+ 21 - 4
src/modules/paper/components/BuildPaperManual.vue

@@ -48,7 +48,7 @@
           <template v-for="(question, qindex) in detail.questions">
             <build-paper-question-base
               v-if="checkIsBaseQuestion(question.questionType)"
-              :key="question.id"
+              :key="question.key"
               :ref="`BuildPaperQuestion${dindex}`"
               v-model="question.score"
               :question="question"
@@ -59,7 +59,7 @@
             </build-paper-question-base>
             <build-paper-question-nested
               v-else
-              :key="question.id"
+              :key="question.key"
               :ref="`BuildPaperQuestion${dindex}`"
               :question="question"
               :question-serialno="qindex + 1"
@@ -109,6 +109,7 @@ import BuildPaperQuestionNested from "./BuildPaperQuestionNested.vue";
 import SelectQuestionDialog from "./SelectQuestionDialog.vue";
 import QuestionEditDialog from "../../question/components/QuestionEditDialog.vue";
 import { BASE_QUESTION_TYPES } from "@/constants/constants";
+import { randomCode } from "@/plugins/utils";
 
 // import details from "../datas/details.json";
 
@@ -197,6 +198,7 @@ export default {
     questionSelected(questions) {
       questions.forEach((q) => {
         q.score = this.curDetail.scorePerQuestion;
+        q.key = randomCode();
       });
       this.curDetail.questions.push(...questions);
 
@@ -208,11 +210,26 @@ export default {
         );
       });
     },
-    toEditQuestion(question) {
-      this.curQuestion = question;
+    toEditQuestion(row) {
+      const courseInfo = {
+        courseId: row.course.id,
+        courseCode: row.course.code,
+        courseName: row.course.name,
+      };
+      let curQuestion = {
+        ...row,
+        ...courseInfo,
+      };
+      if (curQuestion.subQuestions && curQuestion.subQuestions.length) {
+        curQuestion.subQuestions = curQuestion.subQuestions.map((q) => {
+          return { ...q, ...courseInfo };
+        });
+      }
+      this.curQuestion = curQuestion;
       this.$refs.QuestionEditDialog.open();
     },
     questionModified(question) {
+      question.key = randomCode();
       this.details.forEach((detail) => {
         const qindex = detail.questions.findIndex((q) => q.id === question.id);
         if (qindex !== -1) detail.questions.splice(qindex, 1, question);

+ 30 - 25
src/modules/paper/components/QuestionGroupStruct.vue

@@ -57,7 +57,7 @@
               ></i>
 
               <span
-                v-if="scope.row.isClassify && scope.row.id === 0"
+                v-if="scope.row.isClassify && scope.row.id === '0'"
                 class="inline-middle"
                 >根目录</span
               >
@@ -168,7 +168,6 @@ export default {
       tableData: [],
       tableTreeProps: {
         children: "propertyDistributeInfo",
-        hasChildren: "hasChildren",
       },
       difficultDistributeInfo: [],
       curCoursePropertyId: "",
@@ -203,11 +202,11 @@ export default {
   async mounted() {
     if (this.dataSource) {
       this.parseSourceDataMap();
-      this.useProperty = this.dataSource.useProperty;
-      this.useClassify = this.dataSource.useClassify;
-      this.useDifficult = this.dataSource.useDifficult;
-      if (this.dataSource.useClassify)
-        this.selectedFolderIds = this.dataSource.classifyIdList;
+      this.useProperty = !!this.dataSource.useProperty;
+      this.useClassify = !!this.dataSource.useClassify;
+      this.useDifficult = !!this.dataSource.useDifficult;
+      if (this.useClassify)
+        this.selectedFolderIds = this.dataSource.classifyIdList || [];
     }
     await this.resetDataList();
     await this.getClassifyTree();
@@ -305,7 +304,7 @@ export default {
       function buildClassifyData(data) {
         let cpreInfo = data.classifyId + "";
         let classifyData = {
-          id: data.classifyId,
+          id: cpreInfo,
           name: data.classifyName,
           classifyId: data.classifyId,
           classifyName: data.classifyName,
@@ -561,24 +560,30 @@ export default {
         });
       }
 
-      this.dataSource.questionDistributeInfo.forEach((classifyData) => {
-        let cpreInfo = classifyData.classifyId + "";
-        if (classifyData.selectCount) {
-          sourceDataMap[cpreInfo] = classifyData.selectCount;
-        }
+      if (
+        this.dataSource.questionDistributeInfo &&
+        this.dataSource.questionDistributeInfo.length
+      ) {
+        this.dataSource.questionDistributeInfo.forEach((classifyData) => {
+          let cpreInfo = classifyData.classifyId + "";
+          if (classifyData.selectCount) {
+            sourceDataMap[cpreInfo] = classifyData.selectCount;
+          }
 
-        parseDifficultMap(classifyData.difficultDistributeInfo, cpreInfo);
-        if (
-          classifyData.coursePropertyDistributeInfo &&
-          classifyData.coursePropertyDistributeInfo.length
-        ) {
-          let preInfo = `${cpreInfo}_${classifyData.coursePropertyDistributeInfo[0].coursePropertyId}`;
-          parsePropertyMap(
-            classifyData.coursePropertyDistributeInfo[0].propertyDistributeInfo,
-            preInfo
-          );
-        }
-      });
+          parseDifficultMap(classifyData.difficultDistributeInfo, cpreInfo);
+          if (
+            classifyData.coursePropertyDistributeInfo &&
+            classifyData.coursePropertyDistributeInfo.length
+          ) {
+            let preInfo = `${cpreInfo}_${classifyData.coursePropertyDistributeInfo[0].coursePropertyId}`;
+            parsePropertyMap(
+              classifyData.coursePropertyDistributeInfo[0]
+                .propertyDistributeInfo,
+              preInfo
+            );
+          }
+        });
+      }
       this.sourceDataMap = sourceDataMap;
     },
   },

+ 3 - 3
src/modules/paper/views/EditPaper.vue

@@ -72,13 +72,13 @@
             @click="toImportPaperAnswer"
             >导入答案</el-button
           >
-          <el-button
+          <!-- <el-button
             size="small"
             type="primary"
             plain
             @click="toExportPaperAnswer"
             >导出答案</el-button
-          >
+          > -->
           <el-button
             size="small"
             type="danger"
@@ -727,7 +727,7 @@ export default {
     // 导入答案
     toImportPaperAnswer() {
       const { key, token } = this.user;
-      this.answerTemplateUrl = `${QUESTION_API}/paper/answer/template?$key=${key}&$token=${token}`;
+      this.answerTemplateUrl = `${QUESTION_API}/paper/answer/export/${this.paperId}?$key=${key}&$token=${token}`;
       this.uploadAnswerUrl = `${QUESTION_API}/paper/answer/import/${this.paperId}`;
       this.$refs.ImportAnswerDialog.open();
     },

+ 1 - 0
src/modules/question/components/FolderQuestionManageDialog.vue

@@ -176,6 +176,7 @@
     <question-edit-dialog
       ref="QuestionEditDialog"
       :question="curQuestion"
+      @modified="getList"
     ></question-edit-dialog>
     <!-- QuestionPreviewDialog -->
     <question-preview-dialog

+ 4 - 1
src/modules/question/components/QuestionEditDialog.vue

@@ -286,7 +286,10 @@ export default {
       this.hasModifyQuestion = true;
 
       if (this.isEdit) {
-        this.$emit("modified");
+        this.$emit(
+          "modified",
+          Object.assign({}, this.questionModel, questionModel)
+        );
         this.close();
         return;
       }

+ 1 - 0
src/modules/questions/routes/routes.js

@@ -228,6 +228,7 @@ export const otherRoutes = [
   {
     path: "/preview_paper/:paperId", //预览试卷
     component: PreviewPaper,
+    name: "PreviewPaper",
   },
   {
     path: "/view_paper/:id", //试卷查看

+ 8 - 26
src/modules/questions/views/CheckDuplicateList.vue

@@ -44,20 +44,11 @@
           </el-select>
         </el-form-item>
         <el-form-item label="题型">
-          <el-select
-            v-model="formSearch.questionType"
-            filterable
-            clearable
-            placeholder="请选择"
+          <source-detail-select
+            v-model="formSearch"
+            :course-id="formSearch.courseId"
           >
-            <el-option
-              v-for="item in questionTypes"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            >
-            </el-option>
-          </el-select>
+          </source-detail-select>
         </el-form-item>
         <el-form-item>
           <el-button type="danger" @click="searchFrom">查询</el-button>
@@ -218,7 +209,6 @@
 </template>
 <script>
 import { QUESTION_API } from "@/constants/constants";
-import { QUESTION_TYPES } from "../constants/constants";
 import { mapState } from "vuex";
 import QuestionPreview from "./QuestionPreview";
 
@@ -230,6 +220,7 @@ export default {
       formSearch: {
         basePaperId: "",
         questionType: "",
+        sourceDetailId: "",
         courseId: "",
         courseName: "",
       },
@@ -280,18 +271,6 @@ export default {
   },
   //钩子函数
   created() {
-    var url =
-      QUESTION_API +
-      "/org/property/" +
-      this.user.rootOrgId +
-      "/ROOT_ORG_QUESTION_TYPES";
-    this.$http.get(url).then((response) => {
-      if (response.data && response.data.length > 0) {
-        this.questionTypes = QUESTION_TYPES.filter((m) =>
-          response.data.includes(m.value)
-        );
-      }
-    });
     this.initVue();
   },
   methods: {
@@ -456,6 +435,7 @@ export default {
     resetSearchForm() {
       this.formSearch = {
         questionType: "",
+        sourceDetailId: "",
         courseId: "",
       };
     },
@@ -514,6 +494,7 @@ export default {
           quesBodyText: "",
           questionType: "",
           courseId: "",
+          sourceDetailId: "",
           courseLevel: "",
           courseName: "",
         };
@@ -531,6 +512,7 @@ export default {
           basePaperId: "",
           quesBodyText: "",
           questionType: "",
+          sourceDetailId: "",
           courseId: "",
           courseLevel: "",
           courseName: "",