527 lines
18 KiB
527 lines
18 KiB
import { HttpClient } from "@angular/common/http"; |
|
import { Component, Inject, OnInit } from "@angular/core"; |
|
import { |
|
MatDialog, |
|
MatDialogRef, |
|
MAT_DIALOG_DATA, |
|
} from "@angular/material/dialog"; |
|
import { MatSnackBar, MatSnackBarConfig } from "@angular/material/snack-bar"; |
|
import { ActivatedRoute } from "@angular/router"; |
|
import { EvaluateComponent } from "./evaluate/evaluate.component"; |
|
|
|
@Component({ |
|
selector: "app-review-files", |
|
templateUrl: "./review-files.component.html", |
|
styleUrls: [ |
|
"../../student/examination-details/examination-details.component.scss", |
|
"./review-files.component.scss", |
|
], |
|
}) |
|
export class ReviewFilesComponent implements OnInit { |
|
constructor( |
|
public http: HttpClient, |
|
public dialog: MatDialog, |
|
public snackBar: MatSnackBar, |
|
public route: ActivatedRoute |
|
) {} |
|
|
|
async ngOnInit(): Promise<void> { |
|
this.paperType = this.route.snapshot.queryParams.paperType || 1; |
|
await this.getTest(); |
|
this.getUnitPlans(); //将试卷的预案考题放进数据中 |
|
|
|
//监听 此HTML标签焦点事件 |
|
document.addEventListener("visibilitychange", () => { |
|
let isHidden = document.hidden; |
|
if (!isHidden) { |
|
this.getUnitPlans(false); |
|
} |
|
}); |
|
} |
|
|
|
paperType: any = 1; //阅卷/查看 |
|
examId: any = this.route.snapshot.queryParams.examId; //考卷id |
|
paperId: any; //试卷id |
|
paperData: any; //试卷信息 |
|
examScore: number = 0; //整个试卷的总分 |
|
paperCompanyData: any = []; //考生具体考卷 |
|
selectPaper: any = { id: null }; //选择当前考卷 |
|
selectPaperType: string = "1"; //选择当前考卷内容 基本信息/作战部署 |
|
|
|
//获取考生试卷 |
|
async getTest() { |
|
await new Promise((resolve, reject) => { |
|
this.http |
|
.get(`/api/Examinations/${this.examId}`) |
|
.subscribe((data: any) => { |
|
this.paperData = data; |
|
this.paperId = this.paperData.paperId; |
|
|
|
this.paperData.examinationDataInfo.forEach((element, index) => { |
|
element.adjoinData |
|
? (element.adjoinData = JSON.parse(element.adjoinData)) |
|
: null; |
|
element.basicInfoData |
|
? (element.basicInfoData = JSON.parse(element.basicInfoData)) |
|
: null; |
|
element.facilityData |
|
? (element.facilityData = JSON.parse(element.facilityData)) |
|
: null; |
|
element.functionalDivisionData |
|
? (element.functionalDivisionData = JSON.parse( |
|
element.functionalDivisionData |
|
)) |
|
: null; |
|
element.importLocationData |
|
? (element.importLocationData = JSON.parse( |
|
element.importLocationData |
|
)) |
|
: null; |
|
element.adjoinItemScore = |
|
data.paperInfo.paperDataInfo[index].adjoinItemScore; //四周毗邻单项分 |
|
element.basicInfoItemScore = |
|
data.paperInfo.paperDataInfo[index].basicInfoItemScore; //基本信息单项分 |
|
element.facilityItemScore = |
|
data.paperInfo.paperDataInfo[index].facilityItemScore; //消防设施单项分 |
|
element.functionalDivisionItemSocre = |
|
data.paperInfo.paperDataInfo[index].functionalDivisionItemSocre; //功能分区单选分 |
|
element.importLocationItemScore = |
|
data.paperInfo.paperDataInfo[index].importLocationItemScore; //重点部位单项分 |
|
if (this.paperType == 1) { |
|
//阅卷 |
|
element.adjoinScore = |
|
data.paperInfo.paperDataInfo[index].adjoinScore; //四周毗邻 总分 |
|
element.basicInfoScore = |
|
data.paperInfo.paperDataInfo[index].basicInfoScore; //基本信息 总分 |
|
element.facilityScore = |
|
data.paperInfo.paperDataInfo[index].facilityScore; //消防设施 总分 |
|
element.functionalDivisionScore = |
|
data.paperInfo.paperDataInfo[index].functionalDivisionScore; //功能分区 总分 |
|
element.importLocationScore = |
|
data.paperInfo.paperDataInfo[index].importLocationScore; //重点部位 总分 |
|
} |
|
element.score = |
|
element.adjoinScore + |
|
element.basicInfoScore + |
|
element.facilityScore + |
|
element.functionalDivisionScore + |
|
element.importLocationScore; |
|
}); |
|
this.paperCompanyData = JSON.parse( |
|
JSON.stringify(data.examinationDataInfo) |
|
); //具体考卷 |
|
this.selectPaper = this.paperCompanyData[0]; |
|
resolve(1); |
|
}); |
|
}); |
|
} |
|
|
|
//获得单位预案设定 |
|
async getUnitPlans(type: boolean = true) { |
|
for (let index = 0; index < this.paperCompanyData.length; index++) { |
|
const item = this.paperCompanyData[index]; |
|
item.planScore = 0; //预案总分 |
|
item.planList = []; //预案data |
|
let params = { |
|
examinationId: this.route.snapshot.queryParams.examId, |
|
companyId: item.companyInfo.id, |
|
}; |
|
await new Promise((resolve, reject) => { |
|
this.http |
|
.get(`/api/ExaminationPlans`, { params: params }) |
|
.subscribe((data) => { |
|
item.planList = data; |
|
item.planList.forEach((element) => { |
|
item.planScore = item.planScore + element.paperPlanInfo.score; |
|
}); |
|
if (type == false) { |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 5000; |
|
// this.snackBar.open('刷新成功','确定',config); |
|
} |
|
resolve(1); |
|
}); |
|
}); |
|
} |
|
type ? this.handleResults() : null; //计算答案正确错误 |
|
} |
|
|
|
//处理数据 计算答案正确错误 |
|
handleResults() { |
|
this.examScore = 0; |
|
this.paperCompanyData.forEach((element) => { |
|
this.examScore = this.examScore + element.score + element.planScore; //试卷总分 |
|
//forEach |
|
element.adjoinData.forEach((item) => { |
|
//四周毗邻 |
|
item.children.forEach((items) => { |
|
if (items.isRight === undefined) { |
|
items.result == items.userAnswer |
|
? (items.isRight = true) |
|
: (items.isRight = false); |
|
} |
|
}); |
|
}); |
|
element.basicInfoData.forEach((item) => { |
|
//基本信息 |
|
if (item.tabledata && item.tabledata.length) { |
|
//表格 |
|
item.tabledata.forEach((itemss, index) => { |
|
if (index != 0) { |
|
itemss.data.forEach((items) => { |
|
if (items.isRight === undefined) { |
|
items.result == items.userAnswer |
|
? (items.isRight = true) |
|
: (items.isRight = false); |
|
} |
|
}); |
|
} |
|
}); |
|
} else { |
|
//input |
|
item.children.forEach((items) => { |
|
if (items.isRight === undefined) { |
|
items.result == items.userAnswer |
|
? (items.isRight = true) |
|
: (items.isRight = false); |
|
} |
|
}); |
|
} |
|
}); |
|
element.facilityData.forEach((item) => { |
|
//消防设施 |
|
item.children.forEach((items) => { |
|
if (items.isRight === undefined) { |
|
items.result == items.userAnswer |
|
? (items.isRight = true) |
|
: (items.isRight = false); |
|
} |
|
}); |
|
}); |
|
element.functionalDivisionData.forEach((item) => { |
|
//功能分区 |
|
item.tabledata.forEach((itemss, index) => { |
|
if (index != 0) { |
|
itemss.data.forEach((items) => { |
|
if (items.isRight === undefined) { |
|
items.result == items.userAnswer |
|
? (items.isRight = true) |
|
: (items.isRight = false); |
|
} |
|
}); |
|
} |
|
}); |
|
}); |
|
element.importLocationData.forEach((item) => { |
|
//重点部位 |
|
item.tabledata.forEach((itemss, index) => { |
|
if (index != 0) { |
|
itemss.data.forEach((items) => { |
|
if (items.isRight === undefined) { |
|
items.result == items.userAnswer |
|
? (items.isRight = true) |
|
: (items.isRight = false); |
|
} |
|
}); |
|
} |
|
}); |
|
}); |
|
//forEach |
|
}); |
|
this.getPaperGrade(); |
|
} |
|
|
|
//循环 获取最新得分 |
|
getPaperGrade() { |
|
this.paperCompanyData.forEach((element) => { |
|
//forEach |
|
element.adjoinTotalPoints = 0; //四周毗邻 分数 |
|
element.adjoinData.forEach((item) => { |
|
//四周毗邻 |
|
item.children.forEach((items) => { |
|
items.isRight |
|
? (element.adjoinTotalPoints = |
|
element.adjoinTotalPoints + element.adjoinItemScore) |
|
: null; |
|
}); |
|
}); |
|
element.basicInfoTotalPoints = 0; //基本信息总分 |
|
element.basicInfoData.forEach((item) => { |
|
//基本信息 |
|
if (item.tabledata && item.tabledata.length) { |
|
//表格 |
|
let indexList = []; |
|
item.tabledata[0].data.forEach((e, index) => { |
|
let everyRow = { isRight: true, index: index }; |
|
indexList.push(everyRow); |
|
}); //表格 行数 |
|
item.tabledata.forEach((itemss, index) => { |
|
indexList.forEach((ele) => { |
|
if ( |
|
itemss.data[ele.index].isRight != undefined && |
|
itemss.data[ele.index].isRight === false |
|
) { |
|
ele.isRight = false; |
|
} |
|
}); |
|
}); |
|
indexList.forEach((item) => { |
|
item.isRight |
|
? (element.basicInfoTotalPoints = |
|
element.basicInfoTotalPoints + element.basicInfoItemScore) |
|
: null; |
|
}); |
|
} else { |
|
//input |
|
item.children.forEach((items) => { |
|
items.isRight |
|
? (element.basicInfoTotalPoints = |
|
element.basicInfoTotalPoints + element.basicInfoItemScore) |
|
: null; |
|
}); |
|
} |
|
}); |
|
element.facilityTotalPoints = 0; //消防设施总分 |
|
element.facilityData.forEach((item) => { |
|
//消防设施 |
|
item.children.forEach((items) => { |
|
items.isRight |
|
? (element.facilityTotalPoints = |
|
element.facilityTotalPoints + element.facilityItemScore) |
|
: null; |
|
}); |
|
}); |
|
element.functionalDivisionTotalPoints = 0; //功能分区总分 |
|
element.functionalDivisionData.forEach((item) => { |
|
//功能分区 |
|
if (item.tabledata && item.tabledata.length) { |
|
let indexList = []; |
|
item.tabledata[0].data.forEach((e, index) => { |
|
let everyRow = { isRight: true, index: index }; |
|
indexList.push(everyRow); |
|
}); //表格 行数 |
|
item.tabledata.forEach((itemss, index) => { |
|
indexList.forEach((ele) => { |
|
if ( |
|
itemss.data[ele.index].isRight != undefined && |
|
itemss.data[ele.index].isRight === false |
|
) { |
|
ele.isRight = false; |
|
} |
|
}); |
|
}); |
|
indexList.forEach((item) => { |
|
item.isRight |
|
? (element.functionalDivisionTotalPoints = |
|
element.functionalDivisionTotalPoints + |
|
element.functionalDivisionItemSocre) |
|
: null; |
|
}); |
|
} |
|
}); |
|
element.importLocationTotalPoints = 0; //重点部位总分 |
|
element.importLocationData.forEach((item) => { |
|
//重点部位 |
|
if (item.tabledata && item.tabledata.length) { |
|
let indexList = []; |
|
item.tabledata[0].data.forEach((e, index) => { |
|
let everyRow = { isRight: true, index: index }; |
|
indexList.push(everyRow); |
|
}); //表格 行数 |
|
item.tabledata.forEach((itemss, index) => { |
|
indexList.forEach((ele) => { |
|
if ( |
|
itemss.data[ele.index].isRight != undefined && |
|
itemss.data[ele.index].isRight === false |
|
) { |
|
ele.isRight = false; |
|
} |
|
}); |
|
}); |
|
indexList.forEach((item) => { |
|
item.isRight |
|
? (element.importLocationTotalPoints = |
|
element.importLocationTotalPoints + |
|
element.importLocationItemScore) |
|
: null; |
|
}); |
|
} |
|
}); |
|
//forEach |
|
}); |
|
} |
|
|
|
//修改结果 |
|
editResults(e) { |
|
let data = e; |
|
const dialogRef = this.dialog.open(editRightWrongComponent, { data }); |
|
dialogRef.afterClosed().subscribe((data) => { |
|
if (data) { |
|
if (e.isRight != data.isChecked) { |
|
e.isRight = data.isChecked; |
|
this.getPaperGrade(); |
|
} |
|
} |
|
}); |
|
} |
|
|
|
//刷新预案设定表格 |
|
refreshTable() { |
|
this.getUnitPlans(false); |
|
} |
|
|
|
//基本信息表格 是否展示当前行 |
|
rowIsShow(children, tag) { |
|
let isShow: boolean = false; |
|
children.forEach((element) => { |
|
element.result == tag ? (isShow = true) : null; |
|
}); |
|
return isShow; |
|
} |
|
|
|
//切换 选择考卷 |
|
togglePaper(e) { |
|
if (this.selectPaper.id != e.id) { |
|
this.selectPaper = e; |
|
} |
|
} |
|
|
|
//切换 选择考卷内容 |
|
togglePaperType(e) { |
|
if (this.selectPaperType != e) { |
|
this.selectPaperType = e; |
|
} |
|
} |
|
|
|
//提交阅卷结果 |
|
submitResult() { |
|
const dialogRef = this.dialog.open(EvaluateComponent, { |
|
data: { Evaluate: "" }, |
|
}); |
|
|
|
dialogRef.afterClosed().subscribe((result) => { |
|
// console.log("The dialog was closed", result); |
|
if (result.type) { |
|
let bodyData = { |
|
id: this.paperData.id, |
|
isMarked: true, |
|
totalScore: 0, |
|
examinationDataInfo: [], |
|
comment: result.value, |
|
}; |
|
let paramsData = JSON.parse(JSON.stringify(this.paperCompanyData)); //考卷 |
|
paramsData.forEach((element) => { |
|
//计算总分 |
|
bodyData.totalScore = |
|
bodyData.totalScore + |
|
element.adjoinTotalPoints + |
|
element.basicInfoTotalPoints + |
|
element.facilityTotalPoints + |
|
element.functionalDivisionTotalPoints + |
|
element.importLocationTotalPoints; |
|
element.planList.forEach((item) => { |
|
bodyData.totalScore = bodyData.totalScore + item.score || 0; |
|
}); |
|
//计算总分 |
|
element.adjoinScore = element.adjoinTotalPoints; //四周毗邻 |
|
delete element.adjoinTotalPoints; |
|
delete element.adjoinItemScore; |
|
element.basicInfoScore = element.basicInfoTotalPoints; //基本信息 |
|
delete element.basicInfoTotalPoints; |
|
delete element.basicInfoItemScore; |
|
element.facilityScore = element.facilityTotalPoints; //消防设施 |
|
delete element.facilityTotalPoints; |
|
delete element.facilityItemScore; |
|
element.functionalDivisionScore = |
|
element.functionalDivisionTotalPoints; //功能分区 |
|
delete element.functionalDivisionTotalPoints; |
|
delete element.functionalDivisionItemSocre; |
|
element.importLocationScore = element.importLocationTotalPoints; //重点部位 |
|
delete element.importLocationTotalPoints; |
|
delete element.importLocationItemScore; |
|
delete element.planList; |
|
delete element.planScore; |
|
delete element.score; |
|
element.adjoinData = JSON.stringify(element.adjoinData); |
|
element.basicInfoData = JSON.stringify(element.basicInfoData); |
|
element.facilityData = JSON.stringify(element.facilityData); |
|
element.functionalDivisionData = JSON.stringify( |
|
element.functionalDivisionData |
|
); |
|
element.importLocationData = JSON.stringify( |
|
element.importLocationData |
|
); |
|
}); |
|
bodyData.examinationDataInfo = paramsData; |
|
this.http |
|
.put(`/api/Examinations/${this.paperData.id}`, bodyData) |
|
.subscribe((data) => { |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 5000; |
|
this.snackBar.open( |
|
"阅卷结果提交成功,页面将于一秒后关闭!", |
|
"确定", |
|
config |
|
); |
|
setTimeout(() => { |
|
window.close(); |
|
}, 1000); |
|
}); |
|
} |
|
}); |
|
} |
|
|
|
//作战部署 阅卷 |
|
readExam(item, e) { |
|
sessionStorage.setItem("companyName", this.selectPaper.companyInfo.name); |
|
sessionStorage.setItem("planId", item.paperPlanInfo.planComponentId); |
|
sessionStorage.setItem( |
|
"buildingTypeId", |
|
this.selectPaper.companyInfo.buildingTypes[0].id |
|
); |
|
sessionStorage.setItem("companyId", this.selectPaper.companyInfo.id); |
|
sessionStorage.setItem("remark", item.remark); |
|
let openType; |
|
item.paperPlanInfo.examPlanType == 0 ? (openType = 1) : (openType = 2); |
|
window.open( |
|
`/canvasToolRead?planName=${item.paperPlanInfo.title}&paperplanId=${item.paperPlanId}&openType=${openType}&paperId=${this.paperId}&examId=${this.route.snapshot.queryParams.examId}&planComponentId=${item.paperPlanInfo.planComponentId}&paperType=${e}` |
|
); |
|
} |
|
} |
|
|
|
export interface radioType { |
|
isRight: boolean; |
|
name: string; |
|
} |
|
@Component({ |
|
selector: "app-edit-rightWrong", |
|
templateUrl: "./editRightWrong.html", |
|
styleUrls: ["./review-files.component.scss"], |
|
}) |
|
export class editRightWrongComponent implements OnInit { |
|
constructor( |
|
public http: HttpClient, |
|
public dialog: MatDialog, |
|
public snackBar: MatSnackBar, |
|
public route: ActivatedRoute, |
|
@Inject(MAT_DIALOG_DATA) public data: any, |
|
public dialogRef: MatDialogRef<any> |
|
) {} |
|
|
|
ngOnInit(): void { |
|
this.isChecked = JSON.parse(JSON.stringify(this.data.isRight)); |
|
} |
|
|
|
isChecked: boolean; //是否正确 |
|
radioList: radioType[] = [ |
|
{ isRight: true, name: "正确" }, |
|
{ isRight: false, name: "错误" }, |
|
]; |
|
|
|
submit() { |
|
let data = { isChecked: this.isChecked }; |
|
this.dialogRef.close(data); |
|
} |
|
}
|
|
|