|
@@ -80,16 +80,19 @@
|
|
</div>
|
|
</div>
|
|
<div v-else class="part-box">
|
|
<div v-else class="part-box">
|
|
<div class="box-justify mb-2">
|
|
<div class="box-justify mb-2">
|
|
- <p>
|
|
|
|
- 共{{ packageInfos.packageCount }}个卷袋,{{
|
|
|
|
- packageInfos.studentCount
|
|
|
|
- }}个考生,共印试卷{{ packageInfos.paperCount }}份(正式{{
|
|
|
|
- packageInfos.paperReleaseCount
|
|
|
|
- }}份,备用{{ packageInfos.paperBackupCount }}份)
|
|
|
|
- </p>
|
|
|
|
- <el-button type="primary" @click="toAdd" :disabled="cannotAdd"
|
|
|
|
- >新增考试对象</el-button
|
|
|
|
- >
|
|
|
|
|
|
+ <div>
|
|
|
|
+ <p>
|
|
|
|
+ 每个卷袋包含一个考场全部文件(试卷、题卡、卷袋贴、签到表等文件)
|
|
|
|
+ </p>
|
|
|
|
+ <p>
|
|
|
|
+ 共{{ packageInfos.packageCount }}个卷袋,{{
|
|
|
|
+ packageInfos.studentCount
|
|
|
|
+ }}个考生,共印试卷{{ packageInfos.paperCount }}份(正式{{
|
|
|
|
+ packageInfos.paperReleaseCount
|
|
|
|
+ }}份,备用{{ packageInfos.paperBackupCount }}份)
|
|
|
|
+ </p>
|
|
|
|
+ </div>
|
|
|
|
+ <el-button type="primary" @click="toAdd">新增考试对象</el-button>
|
|
</div>
|
|
</div>
|
|
<el-table ref="TableList" :data="tableData" border>
|
|
<el-table ref="TableList" :data="tableData" border>
|
|
<el-table-column type="index" width="50" label="卷袋序号">
|
|
<el-table-column type="index" width="50" label="卷袋序号">
|
|
@@ -167,33 +170,37 @@
|
|
@click="toDelete(scope.row)"
|
|
@click="toDelete(scope.row)"
|
|
>取消</el-button
|
|
>取消</el-button
|
|
>
|
|
>
|
|
|
|
+ <el-button
|
|
|
|
+ class="btn-primary"
|
|
|
|
+ type="text"
|
|
|
|
+ @click="toViewStudent(scope.row)"
|
|
|
|
+ >查看考生</el-button
|
|
|
|
+ >
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
</el-table>
|
|
</el-table>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
- <!-- ModifyPrintTask -->
|
|
|
|
- <modify-print-task
|
|
|
|
- ref="ModifyPrintTask"
|
|
|
|
- :instance="curRow"
|
|
|
|
- :print-houses="printHouses"
|
|
|
|
- :class-list="unusedClassList"
|
|
|
|
- :extend-fields="extendFields"
|
|
|
|
- @modified="modified"
|
|
|
|
- ></modify-print-task>
|
|
|
|
|
|
+ <!-- ModifyExamStudent -->
|
|
|
|
+ <modify-exam-student
|
|
|
|
+ ref="ModifyExamStudent"
|
|
|
|
+ :selected-ids="selectedStudentIds"
|
|
|
|
+ :course-id="infoExamTask.courseId"
|
|
|
|
+ @modified="examStudentModified"
|
|
|
|
+ ></modify-exam-student>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script>
|
|
<script>
|
|
import { calcSum, getTimeDatestamp } from "@/plugins/utils";
|
|
import { calcSum, getTimeDatestamp } from "@/plugins/utils";
|
|
import { examRuleDetail } from "../../../base/api";
|
|
import { examRuleDetail } from "../../../base/api";
|
|
-import { listTaskPrintHouse, listTaskApplyClass } from "../../api";
|
|
|
|
-import ModifyPrintTask from "./ModifyPrintTask";
|
|
|
|
|
|
+import { listTaskPrintHouse } from "../../api";
|
|
|
|
+import ModifyExamStudent from "./ModifyExamStudent";
|
|
import { mapState, mapMutations } from "vuex";
|
|
import { mapState, mapMutations } from "vuex";
|
|
|
|
|
|
export default {
|
|
export default {
|
|
name: "info-print-task",
|
|
name: "info-print-task",
|
|
- components: { ModifyPrintTask },
|
|
|
|
|
|
+ components: { ModifyExamStudent },
|
|
data() {
|
|
data() {
|
|
return {
|
|
return {
|
|
modalForm: {
|
|
modalForm: {
|
|
@@ -207,9 +214,6 @@ export default {
|
|
},
|
|
},
|
|
tableData: [],
|
|
tableData: [],
|
|
curRow: {},
|
|
curRow: {},
|
|
- classList: [],
|
|
|
|
- validClassList: [],
|
|
|
|
- unusedClassList: [],
|
|
|
|
printHouses: [],
|
|
printHouses: [],
|
|
extendFields: [],
|
|
extendFields: [],
|
|
packageInfos: {
|
|
packageInfos: {
|
|
@@ -219,6 +223,7 @@ export default {
|
|
paperReleaseCount: 0,
|
|
paperReleaseCount: 0,
|
|
paperBackupCount: 0
|
|
paperBackupCount: 0
|
|
},
|
|
},
|
|
|
|
+ selectedStudentIds: [],
|
|
// date-picker
|
|
// date-picker
|
|
curCreateTime: [],
|
|
curCreateTime: [],
|
|
createDate: "",
|
|
createDate: "",
|
|
@@ -232,9 +237,6 @@ export default {
|
|
"infoPrintTask",
|
|
"infoPrintTask",
|
|
"infoExamPrintPlan"
|
|
"infoExamPrintPlan"
|
|
]),
|
|
]),
|
|
- cannotAdd() {
|
|
|
|
- return !this.unusedClassList.length;
|
|
|
|
- },
|
|
|
|
IS_MODEL2() {
|
|
IS_MODEL2() {
|
|
return this.infoExamTask.examModel === "MODEL2";
|
|
return this.infoExamTask.examModel === "MODEL2";
|
|
}
|
|
}
|
|
@@ -258,7 +260,7 @@ export default {
|
|
},
|
|
},
|
|
methods: {
|
|
methods: {
|
|
...mapMutations("exam", ["updateTaskInfo"]),
|
|
...mapMutations("exam", ["updateTaskInfo"]),
|
|
- async initData() {
|
|
|
|
|
|
+ initData() {
|
|
if (this.IS_MODEL2) return;
|
|
if (this.IS_MODEL2) return;
|
|
|
|
|
|
this.modalForm = Object.assign(this.modalForm, {
|
|
this.modalForm = Object.assign(this.modalForm, {
|
|
@@ -267,8 +269,6 @@ export default {
|
|
courseCode: this.infoExamTask.courseCode
|
|
courseCode: this.infoExamTask.courseCode
|
|
});
|
|
});
|
|
|
|
|
|
- await this.getClassList();
|
|
|
|
-
|
|
|
|
const { examStartTime, examEndTime } = this.infoPrintTask;
|
|
const { examStartTime, examEndTime } = this.infoPrintTask;
|
|
if (examStartTime && examEndTime) {
|
|
if (examStartTime && examEndTime) {
|
|
this.createTime = [examStartTime, examEndTime];
|
|
this.createTime = [examStartTime, examEndTime];
|
|
@@ -278,10 +278,8 @@ export default {
|
|
}
|
|
}
|
|
|
|
|
|
this.tableData = [];
|
|
this.tableData = [];
|
|
- this.unusedClassList = [];
|
|
|
|
- this.buildTableData();
|
|
|
|
this.updatePackageInfos();
|
|
this.updatePackageInfos();
|
|
- this.updeteData();
|
|
|
|
|
|
+ this.updateData();
|
|
},
|
|
},
|
|
planBackupCountChange() {
|
|
planBackupCountChange() {
|
|
this.tableData.forEach(item => {
|
|
this.tableData.forEach(item => {
|
|
@@ -345,7 +343,7 @@ export default {
|
|
}
|
|
}
|
|
return Promise.resolve(true);
|
|
return Promise.resolve(true);
|
|
},
|
|
},
|
|
- updeteData() {
|
|
|
|
|
|
+ updateData() {
|
|
const tableList = this.tableData.map(row => {
|
|
const tableList = this.tableData.map(row => {
|
|
let nrow = { ...row };
|
|
let nrow = { ...row };
|
|
let extendFields = this.extendFields.map(field => {
|
|
let extendFields = this.extendFields.map(field => {
|
|
@@ -367,43 +365,6 @@ export default {
|
|
}
|
|
}
|
|
});
|
|
});
|
|
},
|
|
},
|
|
- updateData() {
|
|
|
|
- this.$emit("data-change", this.getData());
|
|
|
|
- },
|
|
|
|
- buildTableData() {
|
|
|
|
- this.tableData = this.classList.map(clazz => {
|
|
|
|
- let modalFormData = { ...this.modalForm };
|
|
|
|
- delete modalFormData.printHouseId;
|
|
|
|
- let data = {
|
|
|
|
- examPlace: "",
|
|
|
|
- examRoom: "",
|
|
|
|
- classId: clazz.id,
|
|
|
|
- className: clazz.name,
|
|
|
|
- studentCount: clazz.studentCount,
|
|
|
|
- printHouseId: clazz.printHouseId,
|
|
|
|
- printHouseName: clazz.printHouseName,
|
|
|
|
- extendFields: "",
|
|
|
|
- backupCount: this.infoExamPrintPlan.backupCount,
|
|
|
|
- ...modalFormData
|
|
|
|
- };
|
|
|
|
- let extendFieldModal = {};
|
|
|
|
- this.extendFields.forEach(field => {
|
|
|
|
- extendFieldModal[field.code] = "";
|
|
|
|
- });
|
|
|
|
- data.extends = extendFieldModal;
|
|
|
|
- return data;
|
|
|
|
- });
|
|
|
|
- },
|
|
|
|
- updateUnusedClassList() {
|
|
|
|
- let usedClassIds = [];
|
|
|
|
- this.tableData.forEach(row => {
|
|
|
|
- usedClassIds = [...usedClassIds, ...row.classId.split(",")];
|
|
|
|
- });
|
|
|
|
-
|
|
|
|
- this.unusedClassList = this.classList.filter(
|
|
|
|
- item => !usedClassIds.includes(item.id)
|
|
|
|
- );
|
|
|
|
- },
|
|
|
|
updatePackageInfos() {
|
|
updatePackageInfos() {
|
|
this.packageInfos.packageCount = this.tableData.length;
|
|
this.packageInfos.packageCount = this.tableData.length;
|
|
this.packageInfos.studentCount = calcSum(
|
|
this.packageInfos.studentCount = calcSum(
|
|
@@ -426,25 +387,6 @@ export default {
|
|
async getPrintHouses() {
|
|
async getPrintHouses() {
|
|
this.printHouses = await listTaskPrintHouse();
|
|
this.printHouses = await listTaskPrintHouse();
|
|
},
|
|
},
|
|
- async getClassList() {
|
|
|
|
- this.classList = [];
|
|
|
|
- if (!this.infoExamTask.courseCode) return;
|
|
|
|
-
|
|
|
|
- const data = await listTaskApplyClass({
|
|
|
|
- courseCode: this.infoExamTask.courseCode
|
|
|
|
- });
|
|
|
|
- if (!data) return;
|
|
|
|
-
|
|
|
|
- this.classList = data.map(item => {
|
|
|
|
- return {
|
|
|
|
- id: item.classId,
|
|
|
|
- name: item.className,
|
|
|
|
- studentCount: item.studentCount,
|
|
|
|
- printHouseId: item.printHouseId,
|
|
|
|
- printHouseName: item.printHouseName
|
|
|
|
- };
|
|
|
|
- });
|
|
|
|
- },
|
|
|
|
timeChange() {
|
|
timeChange() {
|
|
if (!this.createDate || !this.createTime) {
|
|
if (!this.createDate || !this.createTime) {
|
|
this.modalForm.examStartTime = null;
|
|
this.modalForm.examStartTime = null;
|
|
@@ -470,42 +412,73 @@ export default {
|
|
}
|
|
}
|
|
},
|
|
},
|
|
toAdd() {
|
|
toAdd() {
|
|
- if (!this.checkTime()) return;
|
|
|
|
|
|
+ if (!this.infoExamTask.courseId) {
|
|
|
|
+ this.$message.error("请先选择课程");
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
|
|
- this.curRow = {
|
|
|
|
|
|
+ this.selectedStudentIds = this.getTabelStudentIds();
|
|
|
|
+ this.$refs.ModifyExamStudent.open();
|
|
|
|
+ },
|
|
|
|
+ getTabelStudentIds() {
|
|
|
|
+ let ids = [];
|
|
|
|
+ this.tableData.forEach(item => {
|
|
|
|
+ item.examTaskStudentObjectParamList.forEach(elem => {
|
|
|
|
+ ids.push(elem.studentId);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+ return ids;
|
|
|
|
+ },
|
|
|
|
+ getInitTableRow() {
|
|
|
|
+ let modalFormData = { ...this.modalForm };
|
|
|
|
+ delete modalFormData.printHouseId;
|
|
|
|
+ let data = {
|
|
examPlace: "",
|
|
examPlace: "",
|
|
examRoom: "",
|
|
examRoom: "",
|
|
classId: "",
|
|
classId: "",
|
|
className: "",
|
|
className: "",
|
|
- studentCount: null,
|
|
|
|
- printHouseId: null,
|
|
|
|
- printHouseName: null,
|
|
|
|
|
|
+ studentCount: "",
|
|
|
|
+ printHouseId: "",
|
|
|
|
+ printHouseName: "",
|
|
extendFields: "",
|
|
extendFields: "",
|
|
- backupCount: this.infoExamPrintPlan.backupCount,
|
|
|
|
- ...this.modalForm
|
|
|
|
|
|
+ backupCount: 0,
|
|
|
|
+ examTaskStudentObjectParamList: [],
|
|
|
|
+ ...modalFormData
|
|
};
|
|
};
|
|
let extendFieldModal = {};
|
|
let extendFieldModal = {};
|
|
this.extendFields.forEach(field => {
|
|
this.extendFields.forEach(field => {
|
|
extendFieldModal[field.code] = "";
|
|
extendFieldModal[field.code] = "";
|
|
});
|
|
});
|
|
- this.curRow.extends = extendFieldModal;
|
|
|
|
- this.$refs.ModifyPrintTask.open();
|
|
|
|
|
|
+ data.extends = extendFieldModal;
|
|
|
|
+ return data;
|
|
},
|
|
},
|
|
- toEdit(row) {
|
|
|
|
- this.curRow = { ...row };
|
|
|
|
- this.$refs.ModifyPrintTask.open();
|
|
|
|
|
|
+ examStudentModified(selectedStudents) {
|
|
|
|
+ let tableMap = {};
|
|
|
|
+ const initTableRow = this.getInitTableRow();
|
|
|
|
+ this.tableData.forEach(item => {
|
|
|
|
+ tableMap[item.classId] = item;
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ this.tableData = selectedStudents.map(item => {
|
|
|
|
+ const prevData = tableMap[item.classId] || initTableRow;
|
|
|
|
+ return this.$objAssign(prevData, {
|
|
|
|
+ backupCount: this.infoExamPrintPlan.backupCount,
|
|
|
|
+ classId: item.classId,
|
|
|
|
+ className: item.className,
|
|
|
|
+ studentCount: item.children.length,
|
|
|
|
+ examTaskStudentObjectParamList: item.children
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+ this.updatePackageInfos();
|
|
},
|
|
},
|
|
toDelete(row) {
|
|
toDelete(row) {
|
|
this.tableData = this.tableData.filter(
|
|
this.tableData = this.tableData.filter(
|
|
item => item.classId !== row.classId
|
|
item => item.classId !== row.classId
|
|
);
|
|
);
|
|
- this.updateUnusedClassList();
|
|
|
|
this.updatePackageInfos();
|
|
this.updatePackageInfos();
|
|
},
|
|
},
|
|
- modified(data) {
|
|
|
|
- this.tableData.push(data);
|
|
|
|
- this.updateUnusedClassList();
|
|
|
|
- this.updatePackageInfos();
|
|
|
|
|
|
+ toViewStudent(row) {
|
|
|
|
+ console.log(row);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
};
|