Commit ee00775c8a49f23626ba5a1fe938b1d4e691d091

Authored by 梁保满
1 parent 4295ede6

测试bug

src/api/apis/apis.js
@@ -1593,6 +1593,15 @@ export default { @@ -1593,6 +1593,15 @@ export default {
1593 return service({ 1593 return service({
1594 url: setUpUrls.exportExamMultiReport, 1594 url: setUpUrls.exportExamMultiReport,
1595 method: "POST", 1595 method: "POST",
  1596 + responseType: 'arraybuffer',
  1597 + data,
  1598 + });
  1599 + },
  1600 + // 查询即时测多班默认等级列表
  1601 + defaultLevels(data) {
  1602 + return service({
  1603 + url: setUpUrls.defaultLevels,
  1604 + method: "POST",
1596 data 1605 data
1597 }); 1606 });
1598 }, 1607 },
src/api/urls/apis.js
@@ -415,4 +415,6 @@ export default { @@ -415,4 +415,6 @@ export default {
415 examMultiClassReport: "/api_html/teaching/examMultiClassReport", 415 examMultiClassReport: "/api_html/teaching/examMultiClassReport",
416 //导出即时测多班报表 416 //导出即时测多班报表
417 exportExamMultiReport: "/api_html/teaching/exportExamMultiReport", 417 exportExamMultiReport: "/api_html/teaching/exportExamMultiReport",
  418 + //查询即时测多班默认等级列表
  419 + defaultLevels: "/api_html/teaching/defaultLevels",
418 } 420 }
src/views/standard/setUp/account.vue
@@ -213,7 +213,12 @@ @@ -213,7 +213,12 @@
213 </el-pagination> 213 </el-pagination>
214 </div> 214 </div>
215 </div> 215 </div>
216 - <el-dialog :close-on-click-modal="false" title="修改账号信息" :visible.sync="diaCount" width="400"> 216 + <el-dialog
  217 + :close-on-click-modal="false"
  218 + title="修改账号信息"
  219 + :visible.sync="diaCount"
  220 + width="400"
  221 + >
217 <el-form 222 <el-form
218 class="form-box" 223 class="form-box"
219 :model="formCount" 224 :model="formCount"
@@ -244,12 +249,17 @@ @@ -244,12 +249,17 @@
244 </el-col> 249 </el-col>
245 </el-form-item> 250 </el-form-item>
246 </el-form> 251 </el-form>
247 - <div class="dialog-footer" slot="footer"> 252 + <div class="dialog-footer" slot="footer" v-loading="loadingSave">
248 <el-button @click="saveCount">确 定</el-button> 253 <el-button @click="saveCount">确 定</el-button>
249 <el-button @click="diaCount = false">取 消</el-button> 254 <el-button @click="diaCount = false">取 消</el-button>
250 </div> 255 </div>
251 </el-dialog> 256 </el-dialog>
252 - <el-dialog :close-on-click-modal="false" title="添加账号" :visible.sync="diaAdd" width="400"> 257 + <el-dialog
  258 + :close-on-click-modal="false"
  259 + title="添加账号"
  260 + :visible.sync="diaAdd"
  261 + width="400"
  262 + >
253 <el-form 263 <el-form
254 class="form-box" 264 class="form-box"
255 :model="formAddCount" 265 :model="formAddCount"
@@ -344,12 +354,17 @@ @@ -344,12 +354,17 @@
344 </el-col> 354 </el-col>
345 </el-form-item> 355 </el-form-item>
346 </el-form> 356 </el-form>
347 - <div class="dialog-footer" slot="footer"> 357 + <div class="dialog-footer" slot="footer" v-loading="loadingSave">
348 <el-button @click="saveAddCount">确 定</el-button> 358 <el-button @click="saveAddCount">确 定</el-button>
349 <el-button @click="diaAdd = false">取 消</el-button> 359 <el-button @click="diaAdd = false">取 消</el-button>
350 </div> 360 </div>
351 </el-dialog> 361 </el-dialog>
352 - <el-dialog :close-on-click-modal="false" title="导入账号名单" :visible.sync="diaUp" width="600"> 362 + <el-dialog
  363 + :close-on-click-modal="false"
  364 + title="导入账号名单"
  365 + :visible.sync="diaUp"
  366 + width="600"
  367 + >
353 <up-load 368 <up-load
354 id="downTeacher" 369 id="downTeacher"
355 :url="url" 370 :url="url"
@@ -380,6 +395,7 @@ export default { @@ -380,6 +395,7 @@ export default {
380 url: "", //上传地址 395 url: "", //上传地址
381 loading: false, 396 loading: false,
382 syncLoading: false, 397 syncLoading: false,
  398 + loadingSave: false,
383 diaCount: false, 399 diaCount: false,
384 tenantRoleList: [], 400 tenantRoleList: [],
385 regionList: [], 401 regionList: [],
@@ -507,11 +523,13 @@ export default { @@ -507,11 +523,13 @@ export default {
507 saveAddCount() { 523 saveAddCount() {
508 this.$refs.formAddCount.validate(async (valid) => { 524 this.$refs.formAddCount.validate(async (valid) => {
509 if (valid) { 525 if (valid) {
  526 + this.loadingSave = true;
510 let params = { ...this.formAddCount }; 527 let params = { ...this.formAddCount };
511 params.password = encryptLoginPassword(params.password); 528 params.password = encryptLoginPassword(params.password);
512 const { data, status, info } = await this.$request.addUser({ 529 const { data, status, info } = await this.$request.addUser({
513 ...params, 530 ...params,
514 }); 531 });
  532 + this.loadingSave = false;
515 if (status === 0) { 533 if (status === 0) {
516 this.$message.success(info); 534 this.$message.success(info);
517 this._QueryData(4); 535 this._QueryData(4);
@@ -559,6 +577,7 @@ export default { @@ -559,6 +577,7 @@ export default {
559 saveCount() { 577 saveCount() {
560 this.$refs.formCount.validate(async (valid) => { 578 this.$refs.formCount.validate(async (valid) => {
561 if (valid) { 579 if (valid) {
  580 + this.loadingSave = true;
562 const { data, status, info } = 581 const { data, status, info } =
563 this.role != "ROLE_JITUAN" 582 this.role != "ROLE_JITUAN"
564 ? await this.$request.updateUser({ 583 ? await this.$request.updateUser({
@@ -569,6 +588,7 @@ export default { @@ -569,6 +588,7 @@ export default {
569 type: 3, 588 type: 3,
570 ...this.formCount, 589 ...this.formCount,
571 }); 590 });
  591 + this.loadingSave = false;
572 if (status === 0) { 592 if (status === 0) {
573 this.$message.success(info); 593 this.$message.success(info);
574 this.diaCount = false; 594 this.diaCount = false;
src/views/standard/setUp/conglomerate.vue
@@ -109,7 +109,7 @@ @@ -109,7 +109,7 @@
109 </el-col> 109 </el-col>
110 </el-form-item> 110 </el-form-item>
111 </el-form> 111 </el-form>
112 - <div class="dialog-footer" slot="footer"> 112 + <div class="dialog-footer" slot="footer" v-loading="loadingSave">
113 <el-button type="primary" round @click="saveFormCL">确 定</el-button> 113 <el-button type="primary" round @click="saveFormCL">确 定</el-button>
114 <el-button round @click="diaCL = false">取 消</el-button> 114 <el-button round @click="diaCL = false">取 消</el-button>
115 </div> 115 </div>
@@ -159,7 +159,7 @@ @@ -159,7 +159,7 @@
159 </el-col> 159 </el-col>
160 </el-form-item> 160 </el-form-item>
161 </el-form> 161 </el-form>
162 - <div class="dialog-footer" slot="footer"> 162 + <div class="dialog-footer" slot="footer" v-loading="loadingSave">
163 <el-button type="primary" round @click="saveFormAdmin">确 定</el-button> 163 <el-button type="primary" round @click="saveFormAdmin">确 定</el-button>
164 <el-button round @click="diaAdmin = false">取 消</el-button> 164 <el-button round @click="diaAdmin = false">取 消</el-button>
165 </div> 165 </div>
@@ -212,7 +212,7 @@ @@ -212,7 +212,7 @@
212 </el-checkbox-group> 212 </el-checkbox-group>
213 </el-form-item> 213 </el-form-item>
214 </el-form> 214 </el-form>
215 - <div class="dialog-footer" slot="footer"> 215 + <div class="dialog-footer" slot="footer" v-loading="loadingSave">
216 <el-button type="primary" round @click="saveFormSchool" 216 <el-button type="primary" round @click="saveFormSchool"
217 >确 定</el-button 217 >确 定</el-button
218 > 218 >
@@ -242,7 +242,7 @@ @@ -242,7 +242,7 @@
242 </el-col> 242 </el-col>
243 </el-form-item> 243 </el-form-item>
244 </el-form> 244 </el-form>
245 - <div class="dialog-footer" slot="footer"> 245 + <div class="dialog-footer" slot="footer" v-loading="loadingSave">
246 <el-button type="primary" round @click="saveSetFormSchool" 246 <el-button type="primary" round @click="saveSetFormSchool"
247 >确 定</el-button 247 >确 定</el-button
248 > 248 >
@@ -319,6 +319,8 @@ export default { @@ -319,6 +319,8 @@ export default {
319 schoolName: "", 319 schoolName: "",
320 }, 320 },
321 showDelSclBtn: false, 321 showDelSclBtn: false,
  322 +
  323 + loadingSave: false,
322 }; 324 };
323 }, 325 },
324 created() { 326 created() {
@@ -397,10 +399,12 @@ export default { @@ -397,10 +399,12 @@ export default {
397 this.$refs["formCL"].validate(async (valid) => { 399 this.$refs["formCL"].validate(async (valid) => {
398 // 验证通过:保存 400 // 验证通过:保存
399 if (valid) { 401 if (valid) {
  402 + this.loadingSave = true;
400 const { data, status, info } = await this.$request.saveRegion({ 403 const { data, status, info } = await this.$request.saveRegion({
401 regionId: this.formCL.regionId, 404 regionId: this.formCL.regionId,
402 regionName: this.formCL.regionName, 405 regionName: this.formCL.regionName,
403 }); 406 });
  407 + this.loadingSave = false;
404 if (status === 0) { 408 if (status === 0) {
405 this._QueryData(); 409 this._QueryData();
406 this.$message.success(info); 410 this.$message.success(info);
@@ -419,12 +423,14 @@ export default { @@ -419,12 +423,14 @@ export default {
419 this.$refs["formAdmin"].validate(async (valid) => { 423 this.$refs["formAdmin"].validate(async (valid) => {
420 // 验证通过:保存 424 // 验证通过:保存
421 if (valid) { 425 if (valid) {
  426 + this.loadingSave = true;
422 let params = { ...this.formAdmin }; 427 let params = { ...this.formAdmin };
423 params.password = encryptLoginPassword(this.formAdmin.password); 428 params.password = encryptLoginPassword(this.formAdmin.password);
424 delete params.schoolName; 429 delete params.schoolName;
425 const { data, status, info } = await this.$request.addSchoolManager({ 430 const { data, status, info } = await this.$request.addSchoolManager({
426 ...params, 431 ...params,
427 }); 432 });
  433 + this.loadingSave = false;
428 if (status === 0) { 434 if (status === 0) {
429 this.$message.success(info); 435 this.$message.success(info);
430 this.diaAdmin = false; 436 this.diaAdmin = false;
@@ -442,11 +448,13 @@ export default { @@ -442,11 +448,13 @@ export default {
442 this.$refs["formSchool"].validate(async (valid) => { 448 this.$refs["formSchool"].validate(async (valid) => {
443 // 验证通过:保存 449 // 验证通过:保存
444 if (valid) { 450 if (valid) {
  451 + this.loadingSave = true;
445 let query = { ...this.formSchool }; 452 let query = { ...this.formSchool };
446 query.sections = query.sections.join(","); 453 query.sections = query.sections.join(",");
447 const { data, status, info } = await this.$request.saveSchool({ 454 const { data, status, info } = await this.$request.saveSchool({
448 ...query, 455 ...query,
449 }); 456 });
  457 + this.loadingSave = false;
450 if (status === 0) { 458 if (status === 0) {
451 this.$message.success(info); 459 this.$message.success(info);
452 this.diaSchool = false; 460 this.diaSchool = false;
@@ -466,9 +474,11 @@ export default { @@ -466,9 +474,11 @@ export default {
466 this.$refs["formSchool2"].validate(async (valid) => { 474 this.$refs["formSchool2"].validate(async (valid) => {
467 // 验证通过:保存 475 // 验证通过:保存
468 if (valid) { 476 if (valid) {
  477 + this.loadingSave = true;
469 const { data, status, info } = await this.$request.saveSchool({ 478 const { data, status, info } = await this.$request.saveSchool({
470 ...this.setFormSchool, 479 ...this.setFormSchool,
471 }); 480 });
  481 + this.loadingSave = false;
472 if (status === 0) { 482 if (status === 0) {
473 this.$message.success(info); 483 this.$message.success(info);
474 this.diaSchool2 = false; 484 this.diaSchool2 = false;
src/views/standard/test/analysis.vue
@@ -482,8 +482,8 @@ @@ -482,8 +482,8 @@
482 <el-form> 482 <el-form>
483 <el-form-item label="低分设置模式:"> 483 <el-form-item label="低分设置模式:">
484 <el-select v-model="lowRange.type" @change="changeScore"> 484 <el-select v-model="lowRange.type" @change="changeScore">
485 - <el-option label="按已考人数比例" :value="0"></el-option>  
486 - <el-option label="按分数设置" :value="1"></el-option> 485 + <el-option label="按分数设置" :value="0"></el-option>
  486 + <el-option label="按已考人数比例" :value="1"></el-option>
487 </el-select> 487 </el-select>
488 </el-form-item> 488 </el-form-item>
489 <el-form-item label="低分区间:"> 489 <el-form-item label="低分区间:">
@@ -494,8 +494,9 @@ @@ -494,8 +494,9 @@
494 :min="0" 494 :min="0"
495 :max="100" 495 :max="100"
496 @input="lowRange.range[1] > 100 ? (lowRange.range[1] = 100) : ''" 496 @input="lowRange.range[1] > 100 ? (lowRange.range[1] = 100) : ''"
  497 + @keydown.native="keydownRange($event)"
497 ></el-input 498 ></el-input
498 - >{{ lowRange.type == 0 ? "%" : "分" }}(含) 499 + >{{ lowRange.type == 1 ? "%" : "分" }}(含)
499 <el-input 500 <el-input
500 class="score-ipt" 501 class="score-ipt"
501 type="number" 502 type="number"
@@ -503,12 +504,18 @@ @@ -503,12 +504,18 @@
503 :min="0" 504 :min="0"
504 :max="100" 505 :max="100"
505 @input="lowRange.range[1] > 100 ? (lowRange.range[1] = 100) : ''" 506 @input="lowRange.range[1] > 100 ? (lowRange.range[1] = 100) : ''"
  507 + @keydown.native="keydownRange($event)"
506 ></el-input 508 ></el-input
507 - >{{ lowRange.type == 0 ? "%" : "分" }}(含) 509 + >{{ lowRange.type == 1 ? "%" : "分" }}(含)
508 </el-form-item> 510 </el-form-item>
509 </el-form> 511 </el-form>
510 512
511 - <div class="dialog-footer" slot="footer" align="center" v-loading="loadingTange"> 513 + <div
  514 + class="dialog-footer"
  515 + slot="footer"
  516 + align="center"
  517 + v-loading="loadingTange"
  518 + >
512 <el-button type="danger" @click="_SavelowRange">保存</el-button> 519 <el-button type="danger" @click="_SavelowRange">保存</el-button>
513 <el-button @click="diaMinScore = false">取 消</el-button> 520 <el-button @click="diaMinScore = false">取 消</el-button>
514 </div> 521 </div>
@@ -565,12 +572,16 @@ export default { @@ -565,12 +572,16 @@ export default {
565 size: 20, 572 size: 20,
566 total: 0, 573 total: 0,
567 // 设置低分值 574 // 设置低分值
568 - loadingTange:false, 575 + loadingTange: false,
569 diaMinScore: false, 576 diaMinScore: false,
570 lowRange: { 577 lowRange: {
571 - type: 1, 578 + type: 0,
572 range: [60, 0], 579 range: [60, 0],
573 }, 580 },
  581 + defaultLowRange: {
  582 + type: 0,
  583 + range: [],
  584 + },
574 }; 585 };
575 }, 586 },
576 created() { 587 created() {
@@ -637,26 +648,34 @@ export default { @@ -637,26 +648,34 @@ export default {
637 }, 648 },
638 // 切换低分设置类型设置默认分值 649 // 切换低分设置类型设置默认分值
639 changeScore() { 650 changeScore() {
640 - this.lowRange.range = [60, 0]; 651 + this.lowRange.range = [...this.defaultLowRange.range];
  652 + },
  653 + // 禁止输入负数
  654 + keydownRange(event) {
  655 + if (event.key == "-" || event.key == "e") {
  656 + event.returnValue = "";
  657 + }
641 }, 658 },
642 // 关闭低分设置 659 // 关闭低分设置
643 closeDiaMinScore() { 660 closeDiaMinScore() {
644 - this.lowRange.type = 1;  
645 - this.lowRange.range = [60, 0]; 661 + this.lowRange.type = this.defaultLowRange.type;
  662 + this.lowRange.range = [...this.defaultLowRange.range];
646 }, 663 },
647 // 保存低分设置 664 // 保存低分设置
648 async _SavelowRange() { 665 async _SavelowRange() {
649 this.loadingTange = true; 666 this.loadingTange = true;
650 - let data = await this.$request.setLowRange({ 667 + let { data, status, info } = await this.$request.setLowRange({
651 classId: this.classId, 668 classId: this.classId,
652 subjectName: this.subjectName, 669 subjectName: this.subjectName,
653 ...this.lowRange, 670 ...this.lowRange,
654 }); 671 });
655 this.loadingTange = false; 672 this.loadingTange = false;
656 - if (data && !data.code) {  
657 - this.$message.success(data.info); 673 + if (status === 0) {
  674 + this.$message.success(info);
658 this.diaMinScore = false; 675 this.diaMinScore = false;
659 - this.$message.error(data.info); 676 + this.examDetail();
  677 + } else {
  678 + this.$message.error(info);
660 } 679 }
661 }, 680 },
662 async _QueryData() { 681 async _QueryData() {
@@ -676,10 +695,12 @@ export default { @@ -676,10 +695,12 @@ export default {
676 this.paperModifyLog = { ...data?.paperModifyLog }; 695 this.paperModifyLog = { ...data?.paperModifyLog };
677 } 696 }
678 this.examReport = { ...data?.examReport }; 697 this.examReport = { ...data?.examReport };
679 - this.lowRange = data.lowRange || { 698 + this.defaultLowRange = data.lowRange || {
680 type: 1, 699 type: 1,
681 range: [60, 0], 700 range: [60, 0],
682 }; 701 };
  702 + this.lowRange.type = this.defaultLowRange.type;
  703 + this.lowRange.range = [...this.defaultLowRange.range];
683 } else { 704 } else {
684 this.$message.error(info); 705 this.$message.error(info);
685 } 706 }
src/views/standard/test/contrast.vue
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
2 <div ref="main" class="page-container"> 2 <div ref="main" class="page-container">
3 <back-box> 3 <back-box>
4 <template slot="title"> 4 <template slot="title">
5 - <span>多班分析_{{ subjectNames }}_{{ title }}_成绩对比分析</span> 5 + <span>多班_{{ subjectNames }}_{{ title }}_测练成绩对比分析</span>
6 </template> 6 </template>
7 </back-box> 7 </back-box>
8 <div class="page-content"> 8 <div class="page-content">
@@ -36,6 +36,7 @@ @@ -36,6 +36,7 @@
36 <el-table-column 36 <el-table-column
37 type="index" 37 type="index"
38 label="序号" 38 label="序号"
  39 + fixed
39 align="center" 40 align="center"
40 width="60" 41 width="60"
41 ></el-table-column> 42 ></el-table-column>
@@ -44,36 +45,29 @@ @@ -44,36 +45,29 @@
44 label="班级" 45 label="班级"
45 align="center" 46 align="center"
46 fixed 47 fixed
47 - width="100"  
48 - ><</el-table-column  
49 - > 48 + ></el-table-column>
50 <el-table-column 49 <el-table-column
51 prop="count" 50 prop="count"
52 - width="100"  
53 label="测验人数/班级人数" 51 label="测验人数/班级人数"
54 align="center" 52 align="center"
55 ></el-table-column> 53 ></el-table-column>
56 <el-table-column 54 <el-table-column
57 prop="percent" 55 prop="percent"
58 - width="110"  
59 label="参与度" 56 label="参与度"
60 align="center" 57 align="center"
61 ></el-table-column> 58 ></el-table-column>
62 <el-table-column 59 <el-table-column
63 - width="110"  
64 prop="avg" 60 prop="avg"
65 label="班平均分" 61 label="班平均分"
66 align="center" 62 align="center"
67 ></el-table-column> 63 ></el-table-column>
68 <el-table-column 64 <el-table-column
69 - width="110"  
70 prop="max" 65 prop="max"
71 label="班最高分" 66 label="班最高分"
72 sortable 67 sortable
73 align="center" 68 align="center"
74 ></el-table-column> 69 ></el-table-column>
75 <el-table-column 70 <el-table-column
76 - width="110"  
77 prop="min" 71 prop="min"
78 label="班最低分" 72 label="班最低分"
79 sortable 73 sortable
@@ -81,14 +75,13 @@ @@ -81,14 +75,13 @@
81 ></el-table-column> 75 ></el-table-column>
82 76
83 <el-table-column 77 <el-table-column
84 - v-for="(item, index) in tableData[0].levels"  
85 - width="120"  
86 - sortable  
87 - :label="item.name" 78 + v-for="(item, index) in defaultLevels.levels"
  79 + :label="item[0] + '数(率)'"
88 align="center" 80 align="center"
89 - ><template slot-scope="scoped">{{  
90 - `${scoped.row.levels[index].people}(${scoped.row.levels[index].percent})`  
91 - }}</template></el-table-column 81 + ><template slot-scope="scoped">
  82 + <p class="p1">{{ scoped.row.levels[index].people }}</p>
  83 + <p class="p1">({{ scoped.row.levels[index].percent }})</p>
  84 + </template></el-table-column
92 > 85 >
93 </el-table> 86 </el-table>
94 <el-table 87 <el-table
@@ -99,7 +92,7 @@ @@ -99,7 +92,7 @@
99 style="width: 100%" 92 style="width: 100%"
100 > 93 >
101 <el-table-column 94 <el-table-column
102 - prop="studentCode" 95 + prop="rank"
103 label="排名" 96 label="排名"
104 align="center" 97 align="center"
105 ></el-table-column> 98 ></el-table-column>
@@ -131,6 +124,7 @@ @@ -131,6 +124,7 @@
131 <div class="down"> 124 <div class="down">
132 <div> 125 <div>
133 <el-button 126 <el-button
  127 + v-loading="exportLoading"
134 @click="exportData" 128 @click="exportData"
135 type="primary" 129 type="primary"
136 plain 130 plain
@@ -171,13 +165,9 @@ @@ -171,13 +165,9 @@
171 </el-select> 165 </el-select>
172 </el-form-item> 166 </el-form-item>
173 <el-form-item label="等级设置模式:" class="use-form-item"> 167 <el-form-item label="等级设置模式:" class="use-form-item">
174 - <el-select  
175 - size="small"  
176 - v-model="fromData.levelType"  
177 - @change="changeLevelType"  
178 - >  
179 - <el-option label="按已考人数比例" :value="0"></el-option>  
180 - <el-option label="按分数比例" :value="1"></el-option> 168 + <el-select size="small" v-model="fromData.levelType">
  169 + <el-option label="按分数比例" :value="0"></el-option>
  170 + <el-option label="按已考人数比例" :value="1"></el-option>
181 </el-select> 171 </el-select>
182 </el-form-item> 172 </el-form-item>
183 </el-form-item> 173 </el-form-item>
@@ -200,6 +190,7 @@ @@ -200,6 +190,7 @@
200 class="score-ipt" 190 class="score-ipt"
201 v-model="item[0]" 191 v-model="item[0]"
202 :maxlength="12" 192 :maxlength="12"
  193 + @keydown.native="keydownRange($event)"
203 ></el-input> 194 ></el-input>
204 </p> 195 </p>
205 <p class="item2"> 196 <p class="item2">
@@ -209,6 +200,7 @@ @@ -209,6 +200,7 @@
209 v-model="item[1]" 200 v-model="item[1]"
210 :min="item[2]" 201 :min="item[2]"
211 :max="index == 0 ? 150 : fromData.levels[index - 1][2]" 202 :max="index == 0 ? 150 : fromData.levels[index - 1][2]"
  203 + @keydown.native="keydownRange($event)"
212 ></el-input> 204 ></el-input>
213 {{ fromData.levelType == 1 ? "%" : "分" }} - 205 {{ fromData.levelType == 1 ? "%" : "分" }} -
214 </p> 206 </p>
@@ -219,6 +211,7 @@ @@ -219,6 +211,7 @@
219 v-model="item[2]" 211 v-model="item[2]"
220 :min="0" 212 :min="0"
221 :max="item[1]" 213 :max="item[1]"
  214 + @keydown.native="keydownRange($event)"
222 ></el-input> 215 ></el-input>
223 {{ fromData.levelType == 1 ? "%" : "分" }} 216 {{ fromData.levelType == 1 ? "%" : "分" }}
224 </p> 217 </p>
@@ -266,6 +259,7 @@ export default { @@ -266,6 +259,7 @@ export default {
266 tabList: ["班级对比情况", "学生成绩排名"], 259 tabList: ["班级对比情况", "学生成绩排名"],
267 type: 0, 260 type: 0,
268 loading: false, 261 loading: false,
  262 + exportLoading: false,
269 diaLogBox: false, 263 diaLogBox: false,
270 fromData: { 264 fromData: {
271 type: 1, 265 type: 1,
@@ -277,7 +271,10 @@ export default { @@ -277,7 +271,10 @@ export default {
277 ["不合格", 59.9, 0], 271 ["不合格", 59.9, 0],
278 ], 272 ],
279 }, 273 },
280 - 274 + defaultLevels: {
  275 + levelType: 0,
  276 + levels: [],
  277 + },
281 tableMaxHeight: 600, 278 tableMaxHeight: 600,
282 tableData: [], 279 tableData: [],
283 tableData2: [], 280 tableData2: [],
@@ -285,13 +282,24 @@ export default { @@ -285,13 +282,24 @@ export default {
285 }, 282 },
286 created() { 283 created() {
287 this.ids = this.$route.query.ids; 284 this.ids = this.$route.query.ids;
288 - this.title = this.$route.query.title || "";  
289 - this.subjectNames = this.$route.query.subjectNames; 285 + this._QueryDefaultLevels();
290 this._QueryData(); 286 this._QueryData();
291 }, 287 },
  288 + destroyed() {
  289 + sessionStorage.setItem("levelFromData", "");
  290 + },
292 methods: { 291 methods: {
  292 + // 禁止输入负数
  293 + keydownRange(event) {
  294 + if (event.key == "-" || event.key == "e") {
  295 + event.returnValue = "";
  296 + }
  297 + },
293 print() { 298 print() {
294 - tablePrint("print-content", this.title + "_成绩对比分析"); 299 + tablePrint(
  300 + "print-content",
  301 + `多班_${this.subjectNames}_${this.title}_测练成绩对比分析`
  302 + );
295 }, 303 },
296 setType(type) { 304 setType(type) {
297 console.log(this.$refs.main.offsetHeight - 50); 305 console.log(this.$refs.main.offsetHeight - 50);
@@ -299,23 +307,21 @@ export default { @@ -299,23 +307,21 @@ export default {
299 this.type = type; 307 this.type = type;
300 }, 308 },
301 closeDia() { 309 closeDia() {
302 - this.fromData.type = 1;  
303 - this.fromData.levelType = 0;  
304 - this.fromData.levels = [  
305 - ["优秀", 100, 90],  
306 - ["良好", 89.9, 70],  
307 - ["合格", 69.9, 60],  
308 - ["不合格", 59.9, 0],  
309 - ]; 310 + let levelFromData = sessionStorage.getItem("levelFromData");
  311 + if (levelFromData) {
  312 + levelFromData = JSON.parse(levelFromData);
  313 + this.fromData.type = levelFromData.type;
  314 + this.fromData.levelType = levelFromData.levelType;
  315 + this.fromData.levels = [...levelFromData.levels];
  316 + } else {
  317 + this.fromData.type = 1;
  318 + this.fromData.levelType = this.defaultLevels.levelType;
  319 + this.fromData.levels = [...this.defaultLevels.levels];
  320 + }
310 }, 321 },
311 changeType(val) { 322 changeType(val) {
312 if (val == 1) { 323 if (val == 1) {
313 - this.fromData.levels = [  
314 - ["优秀", 100, 90],  
315 - ["良好", 89.9, 70],  
316 - ["合格", 69.9, 60],  
317 - ["不合格", 59.9, 0],  
318 - ]; 324 + this.fromData.levels = [...this.defaultLevels.levels];
319 } else if (val == 2) { 325 } else if (val == 2) {
320 this.fromData.levels = [ 326 this.fromData.levels = [
321 ["A", 100, 90], 327 ["A", 100, 90],
@@ -332,7 +338,6 @@ export default { @@ -332,7 +338,6 @@ export default {
332 ]; 338 ];
333 } 339 }
334 }, 340 },
335 - changeLevelType() {},  
336 savefrom() { 341 savefrom() {
337 this.tableData = []; 342 this.tableData = [];
338 this.tableData2 = []; 343 this.tableData2 = [];
@@ -343,12 +348,34 @@ export default { @@ -343,12 +348,34 @@ export default {
343 return; 348 return;
344 } 349 }
345 } 350 }
  351 + this.defaultLevels.levelType = this.fromData.levelType;
  352 + this.defaultLevels.levels = [...this.fromData.levels];
  353 + sessionStorage.setItem("levelFromData", JSON.stringify(this.fromData));
  354 + this.diaLogBox = false;
346 this._QueryData({ 355 this._QueryData({
347 levelType: this.fromData.levelType, 356 levelType: this.fromData.levelType,
348 levels: this.fromData.levels, 357 levels: this.fromData.levels,
349 }); 358 });
350 }, 359 },
351 360
  361 + async _QueryDefaultLevels() {
  362 + const { data, info, status } = await this.$request.defaultLevels();
  363 + if (status === 0) {
  364 + this.defaultLevels = { ...data } || {
  365 + levelType: 0,
  366 + levels: [
  367 + ["优秀", 100, 90],
  368 + ["良好", 89.9, 70],
  369 + ["合格", 69.9, 60],
  370 + ["不合格", 59.9, 0],
  371 + ],
  372 + };
  373 + this.fromData.levelType = this.defaultLevels.levelType;
  374 + this.fromData.levels = [...this.defaultLevels.levels];
  375 + } else {
  376 + this.$message.error(info);
  377 + }
  378 + },
352 async _QueryData(params) { 379 async _QueryData(params) {
353 let query = {}; 380 let query = {};
354 if (params) { 381 if (params) {
@@ -358,8 +385,10 @@ export default { @@ -358,8 +385,10 @@ export default {
358 examIds: this.ids, 385 examIds: this.ids,
359 ...query, 386 ...query,
360 }); 387 });
361 - if (status == 200) {  
362 - this.tableData = data.classs || []; 388 + if (status === 0) {
  389 + this.title = data.title;
  390 + this.subjectNames = data.subjectName;
  391 + this.tableData = data.classes || [];
363 this.tableData2 = data.students || []; 392 this.tableData2 = data.students || [];
364 } else { 393 } else {
365 this.$message.error(info); 394 this.$message.error(info);
@@ -371,14 +400,19 @@ export default { @@ -371,14 +400,19 @@ export default {
371 if (this.exportLoading == true) return; 400 if (this.exportLoading == true) return;
372 this.exportLoading = true; 401 this.exportLoading = true;
373 const data = await this.$request.exportExamMultiReport({ 402 const data = await this.$request.exportExamMultiReport({
374 - examId: this.id, 403 + examIds: this.ids,
  404 + levels: this.fromData.levels,
  405 + levelType: this.fromData.levelType,
375 }); 406 });
376 this.exportLoading = false; 407 this.exportLoading = false;
377 if (data) { 408 if (data) {
378 let blob = new Blob([data], { 409 let blob = new Blob([data], {
379 type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", 410 type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
380 }); 411 });
381 - downloadFile("即时测-单卷测练报表.xlsx", blob); 412 + downloadFile(
  413 + `多班_${this.subjectNames}_${this.title}_测练成绩对比分析`,
  414 + blob
  415 + );
382 } else { 416 } else {
383 this.$message.error("下载失败"); 417 this.$message.error("下载失败");
384 } 418 }
@@ -487,4 +521,7 @@ export default { @@ -487,4 +521,7 @@ export default {
487 } 521 }
488 } 522 }
489 } 523 }
  524 +.p1{
  525 + line-height:18px;
  526 +}
490 </style> 527 </style>
491 \ No newline at end of file 528 \ No newline at end of file
src/views/standard/test/index.vue
@@ -33,6 +33,9 @@ @@ -33,6 +33,9 @@
33 collapse-tags 33 collapse-tags
34 > 34 >
35 <el-option 35 <el-option
  36 + :disabled="
  37 + query.classIds.length == 1 && query.classIds[0] == item.value
  38 + "
36 v-for="item in classList" 39 v-for="item in classList"
37 :key="item.value" 40 :key="item.value"
38 :label="item.label" 41 :label="item.label"
@@ -135,7 +138,7 @@ @@ -135,7 +138,7 @@
135 align="center" 138 align="center"
136 ></el-table-column> 139 ></el-table-column>
137 <el-table-column 140 <el-table-column
138 - prop="clazz" 141 + prop="className"
139 label="考试班级" 142 label="考试班级"
140 align="center" 143 align="center"
141 width="100" 144 width="100"
@@ -427,7 +430,11 @@ @@ -427,7 +430,11 @@
427 :label="index == 0 ? '总分' : '成绩'" 430 :label="index == 0 ? '总分' : '成绩'"
428 align="center" 431 align="center"
429 :class-name="index % 2 == 0 ? 'bg' : ''" 432 :class-name="index % 2 == 0 ? 'bg' : ''"
430 - ></el-table-column> 433 + >
  434 + <template slot-scope="scoped">
  435 + {{ Number(scoped.row["score" + index]) }}
  436 + </template></el-table-column
  437 + >
431 <el-table-column 438 <el-table-column
432 :prop="'classRank' + index" 439 :prop="'classRank' + index"
433 label="班名" 440 label="班名"
@@ -520,7 +527,7 @@ @@ -520,7 +527,7 @@
520 <div v-show="query.classIds.length > 1" class="table-box"> 527 <div v-show="query.classIds.length > 1" class="table-box">
521 <el-empty 528 <el-empty
522 :imag-size="48" 529 :imag-size="48"
523 - v-if="!classTableLen && loading" 530 + v-if="!classTableLen && !loading"
524 description="暂无数据" 531 description="暂无数据"
525 ></el-empty> 532 ></el-empty>
526 <div class="head-box" v-if="classTableLen"> 533 <div class="head-box" v-if="classTableLen">
@@ -547,9 +554,20 @@ @@ -547,9 +554,20 @@
547 </div> 554 </div>
548 <ul class="tab-ul"> 555 <ul class="tab-ul">
549 <template v-for="(item, index) in classTable"> 556 <template v-for="(item, index) in classTable">
550 - <li class="tab-li" v-if="item.length">  
551 - <p class="tab-tit">{{ item[0].className }}</p>  
552 - <el-table :data="item" border style="width: 100%"> 557 + <li class="tab-li">
  558 + <p class="tab-tit">
  559 + {{
  560 + `${item[0].className} ${
  561 + item.length ? "(" + item.length + "份已考试卷)" : ""
  562 + }`
  563 + }}
  564 + </p>
  565 + <el-table
  566 + :data="item"
  567 + border
  568 + style="width: 100%"
  569 + v-if="item.length"
  570 + >
553 <el-table-column label="选择" align="center" width="60"> 571 <el-table-column label="选择" align="center" width="60">
554 <template slot-scope="scope"> 572 <template slot-scope="scope">
555 <el-checkbox 573 <el-checkbox
@@ -563,32 +581,29 @@ @@ -563,32 +581,29 @@
563 </el-table-column> 581 </el-table-column>
564 <el-table-column 582 <el-table-column
565 prop="title" 583 prop="title"
566 - label="试卷名称"  
567 - align="center"  
568 - ></el-table-column>  
569 - <el-table-column  
570 - prop="classPersonNum"  
571 - label="测验人数" 584 + label="报表名称"
572 align="center" 585 align="center"
573 - width="80"  
574 ></el-table-column> 586 ></el-table-column>
  587 + <el-table-column label="测验人数" align="center" width="80">
  588 + <template slot-scope="scope">{{
  589 + `${scope.row.answeredNum}/${scope.row.classPersonNum}`
  590 + }}</template>
  591 + </el-table-column>
575 <el-table-column 592 <el-table-column
576 prop="examStartTime" 593 prop="examStartTime"
577 label="测验开始时间" 594 label="测验开始时间"
578 width="120" 595 width="120"
579 align="center" 596 align="center"
580 ></el-table-column> 597 ></el-table-column>
581 - <el-table-column  
582 - prop="duration"  
583 - label="测验时长"  
584 - align="center"  
585 - width="80"  
586 - > 598 + <el-table-column label="测验时长" align="center" width="80">
587 <template slot-scope="scope">{{ 599 <template slot-scope="scope">{{
588 - (scope.row.duration / 60).toFixed(2) 600 + `${Math.floor(scope.row.duration / 60)}分${
  601 + scope.row.duration % 60
  602 + }`
589 }}</template> 603 }}</template>
590 </el-table-column> 604 </el-table-column>
591 </el-table> 605 </el-table>
  606 + <el-empty v-else :imag-size="32" description="暂无数据"></el-empty>
592 </li> 607 </li>
593 </template> 608 </template>
594 </ul> 609 </ul>
@@ -665,13 +680,13 @@ export default { @@ -665,13 +680,13 @@ export default {
665 size: 20, 680 size: 20,
666 total: 0, 681 total: 0,
667 multipleSelection: [], //选中的试卷ID 682 multipleSelection: [], //选中的试卷ID
668 - classTable: [[], []], //多班级数据 683 + classTable: [], //多班级数据
669 }; 684 };
670 }, 685 },
671 computed: { 686 computed: {
672 classTableLen: function () { 687 classTableLen: function () {
673 let len = 0; 688 let len = 0;
674 - this.classTable.map((item) => { 689 + this.classTable?.map((item) => {
675 item.length ? (len += 1) : ""; 690 item.length ? (len += 1) : "";
676 }); 691 });
677 return len; 692 return len;
@@ -771,19 +786,11 @@ export default { @@ -771,19 +786,11 @@ export default {
771 this.$message.warning("请选择同一份试卷多个班级进行对比!"); 786 this.$message.warning("请选择同一份试卷多个班级进行对比!");
772 return; 787 return;
773 } 788 }
774 - let title = "";  
775 - for (let i = 0; i < this.tableData.length; i++) {  
776 - if (this.tableData[i].id == this.multipleSelection[0]) {  
777 - title = this.tableData[i].title;  
778 - break;  
779 - }  
780 - }  
781 this.$router.push({ 789 this.$router.push({
782 path: "/testContrast", 790 path: "/testContrast",
783 query: { 791 query: {
784 ids: this.multipleSelection, 792 ids: this.multipleSelection,
785 subjectNames: this.query.subjectNames, 793 subjectNames: this.query.subjectNames,
786 - title: title,  
787 }, 794 },
788 }); 795 });
789 }, 796 },
@@ -835,7 +842,7 @@ export default { @@ -835,7 +842,7 @@ export default {
835 }); 842 });
836 if (status == 200) { 843 if (status == 200) {
837 this.$message.success("删除成功!"); 844 this.$message.success("删除成功!");
838 - this.tableData = this.tableData.splice(index, 1); 845 + this.tableData.splice(index, 1);
839 } else { 846 } else {
840 this.$message.error(info); 847 this.$message.error(info);
841 } 848 }
@@ -937,6 +944,12 @@ export default { @@ -937,6 +944,12 @@ export default {
937 }, 944 },
938 //切换班级 945 //切换班级
939 async changeclass() { 946 async changeclass() {
  947 + if (this.query.classIds.length == 0) {
  948 + this.$message.warning("请至少选择一个班级!");
  949 + }
  950 + if (this.query.classIds != 1) {
  951 + this.tabIndex = 1;
  952 + }
940 await this._QuerySubjectList(); 953 await this._QuerySubjectList();
941 this.page = 1; 954 this.page = 1;
942 this._QueryData(); 955 this._QueryData();
@@ -1020,6 +1033,7 @@ export default { @@ -1020,6 +1033,7 @@ export default {
1020 }, 1033 },
1021 //单卷测练 1034 //单卷测练
1022 async examReportList(msg) { 1035 async examReportList(msg) {
  1036 + this.multipleSelection = [];
1023 this.loading = true; 1037 this.loading = true;
1024 let query = {}; 1038 let query = {};
1025 for (let key in this.query) { 1039 for (let key in this.query) {
@@ -1059,17 +1073,18 @@ export default { @@ -1059,17 +1073,18 @@ export default {
1059 }); 1073 });
1060 this.loading = false; 1074 this.loading = false;
1061 if (status === 0) { 1075 if (status === 0) {
1062 - if (query.classId) {  
1063 - //单班级  
1064 - this.tableData = (data?.list && [...data?.list]) || [];  
1065 - this.total = data?.count || 0;  
1066 - } else { 1076 + this.tableData = (data?.list && [...data?.list]) || [];
  1077 + this.total = data?.count || 0;
  1078 + if (!query.classId) {
1067 //多班级 1079 //多班级
1068 this.classTable = []; 1080 this.classTable = [];
  1081 + let classIds = []
1069 let tableData = []; 1082 let tableData = [];
1070 - this.tableData = (data?.list && [...data?.list]) || [];  
1071 - data?.list.map((item) => {  
1072 - let idx = query.classIds.indexOf(item); 1083 + data?.list?.map((item) => {
  1084 + if(!classIds.includes(item.classId)){
  1085 + classIds.push(item.classId)
  1086 + }
  1087 + let idx = classIds.indexOf(item.classId);
1073 if (tableData[idx]) { 1088 if (tableData[idx]) {
1074 tableData[idx].push(item); 1089 tableData[idx].push(item);
1075 } else { 1090 } else {
@@ -1205,6 +1220,8 @@ export default { @@ -1205,6 +1220,8 @@ export default {
1205 return; 1220 return;
1206 } 1221 }
1207 } 1222 }
  1223 + query.classId = query.classIds[0];
  1224 + delete query.classIds;
1208 const exportPhaseExamReport = 1225 const exportPhaseExamReport =
1209 this.role == "ROLE_BANZHUREN" 1226 this.role == "ROLE_BANZHUREN"
1210 ? this.$request.cTExportPhaseExamReport 1227 ? this.$request.cTExportPhaseExamReport
@@ -1315,16 +1332,16 @@ div::-webkit-scrollbar-thumb { @@ -1315,16 +1332,16 @@ div::-webkit-scrollbar-thumb {
1315 display: flex; 1332 display: flex;
1316 flex-wrap: wrap; 1333 flex-wrap: wrap;
1317 .tab-li { 1334 .tab-li {
1318 - width: 50%;  
1319 - flex: 1; 1335 + width: calc(50% - 12px);
1320 margin: 0 12px 12px 0; 1336 margin: 0 12px 12px 0;
1321 &:nth-child(2n) { 1337 &:nth-child(2n) {
1322 margin-right: 0; 1338 margin-right: 0;
1323 } 1339 }
1324 .tab-tit { 1340 .tab-tit {
1325 - width: 100%; 1341 + font-size: 15px;
1326 line-height: 40px; 1342 line-height: 40px;
1327 border: 1px solid #ebeef5; 1343 border: 1px solid #ebeef5;
  1344 + padding-left: 12px;
1328 } 1345 }
1329 } 1346 }
1330 } 1347 }