Commit e17ec73967aa4fd63d93ee0f026998345a5e3649
1 parent
079cb4cf
随堂问,即时测导出爆表修改
Showing
16 changed files
with
448 additions
and
172 deletions
src/api/apis/apis.js
... | ... | @@ -1606,15 +1606,6 @@ export default { |
1606 | 1606 | }, |
1607 | 1607 | |
1608 | 1608 | |
1609 | - /** v1.5 */ | |
1610 | - // 教师/个人版查询答题卡列表的分享数量 | |
1611 | - paperShareCount(data) { | |
1612 | - return service({ | |
1613 | - url: setUpUrls.paperShareCount, | |
1614 | - method: "POST", | |
1615 | - data | |
1616 | - }); | |
1617 | - }, | |
1618 | 1609 | // 教师/个人版导入备题组卷Word文档 |
1619 | 1610 | paperWordUpload(data) { |
1620 | 1611 | return service({ | ... | ... |
src/api/urls/apis.js
src/components/exportDia.vue
0 → 100644
1 | +<template> | |
2 | + <div> | |
3 | + <el-dialog :close-on-click-modal="false" :visible.sync="diaShow" width="360px"> | |
4 | + <div v-show="exportType == 1"> | |
5 | + <div class="down-item"> | |
6 | + <p class="tit">是否将学生表现折线图一起导出</p> | |
7 | + <el-radio-group v-model="downType" @change="changeDownType"> | |
8 | + <el-radio :label="1">不导出</el-radio> | |
9 | + <el-radio :label="2">导出</el-radio> | |
10 | + </el-radio-group> | |
11 | + </div> | |
12 | + <div class="down-item" v-show="downType == 2"> | |
13 | + <p class="tit">选择要导出的学生</p> | |
14 | + <el-radio-group v-model="exportType"> | |
15 | + <el-radio :label="1">导出全部</el-radio> | |
16 | + <el-radio :label="2">导出制定学生</el-radio> | |
17 | + </el-radio-group> | |
18 | + </div> | |
19 | + </div> | |
20 | + <ul v-show="exportType == 2"> | |
21 | + <p class="export-tit">选择学生</p> | |
22 | + <el-table :data="exportStudent" @selection-change="handleSelectionChange" :max-height="300"> | |
23 | + <el-table-column type="selection"></el-table-column> | |
24 | + <el-table-column prop="studentName" label="姓名" align="center"></el-table-column> | |
25 | + <el-table-column prop="classRank" label="班名" align="center"></el-table-column> | |
26 | + <el-table-column prop="correctRate" label="总正确率" align="center"><template slot-scope="scoped">{{ | |
27 | + scoped.row.correctRate }}%</template></el-table-column> | |
28 | + </el-table> | |
29 | + </ul> | |
30 | + <div class="dialog-footer" slot="footer"> | |
31 | + <el-button v-show="downType == 2" size="small" type="primary" round @click="exportData(10)">导出前十</el-button> | |
32 | + <el-button size="small" type="primary" round @click="exportData(0)">确 定</el-button> | |
33 | + <el-button size="small" type="danger" round @click="cancel">取 消</el-button> | |
34 | + </div> | |
35 | + </el-dialog> | |
36 | + </div> | |
37 | +</template> | |
38 | +<script> | |
39 | +export default { | |
40 | + name: "exportDia", | |
41 | + props: { | |
42 | + diaShow: Boolean, | |
43 | + exportStudent: Array | |
44 | + }, | |
45 | + data() { | |
46 | + return { | |
47 | + downType: 1, | |
48 | + exportType: 1, | |
49 | + multipleSelection: [], | |
50 | + } | |
51 | + }, | |
52 | + watch: { | |
53 | + diaShow: function (nVal) { | |
54 | + if (nVal) { | |
55 | + this.downType = 1 | |
56 | + } | |
57 | + } | |
58 | + }, | |
59 | + methods: { | |
60 | + changeDownType() { | |
61 | + this.exportType = 1 | |
62 | + }, | |
63 | + handleSelectionChange(val) { | |
64 | + this.multipleSelection = val | |
65 | + }, | |
66 | + exportData(length) { | |
67 | + let studentIds = [] | |
68 | + if (length) { | |
69 | + studentIds = this.exportStudent.slice(0, 10).map(item => { | |
70 | + return item.studentId | |
71 | + }) | |
72 | + } else { | |
73 | + studentIds = this.multipleSelection.map(item => { | |
74 | + return item.studentId | |
75 | + }) | |
76 | + } | |
77 | + this.$emit('exportData', { studentIds: studentIds }) | |
78 | + }, | |
79 | + cancel() { | |
80 | + if (this.exportType == 2) { | |
81 | + this.exportType = 1 | |
82 | + } else { | |
83 | + this.$emit('cancel') | |
84 | + } | |
85 | + } | |
86 | + } | |
87 | +} | |
88 | +</script> | |
0 | 89 | \ No newline at end of file | ... | ... |
src/main.js
... | ... | @@ -28,7 +28,7 @@ Vue.use(permission) |
28 | 28 | NProgress.inc(0.2) |
29 | 29 | NProgress.configure({ easing: "ease", speed: 500, showSpinner: false }) |
30 | 30 | |
31 | -import "@/mock/index.js" | |
31 | +// import "@/mock/index.js" | |
32 | 32 | |
33 | 33 | Array.prototype.remove = function (val) { |
34 | 34 | var index = this.indexOf(val); | ... | ... |
src/mock/index.js
1 | 1 | import Mock from "mockjs" |
2 | 2 | Mock.mock( |
3 | - "/api_html/common/paper/paperShareCount", { | |
3 | + "/api_html/teaching/paperList", { | |
4 | 4 | info: "success", |
5 | 5 | status: 0, |
6 | 6 | data: { |
7 | - myCount: 24, | |
8 | - grade: 30 | |
7 | + myCount: 5, | |
8 | + gradeCount: 8, | |
9 | + archivedTotal: 6, | |
10 | + total: 30, | |
11 | + list: [ | |
12 | + { | |
13 | + "sectionName": "小学", | |
14 | + "gradeName": "三年级", | |
15 | + "id": 107, | |
16 | + "tenantId": 9, | |
17 | + "regionId": 0, | |
18 | + "schoolId": 34, | |
19 | + "classId": 696, | |
20 | + "thirdId": "", | |
21 | + "section": 1, | |
22 | + "grade": 3, | |
23 | + "subjectName": "语文", | |
24 | + "title": "X102_语文_课时 4", | |
25 | + "startTime": "2023-04-18 17:43:50", | |
26 | + "endTime": "2023-04-18 17:47:06", | |
27 | + "calculateStatus": 1, | |
28 | + "duration": 196, | |
29 | + "status": 0, | |
30 | + "consumingDuration": 3140, | |
31 | + "classPersonNum": 11, | |
32 | + "answeredNum": 1, | |
33 | + "unansweredNum": 20, | |
34 | + "questionNum": 1, | |
35 | + "answerNum": 1, | |
36 | + "totalAnswersNum": 1, | |
37 | + "totalCorrectAnswersNum": 1, | |
38 | + "participationRate": 9.09, | |
39 | + "classCorrectRate": 9.09, | |
40 | + "answerCorrectRate": 100, | |
41 | + "levelConfig": "{\"failed\":0.6,\"pass\":0.8,\"good\":0.9}", | |
42 | + "passedNum": 1, | |
43 | + "passedRate": 9.09, | |
44 | + "excellenNum": 1, | |
45 | + "excellenRate": 9.09, | |
46 | + "goodNum": 0, | |
47 | + "goodRate": 0, | |
48 | + "passNum": 0, | |
49 | + "passRate": 0, | |
50 | + "failedNum": 0, | |
51 | + "failedRate": 0, | |
52 | + "latestCalculateTime": "2023-04-19 14:08:35", | |
53 | + "createdTime": "2023-04-19 14:08:35", | |
54 | + "modifiedTime": "2023-04-19 14:08:35", | |
55 | + "deleteFlag": 0 | |
56 | + }, | |
57 | + { | |
58 | + "sectionName": "小学", | |
59 | + "gradeName": "二年级", | |
60 | + "id": 106, | |
61 | + "tenantId": 9, | |
62 | + "regionId": 0, | |
63 | + "schoolId": 34, | |
64 | + "classId": 696, | |
65 | + "thirdId": "", | |
66 | + "section": 1, | |
67 | + "grade": 2, | |
68 | + "subjectName": "语文", | |
69 | + "title": "X102_语文_课时 2", | |
70 | + "startTime": "2023-04-18 15:58:27", | |
71 | + "endTime": "2023-04-18 16:01:28", | |
72 | + "calculateStatus": 1, | |
73 | + "duration": 182, | |
74 | + "status": 0, | |
75 | + "consumingDuration": 2640, | |
76 | + "classPersonNum": 11, | |
77 | + "answeredNum": 1, | |
78 | + "unansweredNum": 18, | |
79 | + "questionNum": 1, | |
80 | + "answerNum": 1, | |
81 | + "totalAnswersNum": 1, | |
82 | + "totalCorrectAnswersNum": 1, | |
83 | + "participationRate": 9.09, | |
84 | + "classCorrectRate": 9.09, | |
85 | + "answerCorrectRate": 100, | |
86 | + "levelConfig": "{\"failed\":0.6,\"pass\":0.8,\"good\":0.9}", | |
87 | + "passedNum": 1, | |
88 | + "passedRate": 9.09, | |
89 | + "excellenNum": 1, | |
90 | + "excellenRate": 9.09, | |
91 | + "goodNum": 0, | |
92 | + "goodRate": 0, | |
93 | + "passNum": 0, | |
94 | + "passRate": 0, | |
95 | + "failedNum": 0, | |
96 | + "failedRate": 0, | |
97 | + "latestCalculateTime": "2023-04-18 16:01:29", | |
98 | + "createdTime": "2023-04-18 16:01:28", | |
99 | + "modifiedTime": "2023-04-18 16:01:29", | |
100 | + "deleteFlag": 0 | |
101 | + }, | |
102 | + { | |
103 | + "sectionName": "小学", | |
104 | + "gradeName": "二年级", | |
105 | + "id": 105, | |
106 | + "tenantId": 9, | |
107 | + "regionId": 0, | |
108 | + "schoolId": 34, | |
109 | + "classId": 696, | |
110 | + "thirdId": "", | |
111 | + "section": 1, | |
112 | + "grade": 2, | |
113 | + "subjectName": "语文", | |
114 | + "title": "X102_语文_课时 1", | |
115 | + "startTime": "2023-04-18 15:16:11", | |
116 | + "endTime": "2023-04-18 15:21:37", | |
117 | + "calculateStatus": 1, | |
118 | + "duration": 326, | |
119 | + "status": 0, | |
120 | + "consumingDuration": 76880, | |
121 | + "classPersonNum": 11, | |
122 | + "answeredNum": 3, | |
123 | + "unansweredNum": 16, | |
124 | + "questionNum": 1, | |
125 | + "answerNum": 1, | |
126 | + "totalAnswersNum": 3, | |
127 | + "totalCorrectAnswersNum": 2, | |
128 | + "participationRate": 27.27, | |
129 | + "classCorrectRate": 18.18, | |
130 | + "answerCorrectRate": 66.67, | |
131 | + "levelConfig": "{\"failed\":0.6,\"pass\":0.8,\"good\":0.9}", | |
132 | + "passedNum": 2, | |
133 | + "passedRate": 18.18, | |
134 | + "excellenNum": 2, | |
135 | + "excellenRate": 18.18, | |
136 | + "goodNum": 0, | |
137 | + "goodRate": 0, | |
138 | + "passNum": 0, | |
139 | + "passRate": 0, | |
140 | + "failedNum": 1, | |
141 | + "failedRate": 9.09, | |
142 | + "latestCalculateTime": "2023-04-18 15:58:23", | |
143 | + "createdTime": "2023-04-18 15:58:23", | |
144 | + "modifiedTime": "2023-04-18 15:58:23", | |
145 | + "deleteFlag": 0 | |
146 | + }, | |
147 | + { | |
148 | + "sectionName": "小学", | |
149 | + "gradeName": "二年级", | |
150 | + "id": 103, | |
151 | + "tenantId": 9, | |
152 | + "regionId": 0, | |
153 | + "schoolId": 34, | |
154 | + "classId": 696, | |
155 | + "thirdId": "", | |
156 | + "section": 1, | |
157 | + "grade": 2, | |
158 | + "subjectName": "语文", | |
159 | + "title": "X102_语文_课时 1", | |
160 | + "startTime": "2023-04-18 14:20:16", | |
161 | + "endTime": "2023-04-18 14:57:09", | |
162 | + "calculateStatus": 1, | |
163 | + "duration": 2213, | |
164 | + "status": 0, | |
165 | + "consumingDuration": 229820, | |
166 | + "classPersonNum": 9, | |
167 | + "answeredNum": 1, | |
168 | + "unansweredNum": 16, | |
169 | + "questionNum": 4, | |
170 | + "answerNum": 4, | |
171 | + "totalAnswersNum": 4, | |
172 | + "totalCorrectAnswersNum": 4, | |
173 | + "participationRate": 11.11, | |
174 | + "classCorrectRate": 11.11, | |
175 | + "answerCorrectRate": 100, | |
176 | + "levelConfig": "{\"failed\":0.6,\"pass\":0.8,\"good\":0.9}", | |
177 | + "passedNum": 1, | |
178 | + "passedRate": 11.11, | |
179 | + "excellenNum": 1, | |
180 | + "excellenRate": 11.11, | |
181 | + "goodNum": 0, | |
182 | + "goodRate": 0, | |
183 | + "passNum": 0, | |
184 | + "passRate": 0, | |
185 | + "failedNum": 0, | |
186 | + "failedRate": 0, | |
187 | + "latestCalculateTime": "2023-04-18 15:02:33", | |
188 | + "createdTime": "2023-04-18 15:02:32", | |
189 | + "modifiedTime": "2023-04-18 15:02:33", | |
190 | + "deleteFlag": 0 | |
191 | + }, | |
192 | + { | |
193 | + "sectionName": "小学", | |
194 | + "gradeName": "一年级", | |
195 | + "id": 102, | |
196 | + "tenantId": 9, | |
197 | + "regionId": 0, | |
198 | + "schoolId": 34, | |
199 | + "classId": 696, | |
200 | + "thirdId": "", | |
201 | + "section": 1, | |
202 | + "grade": 1, | |
203 | + "subjectName": "语文", | |
204 | + "title": "X102_语文_课时 1", | |
205 | + "startTime": "2023-04-18 11:09:20", | |
206 | + "endTime": "2023-04-18 13:59:30", | |
207 | + "calculateStatus": 1, | |
208 | + "duration": 10210, | |
209 | + "status": 0, | |
210 | + "consumingDuration": 12380, | |
211 | + "classPersonNum": 9, | |
212 | + "answeredNum": 1, | |
213 | + "unansweredNum": 16, | |
214 | + "questionNum": 2, | |
215 | + "answerNum": 2, | |
216 | + "totalAnswersNum": 2, | |
217 | + "totalCorrectAnswersNum": 1, | |
218 | + "participationRate": 11.11, | |
219 | + "classCorrectRate": 5.56, | |
220 | + "answerCorrectRate": 50, | |
221 | + "levelConfig": "{\"failed\":0.6,\"pass\":0.8,\"good\":0.9}", | |
222 | + "passedNum": 0, | |
223 | + "passedRate": 0, | |
224 | + "excellenNum": 0, | |
225 | + "excellenRate": 0, | |
226 | + "goodNum": 0, | |
227 | + "goodRate": 0, | |
228 | + "passNum": 0, | |
229 | + "passRate": 0, | |
230 | + "failedNum": 1, | |
231 | + "failedRate": 11.11, | |
232 | + "latestCalculateTime": "2023-04-18 13:59:36", | |
233 | + "createdTime": "2023-04-18 13:59:35", | |
234 | + "modifiedTime": "2023-04-18 13:59:36", | |
235 | + "deleteFlag": 0 | |
236 | + } | |
237 | + ] | |
9 | 238 | } |
10 | 239 | } |
11 | 240 | ) |
... | ... | @@ -682,8 +911,8 @@ Mock.mock( |
682 | 911 | "participationCount": '5', |
683 | 912 | "classRank": '1', |
684 | 913 | "score": '100', |
685 | - "participationRate":'88', | |
686 | - "correctRate":'90', | |
914 | + "participationRate": '88', | |
915 | + "correctRate": '90', | |
687 | 916 | }, |
688 | 917 | { |
689 | 918 | "subjectName": "英语", |
... | ... | @@ -691,8 +920,8 @@ Mock.mock( |
691 | 920 | "participationCount": '5', |
692 | 921 | "classRank": '2', |
693 | 922 | "score": '100', |
694 | - "participationRate":'70', | |
695 | - "correctRate":'76', | |
923 | + "participationRate": '70', | |
924 | + "correctRate": '76', | |
696 | 925 | }, |
697 | 926 | { |
698 | 927 | "subjectName": "语文", |
... | ... | @@ -700,8 +929,8 @@ Mock.mock( |
700 | 929 | "participationCount": '5', |
701 | 930 | "classRank": '2', |
702 | 931 | "score": '100', |
703 | - "participationRate":'99', | |
704 | - "correctRate":'100', | |
932 | + "participationRate": '99', | |
933 | + "correctRate": '100', | |
705 | 934 | }, |
706 | 935 | ] |
707 | 936 | }], | ... | ... |
src/views/basic/ask/analysis.vue
... | ... | @@ -35,39 +35,7 @@ |
35 | 35 | icon="el-icon-printer">打印</el-button> |
36 | 36 | </p> |
37 | 37 | </div> |
38 | - <el-dialog :close-on-click-modal="false" :visible.sync="diaDown" width="360px"> | |
39 | - <div v-show="exportType == 1"> | |
40 | - <div class="down-item"> | |
41 | - <p class="tit">是否将学生表现折线图一起导出</p> | |
42 | - <el-radio-group v-model="downType" @change="changeDownType"> | |
43 | - <el-radio :label="1">不导出</el-radio> | |
44 | - <el-radio :label="2">导出</el-radio> | |
45 | - </el-radio-group> | |
46 | - </div> | |
47 | - <div class="down-item" v-show="downType == 2"> | |
48 | - <p class="tit">选择要导出的学生</p> | |
49 | - <el-radio-group v-model="exportType"> | |
50 | - <el-radio :label="1">导出全部</el-radio> | |
51 | - <el-radio :label="2">导出制定学生</el-radio> | |
52 | - </el-radio-group> | |
53 | - </div> | |
54 | - </div> | |
55 | - <ul v-show="exportType == 2"> | |
56 | - <p class="export-tit">选择学生</p> | |
57 | - <el-table :data="exportStudent" @selection-change="handleSelectionChange" :max-height="300"> | |
58 | - <el-table-column type="selection"></el-table-column> | |
59 | - <el-table-column prop="studentName" label="姓名" align="center"></el-table-column> | |
60 | - <el-table-column prop="classRank" label="班名" align="center"></el-table-column> | |
61 | - <el-table-column prop="correctRate" label="总正确率" align="center"><template slot-scope="scoped">{{ | |
62 | - scoped.row.correctRate }}%</template></el-table-column> | |
63 | - </el-table> | |
64 | - </ul> | |
65 | - <div class="dialog-footer" slot="footer"> | |
66 | - <el-button v-show="downType == 2" size="small" type="primary" round @click="exportData(10)">导出前十</el-button> | |
67 | - <el-button size="small" type="primary" round @click="exportData(0)">确 定</el-button> | |
68 | - <el-button size="small" type="danger" round @click="cancel">取 消</el-button> | |
69 | - </div> | |
70 | - </el-dialog> | |
38 | + <ExportDia :exportStudent="exportStudent" :diaShow="diaShow" @cancel="cancel" @exportData="exportData" /> | |
71 | 39 | </div> |
72 | 40 | </div> |
73 | 41 | </template> |
... | ... | @@ -96,11 +64,9 @@ export default { |
96 | 64 | size: 20, |
97 | 65 | total: 0, |
98 | 66 | status: 0, |
99 | - diaDown: false, | |
100 | - downType: 1, | |
101 | - exportType: 1, | |
67 | + //导出相关 | |
68 | + diaShow: false, | |
102 | 69 | exportStudent: [], |
103 | - multipleSelection: [], | |
104 | 70 | }; |
105 | 71 | }, |
106 | 72 | created() { |
... | ... | @@ -216,7 +182,7 @@ export default { |
216 | 182 | } |
217 | 183 | } |
218 | 184 | if (this.types == 1) { |
219 | - query.type = this.type | |
185 | + query.type = this.type - 1 | |
220 | 186 | } |
221 | 187 | this.loading = true; |
222 | 188 | let { data, info, status } = await queryData({ |
... | ... | @@ -265,7 +231,7 @@ export default { |
265 | 231 | |
266 | 232 | let query = {}; |
267 | 233 | if (this.types == 1) { |
268 | - query.type = this.type | |
234 | + query.type = this.type - 1 | |
269 | 235 | } |
270 | 236 | this.loading = true; |
271 | 237 | let { data, info, status } = await queryData({ |
... | ... | @@ -282,38 +248,17 @@ export default { |
282 | 248 | } |
283 | 249 | }, |
284 | 250 | |
285 | - | |
251 | + //导出 | |
286 | 252 | openDown() { |
287 | - this.diaDown = true; | |
288 | - this.downType = 1 | |
253 | + this.diaShow = true; | |
289 | 254 | }, |
290 | 255 | cancel() { |
291 | - if (this.exportType == 2) { | |
292 | - this.exportType = 1 | |
293 | - } else { | |
294 | - this.diaDown = false; | |
295 | - } | |
256 | + this.diaShow = false; | |
296 | 257 | }, |
297 | - changeDownType() { | |
298 | - this.exportType = 1 | |
299 | - }, | |
300 | - handleSelectionChange(val) { | |
301 | - this.multipleSelection = val | |
302 | - }, | |
303 | - //导出 | |
304 | - async exportData(length) { | |
258 | + async exportData(arr) { | |
305 | 259 | if (this.exportLoading == true) return; |
306 | 260 | this.exportLoading = true; |
307 | - let studentIds = [] | |
308 | - if (length) { | |
309 | - studentIds = this.exportStudent.slice(0, 10).map(item => { | |
310 | - return item.studentId | |
311 | - }) | |
312 | - } else { | |
313 | - studentIds = this.multipleSelection.map(item => { | |
314 | - return item.studentId | |
315 | - }) | |
316 | - } | |
261 | + let studentIds = arr | |
317 | 262 | let query = {}; |
318 | 263 | if (studentIds.length == this.exportStudent.length) { |
319 | 264 | query.studentIds = [] | ... | ... |
src/views/basic/ask/components/answerQustion.vue
... | ... | @@ -147,22 +147,24 @@ export default { |
147 | 147 | }, |
148 | 148 | methods: { |
149 | 149 | setDuration(times) { |
150 | - let m = parseInt(times / 1000 / 60); | |
151 | - let s = parseInt((times / 1000) % 60); | |
152 | - let ms = times; | |
153 | - let aTime; | |
154 | - if (times == 0) { | |
155 | - aTime = `0`; | |
156 | - } else { | |
157 | - if (m == 0 && s == 0) { | |
158 | - aTime = `${ms}毫秒`; | |
159 | - } else if (m == 0 && s != 0) { | |
160 | - aTime = `${s}秒`; | |
161 | - } else if (m != 0 && s != 0) { | |
162 | - aTime = `${m}分${s}秒`; | |
150 | + if (times) { | |
151 | + let m = parseInt(times / 1000 / 60); | |
152 | + let s = parseInt((times / 1000) % 60); | |
153 | + let ms = times; | |
154 | + let aTime; | |
155 | + if (times == 0) { | |
156 | + aTime = `0`; | |
157 | + } else { | |
158 | + if (m == 0 && s == 0) { | |
159 | + aTime = `${ms}毫秒`; | |
160 | + } else if (m == 0 && s != 0) { | |
161 | + aTime = `${s}秒`; | |
162 | + } else if (m != 0 && s != 0) { | |
163 | + aTime = `${m}分${s}秒`; | |
164 | + } | |
163 | 165 | } |
166 | + return aTime; | |
164 | 167 | } |
165 | - return aTime; | |
166 | 168 | }, |
167 | 169 | } |
168 | 170 | }; | ... | ... |
src/views/basic/ask/components/interact.vue
... | ... | @@ -39,26 +39,25 @@ export default { |
39 | 39 | resultData: function () { |
40 | 40 | let resultData = [] |
41 | 41 | if (this.tableData.length) { |
42 | - if (this.types == "3") { | |
43 | - let subjectName = []; | |
44 | - resultData = data?.list.map((item) => { | |
45 | - let params = {}; | |
46 | - item.dataList.map((items, index) => { | |
47 | - if (!subjectName.includes(items.subjectName)) { | |
48 | - subjectName.push(items.subjectName); | |
49 | - } | |
50 | - params["interactionsNum" + items.subjectName] = | |
51 | - items.interactionsNum; | |
52 | - params["interactionsCorrectNum" + items.subjectName] = | |
53 | - items.interactionsCorrectNum; | |
54 | - }); | |
55 | - return { | |
56 | - ...item, | |
57 | - ...params, | |
58 | - }; | |
42 | + | |
43 | + let subjectName = []; | |
44 | + resultData = this.tableData?.map((item) => { | |
45 | + let params = {}; | |
46 | + item.dataList?.map((items, index) => { | |
47 | + if (!subjectName.includes(items.subjectName)) { | |
48 | + subjectName.push(items.subjectName); | |
49 | + } | |
50 | + params["interactionsNum" + items.subjectName] = | |
51 | + items.interactionsNum; | |
52 | + params["interactionsCorrectNum" + items.subjectName] = | |
53 | + items.interactionsCorrectNum; | |
59 | 54 | }); |
60 | - this.phaseInter = [...subjectName]; | |
61 | - } | |
55 | + return { | |
56 | + ...item, | |
57 | + ...params, | |
58 | + }; | |
59 | + }); | |
60 | + this.phaseInter = [...subjectName]; | |
62 | 61 | } else { |
63 | 62 | resultData = [] |
64 | 63 | this.optionsList = [] | ... | ... |
src/views/basic/ask/list.vue
... | ... | @@ -13,14 +13,14 @@ |
13 | 13 | </back-box> |
14 | 14 | <div v-show="!isDetail" class="table-box"> |
15 | 15 | <div class="table-cont" v-loading="loading"> |
16 | - <p class="btn-box"> | |
16 | + <p class="btn-box" v-if="tableData.length"> | |
17 | 17 | <el-button type="primary" round @click="linkToDetail2">查看汇总报表</el-button> |
18 | 18 | </p> |
19 | 19 | <div> |
20 | 20 | <el-table :data="tableData" border :show-header="total > 0" style="width: 100%" |
21 | 21 | @selection-change="handleSelectionChange"> |
22 | 22 | <el-table-column type="selection" width="40"></el-table-column> |
23 | - <el-table-column prop="subject" label="科目" align="center" width="80"></el-table-column> | |
23 | + <el-table-column prop="subjectName" label="科目" align="center" width="80"></el-table-column> | |
24 | 24 | <el-table-column prop="title" label="课时名称" align="center"></el-table-column> |
25 | 25 | <el-table-column prop="participationRate" label="总参与度" align="center"> <template slot-scope="scoped">{{ |
26 | 26 | scoped.row.participationRate }}%</template></el-table-column> |
... | ... | @@ -142,6 +142,9 @@ export default { |
142 | 142 | }, |
143 | 143 | //去详情 |
144 | 144 | linkToDetail2() { |
145 | + if (this.multipleSelection.length == 0) { | |
146 | + this.$message.warning("未选择课时,请选择~") | |
147 | + return } | |
145 | 148 | let subjectArr = [] |
146 | 149 | const ids = this.multipleSelection.map(item => { |
147 | 150 | subjectArr.push(item.subject) | ... | ... |
src/views/basic/test/analysis.vue
... | ... | @@ -2,7 +2,7 @@ |
2 | 2 | <div ref="main" class="page-container"> |
3 | 3 | <back-box> |
4 | 4 | <template slot="title"> |
5 | - <span>{{ type == 1 ? '单卷测练报表' : type == 2 ? subject + "汇总报表" : type == 3 ? "多科汇总报表" : | |
5 | + <span>{{ type == 1 ? '单卷测练报表' : type == 2 ? subjectName + "汇总报表" : type == 3 ? "多科汇总报表" : | |
6 | 6 | `多班_${subjectName}_${title}_测练成绩对比分析` }}</span> |
7 | 7 | </template> |
8 | 8 | </back-box> |
... | ... | @@ -44,8 +44,8 @@ export default { |
44 | 44 | this.ids = this.$route.query.ids && this.$route.query.ids.split() || ""; |
45 | 45 | this.type = this.$route.query.type |
46 | 46 | this.classId = this.$route.query.classId || ""; |
47 | - this.subjectName = this.$route.query.subjectName || "" | |
48 | 47 | this.title = this.$route.query.title || "" |
48 | + this.subjectName = this.$route.query.subjectName || "" | |
49 | 49 | }, |
50 | 50 | methods: { |
51 | 51 | ... | ... |
src/views/basic/test/components/multipleSubTest.vue
... | ... | @@ -29,7 +29,7 @@ |
29 | 29 | </el-table> |
30 | 30 | </div> |
31 | 31 | <div class="down"> |
32 | - <el-button @click="exportData" type="primary" plain round icon="fa fa-cloud-download">导出报表</el-button> | |
32 | + <el-button @click="openDown" type="primary" plain round icon="fa fa-cloud-download">导出报表</el-button> | |
33 | 33 | <el-button v-if="!this.$store.getters.code" @click="print" type="primary" plain round |
34 | 34 | icon="el-icon-printer">打印</el-button> |
35 | 35 | </div> |
... | ... | @@ -38,6 +38,7 @@ |
38 | 38 | <RadarChart id="radarChart" :params="chartData" /> |
39 | 39 | </div> |
40 | 40 | </el-dialog> |
41 | + <ExportDia :exportStudent="exportStudent" :diaShow="diaShow" @cancel="cancel" @exportData="exportData" /> | |
41 | 42 | </div> |
42 | 43 | </template> |
43 | 44 | <script> |
... | ... | @@ -46,7 +47,7 @@ import RadarChart from "@/components/charts/radarChart" |
46 | 47 | import { downloadFile, tablePrint } from "@/utils"; |
47 | 48 | export default { |
48 | 49 | components: { |
49 | - RadarChart | |
50 | + RadarChart, | |
50 | 51 | }, |
51 | 52 | props: { |
52 | 53 | role: "", |
... | ... | @@ -76,6 +77,10 @@ export default { |
76 | 77 | }, |
77 | 78 | chartDia: false, |
78 | 79 | chartTitle: "", |
80 | + | |
81 | + //导出相关 | |
82 | + diaShow: false, | |
83 | + exportStudent: [] | |
79 | 84 | } |
80 | 85 | }, |
81 | 86 | computed: { |
... | ... | @@ -140,6 +145,7 @@ export default { |
140 | 145 | this.chartData.indicator.push({ name: item, max: 100 }) |
141 | 146 | } |
142 | 147 | }) |
148 | + // 为了美观 | |
143 | 149 | if (this.chartData.indicator.length < 3) { |
144 | 150 | let num = this.chartData.indicator.length |
145 | 151 | for (let i = 0; i < 6; i++) { |
... | ... | @@ -191,16 +197,31 @@ export default { |
191 | 197 | }; |
192 | 198 | }); |
193 | 199 | this.answerList = [...subjectName]; |
200 | + this.exportStudent = [...this.tableData] | |
194 | 201 | } else { |
195 | 202 | this.$message.error(info); |
196 | 203 | } |
197 | 204 | }, |
198 | 205 | //导出 |
199 | - async exportData() { | |
206 | + openDown() { | |
207 | + this.diaShow = true; | |
208 | + }, | |
209 | + cancel() { | |
210 | + this.diaShow = false; | |
211 | + }, | |
212 | + async exportData(arr) { | |
200 | 213 | if (this.exportLoading == true) return; |
201 | 214 | this.exportLoading = true; |
215 | + let studentIds = arr | |
216 | + let query = {}; | |
217 | + if (studentIds.length == this.exportStudent.length) { | |
218 | + query.studentIds = [] | |
219 | + } else if (studentIds.length > 0) { | |
220 | + query.studentIds = studentIds | |
221 | + } | |
202 | 222 | const data = await this.$request.exportExamReport({ |
203 | 223 | examId: this.ids, |
224 | + ...query | |
204 | 225 | }); |
205 | 226 | this.exportLoading = false; |
206 | 227 | if (data) { | ... | ... |
src/views/basic/test/components/multipleTest.vue
... | ... | @@ -22,7 +22,7 @@ |
22 | 22 | </el-table> |
23 | 23 | </div> |
24 | 24 | <div class="down"> |
25 | - <el-button @click="exportData" type="primary" plain round icon="fa fa-cloud-download">导出报表</el-button> | |
25 | + <el-button @click="openDown" type="primary" plain round icon="fa fa-cloud-download">导出报表</el-button> | |
26 | 26 | <el-button v-if="!this.$store.getters.code" @click="print" type="primary" plain round |
27 | 27 | icon="el-icon-printer">打印</el-button> |
28 | 28 | </div> |
... | ... | @@ -31,6 +31,7 @@ |
31 | 31 | <LineChart id="lineChart" :params="chartData" :xAxis="xAxis" /> |
32 | 32 | </div> |
33 | 33 | </el-dialog> |
34 | + <ExportDia :exportStudent="exportStudent" :diaShow="diaShow" @cancel="cancel" @exportData="exportData" /> | |
34 | 35 | </div> |
35 | 36 | <!-- 单科多卷 --> |
36 | 37 | </template> |
... | ... | @@ -56,6 +57,10 @@ export default { |
56 | 57 | studentName: "", |
57 | 58 | xAxis: [], |
58 | 59 | chartData: [], |
60 | + | |
61 | + //导出相关 | |
62 | + diaShow: false, | |
63 | + exportStudent: [] | |
59 | 64 | } |
60 | 65 | }, |
61 | 66 | computed: { |
... | ... | @@ -180,14 +185,29 @@ export default { |
180 | 185 | }; |
181 | 186 | }); |
182 | 187 | this.answerList = dataList; |
188 | + | |
189 | + this.exportStudent = [...this.tableData] | |
183 | 190 | } else { |
184 | 191 | this.$message.error(info); |
185 | 192 | } |
186 | 193 | }, |
187 | 194 | //导出 |
188 | - async exportData() { | |
195 | + openDown() { | |
196 | + this.diaShow = true; | |
197 | + }, | |
198 | + cancel() { | |
199 | + this.diaShow = false; | |
200 | + }, | |
201 | + async exportData(arr) { | |
189 | 202 | if (this.exportLoading == true) return; |
190 | 203 | this.exportLoading = true; |
204 | + let studentIds = arr | |
205 | + let query = {}; | |
206 | + if (studentIds.length == this.exportStudent.length) { | |
207 | + query.studentIds = [] | |
208 | + } else if (studentIds.length > 0) { | |
209 | + query.studentIds = studentIds | |
210 | + } | |
191 | 211 | const exportPhaseExamReport = this.role == "ROLE_PERSONAL" |
192 | 212 | ? this.$request.pExportPhaseExamReport |
193 | 213 | : this.$request.exportPhaseExamReport; | ... | ... |
src/views/basic/test/components/test.vue
... | ... | @@ -200,7 +200,7 @@ |
200 | 200 | </div> |
201 | 201 | <div class="down"> |
202 | 202 | <div> |
203 | - <el-button @click="exportData" type="primary" plain round icon="fa fa-cloud-download">导出报表</el-button> | |
203 | + <el-button @click="openDown" type="primary" plain round icon="fa fa-cloud-download">导出报表</el-button> | |
204 | 204 | <el-button v-if="!this.$store.getters.code" @click="print" type="primary" plain round |
205 | 205 | icon="el-icon-printer">打印</el-button> |
206 | 206 | </div> |
... | ... | @@ -239,6 +239,7 @@ |
239 | 239 | <el-button @click="diaMinScore = false">取 消</el-button> |
240 | 240 | </div> |
241 | 241 | </el-dialog> |
242 | + <ExportDia :exportStudent="exportStudent" :diaShow="diaShow" @cancel="cancel" @exportData="exportData" /> | |
242 | 243 | </div> |
243 | 244 | </div> |
244 | 245 | </template> |
... | ... | @@ -247,7 +248,7 @@ import ScoreSet from "./scoreSet.vue" |
247 | 248 | import { downloadFile, tablePrint } from "@/utils"; |
248 | 249 | export default { |
249 | 250 | components: { |
250 | - ScoreSet | |
251 | + ScoreSet, | |
251 | 252 | }, |
252 | 253 | props: { |
253 | 254 | role: "", |
... | ... | @@ -310,9 +311,9 @@ export default { |
310 | 311 | //答题录分 |
311 | 312 | diaScoreSet: false, |
312 | 313 | |
313 | - exportType: 1, | |
314 | - exportStudent: [], | |
315 | - multipleSelection: [], | |
314 | + //导出相关 | |
315 | + diaShow: false, | |
316 | + exportStudent: [] | |
316 | 317 | }; |
317 | 318 | }, |
318 | 319 | created() { |
... | ... | @@ -492,6 +493,7 @@ export default { |
492 | 493 | this.questionList = optionsList.sort((a, b) => { |
493 | 494 | return a.id - b.id; |
494 | 495 | }); |
496 | + this.exportStudent = [...this.tableData2] | |
495 | 497 | } else { |
496 | 498 | this.$message.error(info); |
497 | 499 | } |
... | ... | @@ -512,7 +514,7 @@ export default { |
512 | 514 | this.loading = false; |
513 | 515 | if (status === 0) { |
514 | 516 | let optionsList = [{}, {}, {}, {}, {}]; |
515 | - let tableData = data?.list.map((item) => { | |
517 | + let tableData = data?.list?.map((item) => { | |
516 | 518 | let params = {}; |
517 | 519 | const detail = JSON.parse(item.detail); |
518 | 520 | let lastOPtion = detail?.find((item) => { |
... | ... | @@ -553,7 +555,7 @@ export default { |
553 | 555 | ...params, |
554 | 556 | }; |
555 | 557 | }); |
556 | - this.tableData = tableData.sort((a, b) => { | |
558 | + this.tableData = tableData?.sort((a, b) => { | |
557 | 559 | return a.questionIndex - b.questionIndex; |
558 | 560 | }); |
559 | 561 | this.optionsList = [...optionsList]; |
... | ... | @@ -563,20 +565,18 @@ export default { |
563 | 565 | this.$message.error(info); |
564 | 566 | } |
565 | 567 | }, |
568 | + | |
566 | 569 | //导出 |
567 | - async exportData() { | |
570 | + openDown() { | |
571 | + this.diaShow = true; | |
572 | + }, | |
573 | + cancel() { | |
574 | + this.diaShow = false; | |
575 | + }, | |
576 | + async exportData(arr) { | |
568 | 577 | if (this.exportLoading == true) return; |
569 | 578 | this.exportLoading = true; |
570 | - let studentIds = [] | |
571 | - if (length) { | |
572 | - studentIds = this.exportStudent.slice(0, 10).map(item => { | |
573 | - return item.studentId | |
574 | - }) | |
575 | - } else { | |
576 | - studentIds = this.multipleSelection.map(item => { | |
577 | - return item.studentId | |
578 | - }) | |
579 | - } | |
579 | + let studentIds = arr | |
580 | 580 | let query = {}; |
581 | 581 | if (studentIds.length == this.exportStudent.length) { |
582 | 582 | query.studentIds = [] |
... | ... | @@ -592,7 +592,7 @@ export default { |
592 | 592 | ...query |
593 | 593 | }); |
594 | 594 | this.exportLoading = false; |
595 | - if (data) { | |
595 | + if (!data.status) { | |
596 | 596 | let blob = new Blob([data], { |
597 | 597 | type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", |
598 | 598 | }); |
... | ... | @@ -603,7 +603,7 @@ export default { |
603 | 603 | blob |
604 | 604 | ); |
605 | 605 | } else { |
606 | - this.$message.error("下载失败"); | |
606 | + this.$message.error(data.info); | |
607 | 607 | } |
608 | 608 | }, |
609 | 609 | }, | ... | ... |
src/views/basic/test/list.vue
src/views/examinationPaper/edit.vue
src/views/examinationPaper/index.vue
... | ... | @@ -201,7 +201,6 @@ export default { |
201 | 201 | } |
202 | 202 | await this._QuerySubjectList(); |
203 | 203 | this._QueryData(); |
204 | - this._QueryTotal(); | |
205 | 204 | }, |
206 | 205 | methods: { |
207 | 206 | refreshStic() { |
... | ... | @@ -267,7 +266,7 @@ export default { |
267 | 266 | }, |
268 | 267 | changPaperType(type) { |
269 | 268 | this.query.type = type |
270 | - this.changShare(1) | |
269 | + this.changShare(0) | |
271 | 270 | }, |
272 | 271 | changePage(page) { |
273 | 272 | this.page = page; |
... | ... | @@ -311,14 +310,12 @@ export default { |
311 | 310 | async getData(bool) { |
312 | 311 | this.page = 1; |
313 | 312 | this._QueryData(bool); |
314 | - this._QueryTotal(); | |
315 | 313 | }, |
316 | 314 | //切换班级 |
317 | 315 | async changClazz() { |
318 | 316 | this.page = 1; |
319 | 317 | await this._QuerySubjectList(); |
320 | 318 | this._QueryData(false); |
321 | - this._QueryTotal(); | |
322 | 319 | }, |
323 | 320 | //切换类型 |
324 | 321 | async changShare(share) { |
... | ... | @@ -423,6 +420,8 @@ export default { |
423 | 420 | }); |
424 | 421 | this.loading = false; |
425 | 422 | if (status === 0) { |
423 | + this.totalCount.my = data?.myCount || 0; | |
424 | + this.totalCount.share = data?.gradeCount || 0; | |
426 | 425 | this.archivedTotal = data.archivedTotal; |
427 | 426 | this.total = data.total; |
428 | 427 | this.tableData = (data.list && [...data.list]) || []; |
... | ... | @@ -430,24 +429,6 @@ export default { |
430 | 429 | this.$message.error(info); |
431 | 430 | } |
432 | 431 | }, |
433 | - async _QueryTotal() { | |
434 | - //获取答题卡列表 | |
435 | - let query = { ...this.query }; | |
436 | - for (let key in query) { | |
437 | - if (!query[key]) { | |
438 | - delete query[key] | |
439 | - } | |
440 | - } | |
441 | - const { data, status, info } = await this.$request.paperShareCount({ | |
442 | - ...query, | |
443 | - }); | |
444 | - if (status === 0) { | |
445 | - this.totalCount.my = data?.myCount || 0; | |
446 | - this.totalCount.share = data?.grade || 0; | |
447 | - } else { | |
448 | - this.$message.error(info); | |
449 | - } | |
450 | - }, | |
451 | 432 | |
452 | 433 | |
453 | 434 | //v1.5 | ... | ... |