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,30 +8,64 @@ | ||
8 | <div class="select-box"> | 8 | <div class="select-box"> |
9 | <div class="sel-item sel-item2"> | 9 | <div class="sel-item sel-item2"> |
10 | <span class="sel-label">班级:</span> | 10 | <span class="sel-label">班级:</span> |
11 | - <div class="sel-d"> | 11 | + <div class="sel-d" v-if="role == 'ROLE_JIAOSHI'"> |
12 | <p class="p-all"> | 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 | </p> | 19 | </p> |
16 | <p class="sel-p"> | 20 | <p class="sel-p"> |
17 | <el-checkbox-group v-model="query.classId" @change="changeclass"> | 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 | </el-checkbox-group> | 28 | </el-checkbox-group> |
21 | </p> | 29 | </p> |
22 | </div> | 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 | </div> | 46 | </div> |
24 | <div class="sel-item sel-item2"> | 47 | <div class="sel-item sel-item2"> |
25 | <span class="sel-label">科目:</span> | 48 | <span class="sel-label">科目:</span> |
26 | <div class="sel-d"> | 49 | <div class="sel-d"> |
27 | <p class="p-all"> | 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 | </p> | 57 | </p> |
31 | <p class="sel-p"> | 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 | </el-checkbox-group> | 69 | </el-checkbox-group> |
36 | </p> | 70 | </p> |
37 | </div> | 71 | </div> |
@@ -39,18 +73,34 @@ | @@ -39,18 +73,34 @@ | ||
39 | <div class="sel-item"> | 73 | <div class="sel-item"> |
40 | <span class="sel-label">日期:</span> | 74 | <span class="sel-label">日期:</span> |
41 | <div class="d1"> | 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 | </el-date-picker> | 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 | </el-date-picker> | 92 | </el-date-picker> |
49 | </div> | 93 | </div> |
50 | <p class="p1"> | 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 | </p> | 104 | </p> |
55 | </div> | 105 | </div> |
56 | </div> | 106 | </div> |
@@ -80,10 +130,10 @@ export default { | @@ -80,10 +130,10 @@ export default { | ||
80 | classList: [], //班级 | 130 | classList: [], //班级 |
81 | subjectList: [], //科目 | 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 | async created() { | 139 | async created() { |
@@ -107,24 +157,30 @@ export default { | @@ -107,24 +157,30 @@ export default { | ||
107 | 157 | ||
108 | methods: { | 158 | methods: { |
109 | handleCheckAllChangeClass(val) { | 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 | changeclass(value) { | 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 | handleCheckAllChangeSub(val) { | 174 | handleCheckAllChangeSub(val) { |
120 | - this.isIndeterminate = false | 175 | + this.isIndeterminate = false; |
121 | this.query.subjectNames = val ? this.subjectList : []; | 176 | this.query.subjectNames = val ? this.subjectList : []; |
122 | }, | 177 | }, |
123 | CheckedSub(value) { | 178 | CheckedSub(value) { |
124 | - console.log(value) | 179 | + console.log(value); |
125 | let checkedCount = value.length; | 180 | let checkedCount = value.length; |
126 | this.allSubject = checkedCount === this.subjectList.length; | 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 | setDate(index) { | 185 | setDate(index) { |
130 | const that = this; | 186 | const that = this; |
@@ -189,10 +245,10 @@ export default { | @@ -189,10 +245,10 @@ export default { | ||
189 | async _QueryClassList() { | 245 | async _QueryClassList() { |
190 | const fetchClassList = | 246 | const fetchClassList = |
191 | this.role == "ROLE_BANZHUREN" | 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 | const { data, status, info } = await fetchClassList(); | 252 | const { data, status, info } = await fetchClassList(); |
197 | if (status === 0) { | 253 | if (status === 0) { |
198 | this.classList = data.list.map((item) => { | 254 | this.classList = data.list.map((item) => { |
@@ -201,7 +257,15 @@ export default { | @@ -201,7 +257,15 @@ export default { | ||
201 | label: item.className, | 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 | } else { | 269 | } else { |
206 | this.$message.error(info); | 270 | this.$message.error(info); |
207 | } | 271 | } |
@@ -209,22 +273,20 @@ export default { | @@ -209,22 +273,20 @@ export default { | ||
209 | async _QuerySubjectList() { | 273 | async _QuerySubjectList() { |
210 | const fetchSubjectList = | 274 | const fetchSubjectList = |
211 | this.role == "ROLE_BANZHUREN" | 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 | const { data, status, info } = await fetchSubjectList({ | 282 | const { data, status, info } = await fetchSubjectList({ |
219 | classIds: classIds, | 283 | classIds: classIds, |
220 | }); | 284 | }); |
221 | if (status === 0) { | 285 | if (status === 0) { |
222 | this.subjectList = data.subjectNames || []; | 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 | } else { | 290 | } else { |
229 | this.$message.error(info); | 291 | this.$message.error(info); |
230 | } | 292 | } |
@@ -233,26 +295,30 @@ export default { | @@ -233,26 +295,30 @@ export default { | ||
233 | //回主页 | 295 | //回主页 |
234 | goHome() { | 296 | goHome() { |
235 | this.$router.push({ | 297 | this.$router.push({ |
236 | - path: '/index' | ||
237 | - }) | 298 | + path: "/index", |
299 | + }); | ||
238 | }, | 300 | }, |
239 | //去列表 | 301 | //去列表 |
240 | goList() { | 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 | this.$router.push({ | 315 | this.$router.push({ |
250 | - path: '/testList', | 316 | + path: "/testList", |
251 | query: { | 317 | query: { |
252 | - params: JSON.stringify(this.query) | ||
253 | - } | ||
254 | - }) | ||
255 | - } | 318 | + params: JSON.stringify(query), |
319 | + }, | ||
320 | + }); | ||
321 | + }, | ||
256 | }, | 322 | }, |
257 | }; | 323 | }; |
258 | </script> | 324 | </script> |
@@ -270,7 +336,7 @@ div::-webkit-scrollbar-thumb { | @@ -270,7 +336,7 @@ div::-webkit-scrollbar-thumb { | ||
270 | <style lang="scss" scoped> | 336 | <style lang="scss" scoped> |
271 | .main { | 337 | .main { |
272 | height: 100%; | 338 | height: 100%; |
273 | - background: rgba($color: #000000, $alpha: .3); | 339 | + background: rgba($color: #000000, $alpha: 0.3); |
274 | display: flex; | 340 | display: flex; |
275 | justify-content: center; | 341 | justify-content: center; |
276 | } | 342 | } |
src/views/basic/test/list.vue
@@ -5,83 +5,217 @@ | @@ -5,83 +5,217 @@ | ||
5 | <span>即时测-数据报表</span> | 5 | <span>即时测-数据报表</span> |
6 | </template> | 6 | </template> |
7 | <template slot="btns"> | 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 | </el-tooltip> | 22 | </el-tooltip> |
11 | </template> | 23 | </template> |
12 | </back-box> | 24 | </back-box> |
13 | <div v-show="!isDetail" class="table-box" v-loading="loading"> | 25 | <div v-show="!isDetail" class="table-box" v-loading="loading"> |
14 | <div v-if="!isMultipleClass"> | 26 | <div v-if="!isMultipleClass"> |
15 | <p class="btn-box"> | 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 | </p> | 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 | <el-table-column label="测验人数/班级人数" align="center"> | 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 | </el-table-column> | 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 | <el-table-column label="操作" align="center"> | 78 | <el-table-column label="操作" align="center"> |
30 | <template slot-scope="scoped"> | 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 | </el-tooltip> | 93 | </el-tooltip> |
36 | <template v-if="scoped.row.answerNum == 0"> | 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 | </el-tooltip> | 108 | </el-tooltip> |
41 | <template v-else>未设置答案</template> | 109 | <template v-else>未设置答案</template> |
42 | </template> | 110 | </template> |
43 | <!-- <el-tooltip v-else effect="dark" content="答卷录分" placement="top"> | 111 | <!-- <el-tooltip v-else effect="dark" content="答卷录分" placement="top"> |
44 | <el-button type="primary" circle size="mini" @click="openScoreSet(scoped.row)">分</el-button> | 112 | <el-button type="primary" circle size="mini" @click="openScoreSet(scoped.row)">分</el-button> |
45 | </el-tooltip> --> | 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 | </el-tooltip> | 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 | </el-popconfirm> | 142 | </el-popconfirm> |
54 | </template> | 143 | </template> |
55 | </el-table-column> | 144 | </el-table-column> |
56 | </el-table> | 145 | </el-table> |
57 | <div class="pagination-box"> | 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 | </el-pagination> | 156 | </el-pagination> |
61 | </div> | 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 | </div> | 167 | </div> |
65 | <div v-else> | 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 | <el-table-column prop="classList" label="班级" align="center"> | 180 | <el-table-column prop="classList" label="班级" align="center"> |
69 | <template slot-scope="scoped"> | 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 | </template> | 185 | </template> |
72 | </el-table-column> | 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 | <el-table-column label="操作" align="center"> | 197 | <el-table-column label="操作" align="center"> |
76 | <template slot-scope="scoped"> | 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 | </template> | 206 | </template> |
80 | </el-table-column> | 207 | </el-table-column> |
81 | </el-table> | 208 | </el-table> |
82 | <div class="pagination-box"> | 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 | </el-pagination> | 219 | </el-pagination> |
86 | </div> | 220 | </div> |
87 | </div> | 221 | </div> |
@@ -91,10 +225,10 @@ | @@ -91,10 +225,10 @@ | ||
91 | </template> | 225 | </template> |
92 | 226 | ||
93 | <script> | 227 | <script> |
94 | -import ScoreSet from "./components/scoreSet.vue" | 228 | +import ScoreSet from "./components/scoreSet.vue"; |
95 | export default { | 229 | export default { |
96 | components: { | 230 | components: { |
97 | - ScoreSet | 231 | + ScoreSet, |
98 | }, | 232 | }, |
99 | data() { | 233 | data() { |
100 | return { | 234 | return { |
@@ -104,9 +238,9 @@ export default { | @@ -104,9 +238,9 @@ export default { | ||
104 | role: "", | 238 | role: "", |
105 | loading: false, | 239 | loading: false, |
106 | diaScoreSet: false, | 240 | diaScoreSet: false, |
107 | - examId: "",//当前操作试卷 | ||
108 | - examTitlt: "",//当前操作试卷名称 | ||
109 | - examScore: 0,//当前操作试卷卷面总分 | 241 | + examId: "", //当前操作试卷 |
242 | + examTitlt: "", //当前操作试卷名称 | ||
243 | + examScore: 0, //当前操作试卷卷面总分 | ||
110 | query: { | 244 | query: { |
111 | //搜索条件 | 245 | //搜索条件 |
112 | classId: [], | 246 | classId: [], |
@@ -124,13 +258,13 @@ export default { | @@ -124,13 +258,13 @@ export default { | ||
124 | }, | 258 | }, |
125 | computed: { | 259 | computed: { |
126 | isDetail: function () { | 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 | async created() { | 265 | async created() { |
132 | this.code = this.$store.getters.csCode; | 266 | this.code = this.$store.getters.csCode; |
133 | - this.init() | 267 | + this.init(); |
134 | }, | 268 | }, |
135 | mounted() { | 269 | mounted() { |
136 | this.tableMaxHeight = this.$refs.main.offsetHeight; | 270 | this.tableMaxHeight = this.$refs.main.offsetHeight; |
@@ -139,30 +273,30 @@ export default { | @@ -139,30 +273,30 @@ export default { | ||
139 | "$route.query.params": function (nVal) { | 273 | "$route.query.params": function (nVal) { |
140 | let isFromTestDetail = sessionStorage.getItem("isFromTestDetail"); | 274 | let isFromTestDetail = sessionStorage.getItem("isFromTestDetail"); |
141 | if (!isFromTestDetail && nVal) { | 275 | if (!isFromTestDetail && nVal) { |
142 | - this.init() | 276 | + this.init(); |
143 | } | 277 | } |
144 | - } | 278 | + }, |
145 | }, | 279 | }, |
146 | methods: { | 280 | methods: { |
147 | //初始化 | 281 | //初始化 |
148 | init() { | 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 | this.role = | 290 | this.role = |
157 | this.$store.getters.info.showRole || | 291 | this.$store.getters.info.showRole || |
158 | this.$store.getters.info.permissions[0].role; | 292 | this.$store.getters.info.permissions[0].role; |
159 | if (this.role != "ROLE_PERSONAL") { | 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 | toArchiving() { | 302 | toArchiving() { |
@@ -182,23 +316,23 @@ export default { | @@ -182,23 +316,23 @@ export default { | ||
182 | type: 1, | 316 | type: 1, |
183 | subjectName: obj.subjectName, | 317 | subjectName: obj.subjectName, |
184 | classId: this.query.classId[0], | 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 | linkToDetail2() { | 324 | linkToDetail2() { |
191 | if (this.multipleSelection.length == 0) { | 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 | if (ids.length == 1) { | 336 | if (ids.length == 1) { |
203 | this.$router.push({ | 337 | this.$router.push({ |
204 | path: "/testAnalysis", | 338 | path: "/testAnalysis", |
@@ -209,7 +343,7 @@ export default { | @@ -209,7 +343,7 @@ export default { | ||
209 | type: 1, | 343 | type: 1, |
210 | subjectName: subjectArr.join(), | 344 | subjectName: subjectArr.join(), |
211 | classId: this.query.classId[0], | 345 | classId: this.query.classId[0], |
212 | - params: this.$route.query.params | 346 | + params: this.$route.query.params, |
213 | }, | 347 | }, |
214 | }); | 348 | }); |
215 | } else { | 349 | } else { |
@@ -221,24 +355,24 @@ export default { | @@ -221,24 +355,24 @@ export default { | ||
221 | classId: this.query.classId[0], | 355 | classId: this.query.classId[0], |
222 | type: subjectArr.length == 1 ? 2 : 3, | 356 | type: subjectArr.length == 1 ? 2 : 3, |
223 | subjectName: subjectArr.join(), | 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 | linkContrast(obj) { | 364 | linkContrast(obj) { |
231 | - console.log(obj) | 365 | + console.log(obj); |
232 | this.$router.push({ | 366 | this.$router.push({ |
233 | path: "/testAnalysis", | 367 | path: "/testAnalysis", |
234 | query: { | 368 | query: { |
235 | - ids: obj.ids.join(','), | ||
236 | - classId: obj.classIds.join(','), | 369 | + ids: obj.ids.join(","), |
370 | + classId: obj.classIds.join(","), | ||
237 | subjectName: obj.subjectName, | 371 | subjectName: obj.subjectName, |
238 | title: obj.title, | 372 | title: obj.title, |
239 | type: 4, | 373 | type: 4, |
240 | examPaperScore: obj.examPaperScore, | 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,7 +381,7 @@ export default { | ||
247 | }, | 381 | }, |
248 | //打开答卷录分 | 382 | //打开答卷录分 |
249 | openScoreSet(obj) { | 383 | openScoreSet(obj) { |
250 | - console.log(obj) | 384 | + console.log(obj); |
251 | this.examId = String(obj.id); | 385 | this.examId = String(obj.id); |
252 | this.examTitlt = obj.title; | 386 | this.examTitlt = obj.title; |
253 | this.examScore = obj.examPaperScore; | 387 | this.examScore = obj.examPaperScore; |
@@ -255,7 +389,7 @@ export default { | @@ -255,7 +389,7 @@ export default { | ||
255 | }, | 389 | }, |
256 | //关闭设置分数 | 390 | //关闭设置分数 |
257 | closeScoreSet() { | 391 | closeScoreSet() { |
258 | - this.diaScoreSet = false | 392 | + this.diaScoreSet = false; |
259 | }, | 393 | }, |
260 | //修改答案 | 394 | //修改答案 |
261 | edit(item) { | 395 | edit(item) { |
@@ -303,19 +437,21 @@ export default { | @@ -303,19 +437,21 @@ export default { | ||
303 | let query = {}; | 437 | let query = {}; |
304 | for (let key in this.query) { | 438 | for (let key in this.query) { |
305 | if (this.query[key] != "") { | 439 | if (this.query[key] != "") { |
306 | - if (key == 'classId') { | 440 | + if (key == "classId") { |
307 | if (this.query.classId?.length == 1) { | 441 | if (this.query.classId?.length == 1) { |
308 | - query.classId = this.query[key][0] | 442 | + query.classId = this.query[key][0]; |
309 | } else { | 443 | } else { |
310 | - query.classIds = [...this.query[key]] | 444 | + query.classIds = [...this.query[key]]; |
311 | } | 445 | } |
312 | } else { | 446 | } else { |
313 | query[key] = this.query[key]; | 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 | const { data, status, info } = await examReportList({ | 455 | const { data, status, info } = await examReportList({ |
320 | ...query, | 456 | ...query, |
321 | page: this.page, | 457 | page: this.page, |
@@ -323,44 +459,60 @@ export default { | @@ -323,44 +459,60 @@ export default { | ||
323 | }); | 459 | }); |
324 | this.loading = false; | 460 | this.loading = false; |
325 | if (status === 0) { | 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 | data?.list?.map((item) => { | 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 | } else { | 517 | } else { |
366 | this.$message.error(info); | 518 | this.$message.error(info); |