Commit d3ca55ac5f419d120eb3160057afd4fdbd2efea0
1 parent
fcb9ef36
等级设置
Showing
4 changed files
with
206 additions
and
587 deletions
package.json
@@ -20,7 +20,6 @@ | @@ -20,7 +20,6 @@ | ||
20 | "script-ext-html-webpack-plugin": "^2.1.5", | 20 | "script-ext-html-webpack-plugin": "^2.1.5", |
21 | "vue": "^2.6.11", | 21 | "vue": "^2.6.11", |
22 | "vue-i18n": "^8.4.0", | 22 | "vue-i18n": "^8.4.0", |
23 | - "vue-masonry": "^0.16.0", | ||
24 | "vue-router": "^3.5.1", | 23 | "vue-router": "^3.5.1", |
25 | "vuedraggable": "^2.24.3", | 24 | "vuedraggable": "^2.24.3", |
26 | "vuex": "^3.6.2" | 25 | "vuex": "^3.6.2" |
src/main.js
@@ -20,13 +20,11 @@ import "@/router/permission" | @@ -20,13 +20,11 @@ import "@/router/permission" | ||
20 | import "@/assets/css/base.css" | 20 | import "@/assets/css/base.css" |
21 | import "@/assets/css/index.scss" | 21 | import "@/assets/css/index.scss" |
22 | 22 | ||
23 | -import { VueMasonryPlugin } from 'vue-masonry' | ||
24 | 23 | ||
25 | Vue.config.productionTip = false | 24 | Vue.config.productionTip = false |
26 | Vue.use(ElementUI) | 25 | Vue.use(ElementUI) |
27 | Vue.use(globalPlugin) | 26 | Vue.use(globalPlugin) |
28 | Vue.use(permission) | 27 | Vue.use(permission) |
29 | -Vue.use(VueMasonryPlugin) | ||
30 | 28 | ||
31 | NProgress.inc(0.2) | 29 | NProgress.inc(0.2) |
32 | NProgress.configure({ easing: "ease", speed: 500, showSpinner: false }) | 30 | NProgress.configure({ easing: "ease", speed: 500, showSpinner: false }) |
src/views/standard/test/contrast.vue
@@ -8,40 +8,15 @@ | @@ -8,40 +8,15 @@ | ||
8 | <div class="page-content"> | 8 | <div class="page-content"> |
9 | <div class="content-header"> | 9 | <div class="content-header"> |
10 | <div class="tab-box"> | 10 | <div class="tab-box"> |
11 | - <span | ||
12 | - v-for="(item, index) in tabList" | ||
13 | - :key="item" | ||
14 | - class="tab-item" | ||
15 | - :class="type == index ? 'active' : ''" | ||
16 | - @click="setType(index)" | ||
17 | - >{{ item }}</span | ||
18 | - > | 11 | + <span v-for="(item, index) in tabList" :key="item" class="tab-item" :class="type == index ? 'active' : ''" |
12 | + @click="setType(index)">{{ item }}</span> | ||
19 | </div> | 13 | </div> |
20 | - <el-button class="setMinScore" @click="openDia" round size="small" | ||
21 | - >对比成绩等级设置</el-button | ||
22 | - > | 14 | + <el-button class="setMinScore" @click="openDia" round size="small">对比成绩等级设置</el-button> |
23 | </div> | 15 | </div> |
24 | <div id="print-content" class="table-box" v-loading="loading"> | 16 | <div id="print-content" class="table-box" v-loading="loading"> |
25 | - <el-table | ||
26 | - :max-height="tableMaxHeight" | ||
27 | - v-show="type == 0" | ||
28 | - :data="tableData" | ||
29 | - border | ||
30 | - style="width: 100%" | ||
31 | - > | ||
32 | - <el-table-column | ||
33 | - type="index" | ||
34 | - label="序号" | ||
35 | - fixed | ||
36 | - align="center" | ||
37 | - width="60" | ||
38 | - ></el-table-column> | ||
39 | - <el-table-column | ||
40 | - prop="className" | ||
41 | - label="班级" | ||
42 | - align="center" | ||
43 | - fixed | ||
44 | - ></el-table-column> | 17 | + <el-table :max-height="tableMaxHeight" v-show="type == 0" :data="tableData" border style="width: 100%"> |
18 | + <el-table-column type="index" label="序号" fixed align="center" width="60"></el-table-column> | ||
19 | + <el-table-column prop="className" label="班级" align="center" fixed></el-table-column> | ||
45 | <el-table-column label="测验人数/班级人数" align="center" width="84"> | 20 | <el-table-column label="测验人数/班级人数" align="center" width="84"> |
46 | <template slot-scope="scope"> | 21 | <template slot-scope="scope"> |
47 | <p v-for="(item, index) in scope.row.count.split('/')"> | 22 | <p v-for="(item, index) in scope.row.count.split('/')"> |
@@ -49,113 +24,39 @@ | @@ -49,113 +24,39 @@ | ||
49 | </p> | 24 | </p> |
50 | </template> | 25 | </template> |
51 | </el-table-column> | 26 | </el-table-column> |
52 | - <el-table-column | ||
53 | - prop="percent" | ||
54 | - label="参与度" | ||
55 | - align="center" | ||
56 | - ></el-table-column> | ||
57 | - <el-table-column | ||
58 | - prop="avg" | ||
59 | - label="班平均分" | ||
60 | - align="center" | ||
61 | - ></el-table-column> | ||
62 | - <el-table-column | ||
63 | - prop="max" | ||
64 | - label="班最高分" | ||
65 | - sortable | ||
66 | - align="center" | ||
67 | - ></el-table-column> | ||
68 | - <el-table-column | ||
69 | - prop="min" | ||
70 | - label="班最低分" | ||
71 | - sortable | ||
72 | - align="center" | ||
73 | - ></el-table-column> | ||
74 | - | ||
75 | - <el-table-column | ||
76 | - v-for="(item, index) in defaultLevels.levels" | ||
77 | - :label="item[0] + '数(率)'" | ||
78 | - align="center" | ||
79 | - ><template slot-scope="scoped"> | 27 | + <el-table-column prop="percent" label="参与度" align="center"></el-table-column> |
28 | + <el-table-column prop="avg" label="班平均分" align="center"></el-table-column> | ||
29 | + <el-table-column prop="max" label="班最高分" sortable align="center"></el-table-column> | ||
30 | + <el-table-column prop="min" label="班最低分" sortable align="center"></el-table-column> | ||
31 | + | ||
32 | + <el-table-column v-for="(item, index) in defaultLevels.levels" :label="item[0] + '数(率)'" | ||
33 | + align="center"><template slot-scope="scoped"> | ||
80 | <p class="p1">{{ scoped.row.levels[index].people }}</p> | 34 | <p class="p1">{{ scoped.row.levels[index].people }}</p> |
81 | <p class="p1">({{ scoped.row.levels[index].percent }})</p> | 35 | <p class="p1">({{ scoped.row.levels[index].percent }})</p> |
82 | - </template></el-table-column | ||
83 | - > | 36 | + </template></el-table-column> |
84 | </el-table> | 37 | </el-table> |
85 | - <el-table | ||
86 | - v-show="type == 1" | ||
87 | - :max-height="tableMaxHeight" | ||
88 | - :data="tableData2" | ||
89 | - border | ||
90 | - style="width: 100%" | ||
91 | - > | ||
92 | - <el-table-column | ||
93 | - prop="rank" | ||
94 | - label="排名" | ||
95 | - sortable | ||
96 | - align="center" | ||
97 | - ></el-table-column> | ||
98 | - <el-table-column | ||
99 | - prop="name" | ||
100 | - label="姓名" | ||
101 | - align="center" | ||
102 | - ></el-table-column> | ||
103 | - <el-table-column | ||
104 | - prop="className" | ||
105 | - label="班级" | ||
106 | - align="center" | ||
107 | - ></el-table-column> | ||
108 | - <el-table-column | ||
109 | - prop="score" | ||
110 | - label="总分" | ||
111 | - sortable | ||
112 | - align="center" | ||
113 | - ></el-table-column> | ||
114 | - <el-table-column | ||
115 | - prop="levelName" | ||
116 | - label="成绩等级" | ||
117 | - align="center" | ||
118 | - ></el-table-column> | 38 | + <el-table v-show="type == 1" :max-height="tableMaxHeight" :data="tableData2" border style="width: 100%"> |
39 | + <el-table-column prop="rank" label="排名" sortable align="center"></el-table-column> | ||
40 | + <el-table-column prop="name" label="姓名" align="center"></el-table-column> | ||
41 | + <el-table-column prop="className" label="班级" align="center"></el-table-column> | ||
42 | + <el-table-column prop="score" label="总分" sortable align="center"></el-table-column> | ||
43 | + <el-table-column prop="levelName" label="成绩等级" align="center"></el-table-column> | ||
119 | </el-table> | 44 | </el-table> |
120 | </div> | 45 | </div> |
121 | <div class="down"> | 46 | <div class="down"> |
122 | <div> | 47 | <div> |
123 | - <el-button | ||
124 | - v-loading="exportLoading" | ||
125 | - @click="exportData" | ||
126 | - type="primary" | ||
127 | - plain | ||
128 | - round | ||
129 | - icon="fa fa-cloud-download" | ||
130 | - >导出报表</el-button | ||
131 | - > | ||
132 | - <el-button | ||
133 | - v-if="!this.$store.getters.code" | ||
134 | - @click="print" | ||
135 | - type="primary" | ||
136 | - plain | ||
137 | - round | ||
138 | - icon="el-icon-printer" | ||
139 | - >打印</el-button | ||
140 | - > | 48 | + <el-button v-loading="exportLoading" @click="exportData" type="primary" plain round |
49 | + icon="fa fa-cloud-download">导出报表</el-button> | ||
50 | + <el-button v-if="!this.$store.getters.code" @click="print" type="primary" plain round | ||
51 | + icon="el-icon-printer">打印</el-button> | ||
141 | </div> | 52 | </div> |
142 | </div> | 53 | </div> |
143 | 54 | ||
144 | - <el-dialog | ||
145 | - :close-on-click-modal="false" | ||
146 | - title="等级设置" | ||
147 | - :visible.sync="diaLogBox" | ||
148 | - width="800px" | ||
149 | - @closed="closeDia" | ||
150 | - > | 55 | + <el-dialog :close-on-click-modal="false" title="等级设置" :visible.sync="diaLogBox" width="800px" @closed="closeDia"> |
151 | <el-form class="use-form"> | 56 | <el-form class="use-form"> |
152 | <el-form-item class="use-form-item-box"> | 57 | <el-form-item class="use-form-item-box"> |
153 | <el-form-item label="等级名称:" class="use-form-item"> | 58 | <el-form-item label="等级名称:" class="use-form-item"> |
154 | - <el-select | ||
155 | - size="small" | ||
156 | - v-model="fromData.type" | ||
157 | - @change="changeType" | ||
158 | - > | 59 | + <el-select size="small" v-model="fromData.type" @change="changeType"> |
159 | <el-option label="优良合格不合格" :value="0"></el-option> | 60 | <el-option label="优良合格不合格" :value="0"></el-option> |
160 | <el-option label="ABCD" :value="1"></el-option> | 61 | <el-option label="ABCD" :value="1"></el-option> |
161 | <el-option label="自定义" :value="2"></el-option> | 62 | <el-option label="自定义" :value="2"></el-option> |
@@ -177,47 +78,29 @@ | @@ -177,47 +78,29 @@ | ||
177 | <span class="item3"><i>*</i>等级最低</span> | 78 | <span class="item3"><i>*</i>等级最低</span> |
178 | <span class="item"></span> | 79 | <span class="item"></span> |
179 | </p> | 80 | </p> |
180 | - <div | ||
181 | - class="dia-tab-item" | ||
182 | - v-for="(item, index) in fromData.levels" | ||
183 | - > | 81 | + <div class="dia-tab-item" v-for="(item, index) in fromData.levels"> |
184 | <span class="item1">{{ index + 1 }}</span> | 82 | <span class="item1">{{ index + 1 }}</span> |
185 | <p class="item2"> | 83 | <p class="item2"> |
186 | - <el-input | ||
187 | - class="score-ipt" | ||
188 | - v-model="item[0]" | ||
189 | - :maxlength="12" | ||
190 | - @keydown.native="keydownRange($event)" | ||
191 | - ></el-input> | 84 | + <el-input class="score-ipt" v-model="item[0]" :maxlength="12" |
85 | + @keydown.native="keydownRange($event)"></el-input> | ||
192 | </p> | 86 | </p> |
193 | <p class="item3"> | 87 | <p class="item3"> |
194 | - <el-input | ||
195 | - class="score-ipt" | ||
196 | - type="number" | ||
197 | - v-model="item[1]" | ||
198 | - :min="item[2]" | 88 | + <el-input class="score-ipt" type="number" v-model="item[1]" :min="item[2]" |
199 | :max="index == 0 ? 100 : fromData.levels[index - 1][2]" | 89 | :max="index == 0 ? 100 : fromData.levels[index - 1][2]" |
200 | - @keydown.native="keydownRange($event)" | ||
201 | - ></el-input> | 90 | + @keydown.native="keydownRange($event)"></el-input> |
202 | % | 91 | % |
203 | <template v-if="fromData.levelType == 0"> | 92 | <template v-if="fromData.levelType == 0"> |
204 | ({{ index != 0 ? "不含" : "" | 93 | ({{ index != 0 ? "不含" : "" |
205 | }}{{ | 94 | }}{{ |
206 | - Number(((item[1] / 100) * examPaperScore).toFixed(1)) | ||
207 | - }}分) | 95 | + Number(((item[1] / 100) * examPaperScore).toFixed(1)) |
96 | +}}分) | ||
208 | </template> | 97 | </template> |
209 | <template v-else>{{ index != 0 ? "不含" : "" }}</template> | 98 | <template v-else>{{ index != 0 ? "不含" : "" }}</template> |
210 | </p> | 99 | </p> |
211 | <p>~</p> | 100 | <p>~</p> |
212 | <p class="item3"> | 101 | <p class="item3"> |
213 | - <el-input | ||
214 | - class="score-ipt" | ||
215 | - type="number" | ||
216 | - v-model="item[2]" | ||
217 | - :min="0" | ||
218 | - :max="item[1]" | ||
219 | - @keydown.native="keydownRange($event)" | ||
220 | - ></el-input> | 102 | + <el-input class="score-ipt" type="number" v-model="item[2]" :min="0" :max="item[1]" |
103 | + @keydown.native="keydownRange($event)"></el-input> | ||
221 | % | 104 | % |
222 | <template v-if="fromData.levelType == 0"> | 105 | <template v-if="fromData.levelType == 0"> |
223 | ({{ | 106 | ({{ |
@@ -226,23 +109,12 @@ | @@ -226,23 +109,12 @@ | ||
226 | </template> | 109 | </template> |
227 | </p> | 110 | </p> |
228 | <p class="item"> | 111 | <p class="item"> |
229 | - <el-link | ||
230 | - type="danger" | ||
231 | - :underline="false" | ||
232 | - @click="fromData.levels.splice(index, 1)" | ||
233 | - >删除</el-link | ||
234 | - > | 112 | + <el-link type="danger" :underline="false" @click="fromData.levels.splice(index, 1)">删除</el-link> |
235 | </p> | 113 | </p> |
236 | </div> | 114 | </div> |
237 | <div class="add"> | 115 | <div class="add"> |
238 | <p @click="fromData.levels.push(['', '', ''])"> | 116 | <p @click="fromData.levels.push(['', '', ''])"> |
239 | - <el-button | ||
240 | - size="mini" | ||
241 | - icon="el-icon-plus" | ||
242 | - circle | ||
243 | - type="primary" | ||
244 | - ></el-button | ||
245 | - >添加一行 | 117 | + <el-button size="mini" icon="el-icon-plus" circle type="primary"></el-button>添加一行 |
246 | </p> | 118 | </p> |
247 | </div> | 119 | </div> |
248 | </div> | 120 | </div> |
@@ -293,8 +165,9 @@ export default { | @@ -293,8 +165,9 @@ export default { | ||
293 | }, | 165 | }, |
294 | async created() { | 166 | async created() { |
295 | this.ids = this.$route.query.ids; | 167 | this.ids = this.$route.query.ids; |
296 | - await this._QueryData(); | 168 | + this.examPaperScore = Number(this.$route.query.examPaperScore || 100); |
297 | await this._QueryDefaultLevels(); | 169 | await this._QueryDefaultLevels(); |
170 | + await this._QueryData(); | ||
298 | }, | 171 | }, |
299 | destroyed() { | 172 | destroyed() { |
300 | sessionStorage.setItem("levelFromData", ""); | 173 | sessionStorage.setItem("levelFromData", ""); |
@@ -416,19 +289,17 @@ export default { | @@ -416,19 +289,17 @@ export default { | ||
416 | this.$message.error(info); | 289 | this.$message.error(info); |
417 | } | 290 | } |
418 | }, | 291 | }, |
419 | - async _QueryData(params) { | 292 | + async _QueryData() { |
420 | let query = {}; | 293 | let query = {}; |
421 | - if (params) { | ||
422 | - let paramObj = JSON.parse(JSON.stringify(params)) | ||
423 | - if (paramObj.levelType == 0) { | ||
424 | - paramObj.levels = paramObj.levels.map((item) => { | ||
425 | - item[1] = ((item[1] / 100) * this.examPaperScore).toFixed(1); | ||
426 | - item[2] = ((item[2] / 100) * this.examPaperScore).toFixed(1); | ||
427 | - return item; | ||
428 | - }); | ||
429 | - } | ||
430 | - query = { ...paramObj }; | 294 | + let paramObj = JSON.parse(JSON.stringify(this.fromData)) |
295 | + if (paramObj.levelType == 0) { | ||
296 | + paramObj.levels = paramObj.levels.map((item) => { | ||
297 | + item[1] = ((item[1] / 100) * this.examPaperScore).toFixed(1); | ||
298 | + item[2] = ((item[2] / 100) * this.examPaperScore).toFixed(1); | ||
299 | + return item; | ||
300 | + }); | ||
431 | } | 301 | } |
302 | + query = { ...paramObj }; | ||
432 | const { data, info, status } = await this.$request.examMultiClassReport({ | 303 | const { data, info, status } = await this.$request.examMultiClassReport({ |
433 | examIds: this.ids, | 304 | examIds: this.ids, |
434 | ...query, | 305 | ...query, |
@@ -455,7 +326,6 @@ export default { | @@ -455,7 +326,6 @@ export default { | ||
455 | let params = { ...this.fromData }; | 326 | let params = { ...this.fromData }; |
456 | if (params.levelType == 0) { | 327 | if (params.levelType == 0) { |
457 | params.levels = params.levels.map((item) => { | 328 | params.levels = params.levels.map((item) => { |
458 | - console.log(item); | ||
459 | item[1] = ((item[1] / 100) * this.examPaperScore).toFixed(1); | 329 | item[1] = ((item[1] / 100) * this.examPaperScore).toFixed(1); |
460 | item[2] = ((item[2] / 100) * this.examPaperScore).toFixed(1); | 330 | item[2] = ((item[2] / 100) * this.examPaperScore).toFixed(1); |
461 | return item; | 331 | return item; |
@@ -487,25 +357,31 @@ export default { | @@ -487,25 +357,31 @@ export default { | ||
487 | .page-container { | 357 | .page-container { |
488 | position: relative; | 358 | position: relative; |
489 | height: 100%; | 359 | height: 100%; |
360 | + | ||
490 | .table-box { | 361 | .table-box { |
491 | min-height: 100%; | 362 | min-height: 100%; |
492 | } | 363 | } |
364 | + | ||
493 | &.active { | 365 | &.active { |
494 | overflow: hidden; | 366 | overflow: hidden; |
495 | } | 367 | } |
368 | + | ||
496 | .content-header { | 369 | .content-header { |
497 | width: 100%; | 370 | width: 100%; |
498 | position: relative; | 371 | position: relative; |
372 | + | ||
499 | .setMinScore { | 373 | .setMinScore { |
500 | position: absolute; | 374 | position: absolute; |
501 | bottom: 0; | 375 | bottom: 0; |
502 | right: 0; | 376 | right: 0; |
503 | } | 377 | } |
504 | } | 378 | } |
379 | + | ||
505 | .page-content { | 380 | .page-content { |
506 | padding: 20px 20px 0; | 381 | padding: 20px 20px 0; |
507 | } | 382 | } |
508 | } | 383 | } |
384 | + | ||
509 | .tab-box { | 385 | .tab-box { |
510 | width: 400px; | 386 | width: 400px; |
511 | margin: 0 auto 12px; | 387 | margin: 0 auto 12px; |
@@ -513,6 +389,7 @@ export default { | @@ -513,6 +389,7 @@ export default { | ||
513 | border-radius: 20px; | 389 | border-radius: 20px; |
514 | display: flex; | 390 | display: flex; |
515 | user-select: none; | 391 | user-select: none; |
392 | + | ||
516 | .tab-item { | 393 | .tab-item { |
517 | flex: 1; | 394 | flex: 1; |
518 | height: 40px; | 395 | height: 40px; |
@@ -524,72 +401,91 @@ export default { | @@ -524,72 +401,91 @@ export default { | ||
524 | background: transparent; | 401 | background: transparent; |
525 | border-radius: 20px; | 402 | border-radius: 20px; |
526 | cursor: pointer; | 403 | cursor: pointer; |
404 | + | ||
527 | &.active { | 405 | &.active { |
528 | background: #667ffd; | 406 | background: #667ffd; |
529 | color: #fff; | 407 | color: #fff; |
530 | } | 408 | } |
531 | } | 409 | } |
532 | } | 410 | } |
411 | + | ||
533 | .down { | 412 | .down { |
534 | padding-top: 20px; | 413 | padding-top: 20px; |
535 | width: 100%; | 414 | width: 100%; |
536 | display: flex; | 415 | display: flex; |
537 | justify-content: space-between; | 416 | justify-content: space-between; |
538 | } | 417 | } |
418 | + | ||
539 | .use-form { | 419 | .use-form { |
540 | padding: 0 12px; | 420 | padding: 0 12px; |
421 | + | ||
541 | .use-form-item-box { | 422 | .use-form-item-box { |
542 | :deep(.el-form-item__content) { | 423 | :deep(.el-form-item__content) { |
543 | display: flex; | 424 | display: flex; |
544 | } | 425 | } |
426 | + | ||
545 | .use-form-item { | 427 | .use-form-item { |
546 | width: 40%; | 428 | width: 40%; |
547 | margin-right: 20px; | 429 | margin-right: 20px; |
548 | } | 430 | } |
549 | } | 431 | } |
550 | } | 432 | } |
433 | + | ||
551 | .dia-tab-box { | 434 | .dia-tab-box { |
435 | + | ||
552 | .dia-tab-tit, | 436 | .dia-tab-tit, |
553 | .dia-tab-item { | 437 | .dia-tab-item { |
554 | margin-bottom: 10px; | 438 | margin-bottom: 10px; |
439 | + | ||
555 | i { | 440 | i { |
556 | color: #f30; | 441 | color: #f30; |
557 | padding-right: 5px; | 442 | padding-right: 5px; |
558 | } | 443 | } |
444 | + | ||
559 | display: flex; | 445 | display: flex; |
446 | + | ||
560 | .item { | 447 | .item { |
561 | width: 40px; | 448 | width: 40px; |
562 | } | 449 | } |
450 | + | ||
563 | .item1 { | 451 | .item1 { |
564 | padding-left: 10px; | 452 | padding-left: 10px; |
565 | width: 10%; | 453 | width: 10%; |
566 | } | 454 | } |
455 | + | ||
567 | .item2 { | 456 | .item2 { |
568 | width: 18%; | 457 | width: 18%; |
569 | } | 458 | } |
459 | + | ||
570 | .item3 { | 460 | .item3 { |
571 | padding-left: 12px; | 461 | padding-left: 12px; |
572 | flex: 1; | 462 | flex: 1; |
573 | } | 463 | } |
464 | + | ||
574 | .score-ipt { | 465 | .score-ipt { |
575 | width: 100px; | 466 | width: 100px; |
576 | } | 467 | } |
577 | } | 468 | } |
469 | + | ||
578 | .dia-tab-tit { | 470 | .dia-tab-tit { |
579 | background: rgba(243, 243, 243, 1); | 471 | background: rgba(243, 243, 243, 1); |
580 | } | 472 | } |
473 | + | ||
581 | .add { | 474 | .add { |
582 | display: flex; | 475 | display: flex; |
583 | justify-content: center; | 476 | justify-content: center; |
584 | margin: 0 auto; | 477 | margin: 0 auto; |
478 | + | ||
585 | p { | 479 | p { |
586 | cursor: pointer; | 480 | cursor: pointer; |
587 | } | 481 | } |
482 | + | ||
588 | .el-button { | 483 | .el-button { |
589 | margin-right: 6px; | 484 | margin-right: 6px; |
590 | } | 485 | } |
591 | } | 486 | } |
592 | } | 487 | } |
488 | + | ||
593 | .p1 { | 489 | .p1 { |
594 | line-height: 18px; | 490 | line-height: 18px; |
595 | } | 491 | } |
src/views/standard/test/index.vue
@@ -5,122 +5,51 @@ | @@ -5,122 +5,51 @@ | ||
5 | <span>即时测-数据报表</span> | 5 | <span>即时测-数据报表</span> |
6 | </template> | 6 | </template> |
7 | <template slot="btns"> | 7 | <template slot="btns"> |
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> | 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> | ||
22 | </el-tooltip> | 10 | </el-tooltip> |
23 | </template> | 11 | </template> |
24 | </back-box> | 12 | </back-box> |
25 | <div class="answer-header"> | 13 | <div class="answer-header"> |
26 | <div class="sel-box"> | 14 | <div class="sel-box"> |
27 | - <el-select | ||
28 | - class="sel" | ||
29 | - v-model="query.classIds" | ||
30 | - placeholder="选择班级" | ||
31 | - @change="changeclass" | ||
32 | - multiple | ||
33 | - collapse-tags | ||
34 | - > | 15 | + <el-select class="sel" v-model="query.classIds" placeholder="选择班级" @change="changeclass" multiple collapse-tags> |
35 | <p class="select-all"> | 16 | <p class="select-all"> |
36 | - <el-checkbox v-model="classAll" @change="selectAll" | ||
37 | - >全选</el-checkbox | ||
38 | - > | 17 | + <el-checkbox v-model="classAll" @change="selectAll">全选</el-checkbox> |
39 | </p> | 18 | </p> |
40 | - <el-option | ||
41 | - :disabled=" | ||
42 | - query.classIds.length == 1 && query.classIds[0] == item.value | ||
43 | - " | ||
44 | - v-for="item in classList" | ||
45 | - :key="item.value" | ||
46 | - :label="item.label" | ||
47 | - :value="item.value" | ||
48 | - > | 19 | + <el-option :disabled="query.classIds.length == 1 && query.classIds[0] == item.value |
20 | + " v-for="item in classList" :key="item.value" :label="item.label" :value="item.value"> | ||
49 | </el-option> | 21 | </el-option> |
50 | </el-select> | 22 | </el-select> |
51 | - <el-select | ||
52 | - v-if="role == 'ROLE_BANZHUREN'" | ||
53 | - class="sel sel2" | ||
54 | - multiple | ||
55 | - v-model="query.subjectNames" | ||
56 | - placeholder="选择科目" | ||
57 | - @change="changeSub" | ||
58 | - > | ||
59 | - <el-option | ||
60 | - v-for="item in subjectList" | ||
61 | - :key="item.value" | ||
62 | - :label="item.label" | ||
63 | - :value="item.value" | ||
64 | - > | 23 | + <el-select v-if="role == 'ROLE_BANZHUREN'" class="sel sel2" multiple v-model="query.subjectNames" |
24 | + placeholder="选择科目" @change="changeSub"> | ||
25 | + <el-option v-for="item in subjectList" :key="item.value" :label="item.label" :value="item.value"> | ||
65 | </el-option> | 26 | </el-option> |
66 | </el-select> | 27 | </el-select> |
67 | - <el-select | ||
68 | - v-else | ||
69 | - class="sel sel2" | ||
70 | - v-model="query.subjectNames" | ||
71 | - placeholder="选择科目" | ||
72 | - > | ||
73 | - <el-option | ||
74 | - v-for="item in subjectList" | ||
75 | - :key="item.value" | ||
76 | - :label="item.label" | ||
77 | - :value="item.value" | ||
78 | - > | 28 | + <el-select v-else class="sel sel2" v-model="query.subjectNames" placeholder="选择科目"> |
29 | + <el-option v-for="item in subjectList" :key="item.value" :label="item.label" :value="item.value"> | ||
79 | </el-option> | 30 | </el-option> |
80 | </el-select> | 31 | </el-select> |
81 | <div class="d1"> | 32 | <div class="d1"> |
82 | - <el-date-picker | ||
83 | - v-model="query.startDay" | ||
84 | - type="date" | ||
85 | - @change="handleChangeTimeStart" | ||
86 | - placeholder="选择日期时间" | ||
87 | - value-format="yyyy-MM-dd" | ||
88 | - > | 33 | + <el-date-picker v-model="query.startDay" type="date" @change="handleChangeTimeStart" placeholder="选择日期时间" |
34 | + value-format="yyyy-MM-dd"> | ||
89 | </el-date-picker> | 35 | </el-date-picker> |
90 | ~ | 36 | ~ |
91 | - <el-date-picker | ||
92 | - v-model="query.endDay" | ||
93 | - type="date" | ||
94 | - placeholder="选择日期时间" | ||
95 | - @change="handleChangeTimeEnd" | ||
96 | - value-format="yyyy-MM-dd" | ||
97 | - > | 37 | + <el-date-picker v-model="query.endDay" type="date" placeholder="选择日期时间" @change="handleChangeTimeEnd" |
38 | + value-format="yyyy-MM-dd"> | ||
98 | </el-date-picker> | 39 | </el-date-picker> |
99 | </div> | 40 | </div> |
100 | <p class="p1"> | 41 | <p class="p1"> |
101 | - <span @click="setDate(1)" :class="[date == 1 ? 'active' : '', 's1']" | ||
102 | - >今天</span | ||
103 | - > | ||
104 | - <span @click="setDate(2)" :class="[date == 2 ? 'active' : '', 's1']" | ||
105 | - >本周</span | ||
106 | - > | ||
107 | - <span @click="setDate(3)" :class="[date == 3 ? 'active' : '', 's1']" | ||
108 | - >本月</span | ||
109 | - > | ||
110 | - <span @click="setDate(4)" :class="[date == 4 ? 'active' : '', 's1']" | ||
111 | - >本季度</span | ||
112 | - > | 42 | + <span @click="setDate(1)" :class="[date == 1 ? 'active' : '', 's1']">今天</span> |
43 | + <span @click="setDate(2)" :class="[date == 2 ? 'active' : '', 's1']">本周</span> | ||
44 | + <span @click="setDate(3)" :class="[date == 3 ? 'active' : '', 's1']">本月</span> | ||
45 | + <span @click="setDate(4)" :class="[date == 4 ? 'active' : '', 's1']">本季度</span> | ||
113 | </p> | 46 | </p> |
114 | <el-button type="primary" round @click="_QueryData()">筛选</el-button> | 47 | <el-button type="primary" round @click="_QueryData()">筛选</el-button> |
115 | </div> | 48 | </div> |
116 | </div> | 49 | </div> |
117 | <div v-show="query.classIds.length == 1" class="table-box"> | 50 | <div v-show="query.classIds.length == 1" class="table-box"> |
118 | - <el-radio-group | ||
119 | - v-if="query.startDay != query.endDay" | ||
120 | - v-model="tabIndex" | ||
121 | - @change="changeTab" | ||
122 | - style="margin-bottom: 20px" | ||
123 | - > | 51 | + <el-radio-group v-if="query.startDay != query.endDay" v-model="tabIndex" @change="changeTab" |
52 | + style="margin-bottom: 20px"> | ||
124 | <template v-for="(item, index) in tabList"> | 53 | <template v-for="(item, index) in tabList"> |
125 | <el-radio-button :label="index + 1">{{ item }}</el-radio-button> | 54 | <el-radio-button :label="index + 1">{{ item }}</el-radio-button> |
126 | </template> | 55 | </template> |
@@ -132,50 +61,15 @@ | @@ -132,50 +61,15 @@ | ||
132 | </div> | 61 | </div> |
133 | <div v-show="tabIndex == 1" v-loading="loading"> | 62 | <div v-show="tabIndex == 1" v-loading="loading"> |
134 | <el-table :data="tableData" border style="width: 100%"> | 63 | <el-table :data="tableData" border style="width: 100%"> |
135 | - <el-table-column | ||
136 | - prop="subjectName" | ||
137 | - label="科目" | ||
138 | - align="center" | ||
139 | - width="100" | ||
140 | - ></el-table-column> | ||
141 | - <el-table-column | ||
142 | - prop="title" | ||
143 | - label="试卷名称" | ||
144 | - align="center" | ||
145 | - ></el-table-column> | ||
146 | - <el-table-column | ||
147 | - prop="className" | ||
148 | - label="考试班级" | ||
149 | - align="center" | ||
150 | - width="100" | ||
151 | - ></el-table-column> | ||
152 | - <el-table-column | ||
153 | - prop="examPaperScore" | ||
154 | - label="卷面分" | ||
155 | - align="center" | ||
156 | - width="68" | ||
157 | - ></el-table-column> | ||
158 | - <el-table-column | ||
159 | - width="80" | ||
160 | - prop="answeredNum" | ||
161 | - label="测验人数" | ||
162 | - align="center" | ||
163 | - ><template slot-scope="scoped">{{ | ||
164 | - `${scoped.row.answeredNum}/${scoped.row.classPersonNum}` | ||
165 | - }}</template></el-table-column | ||
166 | - > | ||
167 | - <el-table-column | ||
168 | - prop="examStartTime" | ||
169 | - label="测验开始时间" | ||
170 | - width="160" | ||
171 | - align="center" | ||
172 | - ></el-table-column> | ||
173 | - <el-table-column | ||
174 | - prop="examEndTime" | ||
175 | - label="测验结束时间" | ||
176 | - width="160" | ||
177 | - align="center" | ||
178 | - ></el-table-column> | 64 | + <el-table-column prop="subjectName" label="科目" align="center" width="100"></el-table-column> |
65 | + <el-table-column prop="title" label="试卷名称" align="center"></el-table-column> | ||
66 | + <el-table-column prop="className" label="考试班级" align="center" width="100"></el-table-column> | ||
67 | + <el-table-column prop="examPaperScore" label="卷面分" align="center" width="68"></el-table-column> | ||
68 | + <el-table-column width="80" prop="answeredNum" label="测验人数" align="center"><template slot-scope="scoped">{{ | ||
69 | + `${scoped.row.answeredNum}/${scoped.row.classPersonNum}` | ||
70 | + }}</template></el-table-column> | ||
71 | + <el-table-column prop="examStartTime" label="测验开始时间" width="160" align="center"></el-table-column> | ||
72 | + <el-table-column prop="examEndTime" label="测验结束时间" width="160" align="center"></el-table-column> | ||
179 | <!-- 添加对比删除 --> | 73 | <!-- 添加对比删除 --> |
180 | <!-- <el-table-column prop="avgScore" label="班平均分" align="center" | 74 | <!-- <el-table-column prop="avgScore" label="班平均分" align="center" |
181 | ><template slot-scope="scoped">{{ | 75 | ><template slot-scope="scoped">{{ |
@@ -306,324 +200,134 @@ | @@ -306,324 +200,134 @@ | ||
306 | > --> | 200 | > --> |
307 | <el-table-column label="操作" width="100" align="center"> | 201 | <el-table-column label="操作" width="100" align="center"> |
308 | <template slot-scope="scoped"> | 202 | <template slot-scope="scoped"> |
309 | - <el-tooltip | ||
310 | - v-if=" | ||
311 | - scoped.row.answerNum != 0 || | 203 | + <el-tooltip v-if="scoped.row.answerNum != 0 || |
312 | (scoped.row.recordStatus != 0 && | 204 | (scoped.row.recordStatus != 0 && |
313 | scoped.row.subjectiveScore == scoped.row.examPaperScore) | 205 | scoped.row.subjectiveScore == scoped.row.examPaperScore) |
314 | - " | ||
315 | - effect="dark" | ||
316 | - content="详情" | ||
317 | - placement="top" | ||
318 | - > | ||
319 | - <el-button | ||
320 | - type="primary" | ||
321 | - circle | ||
322 | - size="mini" | ||
323 | - icon="fa fa-arrow-right" | ||
324 | - @click="linkTo(scoped.row)" | ||
325 | - ></el-button> | 206 | + " effect="dark" content="详情" placement="top"> |
207 | + <el-button type="primary" circle size="mini" icon="fa fa-arrow-right" | ||
208 | + @click="linkTo(scoped.row)"></el-button> | ||
326 | </el-tooltip> | 209 | </el-tooltip> |
327 | - <template | ||
328 | - v-if=" | ||
329 | - scoped.row.answerNum == 0 && | ||
330 | - scoped.row.subjectiveScore != scoped.row.examPaperScore | ||
331 | - " | ||
332 | - > | ||
333 | - <el-tooltip | ||
334 | - v-if="role == 'ROLE_JIAOSHI'" | ||
335 | - effect="dark" | ||
336 | - content="设置答案" | ||
337 | - placement="top" | ||
338 | - > | ||
339 | - <el-button | ||
340 | - type="primary" | ||
341 | - circle | ||
342 | - size="mini" | ||
343 | - icon="fa fa-file-text" | ||
344 | - @click="edit(scoped.row)" | ||
345 | - ></el-button> | 210 | + <template v-if="scoped.row.answerNum == 0 && |
211 | + scoped.row.subjectiveScore != scoped.row.examPaperScore | ||
212 | + "> | ||
213 | + <el-tooltip v-if="role == 'ROLE_JIAOSHI'" effect="dark" content="设置答案" placement="top"> | ||
214 | + <el-button type="primary" circle size="mini" icon="fa fa-file-text" | ||
215 | + @click="edit(scoped.row)"></el-button> | ||
346 | </el-tooltip> | 216 | </el-tooltip> |
347 | <template v-else>未设置答案</template> | 217 | <template v-else>未设置答案</template> |
348 | </template> | 218 | </template> |
349 | - <el-tooltip | ||
350 | - v-if=" | ||
351 | - scoped.row.subjectiveScore == scoped.row.examPaperScore && | ||
352 | - scoped.row.recordStatus == 0 | ||
353 | - " | ||
354 | - effect="dark" | ||
355 | - content="导入主观题" | ||
356 | - placement="top" | ||
357 | - > | ||
358 | - <el-button | ||
359 | - type="primary" | ||
360 | - circle | ||
361 | - size="mini" | ||
362 | - icon="fa fa-cloud" | ||
363 | - @click="uploadSJ(scoped.row)" | ||
364 | - ></el-button> | 219 | + <el-tooltip v-if="scoped.row.subjectiveScore == scoped.row.examPaperScore && |
220 | + scoped.row.recordStatus == 0 | ||
221 | + " effect="dark" content="导入主观题" placement="top"> | ||
222 | + <el-button type="primary" circle size="mini" icon="fa fa-cloud" @click="uploadSJ(scoped.row)"></el-button> | ||
365 | </el-tooltip> | 223 | </el-tooltip> |
366 | - <el-popconfirm | ||
367 | - v-if="role != 'ROLE_BANZHUREN'" | ||
368 | - title="确定删除吗?" | ||
369 | - @confirm="removeReport(scoped.row, scoped.$index)" | ||
370 | - > | ||
371 | - <el-button | ||
372 | - class="remove-test" | ||
373 | - slot="reference" | ||
374 | - type="danger" | ||
375 | - circle | ||
376 | - size="mini" | ||
377 | - icon="el-icon-delete" | ||
378 | - :loading="scoped.row.loading" | ||
379 | - ></el-button> | 224 | + <el-popconfirm v-if="role != 'ROLE_BANZHUREN'" title="确定删除吗?" |
225 | + @confirm="removeReport(scoped.row, scoped.$index)"> | ||
226 | + <el-button class="remove-test" slot="reference" type="danger" circle size="mini" icon="el-icon-delete" | ||
227 | + :loading="scoped.row.loading"></el-button> | ||
380 | </el-popconfirm> | 228 | </el-popconfirm> |
381 | </template> | 229 | </template> |
382 | </el-table-column> | 230 | </el-table-column> |
383 | </el-table> | 231 | </el-table> |
384 | <div class="pagination-box"> | 232 | <div class="pagination-box"> |
385 | - <el-pagination | ||
386 | - small="" | ||
387 | - layout="total,prev, pager, next" | ||
388 | - :hide-on-single-page="true" | ||
389 | - :total="total" | ||
390 | - @current-change="changePage" | ||
391 | - :current-page="page" | ||
392 | - :page-size="size" | ||
393 | - > | 233 | + <el-pagination small="" layout="total,prev, pager, next" :hide-on-single-page="true" :total="total" |
234 | + @current-change="changePage" :current-page="page" :page-size="size"> | ||
394 | </el-pagination> | 235 | </el-pagination> |
395 | </div> | 236 | </div> |
396 | </div> | 237 | </div> |
397 | <div v-show="tabIndex == 2" v-loading="loading"> | 238 | <div v-show="tabIndex == 2" v-loading="loading"> |
398 | - <el-empty | ||
399 | - :image-size="100" | ||
400 | - v-if="!tableData.length && loading == false" | ||
401 | - description="没有更多数据" | ||
402 | - ></el-empty> | 239 | + <el-empty :image-size="100" v-if="!tableData.length && loading == false" description="没有更多数据"></el-empty> |
403 | <template v-if="tableData.length && loading == false"> | 240 | <template v-if="tableData.length && loading == false"> |
404 | <div id="print-content"> | 241 | <div id="print-content"> |
405 | - <el-table | ||
406 | - :max-height="tableMaxHeight" | ||
407 | - v-if="role == 'ROLE_JIAOSHI'" | ||
408 | - :data="tableData" | ||
409 | - border | ||
410 | - style="width: 100%" | ||
411 | - > | ||
412 | - <el-table-column | ||
413 | - prop="studentCode" | ||
414 | - label="学号" | ||
415 | - align="center" | ||
416 | - fixed | ||
417 | - ></el-table-column> | ||
418 | - <el-table-column | ||
419 | - prop="studentName" | ||
420 | - label="姓名" | ||
421 | - fixed | ||
422 | - align="center" | ||
423 | - > | ||
424 | - <template slot-scope="scoped" | ||
425 | - ><span class="click-b" @click="toPortrait(scoped.row)"> | 242 | + <el-table :max-height="tableMaxHeight" v-if="role == 'ROLE_JIAOSHI'" :data="tableData" border |
243 | + style="width: 100%"> | ||
244 | + <el-table-column prop="studentCode" label="学号" align="center" fixed></el-table-column> | ||
245 | + <el-table-column prop="studentName" label="姓名" fixed align="center"> | ||
246 | + <template slot-scope="scoped"><span class="click-b" @click="toPortrait(scoped.row)"> | ||
426 | {{ scoped.row.studentName }} | 247 | {{ scoped.row.studentName }} |
427 | - </span></template | ||
428 | - ></el-table-column | ||
429 | - > | ||
430 | - <el-table-column | ||
431 | - align="center" | ||
432 | - v-for="(item, index) in answerList" | ||
433 | - :key="index" | ||
434 | - :label="item.title" | ||
435 | - > | ||
436 | - <el-table-column | ||
437 | - :prop="'score' + index" | ||
438 | - :label="index == 0 ? '总分' : '成绩'" | ||
439 | - align="center" | ||
440 | - :class-name="index % 2 == 0 ? 'bg' : ''" | ||
441 | - > | 248 | + </span></template></el-table-column> |
249 | + <el-table-column align="center" v-for="(item, index) in answerList" :key="index" :label="item.title"> | ||
250 | + <el-table-column :prop="'score' + index" :label="index == 0 ? '总分' : '成绩'" align="center" | ||
251 | + :class-name="index % 2 == 0 ? 'bg' : ''"> | ||
442 | <template slot-scope="scoped"> | 252 | <template slot-scope="scoped"> |
443 | {{ Number(scoped.row["score" + index]) }} | 253 | {{ Number(scoped.row["score" + index]) }} |
444 | - </template></el-table-column | ||
445 | - > | ||
446 | - <el-table-column | ||
447 | - :prop="'classRank' + index" | ||
448 | - label="班名" | ||
449 | - align="center" | ||
450 | - :class-name="index % 2 == 0 ? 'bg' : ''" | ||
451 | - ></el-table-column> | 254 | + </template></el-table-column> |
255 | + <el-table-column :prop="'classRank' + index" label="班名" align="center" | ||
256 | + :class-name="index % 2 == 0 ? 'bg' : ''"></el-table-column> | ||
452 | </el-table-column> | 257 | </el-table-column> |
453 | </el-table> | 258 | </el-table> |
454 | - <el-table | ||
455 | - v-else | ||
456 | - :data="tableData" | ||
457 | - :max-height="tableMaxHeight" | ||
458 | - border | ||
459 | - style="width: 100%" | ||
460 | - > | ||
461 | - <el-table-column | ||
462 | - prop="studentCode" | ||
463 | - label="学号" | ||
464 | - align="center" | ||
465 | - fixed | ||
466 | - ></el-table-column> | 259 | + <el-table v-else :data="tableData" :max-height="tableMaxHeight" border style="width: 100%"> |
260 | + <el-table-column prop="studentCode" label="学号" align="center" fixed></el-table-column> | ||
467 | 261 | ||
468 | - <el-table-column | ||
469 | - prop="studentName" | ||
470 | - label="姓名" | ||
471 | - fixed | ||
472 | - align="center" | ||
473 | - > | ||
474 | - <template slot-scope="scoped" | ||
475 | - ><span class="click-b" @click="toPortrait(scoped.row)"> | 262 | + <el-table-column prop="studentName" label="姓名" fixed align="center"> |
263 | + <template slot-scope="scoped"><span class="click-b" @click="toPortrait(scoped.row)"> | ||
476 | {{ scoped.row.studentName }} | 264 | {{ scoped.row.studentName }} |
477 | - </span></template | ||
478 | - > | 265 | + </span></template> |
479 | </el-table-column> | 266 | </el-table-column> |
480 | - <el-table-column | ||
481 | - align="center" | ||
482 | - v-for="(item, index) in answerList" | ||
483 | - :key="index" | ||
484 | - :label="item" | ||
485 | - > | ||
486 | - <el-table-column | ||
487 | - :prop="'examCount' + item" | ||
488 | - label="测练数" | ||
489 | - align="center" | ||
490 | - :class-name="index % 2 == 0 ? 'bg' : ''" | ||
491 | - ></el-table-column> | ||
492 | - <el-table-column | ||
493 | - :prop="'participationCount' + item" | ||
494 | - label="参与数" | ||
495 | - align="center" | ||
496 | - :class-name="index % 2 == 0 ? 'bg' : ''" | ||
497 | - ></el-table-column> | ||
498 | - <el-table-column | ||
499 | - :prop="'score' + item" | ||
500 | - label="总分" | ||
501 | - align="center" | ||
502 | - :class-name="index % 2 == 0 ? 'bg' : ''" | ||
503 | - ></el-table-column> | ||
504 | - <el-table-column | ||
505 | - :prop="'classRank' + item" | ||
506 | - label="班名" | ||
507 | - align="center" | ||
508 | - :class-name="index % 2 == 0 ? 'bg' : ''" | ||
509 | - ></el-table-column> | 267 | + <el-table-column align="center" v-for="(item, index) in answerList" :key="index" :label="item"> |
268 | + <el-table-column :prop="'examCount' + item" label="测练数" align="center" | ||
269 | + :class-name="index % 2 == 0 ? 'bg' : ''"></el-table-column> | ||
270 | + <el-table-column :prop="'participationCount' + item" label="参与数" align="center" | ||
271 | + :class-name="index % 2 == 0 ? 'bg' : ''"></el-table-column> | ||
272 | + <el-table-column :prop="'score' + item" label="总分" align="center" | ||
273 | + :class-name="index % 2 == 0 ? 'bg' : ''"></el-table-column> | ||
274 | + <el-table-column :prop="'classRank' + item" label="班名" align="center" | ||
275 | + :class-name="index % 2 == 0 ? 'bg' : ''"></el-table-column> | ||
510 | </el-table-column> | 276 | </el-table-column> |
511 | </el-table> | 277 | </el-table> |
512 | </div> | 278 | </div> |
513 | </template> | 279 | </template> |
514 | </div> | 280 | </div> |
515 | <p class="down" v-if="tabIndex == 2 && tableData.length"> | 281 | <p class="down" v-if="tabIndex == 2 && tableData.length"> |
516 | - <el-button | ||
517 | - type="primary" | ||
518 | - plain | ||
519 | - round | ||
520 | - icon="fa fa-cloud-download" | ||
521 | - @click="downExl" | ||
522 | - >导出报表</el-button | ||
523 | - > | ||
524 | - <el-button | ||
525 | - v-if="!this.$store.getters.code" | ||
526 | - @click="print" | ||
527 | - type="primary" | ||
528 | - plain | ||
529 | - round | ||
530 | - icon="el-icon-printer" | ||
531 | - >打印</el-button | ||
532 | - > | 282 | + <el-button type="primary" plain round icon="fa fa-cloud-download" @click="downExl">导出报表</el-button> |
283 | + <el-button v-if="!this.$store.getters.code" @click="print" type="primary" plain round | ||
284 | + icon="el-icon-printer">打印</el-button> | ||
533 | </p> | 285 | </p> |
534 | </div> | 286 | </div> |
535 | - <div | ||
536 | - v-show="query.classIds.length > 1" | ||
537 | - class="table-box" | ||
538 | - v-loading="loading" | ||
539 | - > | 287 | + <div v-show="query.classIds.length > 1" class="table-box" v-loading="loading"> |
540 | <div class="head-box"> | 288 | <div class="head-box"> |
541 | <div class="tit"> | 289 | <div class="tit"> |
542 | <p class="txt"> | 290 | <p class="txt"> |
543 | 已考试卷信息 | 291 | 已考试卷信息 |
544 | - <em class="red" | ||
545 | - >(相同报表名称后的数字代表同一份试卷的考试次数,例如:模拟卷_1指模拟卷第1次考试成绩,模拟卷_2指模拟卷第2次考试成绩)</em | ||
546 | - > | 292 | + <em class="red">(相同报表名称后的数字代表同一份试卷的考试次数,例如:模拟卷_1指模拟卷第1次考试成绩,模拟卷_2指模拟卷第2次考试成绩)</em> |
547 | </p> | 293 | </p> |
548 | <p> | 294 | <p> |
549 | - 共筛选出{{ classTable.length }}个班级的已考试卷,<em class="red" | ||
550 | - >不同班级请选择同一份试卷进行对比</em | ||
551 | - > | 295 | + 共筛选出{{ classTable.length }}个班级的已考试卷,<em class="red">不同班级请选择同一份试卷进行对比</em> |
552 | </p> | 296 | </p> |
553 | </div> | 297 | </div> |
554 | - <el-input | ||
555 | - placeholder="输入试卷名称" | ||
556 | - v-model="examReportName" | ||
557 | - class="input-with-select" | ||
558 | - @keyup.enter.native="examReportList(examReportName)" | ||
559 | - > | ||
560 | - <el-button | ||
561 | - slot="append" | ||
562 | - icon="el-icon-search" | ||
563 | - @click="examReportList(examReportName)" | ||
564 | - ></el-button> | 298 | + <el-input placeholder="输入试卷名称" v-model="examReportName" class="input-with-select" |
299 | + @keyup.enter.native="examReportList(examReportName)"> | ||
300 | + <el-button slot="append" icon="el-icon-search" @click="examReportList(examReportName)"></el-button> | ||
565 | </el-input> | 301 | </el-input> |
566 | </div> | 302 | </div> |
567 | - <el-empty | ||
568 | - :imag-size="48" | ||
569 | - v-if="total === 0 && !loading" | ||
570 | - description="暂无数据" | ||
571 | - ></el-empty> | ||
572 | - <ul | ||
573 | - class="tab-ul" | ||
574 | - v-if="classTable.length" | ||
575 | - v-masonry | ||
576 | - transition-duration="0.5s" | ||
577 | - gutter="0" | ||
578 | - item-selector=".tab-li" | ||
579 | - > | 303 | + <el-empty :imag-size="48" v-if="total === 0 && !loading" description="暂无数据"></el-empty> |
304 | + <ul class="tab-ul" v-if="classTable.length" v-masonry transition-duration="0.5s" gutter="0" item-selector=".tab-li"> | ||
580 | <template v-for="(item, index) in classTable"> | 305 | <template v-for="(item, index) in classTable"> |
581 | <li class="tab-li"> | 306 | <li class="tab-li"> |
582 | <p class="tab-tit"> | 307 | <p class="tab-tit"> |
583 | {{ | 308 | {{ |
584 | - `${item[0].className} ${ | ||
585 | - item.length ? "(" + item.length + "份已考试卷)" : "" | ||
586 | - }` | 309 | + `${item[0].className} ${item.length ? "(" + item.length + "份已考试卷)" : "" |
310 | + }` | ||
587 | }} | 311 | }} |
588 | </p> | 312 | </p> |
589 | - <el-table | ||
590 | - :data="item" | ||
591 | - border | ||
592 | - style="width: 100%" | ||
593 | - v-if="item.length" | ||
594 | - > | 313 | + <el-table :data="item" border style="width: 100%" v-if="item.length"> |
595 | <el-table-column label="选择" align="center" width="60"> | 314 | <el-table-column label="选择" align="center" width="60"> |
596 | <template slot-scope="scope"> | 315 | <template slot-scope="scope"> |
597 | - <el-checkbox | ||
598 | - v-model="multipleSelection" | ||
599 | - :label="scope.row.id" | ||
600 | - :disabled="checkboxDisabled(scope.row)" | ||
601 | - > | ||
602 | - {{ ` ` }}</el-checkbox | ||
603 | - > | 316 | + <el-checkbox v-model="multipleSelection" :label="scope.row.id" :disabled="checkboxDisabled(scope.row)"> |
317 | + {{ ` ` }}</el-checkbox> | ||
604 | </template> | 318 | </template> |
605 | </el-table-column> | 319 | </el-table-column> |
606 | - <el-table-column | ||
607 | - prop="title" | ||
608 | - label="报表名称" | ||
609 | - align="center" | ||
610 | - ></el-table-column> | 320 | + <el-table-column prop="title" label="报表名称" align="center"></el-table-column> |
611 | <el-table-column label="测验人数" align="center" width="80"> | 321 | <el-table-column label="测验人数" align="center" width="80"> |
612 | <template slot-scope="scope">{{ | 322 | <template slot-scope="scope">{{ |
613 | `${scope.row.answeredNum}/${scope.row.classPersonNum}` | 323 | `${scope.row.answeredNum}/${scope.row.classPersonNum}` |
614 | }}</template> | 324 | }}</template> |
615 | </el-table-column> | 325 | </el-table-column> |
616 | - <el-table-column | ||
617 | - prop="examStartTime" | ||
618 | - label="测验开始时间" | ||
619 | - width="120" | ||
620 | - align="center" | ||
621 | - ></el-table-column> | 326 | + <el-table-column prop="examStartTime" label="测验开始时间" width="120" align="center"></el-table-column> |
622 | <el-table-column label="测验时长" align="center" width="80"> | 327 | <el-table-column label="测验时长" align="center" width="80"> |
623 | <template slot-scope="scope">{{ | 328 | <template slot-scope="scope">{{ |
624 | - `${Math.floor(scope.row.duration / 60)}分${ | ||
625 | - scope.row.duration % 60 | ||
626 | - }` | 329 | + `${Math.floor(scope.row.duration / 60)}分${scope.row.duration % 60 |
330 | + }` | ||
627 | }}</template> | 331 | }}</template> |
628 | </el-table-column> | 332 | </el-table-column> |
629 | </el-table> | 333 | </el-table> |
@@ -635,19 +339,8 @@ | @@ -635,19 +339,8 @@ | ||
635 | <el-button @click="linkToContrast">生成对比报表</el-button> | 339 | <el-button @click="linkToContrast">生成对比报表</el-button> |
636 | </p> | 340 | </p> |
637 | </div> | 341 | </div> |
638 | - <el-dialog | ||
639 | - :close-on-click-modal="false" | ||
640 | - title="导入主观题分数" | ||
641 | - :visible.sync="diaUp" | ||
642 | - width="600" | ||
643 | - > | ||
644 | - <up-load | ||
645 | - :url="url" | ||
646 | - :examId="examId" | ||
647 | - @upSuccess="upSuccess" | ||
648 | - fileName="主观题分数" | ||
649 | - v-loading="loadingDown" | ||
650 | - > | 342 | + <el-dialog :close-on-click-modal="false" title="导入主观题分数" :visible.sync="diaUp" width="600"> |
343 | + <up-load :url="url" :examId="examId" @upSuccess="upSuccess" fileName="主观题分数" v-loading="loadingDown"> | ||
651 | <template slot="down"> | 344 | <template slot="down"> |
652 | <p class="down-txt"> | 345 | <p class="down-txt"> |
653 | 第一步:下载模板并编辑完成学生分数 | 346 | 第一步:下载模板并编辑完成学生分数 |
@@ -814,11 +507,21 @@ export default { | @@ -814,11 +507,21 @@ export default { | ||
814 | this.$message.warning("请选择同一份试卷多个班级进行对比!"); | 507 | this.$message.warning("请选择同一份试卷多个班级进行对比!"); |
815 | return; | 508 | return; |
816 | } | 509 | } |
510 | + let examPaperScore | ||
511 | + console.log(this.multipleSelection[0]) | ||
512 | + this.tableData.map(item => { | ||
513 | + console.log(item.id) | ||
514 | + if (item.id == this.multipleSelection[0]) { | ||
515 | + examPaperScore = item.examPaperScore | ||
516 | + } | ||
517 | + }) | ||
518 | + console.log(examPaperScore) | ||
817 | this.$router.push({ | 519 | this.$router.push({ |
818 | path: "/testContrast", | 520 | path: "/testContrast", |
819 | query: { | 521 | query: { |
820 | ids: this.multipleSelection, | 522 | ids: this.multipleSelection, |
821 | subjectNames: this.query.subjectNames, | 523 | subjectNames: this.query.subjectNames, |
524 | + examPaperScore: examPaperScore | ||
822 | }, | 525 | }, |
823 | }); | 526 | }); |
824 | }, | 527 | }, |
@@ -1302,6 +1005,7 @@ div::-webkit-scrollbar { | @@ -1302,6 +1005,7 @@ div::-webkit-scrollbar { | ||
1302 | width: 3px; | 1005 | width: 3px; |
1303 | height: 10px; | 1006 | height: 10px; |
1304 | } | 1007 | } |
1008 | + | ||
1305 | div::-webkit-scrollbar-thumb { | 1009 | div::-webkit-scrollbar-thumb { |
1306 | border-radius: 10px; | 1010 | border-radius: 10px; |
1307 | background-color: #ccc; | 1011 | background-color: #ccc; |
@@ -1311,42 +1015,51 @@ div::-webkit-scrollbar-thumb { | @@ -1311,42 +1015,51 @@ div::-webkit-scrollbar-thumb { | ||
1311 | .page-container { | 1015 | .page-container { |
1312 | position: relative; | 1016 | position: relative; |
1313 | height: 100%; | 1017 | height: 100%; |
1018 | + | ||
1314 | &.active { | 1019 | &.active { |
1315 | overflow: hidden; | 1020 | overflow: hidden; |
1316 | } | 1021 | } |
1317 | } | 1022 | } |
1023 | + | ||
1318 | .table-box { | 1024 | .table-box { |
1319 | margin: 0 20px; | 1025 | margin: 0 20px; |
1320 | padding: 16px; | 1026 | padding: 16px; |
1321 | background: #f8f8f8; | 1027 | background: #f8f8f8; |
1322 | border-radius: 5px; | 1028 | border-radius: 5px; |
1323 | min-height: 300px; | 1029 | min-height: 300px; |
1030 | + | ||
1324 | :deep(.fa-arrow-right) { | 1031 | :deep(.fa-arrow-right) { |
1325 | padding-left: 2px; | 1032 | padding-left: 2px; |
1326 | } | 1033 | } |
1034 | + | ||
1327 | :deep(.fa-file-text) { | 1035 | :deep(.fa-file-text) { |
1328 | padding-left: 2px; | 1036 | padding-left: 2px; |
1329 | } | 1037 | } |
1330 | } | 1038 | } |
1039 | + | ||
1331 | .down { | 1040 | .down { |
1332 | padding-top: 16px; | 1041 | padding-top: 16px; |
1333 | } | 1042 | } |
1043 | + | ||
1334 | .click-b { | 1044 | .click-b { |
1335 | cursor: pointer; | 1045 | cursor: pointer; |
1336 | color: #409eff; | 1046 | color: #409eff; |
1337 | text-decoration: underline; | 1047 | text-decoration: underline; |
1338 | } | 1048 | } |
1049 | + | ||
1339 | .head-box { | 1050 | .head-box { |
1340 | display: flex; | 1051 | display: flex; |
1341 | justify-content: space-between; | 1052 | justify-content: space-between; |
1342 | font-size: 12px; | 1053 | font-size: 12px; |
1343 | color: #999; | 1054 | color: #999; |
1055 | + | ||
1344 | .txt { | 1056 | .txt { |
1345 | font-size: 16px; | 1057 | font-size: 16px; |
1346 | color: #333; | 1058 | color: #333; |
1347 | line-height: 20px; | 1059 | line-height: 20px; |
1348 | position: relative; | 1060 | position: relative; |
1349 | margin-bottom: 6px; | 1061 | margin-bottom: 6px; |
1062 | + | ||
1350 | &:after { | 1063 | &:after { |
1351 | content: ""; | 1064 | content: ""; |
1352 | position: absolute; | 1065 | position: absolute; |
@@ -1357,27 +1070,34 @@ div::-webkit-scrollbar-thumb { | @@ -1357,27 +1070,34 @@ div::-webkit-scrollbar-thumb { | ||
1357 | background: #409eff; | 1070 | background: #409eff; |
1358 | } | 1071 | } |
1359 | } | 1072 | } |
1073 | + | ||
1360 | .red { | 1074 | .red { |
1361 | font-style: normal; | 1075 | font-style: normal; |
1362 | font-size: 12px; | 1076 | font-size: 12px; |
1363 | color: #f30; | 1077 | color: #f30; |
1364 | } | 1078 | } |
1079 | + | ||
1365 | .sel { | 1080 | .sel { |
1366 | width: 200px; | 1081 | width: 200px; |
1082 | + | ||
1367 | :deep(.el-input__inner) { | 1083 | :deep(.el-input__inner) { |
1368 | border-radius: 20px; | 1084 | border-radius: 20px; |
1369 | } | 1085 | } |
1370 | } | 1086 | } |
1371 | } | 1087 | } |
1088 | + | ||
1372 | .tab-ul { | 1089 | .tab-ul { |
1373 | display: flex; | 1090 | display: flex; |
1374 | flex-wrap: wrap; | 1091 | flex-wrap: wrap; |
1092 | + | ||
1375 | .tab-li { | 1093 | .tab-li { |
1376 | width: calc(50% - 12px); | 1094 | width: calc(50% - 12px); |
1377 | margin: 0 12px 12px 0; | 1095 | margin: 0 12px 12px 0; |
1096 | + | ||
1378 | &:nth-child(2n) { | 1097 | &:nth-child(2n) { |
1379 | margin-right: 0; | 1098 | margin-right: 0; |
1380 | } | 1099 | } |
1100 | + | ||
1381 | .tab-tit { | 1101 | .tab-tit { |
1382 | font-size: 15px; | 1102 | font-size: 15px; |
1383 | line-height: 40px; | 1103 | line-height: 40px; |
@@ -1386,13 +1106,16 @@ div::-webkit-scrollbar-thumb { | @@ -1386,13 +1106,16 @@ div::-webkit-scrollbar-thumb { | ||
1386 | } | 1106 | } |
1387 | } | 1107 | } |
1388 | } | 1108 | } |
1109 | + | ||
1389 | .btn-box { | 1110 | .btn-box { |
1390 | padding-top: 12px; | 1111 | padding-top: 12px; |
1391 | text-align: right; | 1112 | text-align: right; |
1392 | } | 1113 | } |
1114 | + | ||
1393 | .remove-test { | 1115 | .remove-test { |
1394 | margin-left: 10px; | 1116 | margin-left: 10px; |
1395 | } | 1117 | } |
1118 | + | ||
1396 | .input-with-select { | 1119 | .input-with-select { |
1397 | width: 200px; | 1120 | width: 200px; |
1398 | height: 36px; | 1121 | height: 36px; |
@@ -1401,6 +1124,7 @@ div::-webkit-scrollbar-thumb { | @@ -1401,6 +1124,7 @@ div::-webkit-scrollbar-thumb { | ||
1401 | border: 1px solid #e2e2e2; | 1124 | border: 1px solid #e2e2e2; |
1402 | box-sizing: border-box; | 1125 | box-sizing: border-box; |
1403 | background: #fff; | 1126 | background: #fff; |
1127 | + | ||
1404 | :deep(.el-input__inner) { | 1128 | :deep(.el-input__inner) { |
1405 | border-radius: 20px; | 1129 | border-radius: 20px; |
1406 | border: none; | 1130 | border: none; |
@@ -1408,6 +1132,7 @@ div::-webkit-scrollbar-thumb { | @@ -1408,6 +1132,7 @@ div::-webkit-scrollbar-thumb { | ||
1408 | line-height: 34px; | 1132 | line-height: 34px; |
1409 | padding-right: 0; | 1133 | padding-right: 0; |
1410 | } | 1134 | } |
1135 | + | ||
1411 | :deep(.el-button) { | 1136 | :deep(.el-button) { |
1412 | padding: 12px; | 1137 | padding: 12px; |
1413 | } | 1138 | } |
@@ -1418,6 +1143,7 @@ div::-webkit-scrollbar-thumb { | @@ -1418,6 +1143,7 @@ div::-webkit-scrollbar-thumb { | ||
1418 | background: transparent; | 1143 | background: transparent; |
1419 | } | 1144 | } |
1420 | } | 1145 | } |
1146 | + | ||
1421 | .select-all { | 1147 | .select-all { |
1422 | padding-left: 16px; | 1148 | padding-left: 16px; |
1423 | padding-bottom: 10px; | 1149 | padding-bottom: 10px; |