|
@@ -3,61 +3,19 @@
|
|
<div class="build-step-title">
|
|
<div class="build-step-title">
|
|
<h3><span>确定构成</span></h3>
|
|
<h3><span>确定构成</span></h3>
|
|
</div>
|
|
</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>
|
|
<el-table-column
|
|
<el-table-column
|
|
label="试题数量"
|
|
label="试题数量"
|
|
prop="questionCount"
|
|
prop="questionCount"
|
|
align="center"
|
|
align="center"
|
|
- min-width="100"
|
|
|
|
|
|
+ width="120"
|
|
></el-table-column>
|
|
></el-table-column>
|
|
<el-table-column
|
|
<el-table-column
|
|
label="抽取试题数量"
|
|
label="抽取试题数量"
|
|
@@ -104,10 +62,7 @@
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script>
|
|
<script>
|
|
-import {
|
|
|
|
- paperSimpleTypeDistributeApi,
|
|
|
|
- paperSimpleCountDistributeApi,
|
|
|
|
-} from "../api";
|
|
|
|
|
|
+import { paperSimpleCountDistributeApi } from "../api";
|
|
|
|
|
|
export default {
|
|
export default {
|
|
name: "BuildPaperSimple",
|
|
name: "BuildPaperSimple",
|
|
@@ -120,142 +75,24 @@ export default {
|
|
data() {
|
|
data() {
|
|
return {
|
|
return {
|
|
baseDataList: [],
|
|
baseDataList: [],
|
|
- questionTypeSources: {},
|
|
|
|
- simpleTypeDistributeInfo: [],
|
|
|
|
};
|
|
};
|
|
},
|
|
},
|
|
mounted() {
|
|
mounted() {
|
|
this.getBaseData();
|
|
this.getBaseData();
|
|
},
|
|
},
|
|
methods: {
|
|
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() {
|
|
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() {
|
|
getData() {
|
|
let questionInfo = this.baseDataList
|
|
let questionInfo = this.baseDataList
|
|
@@ -264,8 +101,7 @@ export default {
|
|
return {
|
|
return {
|
|
count: item.selectCount,
|
|
count: item.selectCount,
|
|
score: item.questionScore,
|
|
score: item.questionScore,
|
|
- questionType: item.quesStructType,
|
|
|
|
- sourceDetailName: item.detailName,
|
|
|
|
|
|
+ sourceDetailId: item.sourceDetailId,
|
|
};
|
|
};
|
|
});
|
|
});
|
|
return { questionInfo };
|
|
return { questionInfo };
|