Commit 58744c8c9a1d7b9750e3de5ecc67571bc1a6b87f
1 parent
ce278878
即时测多班淡斑逻辑修改
Showing
3 changed files
with
396 additions
and
178 deletions
public/static/试卷模板.docx
No preview for this file type
src/views/basic/test/index.vue
... | ... | @@ -8,30 +8,64 @@ |
8 | 8 | <div class="select-box"> |
9 | 9 | <div class="sel-item sel-item2"> |
10 | 10 | <span class="sel-label">班级:</span> |
11 | - <div class="sel-d"> | |
11 | + <div class="sel-d" v-if="role == 'ROLE_JIAOSHI'"> | |
12 | 12 | <p class="p-all"> |
13 | - <el-checkbox :indeterminate="isIndeterminateClass" v-model="allClass" | |
14 | - @change="handleCheckAllChangeClass">全选</el-checkbox> | |
13 | + <el-checkbox | |
14 | + :indeterminate="isIndeterminateClass" | |
15 | + v-model="allClass" | |
16 | + @change="handleCheckAllChangeClass" | |
17 | + >全选</el-checkbox | |
18 | + > | |
15 | 19 | </p> |
16 | 20 | <p class="sel-p"> |
17 | 21 | <el-checkbox-group v-model="query.classId" @change="changeclass"> |
18 | - <el-checkbox v-for="item in classList" :label="item.value" :key="item.value">{{ item.label | |
19 | - }}</el-checkbox> | |
22 | + <el-checkbox | |
23 | + v-for="item in classList" | |
24 | + :label="item.value" | |
25 | + :key="item.value" | |
26 | + >{{ item.label }}</el-checkbox | |
27 | + > | |
20 | 28 | </el-checkbox-group> |
21 | 29 | </p> |
22 | 30 | </div> |
31 | + <el-select | |
32 | + v-if="role == 'ROLE_BANZHUREN'" | |
33 | + class="sel" | |
34 | + v-model="query.classId" | |
35 | + placeholder="选择班级" | |
36 | + @change="changeclass" | |
37 | + > | |
38 | + <el-option | |
39 | + v-for="item in classList" | |
40 | + :key="item.value" | |
41 | + :label="item.label" | |
42 | + :value="item.value" | |
43 | + > | |
44 | + </el-option> | |
45 | + </el-select> | |
23 | 46 | </div> |
24 | 47 | <div class="sel-item sel-item2"> |
25 | 48 | <span class="sel-label">科目:</span> |
26 | 49 | <div class="sel-d"> |
27 | 50 | <p class="p-all"> |
28 | - <el-checkbox :indeterminate="isIndeterminateSub" v-model="allSubject" | |
29 | - @change="handleCheckAllChangeSub">全选</el-checkbox> | |
51 | + <el-checkbox | |
52 | + :indeterminate="isIndeterminateSub" | |
53 | + v-model="allSubject" | |
54 | + @change="handleCheckAllChangeSub" | |
55 | + >全选</el-checkbox | |
56 | + > | |
30 | 57 | </p> |
31 | 58 | <p class="sel-p"> |
32 | - <el-checkbox-group v-model="query.subjectNames" @change="CheckedSub"> | |
33 | - <el-checkbox v-for="item in subjectList" :label="item" :key="item">{{ item | |
34 | - }}</el-checkbox> | |
59 | + <el-checkbox-group | |
60 | + v-model="query.subjectNames" | |
61 | + @change="CheckedSub" | |
62 | + > | |
63 | + <el-checkbox | |
64 | + v-for="item in subjectList" | |
65 | + :label="item" | |
66 | + :key="item" | |
67 | + >{{ item }}</el-checkbox | |
68 | + > | |
35 | 69 | </el-checkbox-group> |
36 | 70 | </p> |
37 | 71 | </div> |
... | ... | @@ -39,18 +73,34 @@ |
39 | 73 | <div class="sel-item"> |
40 | 74 | <span class="sel-label">日期:</span> |
41 | 75 | <div class="d1"> |
42 | - <el-date-picker v-model="query.startDay" type="date" @change="handleChangeTimeStart" placeholder="选择日期时间" | |
43 | - value-format="yyyy-MM-dd"> | |
76 | + <el-date-picker | |
77 | + v-model="query.startDay" | |
78 | + type="date" | |
79 | + @change="handleChangeTimeStart" | |
80 | + placeholder="选择日期时间" | |
81 | + value-format="yyyy-MM-dd" | |
82 | + > | |
44 | 83 | </el-date-picker> |
45 | 84 | ~ |
46 | - <el-date-picker v-model="query.endDay" type="date" placeholder="选择日期时间" @change="handleChangeTimeEnd" | |
47 | - value-format="yyyy-MM-dd"> | |
85 | + <el-date-picker | |
86 | + v-model="query.endDay" | |
87 | + type="date" | |
88 | + placeholder="选择日期时间" | |
89 | + @change="handleChangeTimeEnd" | |
90 | + value-format="yyyy-MM-dd" | |
91 | + > | |
48 | 92 | </el-date-picker> |
49 | 93 | </div> |
50 | 94 | <p class="p1"> |
51 | - <span @click="setDate(1)" :class="[date == 1 ? 'active' : '', 's1']">本周</span> | |
52 | - <span @click="setDate(2)" :class="[date == 2 ? 'active' : '', 's1']">本月</span> | |
53 | - <span @click="setDate(3)" :class="[date == 3 ? 'active' : '', 's1']">本季度</span> | |
95 | + <span @click="setDate(1)" :class="[date == 1 ? 'active' : '', 's1']" | |
96 | + >本周</span | |
97 | + > | |
98 | + <span @click="setDate(2)" :class="[date == 2 ? 'active' : '', 's1']" | |
99 | + >本月</span | |
100 | + > | |
101 | + <span @click="setDate(3)" :class="[date == 3 ? 'active' : '', 's1']" | |
102 | + >本季度</span | |
103 | + > | |
54 | 104 | </p> |
55 | 105 | </div> |
56 | 106 | </div> |
... | ... | @@ -80,10 +130,10 @@ export default { |
80 | 130 | classList: [], //班级 |
81 | 131 | subjectList: [], //科目 |
82 | 132 | |
83 | - isIndeterminateClass: true,//全选样式 | |
84 | - allClass: false,//全选状态 | |
85 | - isIndeterminateSub: true,//全选样式 | |
86 | - allSubject: false,//全选状态 | |
133 | + isIndeterminateClass: true, //全选样式 | |
134 | + allClass: false, //全选状态 | |
135 | + isIndeterminateSub: true, //全选样式 | |
136 | + allSubject: false, //全选状态 | |
87 | 137 | }; |
88 | 138 | }, |
89 | 139 | async created() { |
... | ... | @@ -107,24 +157,30 @@ export default { |
107 | 157 | |
108 | 158 | methods: { |
109 | 159 | handleCheckAllChangeClass(val) { |
110 | - this.isIndeterminateClass = false | |
111 | - this.query.classId = val ? this.classList.map(item => item.value) : []; | |
160 | + this.isIndeterminateClass = false; | |
161 | + this.query.classId = val ? this.classList.map((item) => item.value) : []; | |
112 | 162 | }, |
113 | 163 | changeclass(value) { |
114 | - console.log(value) | |
115 | - let checkedCount = value.length; | |
116 | - this.allClass = checkedCount === this.classList.length; | |
117 | - this.isIndeterminateClass = checkedCount > 0 && checkedCount < this.classList.length; | |
164 | + console.log(value); | |
165 | + if (this.role == "ROLE_BANZHUREN") { | |
166 | + this._QuerySubjectList(); | |
167 | + } else { | |
168 | + let checkedCount = value.length; | |
169 | + this.allClass = checkedCount === this.classList.length; | |
170 | + this.isIndeterminateClass = | |
171 | + checkedCount > 0 && checkedCount < this.classList.length; | |
172 | + } | |
118 | 173 | }, |
119 | 174 | handleCheckAllChangeSub(val) { |
120 | - this.isIndeterminate = false | |
175 | + this.isIndeterminate = false; | |
121 | 176 | this.query.subjectNames = val ? this.subjectList : []; |
122 | 177 | }, |
123 | 178 | CheckedSub(value) { |
124 | - console.log(value) | |
179 | + console.log(value); | |
125 | 180 | let checkedCount = value.length; |
126 | 181 | this.allSubject = checkedCount === this.subjectList.length; |
127 | - this.isIndeterminate = checkedCount > 0 && checkedCount < this.subjectList.length; | |
182 | + this.isIndeterminate = | |
183 | + checkedCount > 0 && checkedCount < this.subjectList.length; | |
128 | 184 | }, |
129 | 185 | setDate(index) { |
130 | 186 | const that = this; |
... | ... | @@ -189,10 +245,10 @@ export default { |
189 | 245 | async _QueryClassList() { |
190 | 246 | const fetchClassList = |
191 | 247 | this.role == "ROLE_BANZHUREN" |
192 | - ? this.$request.cTClassList : | |
193 | - this.role == "ROLE_PERSONAL" | |
194 | - ? this.$request.pClassList | |
195 | - : this.$request.tClassList; | |
248 | + ? this.$request.cTClassList | |
249 | + : this.role == "ROLE_PERSONAL" | |
250 | + ? this.$request.pClassList | |
251 | + : this.$request.tClassList; | |
196 | 252 | const { data, status, info } = await fetchClassList(); |
197 | 253 | if (status === 0) { |
198 | 254 | this.classList = data.list.map((item) => { |
... | ... | @@ -201,7 +257,15 @@ export default { |
201 | 257 | label: item.className, |
202 | 258 | }; |
203 | 259 | }); |
204 | - this.classList.length ? this.query.classId.push(this.classList[0].value) : ""; | |
260 | + if (this.role == "ROLE_BANZHUREN") { | |
261 | + this.query.classId = this.classList.length | |
262 | + ? this.classList[0].value | |
263 | + : ""; | |
264 | + } else { | |
265 | + this.classList.length | |
266 | + ? this.query.classId.push(this.classList[0].value) | |
267 | + : ""; | |
268 | + } | |
205 | 269 | } else { |
206 | 270 | this.$message.error(info); |
207 | 271 | } |
... | ... | @@ -209,22 +273,20 @@ export default { |
209 | 273 | async _QuerySubjectList() { |
210 | 274 | const fetchSubjectList = |
211 | 275 | this.role == "ROLE_BANZHUREN" |
212 | - ? this.$request.cTSubjectList : | |
213 | - this.role == "ROLE_PERSONAL" | |
214 | - ? this.$request.pSubjectList | |
215 | - : this.$request.tSubjectList; | |
276 | + ? this.$request.cTSubjectList | |
277 | + : this.role == "ROLE_PERSONAL" | |
278 | + ? this.$request.pSubjectList | |
279 | + : this.$request.tSubjectList; | |
216 | 280 | |
217 | - const classIds = this.classList.map(item => item.value) || [] | |
281 | + let classIds = this.query.classId; | |
218 | 282 | const { data, status, info } = await fetchSubjectList({ |
219 | 283 | classIds: classIds, |
220 | 284 | }); |
221 | 285 | if (status === 0) { |
222 | 286 | this.subjectList = data.subjectNames || []; |
223 | - // if (this.role == "ROLE_BANZHUREN") { | |
224 | - // this.query.subjectNames = this.subjectList | |
225 | - // } else { | |
226 | - this.subjectList.length ? this.query.subjectNames.push(this.subjectList[0]) : ""; | |
227 | - // } | |
287 | + this.subjectList.length | |
288 | + ? this.query.subjectNames.push(this.subjectList[0]) | |
289 | + : ""; | |
228 | 290 | } else { |
229 | 291 | this.$message.error(info); |
230 | 292 | } |
... | ... | @@ -233,26 +295,30 @@ export default { |
233 | 295 | //回主页 |
234 | 296 | goHome() { |
235 | 297 | this.$router.push({ |
236 | - path: '/index' | |
237 | - }) | |
298 | + path: "/index", | |
299 | + }); | |
238 | 300 | }, |
239 | 301 | //去列表 |
240 | 302 | goList() { |
241 | - if(this.query.classId.length == 0){ | |
242 | - this.$message.warning("请选择班级!") | |
243 | - return | |
303 | + if (this.query.classId.length == 0) { | |
304 | + this.$message.warning("请选择班级!"); | |
305 | + return; | |
244 | 306 | } |
245 | - if(this.query.subjectNames.length == 0){ | |
246 | - this.$message.warning("请选择科目!") | |
247 | - return | |
307 | + if (this.query.subjectNames.length == 0) { | |
308 | + this.$message.warning("请选择科目!"); | |
309 | + return; | |
310 | + } | |
311 | + let query = { ...this.query }; | |
312 | + if (this.role == "ROLE_BANZHUREN") { | |
313 | + query.classId = [query.classId]; | |
248 | 314 | } |
249 | 315 | this.$router.push({ |
250 | - path: '/testList', | |
316 | + path: "/testList", | |
251 | 317 | query: { |
252 | - params: JSON.stringify(this.query) | |
253 | - } | |
254 | - }) | |
255 | - } | |
318 | + params: JSON.stringify(query), | |
319 | + }, | |
320 | + }); | |
321 | + }, | |
256 | 322 | }, |
257 | 323 | }; |
258 | 324 | </script> |
... | ... | @@ -270,7 +336,7 @@ div::-webkit-scrollbar-thumb { |
270 | 336 | <style lang="scss" scoped> |
271 | 337 | .main { |
272 | 338 | height: 100%; |
273 | - background: rgba($color: #000000, $alpha: .3); | |
339 | + background: rgba($color: #000000, $alpha: 0.3); | |
274 | 340 | display: flex; |
275 | 341 | justify-content: center; |
276 | 342 | } | ... | ... |
src/views/basic/test/list.vue
... | ... | @@ -5,83 +5,217 @@ |
5 | 5 | <span>即时测-数据报表</span> |
6 | 6 | </template> |
7 | 7 | <template slot="btns"> |
8 | - <el-tooltip v-if="!code && gdClass" effect="dark" content="已归档试卷" placement="bottom"> | |
9 | - <el-button type="primary" icon="fa fa-archive" size="mini" plain circle @click="toArchiving"></el-button> | |
8 | + <el-tooltip | |
9 | + v-if="!code && gdClass" | |
10 | + effect="dark" | |
11 | + content="已归档试卷" | |
12 | + placement="bottom" | |
13 | + > | |
14 | + <el-button | |
15 | + type="primary" | |
16 | + icon="fa fa-archive" | |
17 | + size="mini" | |
18 | + plain | |
19 | + circle | |
20 | + @click="toArchiving" | |
21 | + ></el-button> | |
10 | 22 | </el-tooltip> |
11 | 23 | </template> |
12 | 24 | </back-box> |
13 | 25 | <div v-show="!isDetail" class="table-box" v-loading="loading"> |
14 | 26 | <div v-if="!isMultipleClass"> |
15 | 27 | <p class="btn-box"> |
16 | - <el-button type="primary" round @click="linkToDetail2">查看汇总报表</el-button> | |
28 | + <el-button type="primary" round @click="linkToDetail2" | |
29 | + >查看汇总报表</el-button | |
30 | + > | |
17 | 31 | </p> |
18 | - <el-table :data="tableData" :max-height="tableMaxHeight" border style="width: 100%" | |
19 | - @selection-change="handleSelectionChange"> | |
20 | - <el-table-column type="selection" width="40"></el-table-column> | |
21 | - <el-table-column prop="subjectName" label="科目" align="center"></el-table-column> | |
22 | - <el-table-column prop="className" label="班级" align="center"></el-table-column> | |
23 | - <el-table-column prop="title" label="试卷名称" align="center"></el-table-column> | |
24 | - <el-table-column prop="examPaperScore" label="卷面分" align="center"></el-table-column> | |
32 | + <el-table | |
33 | + :data="tableData" | |
34 | + :max-height="tableMaxHeight" | |
35 | + border | |
36 | + style="width: 100%" | |
37 | + @selection-change="handleSelectionChange" | |
38 | + > | |
39 | + <el-table-column width="40" v-if="role == 'ROLE_BANZHUREN'"> | |
40 | + <template slot-scope="scope"> | |
41 | + <el-checkbox | |
42 | + v-model="multipleSelection" | |
43 | + :label="scope.row.id" | |
44 | + ></el-checkbox> | |
45 | + </template> | |
46 | + </el-table-column> | |
47 | + <el-table-column type="selection" width="40" v-else></el-table-column> | |
48 | + <el-table-column | |
49 | + prop="subjectName" | |
50 | + label="科目" | |
51 | + align="center" | |
52 | + ></el-table-column> | |
53 | + <el-table-column | |
54 | + prop="className" | |
55 | + label="班级" | |
56 | + align="center" | |
57 | + ></el-table-column> | |
58 | + <el-table-column | |
59 | + prop="title" | |
60 | + label="试卷名称" | |
61 | + align="center" | |
62 | + ></el-table-column> | |
63 | + <el-table-column | |
64 | + prop="examPaperScore" | |
65 | + label="卷面分" | |
66 | + align="center" | |
67 | + ></el-table-column> | |
25 | 68 | <el-table-column label="测验人数/班级人数" align="center"> |
26 | - <template slot-scope="scoped">{{ `${scoped.row.answeredNum}/${scoped.row.classPersonNum}` }}</template> | |
69 | + <template slot-scope="scoped">{{ | |
70 | + `${scoped.row.answeredNum}/${scoped.row.classPersonNum}` | |
71 | + }}</template> | |
27 | 72 | </el-table-column> |
28 | - <el-table-column prop="examStartTime" label="测验开始时间" align="center"></el-table-column> | |
73 | + <el-table-column | |
74 | + prop="examStartTime" | |
75 | + label="测验开始时间" | |
76 | + align="center" | |
77 | + ></el-table-column> | |
29 | 78 | <el-table-column label="操作" align="center"> |
30 | 79 | <template slot-scope="scoped"> |
31 | - <el-tooltip v-if="scoped.row.answerNum != 0 || scoped.row.recordStatus != 0 | |
32 | - " effect="dark" content="详情" placement="top"> | |
33 | - <el-button type="primary" circle size="mini" icon="fa fa-arrow-right" | |
34 | - @click="linkTo(scoped.row)"></el-button> | |
80 | + <el-tooltip | |
81 | + v-if="scoped.row.answerNum != 0 || scoped.row.recordStatus != 0" | |
82 | + effect="dark" | |
83 | + content="详情" | |
84 | + placement="top" | |
85 | + > | |
86 | + <el-button | |
87 | + type="primary" | |
88 | + circle | |
89 | + size="mini" | |
90 | + icon="fa fa-arrow-right" | |
91 | + @click="linkTo(scoped.row)" | |
92 | + ></el-button> | |
35 | 93 | </el-tooltip> |
36 | 94 | <template v-if="scoped.row.answerNum == 0"> |
37 | - <el-tooltip v-if="role != 'ROLE_BANZHUREN'" effect="dark" content="设置答案" placement="top"> | |
38 | - <el-button type="primary" circle size="mini" icon="fa fa-file-text" | |
39 | - @click="edit(scoped.row)"></el-button> | |
95 | + <el-tooltip | |
96 | + v-if="role != 'ROLE_BANZHUREN'" | |
97 | + effect="dark" | |
98 | + content="设置答案" | |
99 | + placement="top" | |
100 | + > | |
101 | + <el-button | |
102 | + type="primary" | |
103 | + circle | |
104 | + size="mini" | |
105 | + icon="fa fa-file-text" | |
106 | + @click="edit(scoped.row)" | |
107 | + ></el-button> | |
40 | 108 | </el-tooltip> |
41 | 109 | <template v-else>未设置答案</template> |
42 | 110 | </template> |
43 | 111 | <!-- <el-tooltip v-else effect="dark" content="答卷录分" placement="top"> |
44 | 112 | <el-button type="primary" circle size="mini" @click="openScoreSet(scoped.row)">分</el-button> |
45 | 113 | </el-tooltip> --> |
46 | - <el-tooltip v-else effect="dark" content="答卷录分" placement="top"> | |
47 | - <el-button type="primary" circle size="mini" @click="openScoreSet(scoped.row)">分</el-button> | |
114 | + <el-tooltip | |
115 | + v-else | |
116 | + effect="dark" | |
117 | + content="答卷录分" | |
118 | + placement="top" | |
119 | + > | |
120 | + <el-button | |
121 | + type="primary" | |
122 | + circle | |
123 | + size="mini" | |
124 | + @click="openScoreSet(scoped.row)" | |
125 | + >分</el-button | |
126 | + > | |
48 | 127 | </el-tooltip> |
49 | - <el-popconfirm v-if="role != 'ROLE_BANZHUREN'" title="确定删除吗?" | |
50 | - @confirm="removeReport(scoped.row, scoped.$index)"> | |
51 | - <el-button class="remove-test" slot="reference" type="danger" circle size="mini" icon="el-icon-delete" | |
52 | - :loading="scoped.row.loading"></el-button> | |
128 | + <el-popconfirm | |
129 | + v-if="role != 'ROLE_BANZHUREN'" | |
130 | + title="确定删除吗?" | |
131 | + @confirm="removeReport(scoped.row, scoped.$index)" | |
132 | + > | |
133 | + <el-button | |
134 | + class="remove-test" | |
135 | + slot="reference" | |
136 | + type="danger" | |
137 | + circle | |
138 | + size="mini" | |
139 | + icon="el-icon-delete" | |
140 | + :loading="scoped.row.loading" | |
141 | + ></el-button> | |
53 | 142 | </el-popconfirm> |
54 | 143 | </template> |
55 | 144 | </el-table-column> |
56 | 145 | </el-table> |
57 | 146 | <div class="pagination-box"> |
58 | - <el-pagination small="" layout="total,prev, pager, next" :hide-on-single-page="true" :total="total" | |
59 | - @current-change="changePage" :current-page="page" :page-size="size"> | |
147 | + <el-pagination | |
148 | + small="" | |
149 | + layout="total,prev, pager, next" | |
150 | + :hide-on-single-page="true" | |
151 | + :total="total" | |
152 | + @current-change="changePage" | |
153 | + :current-page="page" | |
154 | + :page-size="size" | |
155 | + > | |
60 | 156 | </el-pagination> |
61 | 157 | </div> |
62 | - <ScoreSet v-show="diaScoreSet" :diaScoreSet="diaScoreSet" :role="role" :id="examId" :title="examTitlt" | |
63 | - :examScore="examScore" @closeScoreSet="closeScoreSet" /> | |
158 | + <ScoreSet | |
159 | + v-show="diaScoreSet" | |
160 | + :diaScoreSet="diaScoreSet" | |
161 | + :role="role" | |
162 | + :id="examId" | |
163 | + :title="examTitlt" | |
164 | + :examScore="examScore" | |
165 | + @closeScoreSet="closeScoreSet" | |
166 | + /> | |
64 | 167 | </div> |
65 | 168 | <div v-else> |
66 | - <el-table :data="tableData" :max-height="tableMaxHeight" border style="width: 100%"> | |
67 | - <el-table-column prop="subjectName" label="科目" align="center"></el-table-column> | |
169 | + <el-table | |
170 | + :data="tableData" | |
171 | + :max-height="tableMaxHeight" | |
172 | + border | |
173 | + style="width: 100%" | |
174 | + > | |
175 | + <el-table-column | |
176 | + prop="subjectName" | |
177 | + label="科目" | |
178 | + align="center" | |
179 | + ></el-table-column> | |
68 | 180 | <el-table-column prop="classList" label="班级" align="center"> |
69 | 181 | <template slot-scope="scoped"> |
70 | - <span v-for="(item, index) in scoped.row.classNames">{{ `${index == 0 ? '' : '/'}` + item }}</span> | |
182 | + <span v-for="(item, index) in scoped.row.classNames">{{ | |
183 | + `${index == 0 ? "" : "/"}` + item | |
184 | + }}</span> | |
71 | 185 | </template> |
72 | 186 | </el-table-column> |
73 | - <el-table-column prop="title" label="试卷名称" align="center"></el-table-column> | |
74 | - <el-table-column prop="examPaperScore" label="卷面分" align="center"></el-table-column> | |
187 | + <el-table-column | |
188 | + prop="title" | |
189 | + label="试卷名称" | |
190 | + align="center" | |
191 | + ></el-table-column> | |
192 | + <el-table-column | |
193 | + prop="examPaperScore" | |
194 | + label="卷面分" | |
195 | + align="center" | |
196 | + ></el-table-column> | |
75 | 197 | <el-table-column label="操作" align="center"> |
76 | 198 | <template slot-scope="scoped"> |
77 | - <el-button type="primary" circle size="mini" icon="el-icon-arrow-right" | |
78 | - @click="linkContrast(scoped.row)"></el-button> | |
199 | + <el-button | |
200 | + type="primary" | |
201 | + circle | |
202 | + size="mini" | |
203 | + icon="el-icon-arrow-right" | |
204 | + @click="linkContrast(scoped.row)" | |
205 | + ></el-button> | |
79 | 206 | </template> |
80 | 207 | </el-table-column> |
81 | 208 | </el-table> |
82 | 209 | <div class="pagination-box"> |
83 | - <el-pagination small="" layout="total,prev, pager, next" :hide-on-single-page="true" :total="total" | |
84 | - @current-change="changePage" :current-page="page" :page-size="size"> | |
210 | + <el-pagination | |
211 | + small="" | |
212 | + layout="total,prev, pager, next" | |
213 | + :hide-on-single-page="true" | |
214 | + :total="total" | |
215 | + @current-change="changePage" | |
216 | + :current-page="page" | |
217 | + :page-size="size" | |
218 | + > | |
85 | 219 | </el-pagination> |
86 | 220 | </div> |
87 | 221 | </div> |
... | ... | @@ -91,10 +225,10 @@ |
91 | 225 | </template> |
92 | 226 | |
93 | 227 | <script> |
94 | -import ScoreSet from "./components/scoreSet.vue" | |
228 | +import ScoreSet from "./components/scoreSet.vue"; | |
95 | 229 | export default { |
96 | 230 | components: { |
97 | - ScoreSet | |
231 | + ScoreSet, | |
98 | 232 | }, |
99 | 233 | data() { |
100 | 234 | return { |
... | ... | @@ -104,9 +238,9 @@ export default { |
104 | 238 | role: "", |
105 | 239 | loading: false, |
106 | 240 | diaScoreSet: false, |
107 | - examId: "",//当前操作试卷 | |
108 | - examTitlt: "",//当前操作试卷名称 | |
109 | - examScore: 0,//当前操作试卷卷面总分 | |
241 | + examId: "", //当前操作试卷 | |
242 | + examTitlt: "", //当前操作试卷名称 | |
243 | + examScore: 0, //当前操作试卷卷面总分 | |
110 | 244 | query: { |
111 | 245 | //搜索条件 |
112 | 246 | classId: [], |
... | ... | @@ -124,13 +258,13 @@ export default { |
124 | 258 | }, |
125 | 259 | computed: { |
126 | 260 | isDetail: function () { |
127 | - let bol = (this.$route.name == "即时测报表分析") ? true : false | |
128 | - return bol | |
129 | - } | |
261 | + let bol = this.$route.name == "即时测报表分析" ? true : false; | |
262 | + return bol; | |
263 | + }, | |
130 | 264 | }, |
131 | 265 | async created() { |
132 | 266 | this.code = this.$store.getters.csCode; |
133 | - this.init() | |
267 | + this.init(); | |
134 | 268 | }, |
135 | 269 | mounted() { |
136 | 270 | this.tableMaxHeight = this.$refs.main.offsetHeight; |
... | ... | @@ -139,30 +273,30 @@ export default { |
139 | 273 | "$route.query.params": function (nVal) { |
140 | 274 | let isFromTestDetail = sessionStorage.getItem("isFromTestDetail"); |
141 | 275 | if (!isFromTestDetail && nVal) { |
142 | - this.init() | |
276 | + this.init(); | |
143 | 277 | } |
144 | - } | |
278 | + }, | |
145 | 279 | }, |
146 | 280 | methods: { |
147 | 281 | //初始化 |
148 | 282 | init() { |
149 | - const queryData = this.$route.query.params | |
150 | - queryData ? this.query = { ...this.query, ...JSON.parse(queryData) } : '' | |
151 | - console.log(this.query) | |
152 | - this.$store.commit('setClasses', this.query.classId.join(',')) | |
153 | - if (this.query.classId.length > 1) { | |
154 | - this.isMultipleClass = true | |
155 | - } | |
283 | + const queryData = this.$route.query.params; | |
284 | + queryData | |
285 | + ? (this.query = { ...this.query, ...JSON.parse(queryData) }) | |
286 | + : ""; | |
287 | + console.log(this.query); | |
288 | + this.$store.commit("setClasses", this.query.classId.join(",")); | |
289 | + this.isMultipleClass = false; | |
156 | 290 | this.role = |
157 | 291 | this.$store.getters.info.showRole || |
158 | 292 | this.$store.getters.info.permissions[0].role; |
159 | 293 | if (this.role != "ROLE_PERSONAL") { |
160 | - this._QueryGdClass() | |
294 | + this._QueryGdClass(); | |
161 | 295 | } |
162 | - this.page = 1 | |
163 | - this.total = 0 | |
164 | - this.tableData = [] | |
165 | - this._QueryData() | |
296 | + this.page = 1; | |
297 | + this.total = 0; | |
298 | + this.tableData = []; | |
299 | + this._QueryData(); | |
166 | 300 | }, |
167 | 301 | //归档列表 |
168 | 302 | toArchiving() { |
... | ... | @@ -182,23 +316,23 @@ export default { |
182 | 316 | type: 1, |
183 | 317 | subjectName: obj.subjectName, |
184 | 318 | classId: this.query.classId[0], |
185 | - params: this.$route.query.params | |
319 | + params: this.$route.query.params, | |
186 | 320 | }, |
187 | 321 | }); |
188 | 322 | }, |
189 | 323 | //汇总跳转-多卷 |
190 | 324 | linkToDetail2() { |
191 | 325 | if (this.multipleSelection.length == 0) { |
192 | - this.$message.warning("请选择试卷!") | |
193 | - return | |
194 | - }; | |
195 | - let subjectArr = [] | |
196 | - const ids = this.multipleSelection.map(item => { | |
197 | - subjectArr.push(item.subjectName) | |
198 | - return item.id | |
199 | - }) | |
200 | - subjectArr = [...new Set(subjectArr)] | |
201 | - console.log(subjectArr) | |
326 | + this.$message.warning("请选择试卷!"); | |
327 | + return; | |
328 | + } | |
329 | + let subjectArr = []; | |
330 | + const ids = this.multipleSelection.map((item) => { | |
331 | + subjectArr.push(item.subjectName); | |
332 | + return item.id; | |
333 | + }); | |
334 | + subjectArr = [...new Set(subjectArr)]; | |
335 | + console.log(subjectArr); | |
202 | 336 | if (ids.length == 1) { |
203 | 337 | this.$router.push({ |
204 | 338 | path: "/testAnalysis", |
... | ... | @@ -209,7 +343,7 @@ export default { |
209 | 343 | type: 1, |
210 | 344 | subjectName: subjectArr.join(), |
211 | 345 | classId: this.query.classId[0], |
212 | - params: this.$route.query.params | |
346 | + params: this.$route.query.params, | |
213 | 347 | }, |
214 | 348 | }); |
215 | 349 | } else { |
... | ... | @@ -221,24 +355,24 @@ export default { |
221 | 355 | classId: this.query.classId[0], |
222 | 356 | type: subjectArr.length == 1 ? 2 : 3, |
223 | 357 | subjectName: subjectArr.join(), |
224 | - params: this.$route.query.params | |
358 | + params: this.$route.query.params, | |
225 | 359 | }, |
226 | 360 | }); |
227 | 361 | } |
228 | 362 | }, |
229 | 363 | // 多班对比 |
230 | 364 | linkContrast(obj) { |
231 | - console.log(obj) | |
365 | + console.log(obj); | |
232 | 366 | this.$router.push({ |
233 | 367 | path: "/testAnalysis", |
234 | 368 | query: { |
235 | - ids: obj.ids.join(','), | |
236 | - classId: obj.classIds.join(','), | |
369 | + ids: obj.ids.join(","), | |
370 | + classId: obj.classIds.join(","), | |
237 | 371 | subjectName: obj.subjectName, |
238 | 372 | title: obj.title, |
239 | 373 | type: 4, |
240 | 374 | examPaperScore: obj.examPaperScore, |
241 | - params: this.$route.query.params | |
375 | + params: this.$route.query.params, | |
242 | 376 | }, |
243 | 377 | }); |
244 | 378 | }, |
... | ... | @@ -247,7 +381,7 @@ export default { |
247 | 381 | }, |
248 | 382 | //打开答卷录分 |
249 | 383 | openScoreSet(obj) { |
250 | - console.log(obj) | |
384 | + console.log(obj); | |
251 | 385 | this.examId = String(obj.id); |
252 | 386 | this.examTitlt = obj.title; |
253 | 387 | this.examScore = obj.examPaperScore; |
... | ... | @@ -255,7 +389,7 @@ export default { |
255 | 389 | }, |
256 | 390 | //关闭设置分数 |
257 | 391 | closeScoreSet() { |
258 | - this.diaScoreSet = false | |
392 | + this.diaScoreSet = false; | |
259 | 393 | }, |
260 | 394 | //修改答案 |
261 | 395 | edit(item) { |
... | ... | @@ -303,19 +437,21 @@ export default { |
303 | 437 | let query = {}; |
304 | 438 | for (let key in this.query) { |
305 | 439 | if (this.query[key] != "") { |
306 | - if (key == 'classId') { | |
440 | + if (key == "classId") { | |
307 | 441 | if (this.query.classId?.length == 1) { |
308 | - query.classId = this.query[key][0] | |
442 | + query.classId = this.query[key][0]; | |
309 | 443 | } else { |
310 | - query.classIds = [...this.query[key]] | |
444 | + query.classIds = [...this.query[key]]; | |
311 | 445 | } |
312 | 446 | } else { |
313 | 447 | query[key] = this.query[key]; |
314 | 448 | } |
315 | 449 | } |
316 | 450 | } |
317 | - const examReportList = this.role == "ROLE_PERSONAL" ? | |
318 | - this.$request.pExamReportList : this.$request.examReportList | |
451 | + const examReportList = | |
452 | + this.role == "ROLE_PERSONAL" | |
453 | + ? this.$request.pExamReportList | |
454 | + : this.$request.examReportList; | |
319 | 455 | const { data, status, info } = await examReportList({ |
320 | 456 | ...query, |
321 | 457 | page: this.page, |
... | ... | @@ -323,44 +459,60 @@ export default { |
323 | 459 | }); |
324 | 460 | this.loading = false; |
325 | 461 | if (status === 0) { |
326 | - if (this.query.classId.length > 1) { | |
327 | - //多班级 | |
328 | - let tableObj = {}; | |
462 | + if (this.role == "ROLE_BANZHUREN") { | |
463 | + this.tableData = (data?.list && [...data?.list]) || []; | |
464 | + this.total = data?.count || 0; | |
465 | + } else { | |
466 | + this.isMultipleClass = true; | |
467 | + let classArr = []; | |
329 | 468 | data?.list?.map((item) => { |
330 | - if (tableObj[item.examPaperId]) { | |
331 | - // 没有班级考试的添加 | |
332 | - if (!tableObj[item.examPaperId].classIds.includes(item.classId)) { | |
333 | - tableObj[item.examPaperId].ids.push(item.id) | |
334 | - tableObj[item.examPaperId].classIds.push(item.classId) | |
335 | - tableObj[item.examPaperId].classNames.push(item.className) | |
336 | - } else { | |
337 | - //已经考过班级的新的替换老的 | |
338 | - let idx = tableObj[item.examPaperId].classIds.indexOf(item.classId) | |
339 | - if (tableObj[item.examPaperId].ids[idx] < item.id) { | |
340 | - tableObj[item.examPaperId].ids[idx] = [item.id] | |
341 | - tableObj[item.examPaperId].title = item.title | |
469 | + if (!classArr.includes(item.classId)) { | |
470 | + classArr.push(item.classId); | |
471 | + } | |
472 | + }); | |
473 | + if (classArr.length > 1) { | |
474 | + //多班级 | |
475 | + let tableObj = {}; | |
476 | + data?.list?.map((item) => { | |
477 | + if (tableObj[item.examPaperId]) { | |
478 | + // 没有班级考试的添加 | |
479 | + if ( | |
480 | + !tableObj[item.examPaperId].classIds.includes(item.classId) | |
481 | + ) { | |
482 | + tableObj[item.examPaperId].ids.push(item.id); | |
483 | + tableObj[item.examPaperId].classIds.push(item.classId); | |
484 | + tableObj[item.examPaperId].classNames.push(item.className); | |
485 | + } else { | |
486 | + //已经考过班级的新的替换老的 | |
487 | + let idx = tableObj[item.examPaperId].classIds.indexOf( | |
488 | + item.classId | |
489 | + ); | |
490 | + if (tableObj[item.examPaperId].ids[idx] < item.id) { | |
491 | + tableObj[item.examPaperId].ids[idx] = [item.id]; | |
492 | + tableObj[item.examPaperId].title = item.title; | |
493 | + } | |
342 | 494 | } |
495 | + } else { | |
496 | + tableObj[item.examPaperId] = { | |
497 | + ids: [item.id], | |
498 | + examPaperId: item.examPaperId, | |
499 | + classIds: [item.classId], | |
500 | + classNames: [item.className], | |
501 | + title: item.title, | |
502 | + examPaperScore: item.examPaperScore, | |
503 | + subjectName: item.subjectName, | |
504 | + }; | |
343 | 505 | } |
344 | - } else { | |
345 | - tableObj[item.examPaperId] = { | |
346 | - ids: [item.id], | |
347 | - examPaperId: item.examPaperId, | |
348 | - classIds: [item.classId], | |
349 | - classNames: [item.className], | |
350 | - title: item.title, | |
351 | - examPaperScore: item.examPaperScore, | |
352 | - subjectName: item.subjectName | |
506 | + }); | |
507 | + Object.keys(tableObj).map((keys) => { | |
508 | + if (tableObj[keys].classIds.length > 1) { | |
509 | + this.tableData.push(tableObj[keys]); | |
353 | 510 | } |
354 | - } | |
355 | - }); | |
356 | - Object.keys(tableObj).map(keys => { | |
357 | - if (tableObj[keys].classIds.length > 1) { | |
358 | - this.tableData.push(tableObj[keys]) | |
359 | - } | |
360 | - }) | |
361 | - } else { | |
362 | - this.tableData = (data?.list && [...data?.list]) || []; | |
363 | - this.total = data?.count || 0; | |
511 | + }); | |
512 | + } else { | |
513 | + this.tableData = (data?.list && [...data?.list]) || []; | |
514 | + this.total = data?.count || 0; | |
515 | + } | |
364 | 516 | } |
365 | 517 | } else { |
366 | 518 | this.$message.error(info); | ... | ... |