Commit 8ea67428e9a73e9555b5ba4894572f3ac64a11d3

Authored by 梁保满
1 parent 6d7bd862

飞书bug

src/api/axios.js
@@ -71,7 +71,6 @@ service.interceptors.response.use( @@ -71,7 +71,6 @@ service.interceptors.response.use(
71 71
72 if (status === 403 || status === 401) { 72 if (status === 403 || status === 401) {
73 if (data.status === 999) { 73 if (data.status === 999) {
74 - debugger  
75 console.log(data.data) 74 console.log(data.data)
76 if (data.data) { 75 if (data.data) {
77 window.location.href = data.data; 76 window.location.href = data.data;
src/components/setAnswer.vue
@@ -356,10 +356,10 @@ export default { @@ -356,10 +356,10 @@ export default {
356 } 356 }
357 }, 357 },
358 async saveAnswer() { 358 async saveAnswer() {
359 - let questionList = [];  
360 - for (let i = 0; i < this.FormQuestionList.length; i++) {  
361 - if (this.FormQuestionList[i].qusType) {  
362 - this.FormQuestionList.splice(i, 1); 359 + let questionList = [...this.FormQuestionList];
  360 + for (let i = 0; i < questionList.length; i++) {
  361 + if (questionList[i].qusType) {
  362 + questionList.splice(i, 1);
363 i--; 363 i--;
364 } 364 }
365 } 365 }
src/components/upload.vue
@@ -30,14 +30,8 @@ @@ -30,14 +30,8 @@
30 export default { 30 export default {
31 name: "downUpData", 31 name: "downUpData",
32 props: { 32 props: {
33 - id: {  
34 - type: String,  
35 - default: "",  
36 - },  
37 - examId: {  
38 - type: String,  
39 - default: "",  
40 - }, 33 + id: "",
  34 + examId: "",
41 url: { 35 url: {
42 type: String, 36 type: String,
43 default: "", 37 default: "",
src/views/analysis/index.vue
@@ -185,6 +185,7 @@ export default { @@ -185,6 +185,7 @@ export default {
185 //中国式星期天是一周的最后一天 185 //中国式星期天是一周的最后一天
186 day = 7; 186 day = 7;
187 } 187 }
  188 + day--
188 let aTime = new Date().getTime() - 24 * 60 * 60 * 1000 * day; 189 let aTime = new Date().getTime() - 24 * 60 * 60 * 1000 * day;
189 that.query.startDay = formatDate(new Date(aTime), "yyyy-MM-dd"); 190 that.query.startDay = formatDate(new Date(aTime), "yyyy-MM-dd");
190 that.query.endDay = formatDate(new Date(), "yyyy-MM-dd"); 191 that.query.endDay = formatDate(new Date(), "yyyy-MM-dd");
src/views/ask/analysis.vue
@@ -77,12 +77,12 @@ @@ -77,12 +77,12 @@
77 align="center" 77 align="center"
78 ></el-table-column> 78 ></el-table-column>
79 <el-table-column 79 <el-table-column
80 - prop="canyu" 80 + prop="participationRate"
81 label="班级参与度" 81 label="班级参与度"
82 sortable 82 sortable
83 align="center" 83 align="center"
84 ><template slot-scope="scoped" 84 ><template slot-scope="scoped"
85 - >{{ scoped.row.canyu }}%</template 85 + >{{ scoped.row.participationRate }}%</template
86 ></el-table-column 86 ></el-table-column
87 > 87 >
88 <el-table-column 88 <el-table-column
@@ -107,21 +107,22 @@ @@ -107,21 +107,22 @@
107 prop="correctAnswer" 107 prop="correctAnswer"
108 label="正确答案" 108 label="正确答案"
109 align="center" 109 align="center"
110 - ></el-table-column> 110 + > <template slot-scope="scoped">{{scoped.row.correctAnswer==1?"✓":scoped.row.correctAnswer==2?"✗":scoped.row.correctAnswer}}</template></el-table-column>
111 <el-table-column 111 <el-table-column
112 prop="fallible" 112 prop="fallible"
113 label="干扰答案" 113 label="干扰答案"
114 align="center" 114 align="center"
115 - ></el-table-column>  
116 - <el-table-column prop="screenshot" label="题干" align="center"> 115 + ><template slot-scope="scoped">{{scoped.row.fallible==1?"✓":scoped.row.fallible==2?"✗":scoped.row.correctAnswer}}</template></el-table-column>
  116 + <!-- <el-table-column prop="screenshot" label="题干" align="center">
117 <template slot-scope="scoped"> 117 <template slot-scope="scoped">
118 <el-image 118 <el-image
  119 + v-if="scoped.row.screenshot"
119 style="width: 60px; height: 40px" 120 style="width: 60px; height: 40px"
120 :src="scoped.row.screenshot" 121 :src="scoped.row.screenshot"
121 :preview-src-list="[scoped.row.screenshot]" 122 :preview-src-list="[scoped.row.screenshot]"
122 > 123 >
123 - </el-image></template  
124 - ></el-table-column> 124 + </el-image><span v-else>暂无</span></template
  125 + ></el-table-column> -->
125 </el-table> 126 </el-table>
126 <el-table v-if="type == 2" :data="tableData" border style="width: 100%"> 127 <el-table v-if="type == 2" :data="tableData" border style="width: 100%">
127 <el-table-column 128 <el-table-column
@@ -265,7 +266,7 @@ @@ -265,7 +266,7 @@
265 icon="fa fa-cloud-download" 266 icon="fa fa-cloud-download"
266 >导出报表</el-button 267 >导出报表</el-button
267 > 268 >
268 - <el-button @click="edit" type="primary" round>设置答案</el-button> 269 + <el-button @click="edit" type="primary" round>修改答案</el-button>
269 </p> 270 </p>
270 </div> 271 </div>
271 </div> 272 </div>
@@ -336,6 +337,7 @@ export default { @@ -336,6 +337,7 @@ export default {
336 }, 337 },
337 handleSuccess() { 338 handleSuccess() {
338 this.dialogVisible = false; 339 this.dialogVisible = false;
  340 + this._QueryData();
339 }, 341 },
340 async edit() { 342 async edit() {
341 if (this.editLoading) return; 343 if (this.editLoading) return;
src/views/ask/index.vue
@@ -94,7 +94,9 @@ @@ -94,7 +94,9 @@
94 @change="tabChange" 94 @change="tabChange"
95 style="margin-bottom: 20px" 95 style="margin-bottom: 20px"
96 > 96 >
97 - <el-radio-button :label="1">单课时报表</el-radio-button> 97 + <el-radio-button :label="1" v-if="query.startDay != query.endDay"
  98 + >单课时报表</el-radio-button
  99 + >
98 <!-- <el-radio-button :label="2" v-if="this.role != 'ROLE_BANZHUREN'" 100 <!-- <el-radio-button :label="2" v-if="this.role != 'ROLE_BANZHUREN'"
99 >阶段问答报表</el-radio-button 101 >阶段问答报表</el-radio-button
100 > --> 102 > -->
@@ -109,7 +111,7 @@ @@ -109,7 +111,7 @@
109 <span>总课时数:10</span> 111 <span>总课时数:10</span>
110 <span>互动总数:22</span> 112 <span>互动总数:22</span>
111 </p> --> 113 </p> -->
112 - <div v-if="tabIndex == 1"> 114 + <div v-show="tabIndex == 1">
113 <el-table 115 <el-table
114 :data="tableData" 116 :data="tableData"
115 border 117 border
@@ -153,40 +155,46 @@ @@ -153,40 +155,46 @@
153 > 155 >
154 </el-table-column> 156 </el-table-column>
155 <el-table-column 157 <el-table-column
156 - prop="correctRate" 158 + prop="classCorrectRate"
157 label="班级总正确率" 159 label="班级总正确率"
158 sortable="custom" 160 sortable="custom"
159 align="center" 161 align="center"
160 ><template slot-scope="scoped" 162 ><template slot-scope="scoped"
161 - >{{ scoped.row.correctRate }}%</template 163 + >{{ scoped.row.classCorrectRate }}%</template
162 ></el-table-column 164 ></el-table-column
163 > 165 >
164 <el-table-column label="操作" align="center"> 166 <el-table-column label="操作" align="center">
165 <template slot-scope="scoped"> 167 <template slot-scope="scoped">
166 - <el-tooltip effect="dark" content="详情" placement="top"> 168 + <el-tooltip
  169 + effect="dark"
  170 + v-if="scoped.row.answerNum == 0"
  171 + content="设置答案"
  172 + placement="top"
  173 + >
167 <el-button 174 <el-button
168 type="primary" 175 type="primary"
169 circle 176 circle
170 size="mini" 177 size="mini"
171 - icon="fa fa-arrow-right"  
172 - @click="linkTo(scoped.row)" 178 + icon="fa fa-file-text"
  179 + @click="edit(scoped.row)"
173 ></el-button> 180 ></el-button>
174 </el-tooltip> 181 </el-tooltip>
175 - <el-tooltip effect="dark" content="修改答案" placement="top"> 182 + <el-tooltip v-else effect="dark" content="详情" placement="top">
176 <el-button 183 <el-button
177 type="primary" 184 type="primary"
178 circle 185 circle
179 size="mini" 186 size="mini"
180 - icon="fa fa-file-text"  
181 - @click="edit(scoped.row)" 187 + icon="fa fa-arrow-right"
  188 + @click="linkTo(scoped.row)"
182 ></el-button> 189 ></el-button>
183 </el-tooltip> 190 </el-tooltip>
184 </template> 191 </template>
185 </el-table-column> 192 </el-table-column>
186 </el-table> 193 </el-table>
187 </div> 194 </div>
188 - <div v-if="tabIndex == 2"> 195 + <div v-show="tabIndex == 2">
189 <el-table 196 <el-table
  197 + v-if="role == 'ROLE_JIAOSHI'"
190 :data="tableData" 198 :data="tableData"
191 border 199 border
192 style="width: 100%" 200 style="width: 100%"
@@ -252,9 +260,34 @@ @@ -252,9 +260,34 @@
252 align="center" 260 align="center"
253 ></el-table-column> 261 ></el-table-column>
254 </el-table> 262 </el-table>
  263 + <el-table v-else :data="tableData" border style="width: 100%">
  264 + <el-table-column
  265 + prop="studentCode"
  266 + label="学号"
  267 + align="center"
  268 + ></el-table-column>
  269 + <el-table-column
  270 + prop="studentName"
  271 + label="姓名"
  272 + align="center"
  273 + width="100"
  274 + ></el-table-column>
  275 + <el-table-column
  276 + v-for="(item, index) in phaseOption"
  277 + :key="index"
  278 + :label="item"
  279 + align="center"
  280 + >
  281 + <el-table-column align="center" :label="index==0?'总课时数':'课时数'" :prop="'periodCount'+item"> </el-table-column>
  282 + <el-table-column align="center" :label="index==0?'总出题数':'出题数'" :prop="'questionNum'+item"> </el-table-column>
  283 + <el-table-column align="center" :label="index==0?'总参与度':'参与度'" :prop="'participationRate'+item"> </el-table-column>
  284 + <el-table-column align="center" :label="index==0?'总正确率':'正确率'" :prop="'correctRate'+item"> </el-table-column>
  285 + </el-table-column>
  286 + </el-table>
255 </div> 287 </div>
256 - <div v-if="tabIndex == 3"> 288 + <div v-show="tabIndex == 3">
257 <el-table 289 <el-table
  290 + v-if="role == 'ROLE_JIAOSHI'"
258 :data="tableData" 291 :data="tableData"
259 border 292 border
260 style="width: 100%" 293 style="width: 100%"
@@ -296,18 +329,40 @@ @@ -296,18 +329,40 @@
296 align="center" 329 align="center"
297 ></el-table-column> 330 ></el-table-column>
298 <el-table-column 331 <el-table-column
299 - prop="canyu" 332 + prop="interactionsNum"
300 label="参与得分" 333 label="参与得分"
301 sortable 334 sortable
302 align="center" 335 align="center"
303 ></el-table-column> 336 ></el-table-column>
304 <el-table-column 337 <el-table-column
305 - prop="duicuo" 338 + prop="interactionsCorrectNum"
306 label="对错得分" 339 label="对错得分"
307 sortable 340 sortable
308 align="center" 341 align="center"
309 ></el-table-column> 342 ></el-table-column>
310 </el-table> 343 </el-table>
  344 + <el-table v-else :data="tableData" border style="width: 100%">
  345 + <el-table-column
  346 + prop="studentCode"
  347 + label="学号"
  348 + align="center"
  349 + ></el-table-column>
  350 + <el-table-column
  351 + prop="studentName"
  352 + label="姓名"
  353 + align="center"
  354 + width="100"
  355 + ></el-table-column>
  356 + <el-table-column
  357 + v-for="(item, index) in phaseInter"
  358 + :key="index"
  359 + :label="item"
  360 + align="center"
  361 + >
  362 + <el-table-column align="center" :label="index==0?'参与分':'互动数'" :prop="'interactionsNum'+item"> </el-table-column>
  363 + <el-table-column align="center" :label="index==0?'对错分':'参与数'" :prop="'interactionsCorrectNum'+item"> </el-table-column>
  364 + </el-table-column>
  365 + </el-table>
311 </div> 366 </div>
312 <div class="pagination-box" v-show="tabIndex == 1"> 367 <div class="pagination-box" v-show="tabIndex == 1">
313 <el-pagination 368 <el-pagination
@@ -369,6 +424,8 @@ export default { @@ -369,6 +424,8 @@ export default {
369 subjectList: [], //科目 424 subjectList: [], //科目
370 tabIndex: 1, //选项卡 425 tabIndex: 1, //选项卡
371 tableData: [], 426 tableData: [],
  427 + phaseOption: [],//问答补充数据
  428 + phaseInter:[],//互动补充数据
372 page: 1, 429 page: 1,
373 size: 20, 430 size: 20,
374 total: 0, 431 total: 0,
@@ -418,6 +475,7 @@ export default { @@ -418,6 +475,7 @@ export default {
418 //中国式星期天是一周的最后一天 475 //中国式星期天是一周的最后一天
419 day = 7; 476 day = 7;
420 } 477 }
  478 + day--;
421 let aTime = new Date().getTime() - 24 * 60 * 60 * 1000 * day; 479 let aTime = new Date().getTime() - 24 * 60 * 60 * 1000 * day;
422 that.query.startDay = formatDate(new Date(aTime), "yyyy-MM-dd"); 480 that.query.startDay = formatDate(new Date(aTime), "yyyy-MM-dd");
423 that.query.endDay = formatDate(new Date(), "yyyy-MM-dd"); 481 that.query.endDay = formatDate(new Date(), "yyyy-MM-dd");
@@ -486,6 +544,7 @@ export default { @@ -486,6 +544,7 @@ export default {
486 }, 544 },
487 handleSuccess() { 545 handleSuccess() {
488 this.dialogVisible = false; 546 this.dialogVisible = false;
  547 + this._QueryData();
489 }, 548 },
490 tabChange() { 549 tabChange() {
491 this.page = 1; 550 this.page = 1;
@@ -509,7 +568,7 @@ export default { @@ -509,7 +568,7 @@ export default {
509 async changClazz() { 568 async changClazz() {
510 await this._QuerySubjectList(); 569 await this._QuerySubjectList();
511 // await this.setDate(1); 570 // await this.setDate(1);
512 - this._QueryData() 571 + this._QueryData();
513 }, 572 },
514 async _QueryClassList() { 573 async _QueryClassList() {
515 const fetchClassList = 574 const fetchClassList =
@@ -640,7 +699,29 @@ export default { @@ -640,7 +699,29 @@ export default {
640 }); 699 });
641 this.loading = false; 700 this.loading = false;
642 if (status === 0) { 701 if (status === 0) {
643 - this.tableData = (data?.list && [...data?.list]) || []; 702 + if (this.role == "ROLE_BANZHUREN") {
  703 + let subjectName = [];
  704 + this.tableData = data?.list.map((item) => {
  705 + let params = {};
  706 + item.dataList.map((items, index) => {
  707 + if (!subjectName.includes(items.subjectName)) {
  708 + subjectName.push(items.subjectName);
  709 + }
  710 + params["answerCorrectRate" + items.subjectName] = items.answerCorrectRate;
  711 + params["correctRate" + items.subjectName] = items.correctRate;
  712 + params["participationRate" + items.subjectName] = items.participationRate;
  713 + params["periodCount" + items.subjectName] = items.periodCount;
  714 + params["questionNum" + items.subjectName] = items.questionNum;
  715 + });
  716 + return {
  717 + ...item,
  718 + ...params,
  719 + };
  720 + });
  721 + this.phaseOption = [...subjectName];
  722 + } else {
  723 + this.tableData = (data?.list && [...data?.list]) || [];
  724 + }
644 this.total = data.count; 725 this.total = data.count;
645 } else { 726 } else {
646 this.$message.error(info); 727 this.$message.error(info);
@@ -680,7 +761,26 @@ export default { @@ -680,7 +761,26 @@ export default {
680 }); 761 });
681 this.loading = false; 762 this.loading = false;
682 if (status === 0) { 763 if (status === 0) {
683 - this.tableData = (data?.list && [...data?.list]) || []; 764 + if (this.role == "ROLE_BANZHUREN") {
  765 + let subjectName = [];
  766 + this.tableData = data?.list.map((item) => {
  767 + let params = {};
  768 + item.dataList.map((items, index) => {
  769 + if (!subjectName.includes(items.subjectName)) {
  770 + subjectName.push(items.subjectName);
  771 + }
  772 + params["interactionsNum" + items.subjectName] = items.interactionsNum;
  773 + params["interactionsCorrectNum" + items.subjectName] = items.interactionsCorrectNum;
  774 + });
  775 + return {
  776 + ...item,
  777 + ...params,
  778 + };
  779 + });
  780 + this.phaseInter = [...subjectName];
  781 + } else {
  782 + this.tableData = (data?.list && [...data?.list]) || [];
  783 + }
684 this.total = data.count; 784 this.total = data.count;
685 } else { 785 } else {
686 this.$message.error(info); 786 this.$message.error(info);
src/views/device/index.vue
@@ -39,7 +39,7 @@ @@ -39,7 +39,7 @@
39 </el-radio-group> 39 </el-radio-group>
40 </div> 40 </div>
41 <div class="content"> 41 <div class="content">
42 - <div v-if="type == 1"> 42 + <div v-show="type == 1">
43 <div class="chart-box" v-if="count"> 43 <div class="chart-box" v-if="count">
44 <div class="device-num"> 44 <div class="device-num">
45 <p class="p1">{{ count }}</p> 45 <p class="p1">{{ count }}</p>
@@ -175,7 +175,7 @@ @@ -175,7 +175,7 @@
175 </el-table> 175 </el-table>
176 </div> 176 </div>
177 </div> 177 </div>
178 - <div v-else-if="type == 2"> 178 + <div v-show="type == 2">
179 <div class="chart-box" v-if="count"> 179 <div class="chart-box" v-if="count">
180 <div class="device-num"> 180 <div class="device-num">
181 <p class="p1">{{ count }}</p> 181 <p class="p1">{{ count }}</p>
@@ -291,7 +291,7 @@ @@ -291,7 +291,7 @@
291 </el-table> 291 </el-table>
292 </div> 292 </div>
293 </div> 293 </div>
294 - <div v-else-if="type == 3"> 294 + <div v-show="type == 3">
295 <div class="table-box"> 295 <div class="table-box">
296 <div class="answer-header"> 296 <div class="answer-header">
297 <div class="sel-box"> 297 <div class="sel-box">
src/views/device/log.vue
@@ -193,6 +193,7 @@ export default { @@ -193,6 +193,7 @@ export default {
193 //中国式星期天是一周的最后一天 193 //中国式星期天是一周的最后一天
194 day = 7; 194 day = 7;
195 } 195 }
  196 + day--
196 let aTime = new Date().getTime() - 24 * 60 * 60 * 1000 * day; 197 let aTime = new Date().getTime() - 24 * 60 * 60 * 1000 * day;
197 that.query.startDay = formatDate(new Date(aTime), "yyyy-MM-dd"); 198 that.query.startDay = formatDate(new Date(aTime), "yyyy-MM-dd");
198 that.query.endDay = formatDate(new Date(), "yyyy-MM-dd"); 199 that.query.endDay = formatDate(new Date(), "yyyy-MM-dd");
src/views/examinationPaper/index.vue
@@ -201,7 +201,7 @@ export default { @@ -201,7 +201,7 @@ export default {
201 tableData: null, 201 tableData: null,
202 shareForm: { 202 shareForm: {
203 id: "", 203 id: "",
204 - sharingType: 1, //0-任课班级/1-全年级 204 + sharingType: 0, //0-任课班级/1-全年级
205 }, 205 },
206 shareRulesForm: { 206 shareRulesForm: {
207 sharingType: [ 207 sharingType: [
@@ -243,7 +243,7 @@ export default { @@ -243,7 +243,7 @@ export default {
243 case 1: 243 case 1:
244 //修改分享范围 244 //修改分享范围
245 that.shareForm.id = item.id; 245 that.shareForm.id = item.id;
246 - that.shareForm.sharingType = item.sharingType || 1; 246 + that.shareForm.sharingType = item.sharingType;
247 that.dialogVisible = true; 247 that.dialogVisible = true;
248 break; 248 break;
249 case 2: 249 case 2:
src/views/login/index.vue
@@ -95,12 +95,12 @@ export default { @@ -95,12 +95,12 @@ export default {
95 loginForm: { 95 loginForm: {
96 // username: "15911715665", 96 // username: "15911715665",
97 // password: "Csiy88888", 97 // password: "Csiy88888",
98 - username: "13610050254",  
99 - password: "Pw050254#", 98 + // username: "13610050254",
  99 + // password: "Pw050254#",
100 // username: "18332123505", 100 // username: "18332123505",
101 // password: "Pw123505#", 101 // password: "Pw123505#",
102 - // username: "18687826606",  
103 - // password: "Pw826606#", 102 + username: "18687826606",
  103 + password: "Pw826606#",
104 // username: "18946034886", 104 // username: "18946034886",
105 // password: "Pw034886#", 105 // password: "Pw034886#",
106 // username: "18893712576", 106 // username: "18893712576",
@@ -129,7 +129,7 @@ export default { @@ -129,7 +129,7 @@ export default {
129 this.dockkey = getURLParams("dockkey") || ""; 129 this.dockkey = getURLParams("dockkey") || "";
130 if (this.code || this.dockkey) { 130 if (this.code || this.dockkey) {
131 this.loading = true 131 this.loading = true
132 - // this._LoginCheck(); 132 + this._LoginCheck();
133 } 133 }
134 }, 134 },
135 methods: { 135 methods: {
src/views/test/analysis.vue
@@ -16,7 +16,14 @@ @@ -16,7 +16,14 @@
16 <el-button type="danger" round @click="_ReScore" size="mini" 16 <el-button type="danger" round @click="_ReScore" size="mini"
17 >重新计分</el-button 17 >重新计分</el-button
18 > 18 >
19 - <el-button type="danger" round plain size="mini" @click="paperModifyLog.modifiedTime = ''">暂时不计</el-button> 19 + <el-button
  20 + type="danger"
  21 + round
  22 + plain
  23 + size="mini"
  24 + @click="paperModifyLog.modifiedTime = ''"
  25 + >暂时不计</el-button
  26 + >
20 </div> 27 </div>
21 </div> 28 </div>
22 <div class="page-content"> 29 <div class="page-content">
@@ -46,65 +53,123 @@ @@ -46,65 +53,123 @@
46 >作答明细表</span 53 >作答明细表</span
47 > 54 >
48 </div> 55 </div>
49 - <el-table v-if="type == 1" :data="tableData" border style="width: 100%"> 56 + <el-table v-show="type == 1" :data="tableData" border style="width: 100%">
50 <el-table-column 57 <el-table-column
51 prop="questionIndex" 58 prop="questionIndex"
52 label="题号" 59 label="题号"
53 align="center" 60 align="center"
  61 + width="60"
54 ></el-table-column> 62 ></el-table-column>
55 - <el-table-column prop="questionType" label="题型" align="center" 63 + <el-table-column
  64 + prop="questionType"
  65 + label="题型"
  66 + align="center"
  67 + width="100"
56 ><template slot-scope="scope">{{ 68 ><template slot-scope="scope">{{
57 setSubPro(scope.row.questionType) 69 setSubPro(scope.row.questionType)
58 }}</template></el-table-column 70 }}</template></el-table-column
59 > 71 >
60 <el-table-column 72 <el-table-column
61 prop="score" 73 prop="score"
  74 + width="100"
62 label="满分值" 75 label="满分值"
63 sortable 76 sortable
64 align="center" 77 align="center"
65 ></el-table-column> 78 ></el-table-column>
66 <el-table-column 79 <el-table-column
  80 + width="110"
67 prop="highestScore" 81 prop="highestScore"
68 label="班最高分" 82 label="班最高分"
69 sortable 83 sortable
70 align="center" 84 align="center"
71 ></el-table-column> 85 ></el-table-column>
72 <el-table-column 86 <el-table-column
  87 + width="110"
73 prop="lowestScore" 88 prop="lowestScore"
74 label="班最低分" 89 label="班最低分"
75 sortable 90 sortable
76 align="center" 91 align="center"
77 ></el-table-column> 92 ></el-table-column>
78 <el-table-column 93 <el-table-column
  94 + width="110"
79 prop="avgScore" 95 prop="avgScore"
80 label="班平均分" 96 label="班平均分"
81 sortable 97 sortable
82 align="center" 98 align="center"
83 ></el-table-column> 99 ></el-table-column>
84 <el-table-column 100 <el-table-column
85 - prop="scoringRate" 101 + prop="classScoringRate"
  102 + width="120"
86 sortable 103 sortable
87 label="班级得分率" 104 label="班级得分率"
88 align="center" 105 align="center"
89 ><template slot-scope="scoped" 106 ><template slot-scope="scoped"
90 - >{{ scoped.row.scoringRate }}%</template 107 + >{{ scoped.row.classScoringRate }}%</template
91 ></el-table-column 108 ></el-table-column
92 > 109 >
93 - <el-table-column  
94 - prop="correctAnswer"  
95 - label="答案"  
96 - align="center"  
97 - ></el-table-column> 110 + <el-table-column prop="correctAnswer" label="答案" align="center"
  111 + ><template slot-scope="scoped">{{
  112 + scoped.row.correctAnswer == 1
  113 + ? "✓"
  114 + : scoped.row.correctAnswer == 2
  115 + ? "✗"
  116 + : scoped.row.correctAnswer
  117 + }}</template>
  118 + </el-table-column>
98 <el-table-column 119 <el-table-column
99 v-for="(item, index) in optionsList" 120 v-for="(item, index) in optionsList"
100 :key="index" 121 :key="index"
101 - :label="item.option"  
102 - :prop="item.option" 122 + :label="'选项' + (index + 1)"
  123 + :prop="'option' + index"
  124 + align="center"
103 > 125 >
104 </el-table-column> 126 </el-table-column>
105 </el-table> 127 </el-table>
  128 + <div class="hui-box" v-show="type == 1">
  129 + <span class="s-txt">汇总</span>
  130 + <ul class="hui-ul">
  131 + <li class="hui-li">
  132 + <span class="hui-s s1">主观题</span>
  133 + <span class="hui-s s1">{{ paperModifyLog.subjectiveScore }}</span>
  134 + <span class="hui-s s2">{{
  135 + paperModifyLog.subjectiveHighestScore
  136 + }}</span>
  137 + <span class="hui-s s2">{{
  138 + paperModifyLog.subjectiveLowestScore
  139 + }}</span>
  140 + <span class="hui-s s2">{{
  141 + paperModifyLog.subjectiveAvgScore
  142 + }}</span>
  143 + <span class="hui-s s3"
  144 + >{{ paperModifyLog.subjectiveClassScoringRate }}%</span
  145 + >
  146 + </li>
  147 + <li class="hui-li">
  148 + <span class="hui-s s1">客观题</span>
  149 + <span class="hui-s s1">{{ paperModifyLog.objectiveScore }}</span>
  150 + <span class="hui-s s2">{{
  151 + paperModifyLog.objectiveHighestScore
  152 + }}</span>
  153 + <span class="hui-s s2">{{
  154 + paperModifyLog.objectiveLowestScore
  155 + }}</span>
  156 + <span class="hui-s s2">{{ paperModifyLog.objectiveAvgScore }}</span>
  157 + <span class="hui-s s3"
  158 + >{{ paperModifyLog.objectiveClassScoringRate }}%</span
  159 + >
  160 + </li>
  161 + <li class="hui-li">
  162 + <span class="hui-s s1">整卷</span>
  163 + <span class="hui-s s1">{{ paperModifyLog.examPaperScore }}</span>
  164 + <span class="hui-s s2">{{ paperModifyLog.highestScore }}</span>
  165 + <span class="hui-s s2">{{ paperModifyLog.lowestScore }}</span>
  166 + <span class="hui-s s2">{{ paperModifyLog.avgScore }}</span>
  167 + <span class="hui-s s3">{{ paperModifyLog.classScoringRate }}%</span>
  168 + </li>
  169 + </ul>
  170 + </div>
106 <el-table 171 <el-table
107 - v-if="type == 2" 172 + v-show="type == 2"
108 :data="tableData2" 173 :data="tableData2"
109 border 174 border
110 style="width: 100%" 175 style="width: 100%"
@@ -123,7 +188,7 @@ @@ -123,7 +188,7 @@
123 align="center" 188 align="center"
124 ></el-table-column> 189 ></el-table-column>
125 <el-table-column 190 <el-table-column
126 - prop="examPaperScore" 191 + prop="examScore"
127 label="总分" 192 label="总分"
128 sortable 193 sortable
129 align="center" 194 align="center"
@@ -175,7 +240,7 @@ @@ -175,7 +240,7 @@
175 </el-table-column> 240 </el-table-column>
176 </el-table> 241 </el-table>
177 <el-table 242 <el-table
178 - v-if="type == 3" 243 + v-show="type == 3"
179 :data="tableData2" 244 :data="tableData2"
180 border 245 border
181 style="width: 100%" 246 style="width: 100%"
@@ -192,19 +257,19 @@ @@ -192,19 +257,19 @@
192 align="center" 257 align="center"
193 ></el-table-column> 258 ></el-table-column>
194 <el-table-column 259 <el-table-column
195 - prop="examPaperScore" 260 + prop="examScore"
196 label="总分" 261 label="总分"
197 sortable 262 sortable
198 align="center" 263 align="center"
199 ></el-table-column> 264 ></el-table-column>
200 <el-table-column label="分数组成" align="center"> 265 <el-table-column label="分数组成" align="center">
201 <el-table-column 266 <el-table-column
202 - prop="objectiveScore" 267 + prop="objectiveExamScore"
203 label="客观题分" 268 label="客观题分"
204 align="center" 269 align="center"
205 ></el-table-column> 270 ></el-table-column>
206 <el-table-column 271 <el-table-column
207 - prop="subjectiveScore" 272 + prop="subjectiveExamScore"
208 label="主观题分" 273 label="主观题分"
209 align="center" 274 align="center"
210 ></el-table-column> 275 ></el-table-column>
@@ -219,7 +284,7 @@ @@ -219,7 +284,7 @@
219 </el-table-column> 284 </el-table-column>
220 </el-table> 285 </el-table>
221 <el-table 286 <el-table
222 - v-if="type == 4" 287 + v-show="type == 4"
223 :data="tableData2" 288 :data="tableData2"
224 border 289 border
225 style="width: 100%" 290 style="width: 100%"
@@ -291,6 +356,7 @@ @@ -291,6 +356,7 @@
291 > 356 >
292 <div> 357 <div>
293 <el-button 358 <el-button
  359 + v-if="paperModifyLog.subjectiveScore != 0"
294 @click="diaUp = true" 360 @click="diaUp = true"
295 type="primary" 361 type="primary"
296 round 362 round
@@ -302,7 +368,6 @@ @@ -302,7 +368,6 @@
302 </div> 368 </div>
303 <div class="edit-dia" v-show="dialogVisible" height="100%"> 369 <div class="edit-dia" v-show="dialogVisible" height="100%">
304 <editAnswer 370 <editAnswer
305 - :id="id"  
306 :title="title" 371 :title="title"
307 :score="score" 372 :score="score"
308 @cancel="cancel" 373 @cancel="cancel"
@@ -346,6 +411,21 @@ export default { @@ -346,6 +411,21 @@ export default {
346 paperModifyLog: { 411 paperModifyLog: {
347 realName: "", 412 realName: "",
348 modifiedTime: "", 413 modifiedTime: "",
  414 + subjectiveScore: 0,
  415 + subjectiveHighestScore: "",
  416 + subjectiveLowestScore: "",
  417 + subjectiveAvgScore: "",
  418 + subjectiveClassScoringRate: "",
  419 + objectiveScore: "",
  420 + objectiveHighestScore: "",
  421 + objectiveLowestScore: "",
  422 + objectiveAvgScore: "",
  423 + objectiveClassScoringRate: "",
  424 + examPaperScore: "",
  425 + highestScore: "",
  426 + lowestScore: "",
  427 + avgScore: "",
  428 + classScoringRate: "",
349 }, 429 },
350 tableData: [], 430 tableData: [],
351 optionsList: [], 431 optionsList: [],
@@ -382,6 +462,7 @@ export default { @@ -382,6 +462,7 @@ export default {
382 return tit; 462 return tit;
383 }, 463 },
384 edit() { 464 edit() {
  465 + this.$refs.editAnswer.edit(this.id);
385 this.dialogVisible = true; 466 this.dialogVisible = true;
386 }, 467 },
387 cancel() { 468 cancel() {
@@ -421,8 +502,8 @@ export default { @@ -421,8 +502,8 @@ export default {
421 }); 502 });
422 this.loading = false; 503 this.loading = false;
423 if (status === 0) { 504 if (status === 0) {
424 - if (data.paperModifyLog) {  
425 - this.paperModifyLog = { ...data.paperModifyLog }; 505 + if (data.examReport) {
  506 + this.paperModifyLog = { ...data.examReport };
426 } 507 }
427 } else { 508 } else {
428 this.$message.error(info); 509 this.$message.error(info);
@@ -437,9 +518,9 @@ export default { @@ -437,9 +518,9 @@ export default {
437 this.loading = false; 518 this.loading = false;
438 if (status === 0) { 519 if (status === 0) {
439 this.$message.success(info); 520 this.$message.success(info);
440 - this._QueryData()  
441 - this.paperModifyLog.modifiedTime=""  
442 - this.paperModifyLog.realName="" 521 + this._QueryData();
  522 + this.paperModifyLog.modifiedTime = "";
  523 + this.paperModifyLog.realName = "";
443 } else { 524 } else {
444 this.$message.error(info); 525 this.$message.error(info);
445 } 526 }
@@ -463,8 +544,9 @@ export default { @@ -463,8 +544,9 @@ export default {
463 console.log(detail); 544 console.log(detail);
464 detail.map((items, index) => { 545 detail.map((items, index) => {
465 params["que" + items.id] = items.id; 546 params["que" + items.id] = items.id;
466 - params["score" + items.id] = items.score;  
467 - params["answer" + items.id] = items.answer; 547 + params["score" + items.id] = Number(items.score).toFixed(2);
  548 + params["answer" + items.id] =
  549 + items.answer == 1 ? "✓" : items.answer == 2 ? "✗" : items.answer;
468 params["isRight" + items.id] = items.isRight; 550 params["isRight" + items.id] = items.isRight;
469 params["questionType" + items.id] = items.questionType; 551 params["questionType" + items.id] = items.questionType;
470 }); 552 });
@@ -498,7 +580,8 @@ export default { @@ -498,7 +580,8 @@ export default {
498 } 580 }
499 console.log(detail); 581 console.log(detail);
500 detail.map((items, index) => { 582 detail.map((items, index) => {
501 - params[items.option] = items.count; 583 + params["option" + index] =
  584 + items.option == 1 ? "✓" : items.option == 2 ? "✗" : items.option;
502 }); 585 });
503 return { 586 return {
504 ...item, 587 ...item,
@@ -603,4 +686,38 @@ export default { @@ -603,4 +686,38 @@ export default {
603 display: flex; 686 display: flex;
604 justify-content: space-between; 687 justify-content: space-between;
605 } 688 }
  689 +.hui-box {
  690 + display: flex;
  691 + text-align: center;
  692 + .s-txt {
  693 + width: 61px;
  694 + line-height: 144px;
  695 + background: #e2e2e2;
  696 + font-size: 16px;
  697 + color: #fff;
  698 + font-weight: 700;
  699 + }
  700 + .hui-ul {
  701 + border-top: 1px solid #e2e2e2;
  702 + }
  703 + .hui-li {
  704 + display: flex;
  705 + .hui-s {
  706 + height: 48px;
  707 + line-height: 48px;
  708 + border-right: 1px solid #e2e2e2;
  709 + border-bottom: 1px solid #e2e2e2;
  710 + box-sizing: border-box;
  711 + }
  712 + .s1 {
  713 + width: 100px;
  714 + }
  715 + .s2 {
  716 + width: 110px;
  717 + }
  718 + .s3 {
  719 + width: 120px;
  720 + }
  721 + }
  722 +}
606 </style> 723 </style>
607 \ No newline at end of file 724 \ No newline at end of file
src/views/test/editAnswer.vue
@@ -299,14 +299,14 @@ export default { @@ -299,14 +299,14 @@ export default {
299 score: "", 299 score: "",
300 }, 300 },
301 watch: { 301 watch: {
302 - id: {  
303 - handler: function (val) {  
304 - if (val) {  
305 - this.edit();  
306 - }  
307 - },  
308 - immediate: true,  
309 - }, 302 + // id: {
  303 + // handler: function (val) {
  304 + // if (val) {
  305 + // this.edit();
  306 + // }
  307 + // },
  308 + // immediate: true,
  309 + // },
310 }, 310 },
311 data() { 311 data() {
312 return { 312 return {
@@ -486,10 +486,10 @@ export default { @@ -486,10 +486,10 @@ export default {
486 } 486 }
487 this.diaSetAns = false; 487 this.diaSetAns = false;
488 }, 488 },
489 - async edit() { 489 + async edit(id) {
490 //修改答案 490 //修改答案
491 const { data, status, info } = await this.$request.examQuestionList({ 491 const { data, status, info } = await this.$request.examQuestionList({
492 - examId: this.id, 492 + examId: id,
493 }); 493 });
494 if (status == 0) { 494 if (status == 0) {
495 this.questionList = deepClone(data?.list || []); 495 this.questionList = deepClone(data?.list || []);
src/views/test/index.vue
@@ -11,7 +11,6 @@ @@ -11,7 +11,6 @@
11 class="sel" 11 class="sel"
12 v-model="query.classId" 12 v-model="query.classId"
13 placeholder="选择班级" 13 placeholder="选择班级"
14 - @change="changClazz"  
15 > 14 >
16 <el-option 15 <el-option
17 v-for="item in classList" 16 v-for="item in classList"
@@ -27,7 +26,6 @@ @@ -27,7 +26,6 @@
27 multiple 26 multiple
28 v-model="query.subjectNames" 27 v-model="query.subjectNames"
29 placeholder="选择科目" 28 placeholder="选择科目"
30 - @change="_QueryData"  
31 > 29 >
32 <el-option 30 <el-option
33 v-for="item in subjectList" 31 v-for="item in subjectList"
@@ -42,7 +40,6 @@ @@ -42,7 +40,6 @@
42 class="sel" 40 class="sel"
43 v-model="query.subjectNames" 41 v-model="query.subjectNames"
44 placeholder="选择科目" 42 placeholder="选择科目"
45 - @change="_QueryData"  
46 > 43 >
47 <el-option 44 <el-option
48 v-for="item in subjectList" 45 v-for="item in subjectList"
@@ -97,7 +94,7 @@ @@ -97,7 +94,7 @@
97 <el-radio-button :label="1">单卷测练报表</el-radio-button> 94 <el-radio-button :label="1">单卷测练报表</el-radio-button>
98 <el-radio-button :label="2">阶段测练报表</el-radio-button> 95 <el-radio-button :label="2">阶段测练报表</el-radio-button>
99 </el-radio-group> 96 </el-radio-group>
100 - <div v-if="tabIndex == 1" v-loading="loading"> 97 + <div v-show="tabIndex == 1" v-loading="loading">
101 <el-table :data="tableData" border style="width: 100%"> 98 <el-table :data="tableData" border style="width: 100%">
102 <el-table-column 99 <el-table-column
103 prop="title" 100 prop="title"
@@ -110,39 +107,51 @@ @@ -110,39 +107,51 @@
110 align="center" 107 align="center"
111 width="100" 108 width="100"
112 ></el-table-column> 109 ></el-table-column>
113 - <el-table-column  
114 - prop="answeredNum"  
115 - label="测验人数"  
116 - align="center"  
117 - ></el-table-column> 110 + <el-table-column prop="answeredNum" label="测验人数" align="center"
  111 + ><template slot-scope="scoped">{{
  112 + `${scoped.row.answeredNum}/${scoped.row.classPersonNum}`
  113 + }}</template></el-table-column
  114 + >
118 <el-table-column 115 <el-table-column
119 prop="examStartTime" 116 prop="examStartTime"
120 label="测验时间" 117 label="测验时间"
121 align="center" 118 align="center"
122 ></el-table-column> 119 ></el-table-column>
123 - <el-table-column  
124 - prop="avgScore"  
125 - label="班平均分"  
126 - align="center"  
127 - ></el-table-column>  
128 - <el-table-column  
129 - prop="highestScore"  
130 - label="班最高分"  
131 - align="center"  
132 - ></el-table-column>  
133 - <el-table-column  
134 - prop="lowestScore"  
135 - label="班最低分"  
136 - align="center"  
137 - ></el-table-column> 120 + <el-table-column prop="avgScore" label="班平均分" align="center"
  121 + ><template slot-scope="scoped">{{
  122 + scoped.row.subjectiveScore == scoped.row.examPaperScore ||
  123 + scoped.row.answerNum == 0
  124 + ? scoped.row.avgScore || "-"
  125 + : scoped.row.avgScore
  126 + }}</template></el-table-column
  127 + >
  128 + <el-table-column prop="highestScore" label="班最高分" align="center"
  129 + ><template slot-scope="scoped">{{
  130 + scoped.row.subjectiveScore == scoped.row.examPaperScore ||
  131 + scoped.row.answerNum == 0
  132 + ? scoped.row.highestScore || "-"
  133 + : scoped.row.highestScore
  134 + }}</template></el-table-column
  135 + >
  136 + <el-table-column prop="lowestScore" label="班最低分" align="center"
  137 + ><template slot-scope="scoped">{{
  138 + scoped.row.subjectiveScore == scoped.row.examPaperScore ||
  139 + scoped.row.answerNum == 0
  140 + ? scoped.row.lowestScore || "-"
  141 + : scoped.row.lowestScore
  142 + }}</template></el-table-column
  143 + >
138 <el-table-column 144 <el-table-column
139 prop="excellenRate" 145 prop="excellenRate"
140 label="优秀数(率)" 146 label="优秀数(率)"
141 sortable 147 sortable
142 align="center" 148 align="center"
143 - ><template slot-scope="scoped"  
144 - >{{ scoped.row.excellenRate }}%</template  
145 - ></el-table-column 149 + ><template slot-scope="scoped">{{
  150 + scoped.row.subjectiveScore == scoped.row.examPaperScore ||
  151 + scoped.row.answerNum == 0
  152 + ? scoped.row.excellenNum || "-"
  153 + : `${scoped.row.excellenNum}/${scoped.row.excellenRate}%`
  154 + }}</template></el-table-column
146 > 155 >
147 <el-table-column 156 <el-table-column
148 prop="goodRate" 157 prop="goodRate"
@@ -150,8 +159,13 @@ @@ -150,8 +159,13 @@
150 sortable 159 sortable
151 align="center" 160 align="center"
152 ><template slot-scope="scoped" 161 ><template slot-scope="scoped"
153 - >{{ scoped.row.goodRate }}%</template  
154 - ></el-table-column 162 + >{{
  163 + scoped.row.subjectiveScore == scoped.row.examPaperScore ||
  164 + scoped.row.answerNum == 0
  165 + ? scoped.row.goodNum || "-"
  166 + : `${scoped.row.goodNum}/${scoped.row.goodRate}%`
  167 + }}
  168 + </template></el-table-column
155 > 169 >
156 <el-table-column 170 <el-table-column
157 prop="passRate" 171 prop="passRate"
@@ -159,21 +173,34 @@ @@ -159,21 +173,34 @@
159 sortable 173 sortable
160 align="center" 174 align="center"
161 ><template slot-scope="scoped" 175 ><template slot-scope="scoped"
162 - >{{ scoped.row.passRate }}%</template  
163 - ></el-table-column 176 + >{{
  177 + scoped.row.subjectiveScore == scoped.row.examPaperScore ||
  178 + scoped.row.answerNum == 0
  179 + ? scoped.row.passNum || "-"
  180 + : `${scoped.row.passNum}/${scoped.row.passRate}%`
  181 + }}
  182 + </template></el-table-column
164 > 183 >
165 <el-table-column 184 <el-table-column
166 prop="failedRate" 185 prop="failedRate"
167 label="不及格数(率)" 186 label="不及格数(率)"
168 sortable 187 sortable
169 align="center" 188 align="center"
170 - ><template slot-scope="scoped"  
171 - >{{ scoped.row.failedRate }}%</template  
172 - ></el-table-column 189 + ><template slot-scope="scoped">{{
  190 + scoped.row.subjectiveScore == scoped.row.examPaperScore ||
  191 + scoped.row.answerNum == 0
  192 + ? scoped.row.failedNum || "-"
  193 + : `${scoped.row.failedNum}/${scoped.row.failedRate}%`
  194 + }}</template></el-table-column
173 > 195 >
174 <el-table-column label="操作" align="center"> 196 <el-table-column label="操作" align="center">
175 <template slot-scope="scoped"> 197 <template slot-scope="scoped">
176 - <el-tooltip effect="dark" content="详情" placement="top"> 198 + <el-tooltip
  199 + v-if="scoped.row.answerNum != 0"
  200 + effect="dark"
  201 + content="详情"
  202 + placement="top"
  203 + >
177 <el-button 204 <el-button
178 type="primary" 205 type="primary"
179 circle 206 circle
@@ -182,7 +209,12 @@ @@ -182,7 +209,12 @@
182 @click="linkTo(scoped.row)" 209 @click="linkTo(scoped.row)"
183 ></el-button> 210 ></el-button>
184 </el-tooltip> 211 </el-tooltip>
185 - <el-tooltip effect="dark" content="修改答案" placement="top"> 212 + <el-tooltip
  213 + v-else
  214 + effect="dark"
  215 + content="修改答案"
  216 + placement="top"
  217 + >
186 <el-button 218 <el-button
187 type="primary" 219 type="primary"
188 circle 220 circle
@@ -191,6 +223,20 @@ @@ -191,6 +223,20 @@
191 @click="edit(scoped.row)" 223 @click="edit(scoped.row)"
192 ></el-button> 224 ></el-button>
193 </el-tooltip> 225 </el-tooltip>
  226 + <el-tooltip
  227 + v-if="scoped.row.subjectiveScore == scoped.row.examPaperScore"
  228 + effect="dark"
  229 + content="导入主观题"
  230 + placement="top"
  231 + >
  232 + <el-button
  233 + type="primary"
  234 + circle
  235 + size="mini"
  236 + icon="fa fa-cloud"
  237 + @click="uploadSJ(scoped.row)"
  238 + ></el-button>
  239 + </el-tooltip>
194 </template> 240 </template>
195 </el-table-column> 241 </el-table-column>
196 </el-table> 242 </el-table>
@@ -207,8 +253,13 @@ @@ -207,8 +253,13 @@
207 </el-pagination> 253 </el-pagination>
208 </div> 254 </div>
209 </div> 255 </div>
210 - <div v-if="tabIndex == 2" v-loading="loading">  
211 - <el-table :data="tableData" border style="width: 100%"> 256 + <div v-show="tabIndex == 2" v-loading="loading">
  257 + <el-table
  258 + v-if="role == 'ROLE_JIAOSHI'"
  259 + :data="tableData"
  260 + border
  261 + style="width: 100%"
  262 + >
212 <el-table-column 263 <el-table-column
213 prop="studentCode" 264 prop="studentCode"
214 label="学号" 265 label="学号"
@@ -229,7 +280,7 @@ @@ -229,7 +280,7 @@
229 > 280 >
230 <el-table-column 281 <el-table-column
231 :prop="'score' + index" 282 :prop="'score' + index"
232 - label="总分/成绩" 283 + :label="index == 0 ? '总分' : '成绩'"
233 align="center" 284 align="center"
234 ></el-table-column> 285 ></el-table-column>
235 <el-table-column 286 <el-table-column
@@ -239,6 +290,47 @@ @@ -239,6 +290,47 @@
239 ></el-table-column> 290 ></el-table-column>
240 </el-table-column> 291 </el-table-column>
241 </el-table> 292 </el-table>
  293 + <el-table v-else :data="tableData" border style="width: 100%">
  294 + <el-table-column
  295 + prop="studentCode"
  296 + label="学号"
  297 + align="center"
  298 + fixed
  299 + ></el-table-column>
  300 + <el-table-column
  301 + prop="studentName"
  302 + label="姓名"
  303 + fixed
  304 + align="center"
  305 + ></el-table-column>
  306 + <el-table-column
  307 + align="center"
  308 + v-for="(item, index) in answerList"
  309 + :key="index"
  310 + :label="item"
  311 + >
  312 + <el-table-column
  313 + :prop="'examCount' + item"
  314 + label="测练数"
  315 + align="center"
  316 + ></el-table-column>
  317 + <el-table-column
  318 + :prop="'participationCount' + item"
  319 + label="参与数"
  320 + align="center"
  321 + ></el-table-column>
  322 + <el-table-column
  323 + :prop="'score' + item"
  324 + label="总分"
  325 + align="center"
  326 + ></el-table-column>
  327 + <el-table-column
  328 + :prop="'classRank' + item"
  329 + label="班名"
  330 + align="center"
  331 + ></el-table-column>
  332 + </el-table-column>
  333 + </el-table>
242 </div> 334 </div>
243 <p class="down" v-if="tabIndex == 2"> 335 <p class="down" v-if="tabIndex == 2">
244 <el-button type="info" plain round icon="fa fa-cloud-download" 336 <el-button type="info" plain round icon="fa fa-cloud-download"
@@ -246,9 +338,23 @@ @@ -246,9 +338,23 @@
246 > 338 >
247 </p> 339 </p>
248 </div> 340 </div>
  341 + <el-dialog title="导入主观题分数" :visible.sync="diaUp" width="600">
  342 + <up-load :url="url" :examId="examId" fileName="教师名单">
  343 + <template slot="down">
  344 + <p class="down-txt">
  345 + 第一步:下载模板并编辑完成学生分数
  346 + <el-link type="danger" @click="downExcel">模板下载</el-link> 。
  347 + </p>
  348 + <p class="down-txt">第二步:上传完成编辑的模板文件并导入。</p>
  349 + </template>
  350 + </up-load>
  351 + <div class="dialog-footer" slot="footer">
  352 + <el-button @click="diaUp = false">取 消</el-button>
  353 + </div>
  354 + </el-dialog>
249 <div class="edit-dia" v-show="dialogVisible" height="100%"> 355 <div class="edit-dia" v-show="dialogVisible" height="100%">
250 <editAnswer 356 <editAnswer
251 - :id="form.id" 357 + ref="editAnswer"
252 :title="form.title" 358 :title="form.title"
253 :score="form.examPaperScore" 359 :score="form.examPaperScore"
254 @cancel="cancel" 360 @cancel="cancel"
@@ -259,7 +365,7 @@ @@ -259,7 +365,7 @@
259 </template> 365 </template>
260 366
261 <script> 367 <script>
262 -import { formatDate } from "utils"; 368 +import { formatDate, downloadFile } from "utils";
263 import editAnswer from "./editAnswer.vue"; 369 import editAnswer from "./editAnswer.vue";
264 export default { 370 export default {
265 components: { editAnswer }, 371 components: { editAnswer },
@@ -267,6 +373,9 @@ export default { @@ -267,6 +373,9 @@ export default {
267 return { 373 return {
268 role: "", 374 role: "",
269 loading: false, 375 loading: false,
  376 + diaUp: false,
  377 + url: "/api_html/teaching/importSubjectiveScore",
  378 + examId: "",
270 dialogVisible: false, 379 dialogVisible: false,
271 form: { 380 form: {
272 id: "", 381 id: "",
@@ -317,6 +426,10 @@ export default { @@ -317,6 +426,10 @@ export default {
317 }, 426 },
318 }); 427 });
319 }, 428 },
  429 + uploadSJ(obj) {
  430 + this.examId = obj.id;
  431 + this.diaUp = true;
  432 + },
320 cancel() { 433 cancel() {
321 this.dialogVisible = false; 434 this.dialogVisible = false;
322 }, 435 },
@@ -344,6 +457,7 @@ export default { @@ -344,6 +457,7 @@ export default {
344 //中国式星期天是一周的最后一天 457 //中国式星期天是一周的最后一天
345 day = 7; 458 day = 7;
346 } 459 }
  460 + day--;
347 let aTime = new Date().getTime() - 24 * 60 * 60 * 1000 * day; 461 let aTime = new Date().getTime() - 24 * 60 * 60 * 1000 * day;
348 that.query.startDay = formatDate(new Date(aTime), "yyyy-MM-dd"); 462 that.query.startDay = formatDate(new Date(aTime), "yyyy-MM-dd");
349 that.query.endDay = formatDate(new Date(), "yyyy-MM-dd"); 463 that.query.endDay = formatDate(new Date(), "yyyy-MM-dd");
@@ -398,12 +512,26 @@ export default { @@ -398,12 +512,26 @@ export default {
398 }, 512 },
399 edit(item) { 513 edit(item) {
400 this.form = { ...item }; 514 this.form = { ...item };
  515 + this.$refs.editAnswer.edit(this.form.id);
401 this.dialogVisible = true; 516 this.dialogVisible = true;
402 }, 517 },
403 changeTab() { 518 changeTab() {
404 this.page = 1; 519 this.page = 1;
405 this._QueryData(); 520 this._QueryData();
406 }, 521 },
  522 + async downExcel() {
  523 + let data = await this.$request.subjectiveScoreTemplate({
  524 + examId: this.id,
  525 + });
  526 + if (data && !data.code) {
  527 + let blob = new Blob([data], {
  528 + type: "application/vnd.ms-excel;charset=utf-8",
  529 + });
  530 + downloadFile(`主观题模版.xlsx`, blob);
  531 + } else {
  532 + this.$message.error(data.message);
  533 + }
  534 + },
407 async changClazz() { 535 async changClazz() {
408 this.page = 1; 536 this.page = 1;
409 await this._QuerySubjectList(); 537 await this._QuerySubjectList();
@@ -478,6 +606,7 @@ export default { @@ -478,6 +606,7 @@ export default {
478 query.subjectNames = [query.subjectNames]; 606 query.subjectNames = [query.subjectNames];
479 } else { 607 } else {
480 if ( 608 if (
  609 + query["subjectNames"] &&
481 query["subjectNames"].length == 1 && 610 query["subjectNames"].length == 1 &&
482 query["subjectNames"][0] == "全部" 611 query["subjectNames"][0] == "全部"
483 ) { 612 ) {
@@ -485,6 +614,9 @@ export default { @@ -485,6 +614,9 @@ export default {
485 return item.value; 614 return item.value;
486 }); 615 });
487 query["subjectNames"].shift(); 616 query["subjectNames"].shift();
  617 + }else{
  618 + this.loading = false;
  619 + return
488 } 620 }
489 } 621 }
490 const { data, status, info } = await this.$request.examReportList({ 622 const { data, status, info } = await this.$request.examReportList({
@@ -515,13 +647,14 @@ export default { @@ -515,13 +647,14 @@ export default {
515 } 647 }
516 if (this.role == "ROLE_BANZHUREN") { 648 if (this.role == "ROLE_BANZHUREN") {
517 if ( 649 if (
518 - query["subjectNames"].length == 1 && 650 + query["subjectNames"] &&
  651 + query["subjectNames"]?.length == 1 &&
519 query["subjectNames"][0] == "全部" 652 query["subjectNames"][0] == "全部"
520 ) { 653 ) {
521 query["subjectNames"] = this.subjectList.map((item) => { 654 query["subjectNames"] = this.subjectList.map((item) => {
522 return item.value; 655 return item.value;
523 }); 656 });
524 - query["subjectNames"].shift(); 657 + query["subjectNames"]?.shift();
525 } 658 }
526 } 659 }
527 const phaseExamReport = 660 const phaseExamReport =
@@ -534,47 +667,57 @@ export default { @@ -534,47 +667,57 @@ export default {
534 this.loading = false; 667 this.loading = false;
535 if (status === 0) { 668 if (status === 0) {
536 this.total = data.count; 669 this.total = data.count;
537 - let dataIdsList = [],  
538 - dataList = [];  
539 - data?.list.map((item) => {  
540 - item.examList.map((items) => {  
541 - if (this.role == "ROLE_JITUAN") {  
542 - // if (!dataIdsList.includes(items.grade)) {  
543 - // dataIdsList.push(items.grade);  
544 - // dataList.push(items);  
545 - // }  
546 - } else { 670 + if (this.role == "ROLE_BANZHUREN") {
  671 + let subjectName = [];
  672 + this.tableData = data?.list.map((item) => {
  673 + let params = {};
  674 + item.dataList.map((items, index) => {
  675 + if (!subjectName.includes(items.subjectName)) {
  676 + subjectName.push(items.subjectName);
  677 + }
  678 + params["examCount" + items.subjectName] = items.examCount;
  679 + params["participationCount" + items.subjectName] =
  680 + items.participationCount;
  681 + params["score" + items.subjectName] = items.score;
  682 + params["classRank" + items.subjectName] = items.classRank;
  683 + });
  684 + return {
  685 + ...item,
  686 + ...params,
  687 + };
  688 + });
  689 + this.answerList = [...subjectName];
  690 + } else {
  691 + let dataIdsList = [],
  692 + dataList = [];
  693 + data?.list.map((item) => {
  694 + item.examList.map((items) => {
547 if (!dataIdsList.includes(items.title)) { 695 if (!dataIdsList.includes(items.title)) {
548 dataIdsList.push(items.title); 696 dataIdsList.push(items.title);
549 dataList.push(items); 697 dataList.push(items);
550 } 698 }
551 - } 699 + });
552 }); 700 });
553 - });  
554 - console.log(dataList);  
555 - this.tableData = data?.list.map((item) => {  
556 - let params = {};  
557 - dataIdsList.map((ids, index) => {  
558 - params["score" + index] = "--";  
559 - params["classRank" + index] = "--";  
560 - item.examList.map((items) => {  
561 - if (this.role == "ROLE_JITUAN") {  
562 - if (items.title == ids) {  
563 - }  
564 - } else { 701 + console.log(dataList);
  702 + this.tableData = data?.list.map((item) => {
  703 + let params = {};
  704 + dataIdsList.map((ids, index) => {
  705 + params["score" + index] = "--";
  706 + params["classRank" + index] = "--";
  707 + item.examList.map((items) => {
565 if (items.title == ids) { 708 if (items.title == ids) {
566 params["score" + index] = items.score; 709 params["score" + index] = items.score;
567 params["classRank" + index] = items.classRank; 710 params["classRank" + index] = items.classRank;
568 } 711 }
569 - } 712 + });
570 }); 713 });
  714 + return {
  715 + ...item,
  716 + ...params,
  717 + };
571 }); 718 });
572 - return {  
573 - ...item,  
574 - ...params,  
575 - };  
576 - });  
577 - this.answerList = dataList; 719 + this.answerList = dataList;
  720 + }
578 } else { 721 } else {
579 this.$message.error(info); 722 this.$message.error(info);
580 } 723 }