Commit 503b606383864d69ad7d131c3b0fa348e655eb73
1 parent
236b1f0e
判断题答案选项
Showing
9 changed files
with
162 additions
and
62 deletions
src/api/apis/apis.js
| ... | ... | @@ -74,6 +74,33 @@ export default { | 
| 74 | 74 | data, | 
| 75 | 75 | }); | 
| 76 | 76 | }, | 
| 77 | + //班主任-导出阶段问答报表 | |
| 78 | + cTExportPhaseAnswerReport(data) { | |
| 79 | + return service({ | |
| 80 | + url: setUpUrls.cTExportPhaseAnswerReport, | |
| 81 | + method: "POST", | |
| 82 | + data, | |
| 83 | + responseType: 'arraybuffer', | |
| 84 | + }); | |
| 85 | + }, | |
| 86 | + //班主任-导出阶段互动报表 | |
| 87 | + cTExportPhaseInteractiveReport(data) { | |
| 88 | + return service({ | |
| 89 | + url: setUpUrls.cTExportPhaseInteractiveReport, | |
| 90 | + method: "POST", | |
| 91 | + data, | |
| 92 | + responseType: 'arraybuffer', | |
| 93 | + }); | |
| 94 | + }, | |
| 95 | + //班主任-导出阶段测练报表 | |
| 96 | + cTExportPhaseExamReport(data) { | |
| 97 | + return service({ | |
| 98 | + url: setUpUrls.cTExportPhaseExamReport, | |
| 99 | + method: "POST", | |
| 100 | + data, | |
| 101 | + responseType: 'arraybuffer', | |
| 102 | + }); | |
| 103 | + }, | |
| 77 | 104 | |
| 78 | 105 | //任课老师-查询管理的班级 | 
| 79 | 106 | tClassList(data) { | ... | ... | 
src/api/urls/apis.js
| ... | ... | @@ -18,6 +18,12 @@ export default { | 
| 18 | 18 | cTPhaseInteractiveReport: "/api_html/class/manager/phaseInteractiveReport", | 
| 19 | 19 | //班主任-查询阶段测练报表 | 
| 20 | 20 | cTPhaseExamReport: "/api_html/class/manager/phaseExamReport", | 
| 21 | + //班主任-导出阶段问答报表 | |
| 22 | + cTExportPhaseAnswerReport: "/api_html/class/manager/exportPhaseAnswerReport", | |
| 23 | + //班主任- 导出阶段互动报表 | |
| 24 | + cTExportPhaseInteractiveReport: "/api_html/class/manager/exportPhaseInteractiveReport", | |
| 25 | + //班主任- 导出阶段测练报表 | |
| 26 | + cTExportPhaseExamReport: "/api_html/class/manager/exportPhaseExamReport", | |
| 21 | 27 | |
| 22 | 28 | //任课老师-查询管理班级 | 
| 23 | 29 | tClassList: "/api_html/teaching/classList", | ... | ... | 
src/views/ask/analysis.vue
| ... | ... | @@ -50,7 +50,7 @@ | 
| 50 | 50 | 已答总正确率:{{ detail.answerCorrectRate }}% | 
| 51 | 51 | </li> | 
| 52 | 52 | <li class="info-item"> | 
| 53 | - 反馈时长:{{ detail.consumingDuration }}分钟 | |
| 53 | + 反馈时长:{{ setDuration(detail.consumingDuration) }} | |
| 54 | 54 | </li> | 
| 55 | 55 | </ul> | 
| 56 | 56 | <el-table v-if="type == 1" :data="tableData" border style="width: 100%"> | 
| ... | ... | @@ -333,9 +333,22 @@ export default { | 
| 333 | 333 | this._QueryData(); | 
| 334 | 334 | }, | 
| 335 | 335 | setDuration(times){ | 
| 336 | - let m = parseInt(times/60) | |
| 337 | - let s = times%60 | |
| 338 | - return `${m}分${s}秒` | |
| 336 | + let m = parseInt(times/1000 / 60) | |
| 337 | + let s = parseInt((times/1000)%60) | |
| 338 | + let ms = times | |
| 339 | + let aTime; | |
| 340 | + if(times==0){ | |
| 341 | + aTime = `0分钟` | |
| 342 | + }else{ | |
| 343 | + if(m==0&&s==0){ | |
| 344 | + aTime = `${ms}毫秒` | |
| 345 | + }else if(m==0&&s!=0){ | |
| 346 | + aTime = `${s}秒` | |
| 347 | + }else if(m!=0&&s!=0){ | |
| 348 | + aTime = `${m}分${s}秒` | |
| 349 | + } | |
| 350 | + } | |
| 351 | + return aTime | |
| 339 | 352 | }, | 
| 340 | 353 | setSubPro(type) { | 
| 341 | 354 | let tit; | ... | ... | 
src/views/ask/index.vue
| ... | ... | @@ -93,9 +93,7 @@ | 
| 93 | 93 | @change="tabChange" | 
| 94 | 94 | style="margin-bottom: 20px" | 
| 95 | 95 | > | 
| 96 | - <el-radio-button :label="1" | |
| 97 | - >单课时报表</el-radio-button | |
| 98 | - > | |
| 96 | + <el-radio-button :label="1">单课时报表</el-radio-button> | |
| 99 | 97 | <!-- <el-radio-button :label="2" v-if="this.role != 'ROLE_BANZHUREN'" | 
| 100 | 98 | >阶段问答报表</el-radio-button | 
| 101 | 99 | > --> | 
| ... | ... | @@ -439,7 +437,10 @@ | 
| 439 | 437 | > | 
| 440 | 438 | </el-pagination> | 
| 441 | 439 | </div> | 
| 442 | - <p class="down" v-if="(tabIndex == 3 || tabIndex == 2) && tableData.length"> | |
| 440 | + <p | |
| 441 | + class="down" | |
| 442 | + v-if="(tabIndex == 3 || tabIndex == 2) && tableData.length" | |
| 443 | + > | |
| 443 | 444 | <el-button | 
| 444 | 445 | @click="exportData" | 
| 445 | 446 | type="primary" | 
| ... | ... | @@ -544,7 +545,7 @@ export default { | 
| 544 | 545 | that.query.day = formatDate(new Date(), "yyyy-MM-dd"); | 
| 545 | 546 | that.query.startDay = that.query.day; | 
| 546 | 547 | that.query.endDay = that.query.day; | 
| 547 | - that.tabIndex = 1 | |
| 548 | + that.tabIndex = 1; | |
| 548 | 549 | break; | 
| 549 | 550 | case 2: | 
| 550 | 551 | let day = new Date().getDay(); | 
| ... | ... | @@ -644,10 +645,10 @@ export default { | 
| 644 | 645 | this.page = page; | 
| 645 | 646 | this._QueryData(); | 
| 646 | 647 | }, | 
| 647 | - async changeclass(){ | |
| 648 | - await this._QuerySubjectList() | |
| 649 | - this.page = 1 | |
| 650 | - this._QueryData() | |
| 648 | + async changeclass() { | |
| 649 | + await this._QuerySubjectList(); | |
| 650 | + this.page = 1; | |
| 651 | + this._QueryData(); | |
| 651 | 652 | }, | 
| 652 | 653 | async changClazz() { | 
| 653 | 654 | await this._QuerySubjectList(); | 
| ... | ... | @@ -936,10 +937,18 @@ export default { | 
| 936 | 937 | } | 
| 937 | 938 | } | 
| 938 | 939 | this.exportLoading = true; | 
| 939 | - const exportData = | |
| 940 | - this.tabIndex == 2 | |
| 941 | - ? this.$request.exportPhaseAnswerReport | |
| 942 | - : this.$request.exportPhaseInteractiveReport; | |
| 940 | + let exportData; | |
| 941 | + if (this.role == "ROLE_BANZHUREN") { | |
| 942 | + exportData = | |
| 943 | + this.tabIndex == 2 | |
| 944 | + ? this.$request.cTExportPhaseAnswerReport | |
| 945 | + : this.$request.cTExportPhaseInteractiveReport; | |
| 946 | + } else { | |
| 947 | + exportData = | |
| 948 | + this.tabIndex == 2 | |
| 949 | + ? this.$request.exportPhaseAnswerReport | |
| 950 | + : this.$request.exportPhaseInteractiveReport; | |
| 951 | + } | |
| 943 | 952 | const data = await exportData({ ...query }); | 
| 944 | 953 | this.exportLoading = false; | 
| 945 | 954 | if (data) { | ... | ... | 
src/views/dataSync/index.vue
| ... | ... | @@ -31,9 +31,7 @@ | 
| 31 | 31 | |
| 32 | 32 | <div class="down-item"> | 
| 33 | 33 | <p class="h-title">数据导出至U盘</p> | 
| 34 | - <p class="txt"> | |
| 35 | - 本功能将云平台的数据导出到U盘。 | |
| 36 | - </p> | |
| 34 | + <p class="txt">本功能将云平台的数据导出到U盘。</p> | |
| 37 | 35 | <div class="btn-box btn-box2" v-loading="downLoading"> | 
| 38 | 36 | <i class="fa fa-cloud-download" @click="downloadFile"></i> | 
| 39 | 37 | <el-button type="primary" round @click="downloadFile" | 
| ... | ... | @@ -42,6 +40,19 @@ | 
| 42 | 40 | </div> | 
| 43 | 41 | </div> | 
| 44 | 42 | </div> | 
| 43 | + <el-dialog title="" :visible.sync="dialogVisible" width="300" center> | |
| 44 | + <el-result icon="success" title="上传成功"> </el-result> | |
| 45 | + <el-descriptions title="" :column="1"> | |
| 46 | + <el-descriptions-item label="导入答题卡数量">{{tipData.paperNum}}</el-descriptions-item> | |
| 47 | + <el-descriptions-item label="导入随堂问报表数量">{{tipData.periodNum}}</el-descriptions-item> | |
| 48 | + <el-descriptions-item label="导入即时测报表数量">{{tipData.examNum}}</el-descriptions-item> | |
| 49 | + </el-descriptions> | |
| 50 | + <span slot="footer" class="dialog-footer"> | |
| 51 | + <el-button type="primary" @click="dialogVisible = false" | |
| 52 | + >确 定</el-button | |
| 53 | + > | |
| 54 | + </span> | |
| 55 | + </el-dialog> | |
| 45 | 56 | </div> | 
| 46 | 57 | </template> | 
| 47 | 58 | |
| ... | ... | @@ -53,6 +64,12 @@ export default { | 
| 53 | 64 | downLoading: false, | 
| 54 | 65 | url: "/api_html/teaching/importData", | 
| 55 | 66 | file: {}, | 
| 67 | + dialogVisible: false, | |
| 68 | + tipData: { | |
| 69 | + paperNum: 0, | |
| 70 | + periodNum: 0, | |
| 71 | + examNum: 0, | |
| 72 | + }, | |
| 56 | 73 | }; | 
| 57 | 74 | }, | 
| 58 | 75 | methods: { | 
| ... | ... | @@ -61,13 +78,16 @@ export default { | 
| 61 | 78 | this.downLoading = true; | 
| 62 | 79 | const data = await this.$request.exportData(); | 
| 63 | 80 | this.downLoading = false; | 
| 64 | - console.log(data) | |
| 81 | + console.log(data); | |
| 65 | 82 | if (data) { | 
| 66 | - let blob = new Blob([data], {type: 'application/octet-stream'}) | |
| 83 | + let blob = new Blob([data], { type: "application/octet-stream" }); | |
| 67 | 84 | const url = URL.createObjectURL(blob); | 
| 68 | 85 | const link = document.createElement("a"); | 
| 69 | 86 | document.body.appendChild(link); | 
| 70 | - link.download = this.$store.getters.info.name+formatDate(new Date,'yyyy_MM_dd_hh_mm_ss')+"文件.json"; | |
| 87 | + link.download = | |
| 88 | + this.$store.getters.info.name + | |
| 89 | + formatDate(new Date(), "yyyy_MM_dd_hh_mm_ss") + | |
| 90 | + "文件.json"; | |
| 71 | 91 | link.href = url; | 
| 72 | 92 | link.click(); | 
| 73 | 93 | document.body.removeChild(link); | 
| ... | ... | @@ -91,16 +111,15 @@ export default { | 
| 91 | 111 | // } | 
| 92 | 112 | }, | 
| 93 | 113 | upSuccess(res) { | 
| 94 | - debugger | |
| 95 | - if (res && res.status == 0 ) { | |
| 96 | - this.$message.success("上传成功"); | |
| 97 | - this.$emit("upSuccess"); | |
| 114 | + if (res && res.status == 0) { | |
| 115 | + this.tipData = res.data | |
| 116 | + this.dialogVisible = true | |
| 98 | 117 | } else { | 
| 99 | 118 | this.$message.error(res.info); | 
| 100 | 119 | } | 
| 101 | 120 | }, | 
| 102 | 121 | upError(res) { | 
| 103 | - debugger | |
| 122 | + debugger; | |
| 104 | 123 | if (res && res.status == 0) { | 
| 105 | 124 | this.$message.error("上传失败"); | 
| 106 | 125 | } else { | 
| ... | ... | @@ -121,6 +140,7 @@ export default { | 
| 121 | 140 | justify-content: center; | 
| 122 | 141 | .down-item { | 
| 123 | 142 | width: 400px; | 
| 143 | + height:330px; | |
| 124 | 144 | border-radius: 20px; | 
| 125 | 145 | margin: 20px; | 
| 126 | 146 | background: #f8f8f8; | 
| ... | ... | @@ -140,8 +160,10 @@ export default { | 
| 140 | 160 | } | 
| 141 | 161 | } | 
| 142 | 162 | .upload-demo { | 
| 143 | - display: flex; | |
| 144 | - justify-content: center; | |
| 163 | + padding:0 20px 20px; | |
| 164 | + :deep(.el-upload--text){ | |
| 165 | + display: block; | |
| 166 | + } | |
| 145 | 167 | } | 
| 146 | 168 | :deep(.el-upload) { | 
| 147 | 169 | margin: 0 auto; | 
| ... | ... | @@ -151,7 +173,7 @@ export default { | 
| 151 | 173 | flex-direction: column; | 
| 152 | 174 | justify-content: center; | 
| 153 | 175 | align-items: center; | 
| 154 | - padding-bottom: 40px; | |
| 176 | + padding-bottom: 10px; | |
| 155 | 177 | .fa { | 
| 156 | 178 | font-size: 80px; | 
| 157 | 179 | color: #aeaeae; | ... | ... | 
src/views/examinationPaper/add.vue
| ... | ... | @@ -308,7 +308,7 @@ | 
| 308 | 308 | > | 
| 309 | 309 | <div class="dia-content"> | 
| 310 | 310 | <el-form | 
| 311 | - ref="form" | |
| 311 | + ref="form" | |
| 312 | 312 | :model="questionForm" | 
| 313 | 313 | :rules="questionFormRules" | 
| 314 | 314 | label-width="100px" | 
| ... | ... | @@ -843,7 +843,12 @@ export default { | 
| 843 | 843 | |
| 844 | 844 | console.log(this.formAns.answerList.split(",")[subNum - i]); | 
| 845 | 845 | } else if (this.formAns.qusType == 4) { | 
| 846 | - correctAnswer = this.formAns.answerList[subNum - i] == "✓" ? 1 :this.formAns.answerList[subNum - i] == "✗" ? 2:""; | |
| 846 | + correctAnswer = | |
| 847 | + this.formAns.answerList[subNum - i] == "✓" | |
| 848 | + ? 1 | |
| 849 | + : this.formAns.answerList[subNum - i] == "✗" | |
| 850 | + ? 2 | |
| 851 | + : ""; | |
| 847 | 852 | } | 
| 848 | 853 | this.form.questionList[this.formAns.listIndex].subQuestions[ | 
| 849 | 854 | EndIndex - i | 
| ... | ... | @@ -959,7 +964,7 @@ export default { | 
| 959 | 964 | types[addndex].qusType = sub.questionType; | 
| 960 | 965 | types[addndex].subNum = 1; | 
| 961 | 966 | types[addndex].answerOptions = sub.answerOptions; | 
| 962 | - types[addndex].answerList = "" | |
| 967 | + types[addndex].answerList = ""; | |
| 963 | 968 | } | 
| 964 | 969 | } | 
| 965 | 970 | }); | 
| ... | ... | @@ -1023,6 +1028,9 @@ export default { | 
| 1023 | 1028 | .join(","); | 
| 1024 | 1029 | break; | 
| 1025 | 1030 | case 4: | 
| 1031 | + questionsOptions.selectNum = 0; | |
| 1032 | + questionsOptions.answerOptions = "1,2"; | |
| 1033 | + break; | |
| 1026 | 1034 | case 5: | 
| 1027 | 1035 | questionsOptions.selectNum = 0; | 
| 1028 | 1036 | break; | 
| ... | ... | @@ -1069,6 +1077,9 @@ export default { | 
| 1069 | 1077 | questionsOptions.partScore = 0; | 
| 1070 | 1078 | break; | 
| 1071 | 1079 | case 4: | 
| 1080 | + questionsOptions.selectNum = 0; | |
| 1081 | + questionsOptions.answerOptions = "1,2"; | |
| 1082 | + break; | |
| 1072 | 1083 | case 5: | 
| 1073 | 1084 | questionsOptions.selectNum = 0; | 
| 1074 | 1085 | break; | 
| ... | ... | @@ -1096,6 +1107,9 @@ export default { | 
| 1096 | 1107 | .join(","); | 
| 1097 | 1108 | break; | 
| 1098 | 1109 | case 4: | 
| 1110 | + subQuestions.selectNum = 0; | |
| 1111 | + subQuestions.answerOptions = "1,2"; | |
| 1112 | + break; | |
| 1099 | 1113 | case 5: | 
| 1100 | 1114 | subQuestions.selectNum = 0; | 
| 1101 | 1115 | break; | 
| ... | ... | @@ -1384,8 +1398,8 @@ export default { | 
| 1384 | 1398 | } | 
| 1385 | 1399 | .question-title { | 
| 1386 | 1400 | line-height: 40px; | 
| 1387 | - .m20{ | |
| 1388 | - margin-right:20px; | |
| 1401 | + .m20 { | |
| 1402 | + margin-right: 20px; | |
| 1389 | 1403 | } | 
| 1390 | 1404 | .ipt { | 
| 1391 | 1405 | width: 300px; | ... | ... | 
src/views/examinationPaper/edit.vue
| ... | ... | @@ -238,18 +238,18 @@ export default { | 
| 238 | 238 | } | 
| 239 | 239 | }, | 
| 240 | 240 | async save() { | 
| 241 | - let valid = ""; | |
| 242 | - this.form.questionList.map((item, index) => { | |
| 243 | - if (!item.questionTitle) { | |
| 244 | - valid += index + 1 + "、"; | |
| 245 | - } | |
| 246 | - }); | |
| 247 | - if (valid) { | |
| 248 | - this.$message.error( | |
| 249 | - `大题名称不能为空,请检查第${valid.slice(0, -1)}题!` | |
| 250 | - ); | |
| 251 | - return; | |
| 252 | - } | |
| 241 | + // let valid = ""; | |
| 242 | + // this.form.questionList.map((item, index) => { | |
| 243 | + // if (!item.questionTitle) { | |
| 244 | + // valid += index + 1 + "、"; | |
| 245 | + // } | |
| 246 | + // }); | |
| 247 | + // if (valid) { | |
| 248 | + // this.$message.error( | |
| 249 | + // `大题名称不能为空,请检查第${valid.slice(0, -1)}题!` | |
| 250 | + // ); | |
| 251 | + // return; | |
| 252 | + // } | |
| 253 | 253 | let questionList = this.form.questionList.map((item) => { | 
| 254 | 254 | item.score = null; | 
| 255 | 255 | // item.questionId = ""; | ... | ... | 
src/views/examinationPaper/index.vue
| ... | ... | @@ -108,7 +108,7 @@ | 
| 108 | 108 | }} | 
| 109 | 109 | <i v-if="clazzChild.keepStatus == 1" class="el-icon-success"></i | 
| 110 | 110 | ></span> | 
| 111 | - <el-tooltip effect="dark" content="同步" placement="right"> | |
| 111 | + <el-tooltip effect="dark" content="刷新同步状态" placement="right"> | |
| 112 | 112 | <i class="icon-refresh el-icon-refresh" @click="refreshStic"></i> | 
| 113 | 113 | </el-tooltip> | 
| 114 | 114 | </p> | ... | ... | 
src/views/test/index.vue
| ... | ... | @@ -322,8 +322,12 @@ | 
| 322 | 322 | </div> | 
| 323 | 323 | </div> | 
| 324 | 324 | <div v-show="tabIndex == 2" v-loading="loading"> | 
| 325 | - <el-empty :image-size="100" v-if="!tableData.length&&loading==false" description="没有更多数据"></el-empty> | |
| 326 | - <template v-if="tableData.length&&loading==false"> | |
| 325 | + <el-empty | |
| 326 | + :image-size="100" | |
| 327 | + v-if="!tableData.length && loading == false" | |
| 328 | + description="没有更多数据" | |
| 329 | + ></el-empty> | |
| 330 | + <template v-if="tableData.length && loading == false"> | |
| 327 | 331 | <el-table | 
| 328 | 332 | :max-height="tableMaxHeight" | 
| 329 | 333 | v-if="role == 'ROLE_JIAOSHI'" | 
| ... | ... | @@ -417,8 +421,12 @@ | 
| 417 | 421 | </template> | 
| 418 | 422 | </div> | 
| 419 | 423 | <p class="down" v-if="tabIndex == 2 && tableData.length"> | 
| 420 | - <el-button type="primary" plain round icon="fa fa-cloud-download" | |
| 421 | - @click="downExl" | |
| 424 | + <el-button | |
| 425 | + type="primary" | |
| 426 | + plain | |
| 427 | + round | |
| 428 | + icon="fa fa-cloud-download" | |
| 429 | + @click="downExl" | |
| 422 | 430 | >导出报表</el-button | 
| 423 | 431 | > | 
| 424 | 432 | </p> | 
| ... | ... | @@ -462,7 +470,7 @@ export default { | 
| 462 | 470 | components: { editAnswer }, | 
| 463 | 471 | data() { | 
| 464 | 472 | return { | 
| 465 | - exportLoading:false, | |
| 473 | + exportLoading: false, | |
| 466 | 474 | tableMaxHeight: 300, | 
| 467 | 475 | role: "", | 
| 468 | 476 | loading: false, | 
| ... | ... | @@ -842,8 +850,8 @@ export default { | 
| 842 | 850 | this.$message.error(info); | 
| 843 | 851 | } | 
| 844 | 852 | }, | 
| 845 | - async downExl(){ | |
| 846 | - if (this.exportLoading == true) return; | |
| 853 | + async downExl() { | |
| 854 | + if (this.exportLoading == true) return; | |
| 847 | 855 | let query = {}; | 
| 848 | 856 | for (let key in this.query) { | 
| 849 | 857 | if (this.query[key] != "") { | 
| ... | ... | @@ -870,21 +878,22 @@ export default { | 
| 870 | 878 | return; | 
| 871 | 879 | } | 
| 872 | 880 | } | 
| 881 | + const exportPhaseExamReport = | |
| 882 | + this.role == "ROLE_BANZHUREN" | |
| 883 | + ? this.$request.cTExportPhaseExamReport | |
| 884 | + : this.$request.exportPhaseExamReport; | |
| 873 | 885 | this.exportLoading = true; | 
| 874 | - const data = await this.$request.exportPhaseExamReport({ ...query }); | |
| 886 | + const data = await exportPhaseExamReport({ ...query }); | |
| 875 | 887 | this.exportLoading = false; | 
| 876 | 888 | if (data) { | 
| 877 | 889 | let blob = new Blob([data], { | 
| 878 | 890 | type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", | 
| 879 | 891 | }); | 
| 880 | - downloadFile( | |
| 881 | - "即时测-阶段测练报表.xlsx", | |
| 882 | - blob | |
| 883 | - ); | |
| 892 | + downloadFile("即时测-阶段测练报表.xlsx", blob); | |
| 884 | 893 | } else { | 
| 885 | 894 | this.$message.error("下载失败"); | 
| 886 | 895 | } | 
| 887 | - } | |
| 896 | + }, | |
| 888 | 897 | }, | 
| 889 | 898 | }; | 
| 890 | 899 | </script> | ... | ... |