|
@@ -19,7 +19,7 @@
|
|
|
label="题型小类"
|
|
|
prop="questionType"
|
|
|
align="center"
|
|
|
- min-width="240"
|
|
|
+ min-width="200"
|
|
|
>
|
|
|
<div slot-scope="scope" class="box-justify">
|
|
|
<div>{{ scope.row.quesStructType | questionTypeFilter }}</div>
|
|
@@ -104,7 +104,10 @@
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
-import { paperSimpleTypeDistributeApi } from "../api";
|
|
|
+import {
|
|
|
+ paperSimpleTypeDistributeApi,
|
|
|
+ paperSimpleCountDistributeApi,
|
|
|
+} from "../api";
|
|
|
|
|
|
export default {
|
|
|
name: "BuildPaperSimple",
|
|
@@ -118,6 +121,7 @@ export default {
|
|
|
return {
|
|
|
baseDataList: [],
|
|
|
questionTypeSources: {},
|
|
|
+ simpleTypeDistributeInfo: [],
|
|
|
};
|
|
|
},
|
|
|
mounted() {
|
|
@@ -125,22 +129,30 @@ export default {
|
|
|
},
|
|
|
methods: {
|
|
|
spanMethod({ row, columnIndex }) {
|
|
|
- if (columnIndex === 0) {
|
|
|
+ if (!row.rowspans) return;
|
|
|
+ if (columnIndex > 1) return;
|
|
|
+
|
|
|
+ if (row.rowspans[columnIndex] > 0) {
|
|
|
return {
|
|
|
- rowspan: row.rowspan || 0,
|
|
|
+ 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) => {
|
|
|
- let qtRowspan = mainGroup.quesTypeDistributeList.length;
|
|
|
- mainGroup.quesTypeDistributeList.forEach((quesItem, qindex) => {
|
|
|
+ mainGroup.quesTypeDistributeList.forEach((quesItem) => {
|
|
|
let nitem = {
|
|
|
quesMainType: mainGroup.quesMainType,
|
|
|
quesStructType: quesItem.quesStructType,
|
|
@@ -149,7 +161,6 @@ export default {
|
|
|
selectCount: undefined,
|
|
|
questionScore: undefined,
|
|
|
};
|
|
|
- if (qindex === 0) nitem.rowspan = qtRowspan;
|
|
|
baseDataList.push(nitem);
|
|
|
questionTypeSources[quesItem.quesStructType] = {
|
|
|
detailNames: [],
|
|
@@ -157,14 +168,125 @@ export default {
|
|
|
};
|
|
|
});
|
|
|
});
|
|
|
- this.baseDataList = baseDataList;
|
|
|
+ this.baseDataList = this.buildTableStruct(baseDataList);
|
|
|
this.questionTypeSources = questionTypeSources;
|
|
|
},
|
|
|
- sourceInfoChange(quesStructType) {
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ console.log(baseDataList);
|
|
|
+ return baseDataList;
|
|
|
},
|
|
|
getData() {
|
|
|
- return this.baseDataList;
|
|
|
+ let questionInfo = this.baseDataList
|
|
|
+ .filter((item) => item.selectCount)
|
|
|
+ .map((item) => {
|
|
|
+ return {
|
|
|
+ count: item.selectCount,
|
|
|
+ score: item.questionScore,
|
|
|
+ questionType: item.quesStructType,
|
|
|
+ sourceDetailName: item.detailName,
|
|
|
+ };
|
|
|
+ });
|
|
|
+ return { questionInfo };
|
|
|
+ },
|
|
|
+ validate() {
|
|
|
+ let valid = this.baseDataList.some((item) => item.selectCount);
|
|
|
+ if (!valid) {
|
|
|
+ this.$message.error("题目数量不能为空!");
|
|
|
+ return Promise.reject();
|
|
|
+ }
|
|
|
+
|
|
|
+ let unvalid = this.baseDataList
|
|
|
+ .filter((item) => item.selectCount)
|
|
|
+ .some((item) => !item.questionScore);
|
|
|
+
|
|
|
+ if (unvalid) {
|
|
|
+ this.$message.error("有小题未设置分数!");
|
|
|
+ return Promise.reject();
|
|
|
+ }
|
|
|
+
|
|
|
+ return Promise.resolve(true);
|
|
|
},
|
|
|
},
|
|
|
};
|