Kaynağa Gözat

组卷相关

zhangjie 2 yıl önce
ebeveyn
işleme
fd2aba5895

+ 1 - 1
src/modules/paper/components/BuildPaperManual.vue

@@ -212,7 +212,7 @@ export default {
       let detailInfo = this.details.map((item) => {
         return {
           description: item.description,
-          detailName: item.name,
+          detailName: item.detailName,
           unitInfo: item.questions.map((q) => {
             return {
               questionId: q.id,

+ 19 - 183
src/modules/paper/components/BuildPaperSimple.vue

@@ -3,61 +3,19 @@
     <div class="build-step-title">
       <h3><span>确定构成</span></h3>
     </div>
-    <el-table :data="baseDataList" :span-method="spanMethod">
-      <el-table-column label="题型" align="center">
-        <el-table-column
-          label="题型大类"
-          prop="quesMainType"
-          align="center"
-          width="120"
-        >
-          <span slot-scope="scope">{{
-            scope.row.quesMainType | questionMainTypeFilter
-          }}</span>
-        </el-table-column>
-        <el-table-column
-          label="题型小类"
-          prop="questionType"
-          align="center"
-          min-width="200"
-        >
-          <div slot-scope="scope" class="box-justify">
-            <div>{{ scope.row.quesStructType | questionTypeFilter }}</div>
-
-            <el-select
-              v-model="
-                questionTypeSources[scope.row.quesStructType].detailNames
-              "
-              class="dialog-input-width"
-              filterable
-              multiple
-              placeholder="选择大题来源"
-              @change="sourceInfoChange(scope.row.quesStructType)"
-            >
-              <el-option
-                v-for="item in questionTypeSources[scope.row.quesStructType]
-                  .sourceInfoList"
-                :key="item.detailName"
-                :value="item.detailName"
-                :label="item.detailName"
-              ></el-option>
-            </el-select>
-          </div>
-        </el-table-column>
-        <el-table-column
-          label="大题来源"
-          prop="detailName"
-          align="center"
-          min-width="120"
-        >
-          <span slot-scope="scope">{{ scope.row.detailName }}</span>
-        </el-table-column>
+    <el-table :data="baseDataList" border>
+      <el-table-column
+        label="题型"
+        prop="sourceDetailName"
+        align="center"
+        min-width="120"
+      >
       </el-table-column>
       <el-table-column
         label="试题数量"
         prop="questionCount"
         align="center"
-        min-width="100"
+        width="120"
       ></el-table-column>
       <el-table-column
         label="抽取试题数量"
@@ -104,10 +62,7 @@
 </template>
 
 <script>
-import {
-  paperSimpleTypeDistributeApi,
-  paperSimpleCountDistributeApi,
-} from "../api";
+import { paperSimpleCountDistributeApi } from "../api";
 
 export default {
   name: "BuildPaperSimple",
@@ -120,142 +75,24 @@ export default {
   data() {
     return {
       baseDataList: [],
-      questionTypeSources: {},
-      simpleTypeDistributeInfo: [],
     };
   },
   mounted() {
     this.getBaseData();
   },
   methods: {
-    spanMethod({ row, columnIndex }) {
-      if (!row.rowspans) return;
-      if (columnIndex > 1) return;
-
-      if (row.rowspans[columnIndex] > 0) {
-        return {
-          rowspan: row.rowspans[columnIndex],
-          colspan: 1,
-        };
-      } else {
-        return {
-          rowspan: 0,
-          colspan: 0,
-        };
-      }
-    },
     async getBaseData() {
-      const res = await paperSimpleTypeDistributeApi(this.courseId);
-      this.simpleTypeDistributeInfo = res.data;
-      // console.log(res.data);
-      // parse data
-      let baseDataList = [];
-      let questionTypeSources = {};
-      res.data.forEach((mainGroup) => {
-        mainGroup.quesTypeDistributeList.forEach((quesItem) => {
-          let nitem = {
-            quesMainType: mainGroup.quesMainType,
-            quesStructType: quesItem.quesStructType,
-            detailName: "",
-            questionCount: undefined,
-            selectCount: undefined,
-            questionScore: undefined,
-          };
-          baseDataList.push(nitem);
-          questionTypeSources[quesItem.quesStructType] = {
-            detailNames: [],
-            sourceInfoList: quesItem.sourceInfoList || [],
-          };
-        });
+      const res = await paperSimpleCountDistributeApi({
+        courseId: this.courseId,
       });
-      this.baseDataList = this.buildTableStruct(baseDataList);
-      this.questionTypeSources = questionTypeSources;
-    },
-    async sourceInfoChange(quesStructType) {
-      console.log(quesStructType);
-      const detailNames = this.questionTypeSources[quesStructType].detailNames;
-      let curQuesStructTypeSource = [];
-
-      if (detailNames.length) {
-        const res = await paperSimpleCountDistributeApi({
-          courseId: this.courseId,
-          detailNameList: detailNames.join(),
-          quesStructType,
-        });
-        curQuesStructTypeSource = res.data;
-      }
-
-      let baseDataMap = {};
-      this.baseDataList.forEach((item) => {
-        if (!item.detailName || quesStructType === item.quesStructType) return;
-        const k = item.quesStructType;
-        if (!baseDataMap[k]) baseDataMap[k] = [];
-        baseDataMap[k].push(item);
-      });
-
-      let baseDataList = [];
-      this.simpleTypeDistributeInfo.forEach((mainGroup) => {
-        mainGroup.quesTypeDistributeList.forEach((quesItem) => {
-          if (baseDataMap[quesItem.quesStructType]) {
-            baseDataList.push(...baseDataMap[quesItem.quesStructType]);
-            return;
-          }
-
-          if (
-            quesItem.quesStructType === quesStructType &&
-            curQuesStructTypeSource.length
-          ) {
-            curQuesStructTypeSource.forEach((sitem) => {
-              let nsitem = {
-                quesMainType: mainGroup.quesMainType,
-                quesStructType: quesItem.quesStructType,
-                detailName: sitem.detailName,
-                questionCount: sitem.count,
-                selectCount: undefined,
-                questionScore: undefined,
-              };
-              baseDataList.push(nsitem);
-            });
-          } else {
-            let nitem = {
-              quesMainType: mainGroup.quesMainType,
-              quesStructType: quesItem.quesStructType,
-              detailName: "",
-              questionCount: undefined,
-              selectCount: undefined,
-              questionScore: undefined,
-            };
-            baseDataList.push(nitem);
-          }
-        });
-      });
-      this.baseDataList = this.buildTableStruct(baseDataList);
-    },
-    buildTableStruct(baseDataList) {
-      let curQtype = null;
-      let curMainType = null;
-      baseDataList.forEach((item) => {
-        if (curMainType !== item.quesMainType) {
-          curMainType = item.quesMainType;
-          const rowspan = baseDataList.filter(
-            (elem) => elem.quesMainType === curMainType
-          ).length;
-          item.rowspans = [rowspan];
-        } else {
-          item.rowspans = [0];
-        }
-        if (curQtype !== item.quesStructType) {
-          curQtype = item.quesStructType;
-          const rowspan = baseDataList.filter(
-            (elem) => elem.quesStructType === curQtype
-          ).length;
-          item.rowspans.push(rowspan);
-        } else {
-          item.rowspans.push(0);
-        }
+      this.baseDataList = res.data.map((item) => {
+        return {
+          ...item,
+          questionCount: item.count,
+          selectCount: undefined,
+          questionScore: undefined,
+        };
       });
-      console.log(baseDataList);
-      return baseDataList;
     },
     getData() {
       let questionInfo = this.baseDataList
@@ -264,8 +101,7 @@ export default {
           return {
             count: item.selectCount,
             score: item.questionScore,
-            questionType: item.quesStructType,
-            sourceDetailName: item.detailName,
+            sourceDetailId: item.sourceDetailId,
           };
         });
       return { questionInfo };

+ 12 - 32
src/modules/question/components/QuestionStatisticsDialog.vue

@@ -21,21 +21,8 @@
     </div>
 
     <div class="part-box">
-      <el-table
-        v-if="curType === 'base'"
-        key="base"
-        :data="baseDataList"
-        :span-method="spanMethod"
-      >
-        <el-table-column label="题型">
-          <el-table-column
-            label="题型大类"
-            prop="questionMainTypeName"
-          ></el-table-column>
-          <el-table-column
-            label="题型小类"
-            prop="questionTypeName"
-          ></el-table-column>
+      <el-table v-if="curType === 'base'" key="base" :data="baseDataList">
+        <el-table-column label="题型" prop="sourceDetailName">
         </el-table-column>
         <el-table-column
           label="试题数量"
@@ -156,31 +143,24 @@ export default {
         this.getBlueData();
       }
     },
-    getQuesDiffContent({ questionCount, questionDifficultInfo }) {
-      if (!questionCount) return "--";
-      const qinfo = questionDifficultInfo
+    getQuesDiffContent({ count, difficultInfo }) {
+      if (!count) return "--";
+      const qinfo = difficultInfo
         .map((item) => `${item.difficultLevel}:${item.questionCount}`)
         .join(",");
-      return `${questionCount}(${qinfo})`;
+      return `${count}(${qinfo})`;
     },
     async getBaseData() {
       const res = await questionDistributionStatisticsApi(this.courseId);
       // console.log(res.data);
       // parse data
-      let baseDataList = [];
-      res.data.forEach((mainGroup) => {
-        const rowspan = mainGroup.questionTypeStatisticList.length;
-        mainGroup.questionTypeStatisticList.forEach((quesItem, index) => {
-          let nitem = {
-            questionMainTypeName: mainGroup.questionMainTypeName,
-            questionTypeName: quesItem.questionTypeName,
-            questionDifficultInfoCont: this.getQuesDiffContent(quesItem),
-          };
-          if (index === 0) nitem.rowspan = rowspan;
-          baseDataList.push(nitem);
-        });
+      this.baseDataList = res.data.map((quesItem) => {
+        let nitem = {
+          sourceDetailName: quesItem.sourceDetailName,
+          questionDifficultInfoCont: this.getQuesDiffContent(quesItem),
+        };
+        return nitem;
       });
-      this.baseDataList = baseDataList;
     },
     async getBlueData() {
       const res = await questionPropertyDistributionStatisticsApi(this.filter);