Commit 696f2d424187a37d5ebe0c3873a664212006ef52
1 parent
b0cd2598
fix:报表导出问题
Showing
6 changed files
with
440 additions
and
258 deletions
src/components/exportDia.vue
| @@ -26,6 +26,7 @@ | @@ -26,6 +26,7 @@ | ||
| 26 | <ul v-show="exportType == 2"> | 26 | <ul v-show="exportType == 2"> |
| 27 | <p class="export-tit">选择学生</p> | 27 | <p class="export-tit">选择学生</p> |
| 28 | <el-table | 28 | <el-table |
| 29 | + ref="multipleTable" | ||
| 29 | :data="exportStudent" | 30 | :data="exportStudent" |
| 30 | @selection-change="handleSelectionChange" | 31 | @selection-change="handleSelectionChange" |
| 31 | :max-height="300" | 32 | :max-height="300" |
| @@ -38,11 +39,21 @@ | @@ -38,11 +39,21 @@ | ||
| 38 | ></el-table-column> | 39 | ></el-table-column> |
| 39 | <el-table-column label="班名" align="center"> | 40 | <el-table-column label="班名" align="center"> |
| 40 | <template slot-scope="scoped"> | 41 | <template slot-scope="scoped"> |
| 41 | - <span v-if="scoped.row.classRank || scoped.row.rank">{{ | ||
| 42 | - scoped.row.classRank || scoped.row.rank | ||
| 43 | - }}</span> | 42 | + <span |
| 43 | + v-if=" | ||
| 44 | + scoped.row.classRank || | ||
| 45 | + scoped.row.rank || | ||
| 46 | + scoped.row['classRank多科汇总'] | ||
| 47 | + " | ||
| 48 | + >{{ | ||
| 49 | + scoped.row.classRank || | ||
| 50 | + scoped.row.rank || | ||
| 51 | + scoped.row["classRank多科汇总"] | ||
| 52 | + }}</span | ||
| 53 | + > | ||
| 44 | <span v-else>{{ | 54 | <span v-else>{{ |
| 45 | - scoped.row.examList && scoped.row.examList[0].classRank | 55 | + (scoped.row.examList && scoped.row.examList[0].classRank) || |
| 56 | + (scoped.row.datalist && scoped.row.datalist[0].classRank) | ||
| 46 | }}</span> | 57 | }}</span> |
| 47 | </template> | 58 | </template> |
| 48 | </el-table-column> | 59 | </el-table-column> |
| @@ -54,8 +65,11 @@ | @@ -54,8 +65,11 @@ | ||
| 54 | <span v-else-if="!isNaN(scoped.row.scoringRate)"> | 65 | <span v-else-if="!isNaN(scoped.row.scoringRate)"> |
| 55 | {{ scoped.row.scoringRate }}% | 66 | {{ scoped.row.scoringRate }}% |
| 56 | </span> | 67 | </span> |
| 68 | + <span v-else-if="scoped.row['score多科汇总']"> | ||
| 69 | + {{ Number(scoped.row["score多科汇总"]) }} | ||
| 70 | + </span> | ||
| 57 | <span v-else>{{ | 71 | <span v-else>{{ |
| 58 | - scoped.row.examList && scoped.row.examList[0].score | 72 | + Number(scoped.row.examList && scoped.row.examList[0].score) |
| 59 | }}</span> | 73 | }}</span> |
| 60 | </template></el-table-column | 74 | </template></el-table-column |
| 61 | > | 75 | > |
| @@ -107,12 +121,17 @@ export default { | @@ -107,12 +121,17 @@ export default { | ||
| 107 | handler: function (nVal) { | 121 | handler: function (nVal) { |
| 108 | if (nVal) { | 122 | if (nVal) { |
| 109 | this.downType = 1; | 123 | this.downType = 1; |
| 124 | + this.exportType = 1; | ||
| 125 | + this.multipleSelection = []; | ||
| 110 | } | 126 | } |
| 111 | }, | 127 | }, |
| 112 | immediate: true, | 128 | immediate: true, |
| 113 | }, | 129 | }, |
| 114 | }, | 130 | }, |
| 115 | methods: { | 131 | methods: { |
| 132 | + cancelSelection() { | ||
| 133 | + this.$refs.multipleTable.clearSelection(); | ||
| 134 | + }, | ||
| 116 | changeDownType() { | 135 | changeDownType() { |
| 117 | this.exportType = 1; | 136 | this.exportType = 1; |
| 118 | }, | 137 | }, |
| @@ -131,6 +150,7 @@ export default { | @@ -131,6 +150,7 @@ export default { | ||
| 131 | }); | 150 | }); |
| 132 | } | 151 | } |
| 133 | this.$emit("exportData", this.downType == 1 ? null : studentIds); | 152 | this.$emit("exportData", this.downType == 1 ? null : studentIds); |
| 153 | + this.cancelSelection(); | ||
| 134 | }, | 154 | }, |
| 135 | cancel() { | 155 | cancel() { |
| 136 | if (this.exportType == 2) { | 156 | if (this.exportType == 2) { |
src/views/basic/ask/analysis.vue
| @@ -3,56 +3,110 @@ | @@ -3,56 +3,110 @@ | ||
| 3 | <back-box> | 3 | <back-box> |
| 4 | <template slot="title"> | 4 | <template slot="title"> |
| 5 | <span>{{ | 5 | <span>{{ |
| 6 | - types == 1 ? "单课分析" : | ||
| 7 | - types == 2 ? `${className}-${subjectNames[0]}汇总分析` : | ||
| 8 | - `${className}-多科汇总分析` }}</span> | 6 | + types == 1 |
| 7 | + ? "单课分析" | ||
| 8 | + : types == 2 | ||
| 9 | + ? `${className}-${subjectNames[0]}汇总分析` | ||
| 10 | + : `${className}-多科汇总分析` | ||
| 11 | + }}</span> | ||
| 9 | </template> | 12 | </template> |
| 10 | </back-box> | 13 | </back-box> |
| 11 | <div class="page-content"> | 14 | <div class="page-content"> |
| 12 | <div class="tab-box"> | 15 | <div class="tab-box"> |
| 13 | - <span class="tab-item" v-for="(item, index) in tabList" :key="index" :class="type == item.value ? 'active' : ''" | ||
| 14 | - @click="setType(item.value)">{{ item.name }}</span> | 16 | + <span |
| 17 | + class="tab-item" | ||
| 18 | + v-for="(item, index) in tabList" | ||
| 19 | + :key="index" | ||
| 20 | + :class="type == item.value ? 'active' : ''" | ||
| 21 | + @click="setType(item.value)" | ||
| 22 | + >{{ item.name }}</span | ||
| 23 | + > | ||
| 15 | </div> | 24 | </div> |
| 16 | <div v-loading="loading"> | 25 | <div v-loading="loading"> |
| 17 | <div id="print-content"> | 26 | <div id="print-content"> |
| 18 | - | ||
| 19 | <!-- 学生答题情况 --> | 27 | <!-- 学生答题情况 --> |
| 20 | <Detail v-if="type == 1" :types="types" :detail="detail" :id="id" /> | 28 | <Detail v-if="type == 1" :types="types" :detail="detail" :id="id" /> |
| 21 | <!-- 学生答题情况 --> | 29 | <!-- 学生答题情况 --> |
| 22 | <Example v-if="type == 1" :types="types" :tableData="tableData" /> | 30 | <Example v-if="type == 1" :types="types" :tableData="tableData" /> |
| 23 | <!-- 学生问答 --> | 31 | <!-- 学生问答 --> |
| 24 | - <AnswerQustion v-if="type == 2" :types="types" :tableData="tableData" :subjectNames="subjectNames" /> | 32 | + <AnswerQustion |
| 33 | + v-if="type == 2" | ||
| 34 | + :types="types" | ||
| 35 | + :tableData="tableData" | ||
| 36 | + :subjectNames="subjectNames" | ||
| 37 | + /> | ||
| 25 | <!-- 学生互动表现 --> | 38 | <!-- 学生互动表现 --> |
| 26 | <Interact v-if="type == 3" :types="types" :tableData="tableData" /> | 39 | <Interact v-if="type == 3" :types="types" :tableData="tableData" /> |
| 27 | <!-- 签到明细 --> | 40 | <!-- 签到明细 --> |
| 28 | <Report v-if="type == 4" :tableData="tableData" /> | 41 | <Report v-if="type == 4" :tableData="tableData" /> |
| 29 | </div> | 42 | </div> |
| 30 | <div class="pagination-box" v-show="type == 1"> | 43 | <div class="pagination-box" v-show="type == 1"> |
| 31 | - <el-pagination small="" layout="total,prev, pager, next" :hide-on-single-page="true" :total="total" | ||
| 32 | - @current-change="changePage" :current-page="page" :page-size="size"> | 44 | + <el-pagination |
| 45 | + small="" | ||
| 46 | + layout="total,prev, pager, next" | ||
| 47 | + :hide-on-single-page="true" | ||
| 48 | + :total="total" | ||
| 49 | + @current-change="changePage" | ||
| 50 | + :current-page="page" | ||
| 51 | + :page-size="size" | ||
| 52 | + > | ||
| 33 | </el-pagination> | 53 | </el-pagination> |
| 34 | </div> | 54 | </div> |
| 35 | <p class="down"> | 55 | <p class="down"> |
| 36 | - <el-button @click="openDown" type="primary" plain round icon="fa fa-cloud-download">导出报表</el-button> | ||
| 37 | - <el-button v-if="!this.$store.getters.code" @click="print" type="primary" plain round | ||
| 38 | - icon="el-icon-printer">打印</el-button> | 56 | + <el-button |
| 57 | + v-if="types == 1" | ||
| 58 | + @click="exportData" | ||
| 59 | + type="primary" | ||
| 60 | + plain | ||
| 61 | + round | ||
| 62 | + icon="fa fa-cloud-download" | ||
| 63 | + >导出报表</el-button | ||
| 64 | + > | ||
| 65 | + <el-button | ||
| 66 | + v-else | ||
| 67 | + @click="openDown" | ||
| 68 | + type="primary" | ||
| 69 | + plain | ||
| 70 | + round | ||
| 71 | + icon="fa fa-cloud-download" | ||
| 72 | + >导出报表</el-button | ||
| 73 | + > | ||
| 74 | + <el-button | ||
| 75 | + v-if="!this.$store.getters.code" | ||
| 76 | + @click="print" | ||
| 77 | + type="primary" | ||
| 78 | + plain | ||
| 79 | + round | ||
| 80 | + icon="el-icon-printer" | ||
| 81 | + >打印</el-button | ||
| 82 | + > | ||
| 39 | </p> | 83 | </p> |
| 40 | </div> | 84 | </div> |
| 41 | - <ExportDia :exportStudent="exportStudent" :diaShow="diaShow" @cancel="cancel" @exportData="exportData" :type="types==3?'雷达图':'折线图'"/> | 85 | + <ExportDia |
| 86 | + :exportStudent="exportStudent" | ||
| 87 | + :diaShow="diaShow" | ||
| 88 | + @cancel="cancel" | ||
| 89 | + @exportData="exportData" | ||
| 90 | + :type="types == 3 ? '雷达图' : '折线图'" | ||
| 91 | + /> | ||
| 42 | </div> | 92 | </div> |
| 43 | </div> | 93 | </div> |
| 44 | </template> | 94 | </template> |
| 45 | 95 | ||
| 46 | <script> | 96 | <script> |
| 47 | import { downloadFile, tablePrint } from "@/utils"; | 97 | import { downloadFile, tablePrint } from "@/utils"; |
| 48 | -import Detail from "./components/detail.vue" | ||
| 49 | -import Example from "./components/example.vue" | ||
| 50 | -import AnswerQustion from "./components/answerQustion.vue" | ||
| 51 | -import Interact from "./components/interact.vue" | ||
| 52 | -import Report from "./components/report.vue" | 98 | +import Detail from "./components/detail.vue"; |
| 99 | +import Example from "./components/example.vue"; | ||
| 100 | +import AnswerQustion from "./components/answerQustion.vue"; | ||
| 101 | +import Interact from "./components/interact.vue"; | ||
| 102 | +import Report from "./components/report.vue"; | ||
| 53 | export default { | 103 | export default { |
| 54 | components: { | 104 | components: { |
| 55 | - Detail, Example, AnswerQustion, Interact, Report | 105 | + Detail, |
| 106 | + Example, | ||
| 107 | + AnswerQustion, | ||
| 108 | + Interact, | ||
| 109 | + Report, | ||
| 56 | }, | 110 | }, |
| 57 | data() { | 111 | data() { |
| 58 | return { | 112 | return { |
| @@ -79,32 +133,37 @@ export default { | @@ -79,32 +133,37 @@ export default { | ||
| 79 | this.role = | 133 | this.role = |
| 80 | this.$store.getters.info.showRole || | 134 | this.$store.getters.info.showRole || |
| 81 | this.$store.getters.info.permissions[0].role; | 135 | this.$store.getters.info.permissions[0].role; |
| 82 | - this.types = Number(this.$route.query.types) | ||
| 83 | - this.className = this.$route.query.className | ||
| 84 | - const queryData = JSON.parse(this.$route.query.params) | ||
| 85 | - this.classId = queryData.classId | ||
| 86 | - console.log(this.$route.query) | ||
| 87 | - this.subjectNames = this.$route.query.subjectNames.split(',') | 136 | + this.types = Number(this.$route.query.types); |
| 137 | + this.className = this.$route.query.className; | ||
| 138 | + const queryData = JSON.parse(this.$route.query.params); | ||
| 139 | + this.classId = queryData.classId; | ||
| 140 | + console.log(this.$route.query); | ||
| 141 | + this.subjectNames = this.$route.query.subjectNames.split(","); | ||
| 88 | if (this.types == 1) { | 142 | if (this.types == 1) { |
| 89 | - this.tabList = [{ name: "答题表现", value: 1 }, | ||
| 90 | - { name: "学生问答表现", value: 2 }, | ||
| 91 | - { name: "学生互动表现", value: 3 }, | ||
| 92 | - { name: "签到明细", value: 4 },] | 143 | + this.tabList = [ |
| 144 | + { name: "答题表现", value: 1 }, | ||
| 145 | + { name: "学生问答表现", value: 2 }, | ||
| 146 | + { name: "学生互动表现", value: 3 }, | ||
| 147 | + { name: "签到明细", value: 4 }, | ||
| 148 | + ]; | ||
| 93 | } else if (this.types == 2) { | 149 | } else if (this.types == 2) { |
| 94 | - this.tabList = [{ name: "答题表现", value: 1 }, | ||
| 95 | - { name: "学生问答表现", value: 2 }, | ||
| 96 | - { name: "学生互动表现", value: 3 }] | 150 | + this.tabList = [ |
| 151 | + { name: "答题表现", value: 1 }, | ||
| 152 | + { name: "学生问答表现", value: 2 }, | ||
| 153 | + { name: "学生互动表现", value: 3 }, | ||
| 154 | + ]; | ||
| 97 | } else if (this.types == 3) { | 155 | } else if (this.types == 3) { |
| 98 | this.tabList = [ | 156 | this.tabList = [ |
| 99 | { name: "学生问答表现", value: 2 }, | 157 | { name: "学生问答表现", value: 2 }, |
| 100 | - { name: "学生互动表现", value: 3 }] | 158 | + { name: "学生互动表现", value: 3 }, |
| 159 | + ]; | ||
| 101 | } | 160 | } |
| 102 | - this.type = this.tabList[0].value | ||
| 103 | - this.id = JSON.parse(this.$route.query.id) | 161 | + this.type = this.tabList[0].value; |
| 162 | + this.id = JSON.parse(this.$route.query.id); | ||
| 104 | this.status = this.$route.query.status ? this.$route.query.status : 0; | 163 | this.status = this.$route.query.status ? this.$route.query.status : 0; |
| 105 | this._QueryData(); | 164 | this._QueryData(); |
| 106 | - this.types != 1 ?this._QueryDataQuestionRank():''; | ||
| 107 | - this.types != 3 ? this.periodDetail() : ''; | 165 | + this.types != 1 ? this._QueryDataQuestionRank() : ""; |
| 166 | + this.types != 3 ? this.periodDetail() : ""; | ||
| 108 | }, | 167 | }, |
| 109 | methods: { | 168 | methods: { |
| 110 | print() { | 169 | print() { |
| @@ -141,9 +200,10 @@ export default { | @@ -141,9 +200,10 @@ export default { | ||
| 141 | this._QueryData(); | 200 | this._QueryData(); |
| 142 | }, | 201 | }, |
| 143 | async periodDetail() { | 202 | async periodDetail() { |
| 144 | - const periodDetail = this.role == "ROLE_PERSONAL" ? | ||
| 145 | - this.$request.pPeriodDetail : | ||
| 146 | - this.$request.periodDetail; | 203 | + const periodDetail = |
| 204 | + this.role == "ROLE_PERSONAL" | ||
| 205 | + ? this.$request.pPeriodDetail | ||
| 206 | + : this.$request.periodDetail; | ||
| 147 | let { data, info, status } = await periodDetail({ | 207 | let { data, info, status } = await periodDetail({ |
| 148 | periodIds: this.id, | 208 | periodIds: this.id, |
| 149 | }); | 209 | }); |
| @@ -164,42 +224,54 @@ export default { | @@ -164,42 +224,54 @@ export default { | ||
| 164 | let query = {}; | 224 | let query = {}; |
| 165 | if (this.role == "ROLE_PERSONAL") { | 225 | if (this.role == "ROLE_PERSONAL") { |
| 166 | if (this.types == 1) { | 226 | if (this.types == 1) { |
| 167 | - query.page = this.page | ||
| 168 | - query.size = this.size | ||
| 169 | - queryData = this.type == 1 | ||
| 170 | - ? this.$request.pPeriodQuestionReport | ||
| 171 | - : this.$request.pPeriodStudentReport; | ||
| 172 | - | ||
| 173 | - } | ||
| 174 | - else if (this.types == 2) { | ||
| 175 | - queryData = this.type == 1 | ||
| 176 | - ? this.$request.pPeriodQuestionReport | ||
| 177 | - : this.type == 2 ? this.$request.phaseAnswerReport : this.$request.phaseInteractiveReport; | 227 | + query.page = this.page; |
| 228 | + query.size = this.size; | ||
| 229 | + queryData = | ||
| 230 | + this.type == 1 | ||
| 231 | + ? this.$request.pPeriodQuestionReport | ||
| 232 | + : this.$request.pPeriodStudentReport; | ||
| 233 | + } else if (this.types == 2) { | ||
| 234 | + queryData = | ||
| 235 | + this.type == 1 | ||
| 236 | + ? this.$request.pPeriodQuestionReport | ||
| 237 | + : this.type == 2 | ||
| 238 | + ? this.$request.phaseAnswerReport | ||
| 239 | + : this.$request.phaseInteractiveReport; | ||
| 178 | } else if (this.types == 3) { | 240 | } else if (this.types == 3) { |
| 179 | - queryData = this.type == 2 ? this.$request.pPhaseAnswerReport : this.$request.pPhaseInteractiveReport; | 241 | + queryData = |
| 242 | + this.type == 2 | ||
| 243 | + ? this.$request.pPhaseAnswerReport | ||
| 244 | + : this.$request.pPhaseInteractiveReport; | ||
| 180 | } | 245 | } |
| 181 | } else { | 246 | } else { |
| 182 | if (this.types == 1) { | 247 | if (this.types == 1) { |
| 183 | - query.page = this.page | ||
| 184 | - query.size = this.size | ||
| 185 | - queryData = this.type == 1 | ||
| 186 | - ? this.$request.periodQuestionReport | ||
| 187 | - : this.$request.periodStudentReport; | 248 | + query.page = this.page; |
| 249 | + query.size = this.size; | ||
| 250 | + queryData = | ||
| 251 | + this.type == 1 | ||
| 252 | + ? this.$request.periodQuestionReport | ||
| 253 | + : this.$request.periodStudentReport; | ||
| 188 | } else if (this.types == 2) { | 254 | } else if (this.types == 2) { |
| 189 | - queryData = this.type == 1 | ||
| 190 | - ? this.$request.periodQuestionReport | ||
| 191 | - : this.type == 2 ? this.$request.phaseAnswerReport : this.$request.phaseInteractiveReport; | 255 | + queryData = |
| 256 | + this.type == 1 | ||
| 257 | + ? this.$request.periodQuestionReport | ||
| 258 | + : this.type == 2 | ||
| 259 | + ? this.$request.phaseAnswerReport | ||
| 260 | + : this.$request.phaseInteractiveReport; | ||
| 192 | } else if (this.types == 3) { | 261 | } else if (this.types == 3) { |
| 193 | - queryData = this.type == 2 ? this.$request.cTPhaseAnswerReport : this.$request.cTPhaseInteractiveReport; | 262 | + queryData = |
| 263 | + this.type == 2 | ||
| 264 | + ? this.$request.cTPhaseAnswerReport | ||
| 265 | + : this.$request.cTPhaseInteractiveReport; | ||
| 194 | } | 266 | } |
| 195 | } | 267 | } |
| 196 | if (this.types == 1) { | 268 | if (this.types == 1) { |
| 197 | - query.periodId = this.id[0] | ||
| 198 | - query.type = this.type - 1 | 269 | + query.periodId = this.id[0]; |
| 270 | + query.type = this.type - 1; | ||
| 199 | } else { | 271 | } else { |
| 200 | - query.periodIds = this.id | 272 | + query.periodIds = this.id; |
| 201 | if (this.types == 3) { | 273 | if (this.types == 3) { |
| 202 | - query.subjectNames = this.subjectNames | 274 | + query.subjectNames = this.subjectNames; |
| 203 | } | 275 | } |
| 204 | } | 276 | } |
| 205 | this.loading = true; | 277 | this.loading = true; |
| @@ -209,7 +281,7 @@ export default { | @@ -209,7 +281,7 @@ export default { | ||
| 209 | }); | 281 | }); |
| 210 | this.loading = false; | 282 | this.loading = false; |
| 211 | if (status === 0) { | 283 | if (status === 0) { |
| 212 | - this.tableData = data?.list || [] | 284 | + this.tableData = data?.list || []; |
| 213 | this.total = data.count; | 285 | this.total = data.count; |
| 214 | } else { | 286 | } else { |
| 215 | this.$message.error(info); | 287 | this.$message.error(info); |
| @@ -218,15 +290,15 @@ export default { | @@ -218,15 +290,15 @@ export default { | ||
| 218 | async _QueryDataQuestionRank() { | 290 | async _QueryDataQuestionRank() { |
| 219 | let queryData; | 291 | let queryData; |
| 220 | let query = {}; | 292 | let query = {}; |
| 221 | - | ||
| 222 | - query.periodIds = this.id | ||
| 223 | - if (this.types == 2) { | ||
| 224 | - queryData = this.$request.phaseAnswerReport | ||
| 225 | - } else if (this.types == 3) { | ||
| 226 | - queryData = this.$request.cTPhaseAnswerReport | ||
| 227 | - } | 293 | + |
| 294 | + query.periodIds = this.id; | ||
| 295 | + if (this.types == 2) { | ||
| 296 | + queryData = this.$request.phaseAnswerReport; | ||
| 297 | + } else if (this.types == 3) { | ||
| 298 | + queryData = this.$request.cTPhaseAnswerReport; | ||
| 299 | + } | ||
| 228 | if (this.types != 1) { | 300 | if (this.types != 1) { |
| 229 | - query.classId = this.classId | 301 | + query.classId = this.classId; |
| 230 | } | 302 | } |
| 231 | this.loading = true; | 303 | this.loading = true; |
| 232 | let { data, info, status } = await queryData({ | 304 | let { data, info, status } = await queryData({ |
| @@ -234,15 +306,15 @@ export default { | @@ -234,15 +306,15 @@ export default { | ||
| 234 | ...query, | 306 | ...query, |
| 235 | }); | 307 | }); |
| 236 | this.loading = false; | 308 | this.loading = false; |
| 237 | - console.log(data) | 309 | + console.log(data); |
| 238 | if (status === 0) { | 310 | if (status === 0) { |
| 239 | - this.exportStudent = data?.list && [...data?.list] || [] | 311 | + this.exportStudent = (data?.list && [...data?.list]) || []; |
| 240 | } else { | 312 | } else { |
| 241 | this.$message.error(info); | 313 | this.$message.error(info); |
| 242 | } | 314 | } |
| 243 | }, | 315 | }, |
| 244 | 316 | ||
| 245 | - //导出 | 317 | + //导出 |
| 246 | openDown() { | 318 | openDown() { |
| 247 | this.diaShow = true; | 319 | this.diaShow = true; |
| 248 | }, | 320 | }, |
| @@ -252,39 +324,48 @@ export default { | @@ -252,39 +324,48 @@ export default { | ||
| 252 | async exportData(arr) { | 324 | async exportData(arr) { |
| 253 | if (this.exportLoading == true) return; | 325 | if (this.exportLoading == true) return; |
| 254 | this.exportLoading = true; | 326 | this.exportLoading = true; |
| 255 | - let studentIds = arr | 327 | + let studentIds = arr; |
| 256 | let query = {}; | 328 | let query = {}; |
| 257 | - if(studentIds != null){ | 329 | + if (studentIds != null) { |
| 258 | if (studentIds.length > 0) { | 330 | if (studentIds.length > 0) { |
| 259 | - query.studentIds = studentIds | 331 | + query.studentIds = studentIds; |
| 260 | } else { | 332 | } else { |
| 261 | - query.studentIds = [] | 333 | + query.studentIds = []; |
| 262 | } | 334 | } |
| 263 | } | 335 | } |
| 264 | - let exportPeriodReport = "" | 336 | + let exportPeriodReport = ""; |
| 265 | if (this.types == 1) { | 337 | if (this.types == 1) { |
| 266 | - query.periodId = this.id[0] | ||
| 267 | - exportPeriodReport = this.role == "ROLE_PERSONAL" ? this.$request.pExportPeriodReport : this.$request.exportPeriodReport | ||
| 268 | - } else if(this.types == 2){ | ||
| 269 | - query.periodIds = this.id | ||
| 270 | - exportPeriodReport = this.role == "ROLE_PERSONAL" ?this.$request.pExportPhaseAnswerReport:this.$request.exportPhaseAnswerReport | ||
| 271 | - }else{ | ||
| 272 | - query.periodIds = this.id | ||
| 273 | - exportPeriodReport = this.$request.cTExportPhaseAnswerReport | 338 | + query.periodId = this.id[0]; |
| 339 | + exportPeriodReport = | ||
| 340 | + this.role == "ROLE_PERSONAL" | ||
| 341 | + ? this.$request.pExportPeriodReport | ||
| 342 | + : this.$request.exportPeriodReport; | ||
| 343 | + } else if (this.types == 2) { | ||
| 344 | + query.periodIds = this.id; | ||
| 345 | + exportPeriodReport = | ||
| 346 | + this.role == "ROLE_PERSONAL" | ||
| 347 | + ? this.$request.pExportPhaseAnswerReport | ||
| 348 | + : this.$request.exportPhaseAnswerReport; | ||
| 349 | + } else { | ||
| 350 | + query.periodIds = this.id; | ||
| 351 | + exportPeriodReport = this.$request.cTExportPhaseAnswerReport; | ||
| 274 | } | 352 | } |
| 275 | const data = await exportPeriodReport({ | 353 | const data = await exportPeriodReport({ |
| 276 | classId: this.classId, | 354 | classId: this.classId, |
| 277 | - ...query | 355 | + ...query, |
| 278 | }); | 356 | }); |
| 279 | this.exportLoading = false; | 357 | this.exportLoading = false; |
| 280 | if (data) { | 358 | if (data) { |
| 281 | - this.cancel() | 359 | + this.cancel(); |
| 282 | let blob = new Blob([data], { | 360 | let blob = new Blob([data], { |
| 283 | type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", | 361 | type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", |
| 284 | }); | 362 | }); |
| 285 | - let name = this.types == 1 ? "随堂问-单课时报表.xlsx" : | ||
| 286 | - this.types == 2 ? `随堂问-${this.className}-${this.subjectNames[0]}汇总分析报表.xlsx` : | ||
| 287 | - `随堂问-${this.className}-多科汇总分析报表.xlsx` | 363 | + let name = |
| 364 | + this.types == 1 | ||
| 365 | + ? "随堂问-单课时报表.xlsx" | ||
| 366 | + : this.types == 2 | ||
| 367 | + ? `随堂问-${this.className}-${this.subjectNames[0]}汇总分析报表.xlsx` | ||
| 368 | + : `随堂问-${this.className}-多科汇总分析报表.xlsx`; | ||
| 288 | downloadFile(this.status ? "随堂问-已归档单课时报表.xlsx" : name, blob); | 369 | downloadFile(this.status ? "随堂问-已归档单课时报表.xlsx" : name, blob); |
| 289 | } else { | 370 | } else { |
| 290 | this.$message.error("下载失败"); | 371 | this.$message.error("下载失败"); |
| @@ -351,7 +432,6 @@ div::-webkit-scrollbar-thumb { | @@ -351,7 +432,6 @@ div::-webkit-scrollbar-thumb { | ||
| 351 | } | 432 | } |
| 352 | 433 | ||
| 353 | .el-dialog { | 434 | .el-dialog { |
| 354 | - | ||
| 355 | .down-item { | 435 | .down-item { |
| 356 | font-size: 15px; | 436 | font-size: 15px; |
| 357 | margin-bottom: 10px; | 437 | margin-bottom: 10px; |
src/views/basic/setUp/teacher.vue
| @@ -538,13 +538,14 @@ export default { | @@ -538,13 +538,14 @@ export default { | ||
| 538 | async created() { | 538 | async created() { |
| 539 | this.code = this.$store.getters.csCode; | 539 | this.code = this.$store.getters.csCode; |
| 540 | this._QueryData(4); | 540 | this._QueryData(4); |
| 541 | - await this._QueryDataGrade(); | 541 | + await this._QueryDataGrade(1); //筛选用 |
| 542 | + await this._QueryDataGrade(2); //配置角色用 | ||
| 542 | // this._RoleList(); | 543 | // this._RoleList(); |
| 543 | }, | 544 | }, |
| 544 | methods: { | 545 | methods: { |
| 545 | async changeType() { | 546 | async changeType() { |
| 546 | this.query.gradeClassSub = []; | 547 | this.query.gradeClassSub = []; |
| 547 | - this.query.type = 0; | 548 | + // this.query.type = 0; |
| 548 | this.query.teacherName = ""; | 549 | this.query.teacherName = ""; |
| 549 | this.query.phone = ""; | 550 | this.query.phone = ""; |
| 550 | if (this.query.classType === 0) { | 551 | if (this.query.classType === 0) { |
| @@ -554,7 +555,7 @@ export default { | @@ -554,7 +555,7 @@ export default { | ||
| 554 | } | 555 | } |
| 555 | 556 | ||
| 556 | this._QueryData(6); | 557 | this._QueryData(6); |
| 557 | - await this._QueryDataGrade(); | 558 | + await this._QueryDataGrade(1); |
| 558 | }, | 559 | }, |
| 559 | //选择删除 | 560 | //选择删除 |
| 560 | handleCheckAllChange(val) { | 561 | handleCheckAllChange(val) { |
| @@ -982,10 +983,14 @@ export default { | @@ -982,10 +983,14 @@ export default { | ||
| 982 | this.$message.error(info); | 983 | this.$message.error(info); |
| 983 | } | 984 | } |
| 984 | }, | 985 | }, |
| 985 | - async _QueryDataGrade() { | 986 | + async _QueryDataGrade(type) { |
| 987 | + let query = {}; | ||
| 988 | + if (type == 1) { | ||
| 989 | + query.type = this.query.classType; | ||
| 990 | + } | ||
| 986 | //年级数据 | 991 | //年级数据 |
| 987 | const { data, status, info } = await this.$request.gradeList({ | 992 | const { data, status, info } = await this.$request.gradeList({ |
| 988 | - type: this.query.classType, | 993 | + ...query, |
| 989 | }); | 994 | }); |
| 990 | if (status === 0) { | 995 | if (status === 0) { |
| 991 | this.classList = []; | 996 | this.classList = []; |
| @@ -1000,23 +1005,9 @@ export default { | @@ -1000,23 +1005,9 @@ export default { | ||
| 1000 | label: items, | 1005 | label: items, |
| 1001 | }; | 1006 | }; |
| 1002 | }); | 1007 | }); |
| 1003 | - // 学校-年级 | ||
| 1004 | - this.gradeClassList.push({ | ||
| 1005 | - value: item.grade, | ||
| 1006 | - label: item.gradeName, | ||
| 1007 | - id: item.grade, | ||
| 1008 | - children: item.classList.map((clazz) => { | ||
| 1009 | - return { | ||
| 1010 | - value: clazz.id, | ||
| 1011 | - label: clazz.className, | ||
| 1012 | - id: clazz.id, | ||
| 1013 | - }; | ||
| 1014 | - }), | ||
| 1015 | - }); | ||
| 1016 | - | ||
| 1017 | - if (this.query.classType == 0) { | ||
| 1018 | - //学校-年级-科目 | ||
| 1019 | - this.gradeClassSubList.push({ | 1008 | + if (type == 2) { |
| 1009 | + // 学校-年级 | ||
| 1010 | + this.gradeClassList.push({ | ||
| 1020 | value: item.grade, | 1011 | value: item.grade, |
| 1021 | label: item.gradeName, | 1012 | label: item.gradeName, |
| 1022 | id: item.grade, | 1013 | id: item.grade, |
| @@ -1025,29 +1016,10 @@ export default { | @@ -1025,29 +1016,10 @@ export default { | ||
| 1025 | value: clazz.id, | 1016 | value: clazz.id, |
| 1026 | label: clazz.className, | 1017 | label: clazz.className, |
| 1027 | id: clazz.id, | 1018 | id: clazz.id, |
| 1028 | - children: [...subList], | ||
| 1029 | - }; | ||
| 1030 | - }), | ||
| 1031 | - }); | ||
| 1032 | - //学校-科目-班级 | ||
| 1033 | - this.gradeSubListClass.push({ | ||
| 1034 | - value: item.grade, | ||
| 1035 | - label: item.gradeName, | ||
| 1036 | - id: item.grade, | ||
| 1037 | - children: item.subjectNames.map((items) => { | ||
| 1038 | - return { | ||
| 1039 | - value: items, | ||
| 1040 | - label: items, | ||
| 1041 | - children: item.classList.map((clazz) => { | ||
| 1042 | - return { | ||
| 1043 | - value: clazz.id, | ||
| 1044 | - label: clazz.className, | ||
| 1045 | - }; | ||
| 1046 | - }), | ||
| 1047 | }; | 1019 | }; |
| 1048 | }), | 1020 | }), |
| 1049 | }); | 1021 | }); |
| 1050 | - } else { | 1022 | + |
| 1051 | let subjectNames = item.classList.map((clazz) => { | 1023 | let subjectNames = item.classList.map((clazz) => { |
| 1052 | return { | 1024 | return { |
| 1053 | value: clazz.subjectName, | 1025 | value: clazz.subjectName, |
| @@ -1061,32 +1033,72 @@ export default { | @@ -1061,32 +1033,72 @@ export default { | ||
| 1061 | }; | 1033 | }; |
| 1062 | }); | 1034 | }); |
| 1063 | 1035 | ||
| 1064 | - //学校-年级-科目 | ||
| 1065 | - this.gradeClassSubList.push({ | 1036 | + //学校-科目-班级 |
| 1037 | + this.gradeSubListClass.push({ | ||
| 1066 | value: item.grade, | 1038 | value: item.grade, |
| 1067 | label: item.gradeName, | 1039 | label: item.gradeName, |
| 1068 | id: item.grade, | 1040 | id: item.grade, |
| 1069 | - children: item.classList.map((clazz) => { | 1041 | + children: item.subjectNames.map((items) => { |
| 1042 | + let child = []; | ||
| 1043 | + item.classList.map((clazz) => { | ||
| 1044 | + if (clazz.subjectName) { | ||
| 1045 | + if (items == clazz.subjectName) { | ||
| 1046 | + child.push({ | ||
| 1047 | + value: clazz.id, | ||
| 1048 | + label: clazz.className, | ||
| 1049 | + }); | ||
| 1050 | + } | ||
| 1051 | + } else { | ||
| 1052 | + child.push({ | ||
| 1053 | + value: clazz.id, | ||
| 1054 | + label: clazz.className, | ||
| 1055 | + }); | ||
| 1056 | + } | ||
| 1057 | + }); | ||
| 1070 | return { | 1058 | return { |
| 1071 | - value: clazz.id, | ||
| 1072 | - label: clazz.className, | ||
| 1073 | - id: clazz.id, | ||
| 1074 | - children: [ | ||
| 1075 | - { | ||
| 1076 | - value: clazz.subjectName, | ||
| 1077 | - label: clazz.subjectName, | ||
| 1078 | - }, | ||
| 1079 | - ], | 1059 | + value: items, |
| 1060 | + label: items, | ||
| 1061 | + children: child, | ||
| 1080 | }; | 1062 | }; |
| 1081 | }), | 1063 | }), |
| 1082 | }); | 1064 | }); |
| 1083 | - | ||
| 1084 | - this.gradeSubListClass.push({ | ||
| 1085 | - value: item.grade, | ||
| 1086 | - label: item.gradeName, | ||
| 1087 | - id: item.grade, | ||
| 1088 | - children: subjectNames, | ||
| 1089 | - }); | 1065 | + } else { |
| 1066 | + if (this.query.classType == 0) { | ||
| 1067 | + //学校-年级-科目 | ||
| 1068 | + this.gradeClassSubList.push({ | ||
| 1069 | + value: item.grade, | ||
| 1070 | + label: item.gradeName, | ||
| 1071 | + id: item.grade, | ||
| 1072 | + children: item.classList.map((clazz) => { | ||
| 1073 | + return { | ||
| 1074 | + value: clazz.id, | ||
| 1075 | + label: clazz.className, | ||
| 1076 | + id: clazz.id, | ||
| 1077 | + children: [...subList], | ||
| 1078 | + }; | ||
| 1079 | + }), | ||
| 1080 | + }); | ||
| 1081 | + } else { | ||
| 1082 | + //学校-年级-科目 | ||
| 1083 | + this.gradeClassSubList.push({ | ||
| 1084 | + value: item.grade, | ||
| 1085 | + label: item.gradeName, | ||
| 1086 | + id: item.grade, | ||
| 1087 | + children: item.classList.map((clazz) => { | ||
| 1088 | + return { | ||
| 1089 | + value: clazz.id, | ||
| 1090 | + label: clazz.className, | ||
| 1091 | + id: clazz.id, | ||
| 1092 | + children: [ | ||
| 1093 | + { | ||
| 1094 | + value: clazz.subjectName, | ||
| 1095 | + label: clazz.subjectName, | ||
| 1096 | + }, | ||
| 1097 | + ], | ||
| 1098 | + }; | ||
| 1099 | + }), | ||
| 1100 | + }); | ||
| 1101 | + } | ||
| 1090 | } | 1102 | } |
| 1091 | 1103 | ||
| 1092 | let classList = item.classList.map((clazz) => { | 1104 | let classList = item.classList.map((clazz) => { |
src/views/basic/test/components/multipleSubTest.vue
| @@ -2,47 +2,111 @@ | @@ -2,47 +2,111 @@ | ||
| 2 | <div class="table-box" ref="main" v-loading="loading"> | 2 | <div class="table-box" ref="main" v-loading="loading"> |
| 3 | <div id="print-content"> | 3 | <div id="print-content"> |
| 4 | <!-- 多科多卷 --> | 4 | <!-- 多科多卷 --> |
| 5 | - <el-table :data="tableData" :max-height="tableMaxHeight" border style="width: 100%"> | ||
| 6 | - <el-table-column prop="studentCode" label="学号" align="center" fixed></el-table-column> | 5 | + <el-table |
| 6 | + :data="tableData" | ||
| 7 | + :max-height="tableMaxHeight" | ||
| 8 | + border | ||
| 9 | + style="width: 100%" | ||
| 10 | + > | ||
| 11 | + <el-table-column | ||
| 12 | + prop="studentCode" | ||
| 13 | + label="学号" | ||
| 14 | + align="center" | ||
| 15 | + fixed | ||
| 16 | + ></el-table-column> | ||
| 7 | 17 | ||
| 8 | <el-table-column prop="studentName" label="姓名" fixed align="center"> | 18 | <el-table-column prop="studentName" label="姓名" fixed align="center"> |
| 9 | - <template slot-scope="scoped"><span class="click-b" @click="toPortrait(scoped.row)"> | 19 | + <template slot-scope="scoped" |
| 20 | + ><span class="click-b" @click="toPortrait(scoped.row)"> | ||
| 10 | {{ scoped.row.studentName }} | 21 | {{ scoped.row.studentName }} |
| 11 | - </span></template> | 22 | + </span></template |
| 23 | + > | ||
| 12 | </el-table-column> | 24 | </el-table-column> |
| 13 | - <el-table-column align="center" v-for="(item, index) in answerList" :key="index" :label="item"> | ||
| 14 | - <el-table-column :prop="'examCount' + item" label="测练数" align="center" | ||
| 15 | - :class-name="index % 2 == 0 ? 'bg' : ''"></el-table-column> | ||
| 16 | - <el-table-column :prop="'participationCount' + item" label="参与数" align="center" | ||
| 17 | - :class-name="index % 2 == 0 ? 'bg' : ''"></el-table-column> | ||
| 18 | - <el-table-column :prop="'score' + item" label="总分" align="center" | ||
| 19 | - :class-name="index % 2 == 0 ? 'bg' : ''"></el-table-column> | ||
| 20 | - <el-table-column :prop="'classRank' + item" label="班名" align="center" | ||
| 21 | - :class-name="index % 2 == 0 ? 'bg' : ''"></el-table-column> | 25 | + <el-table-column |
| 26 | + align="center" | ||
| 27 | + v-for="(item, index) in answerList" | ||
| 28 | + :key="index" | ||
| 29 | + :label="item" | ||
| 30 | + > | ||
| 31 | + <el-table-column | ||
| 32 | + :prop="'examCount' + item" | ||
| 33 | + label="测练数" | ||
| 34 | + align="center" | ||
| 35 | + :class-name="index % 2 == 0 ? 'bg' : ''" | ||
| 36 | + ></el-table-column> | ||
| 37 | + <el-table-column | ||
| 38 | + :prop="'participationCount' + item" | ||
| 39 | + label="参与数" | ||
| 40 | + align="center" | ||
| 41 | + :class-name="index % 2 == 0 ? 'bg' : ''" | ||
| 42 | + ></el-table-column> | ||
| 43 | + <el-table-column | ||
| 44 | + :prop="'score' + item" | ||
| 45 | + label="总分" | ||
| 46 | + align="center" | ||
| 47 | + :class-name="index % 2 == 0 ? 'bg' : ''" | ||
| 48 | + ></el-table-column> | ||
| 49 | + <el-table-column | ||
| 50 | + :prop="'classRank' + item" | ||
| 51 | + label="班名" | ||
| 52 | + align="center" | ||
| 53 | + :class-name="index % 2 == 0 ? 'bg' : ''" | ||
| 54 | + ></el-table-column> | ||
| 22 | </el-table-column> | 55 | </el-table-column> |
| 23 | <el-table-column label="查看雷达图" align="center"> | 56 | <el-table-column label="查看雷达图" align="center"> |
| 24 | <template slot-scope="scoped"> | 57 | <template slot-scope="scoped"> |
| 25 | - <el-button @click="openChart(scoped.row)" type="primary" size="mini" circle | ||
| 26 | - icon="el-icon-arrow-right"></el-button> | 58 | + <el-button |
| 59 | + @click="openChart(scoped.row)" | ||
| 60 | + type="primary" | ||
| 61 | + size="mini" | ||
| 62 | + circle | ||
| 63 | + icon="el-icon-arrow-right" | ||
| 64 | + ></el-button> | ||
| 27 | </template> | 65 | </template> |
| 28 | </el-table-column> | 66 | </el-table-column> |
| 29 | </el-table> | 67 | </el-table> |
| 30 | </div> | 68 | </div> |
| 31 | <div class="down"> | 69 | <div class="down"> |
| 32 | - <el-button @click="openDown" type="primary" plain round icon="fa fa-cloud-download">导出报表</el-button> | ||
| 33 | - <el-button v-if="!this.$store.getters.code" @click="print" type="primary" plain round | ||
| 34 | - icon="el-icon-printer">打印</el-button> | 70 | + <el-button |
| 71 | + @click="openDown" | ||
| 72 | + type="primary" | ||
| 73 | + plain | ||
| 74 | + round | ||
| 75 | + icon="fa fa-cloud-download" | ||
| 76 | + >导出报表</el-button | ||
| 77 | + > | ||
| 78 | + <el-button | ||
| 79 | + v-if="!this.$store.getters.code" | ||
| 80 | + @click="print" | ||
| 81 | + type="primary" | ||
| 82 | + plain | ||
| 83 | + round | ||
| 84 | + icon="el-icon-printer" | ||
| 85 | + >打印</el-button | ||
| 86 | + > | ||
| 35 | </div> | 87 | </div> |
| 36 | - <el-dialog class="chart-dia" :visible.sync="chartDia" :title="chartTitle" width="800"> | 88 | + <el-dialog |
| 89 | + class="chart-dia" | ||
| 90 | + :visible.sync="chartDia" | ||
| 91 | + :title="chartTitle" | ||
| 92 | + width="800" | ||
| 93 | + > | ||
| 37 | <div class="chart-box"> | 94 | <div class="chart-box"> |
| 38 | <RadarChart id="radarChart" :params="chartData" /> | 95 | <RadarChart id="radarChart" :params="chartData" /> |
| 39 | </div> | 96 | </div> |
| 40 | </el-dialog> | 97 | </el-dialog> |
| 41 | - <ExportDia :exportStudent="exportStudent" :diaShow="diaShow" @cancel="cancel" @exportData="exportData" type="雷达图"/> | 98 | + <ExportDia |
| 99 | + :exportStudent="exportStudent" | ||
| 100 | + :diaShow="diaShow" | ||
| 101 | + @cancel="cancel" | ||
| 102 | + @exportData="exportData" | ||
| 103 | + lastLabel="总分" | ||
| 104 | + type="雷达图" | ||
| 105 | + /> | ||
| 42 | </div> | 106 | </div> |
| 43 | </template> | 107 | </template> |
| 44 | <script> | 108 | <script> |
| 45 | -import RadarChart from "@/components/charts/radarChart" | 109 | +import RadarChart from "@/components/charts/radarChart"; |
| 46 | 110 | ||
| 47 | import { downloadFile, tablePrint } from "@/utils"; | 111 | import { downloadFile, tablePrint } from "@/utils"; |
| 48 | export default { | 112 | export default { |
| @@ -65,37 +129,38 @@ export default { | @@ -65,37 +129,38 @@ export default { | ||
| 65 | chartData: { | 129 | chartData: { |
| 66 | indicator: [ | 130 | indicator: [ |
| 67 | { | 131 | { |
| 68 | - name: '', max: 100, | 132 | + name: "", |
| 133 | + max: 100, | ||
| 69 | axisLabel: { | 134 | axisLabel: { |
| 70 | show: true, | 135 | show: true, |
| 71 | showMaxLabel: true, | 136 | showMaxLabel: true, |
| 72 | }, | 137 | }, |
| 73 | }, | 138 | }, |
| 74 | ], | 139 | ], |
| 75 | - seriesData: [] | 140 | + seriesData: [], |
| 76 | }, | 141 | }, |
| 77 | chartDia: false, | 142 | chartDia: false, |
| 78 | chartTitle: "", | 143 | chartTitle: "", |
| 79 | 144 | ||
| 80 | //导出相关 | 145 | //导出相关 |
| 81 | diaShow: false, | 146 | diaShow: false, |
| 82 | - exportStudent: [] | ||
| 83 | - } | 147 | + exportStudent: [], |
| 148 | + }; | ||
| 84 | }, | 149 | }, |
| 85 | computed: { | 150 | computed: { |
| 86 | subjectList: function () { | 151 | subjectList: function () { |
| 87 | - return this.subjectName?.split(",") | ||
| 88 | - } | 152 | + return this.subjectName?.split(","); |
| 153 | + }, | ||
| 89 | }, | 154 | }, |
| 90 | created() { | 155 | created() { |
| 91 | - this.phaseExamReport() | 156 | + this.phaseExamReport(); |
| 92 | }, | 157 | }, |
| 93 | mounted() { | 158 | mounted() { |
| 94 | this.tableMaxHeight = this.$refs.main.offsetHeight; | 159 | this.tableMaxHeight = this.$refs.main.offsetHeight; |
| 95 | }, | 160 | }, |
| 96 | methods: { | 161 | methods: { |
| 97 | print() { | 162 | print() { |
| 98 | - tablePrint("print-content", this.title + this.tabList[this.type]); | 163 | + tablePrint("print-content", this.subjectName + "汇总报表"); |
| 99 | }, | 164 | }, |
| 100 | toPortrait(obj) { | 165 | toPortrait(obj) { |
| 101 | //暂时不上线 | 166 | //暂时不上线 |
| @@ -135,63 +200,61 @@ export default { | @@ -135,63 +200,61 @@ export default { | ||
| 135 | }, | 200 | }, |
| 136 | //查看雷达图 | 201 | //查看雷达图 |
| 137 | openChart(obj) { | 202 | openChart(obj) { |
| 138 | - | ||
| 139 | - this.chartTitle = obj.studentName + '-多科-多课时作答表现图' | 203 | + this.chartTitle = obj.studentName + "-多科-多课时作答表现图"; |
| 140 | let max = 0; | 204 | let max = 0; |
| 141 | - const dataList = obj.dataList.slice(1, obj.dataList.length) | ||
| 142 | - let subjectList = dataList.map(item => { | ||
| 143 | - let score = Number(item.highestScore || item.score) | ||
| 144 | - max = score > max ? score : max | ||
| 145 | - return item.subjectName | ||
| 146 | - }) | ||
| 147 | - max += 10 | ||
| 148 | - max = max > 150 ? 150 : max | 205 | + const dataList = obj.dataList.slice(1, obj.dataList.length); |
| 206 | + let subjectList = dataList.map((item) => { | ||
| 207 | + let score = Number(item.highestScore || item.score); | ||
| 208 | + max = score > max ? score : max; | ||
| 209 | + return item.subjectName; | ||
| 210 | + }); | ||
| 211 | + max += 10; | ||
| 212 | + max = max > 150 ? 150 : max; | ||
| 149 | this.chartData = { | 213 | this.chartData = { |
| 150 | indicator: [ | 214 | indicator: [ |
| 151 | { | 215 | { |
| 152 | - name: '', max: max, | 216 | + name: "", |
| 217 | + max: max, | ||
| 153 | axisLabel: { | 218 | axisLabel: { |
| 154 | show: true, | 219 | show: true, |
| 155 | showMaxLabel: true, | 220 | showMaxLabel: true, |
| 156 | }, | 221 | }, |
| 157 | }, | 222 | }, |
| 158 | ], | 223 | ], |
| 159 | - seriesData: [] | ||
| 160 | - } | 224 | + seriesData: [], |
| 225 | + }; | ||
| 161 | subjectList.map((item, index) => { | 226 | subjectList.map((item, index) => { |
| 162 | if (index < 1) { | 227 | if (index < 1) { |
| 163 | - this.chartData.indicator[index].name = item | ||
| 164 | - this.chartData.indicator[index].max = max | 228 | + this.chartData.indicator[index].name = item; |
| 229 | + this.chartData.indicator[index].max = max; | ||
| 165 | } else { | 230 | } else { |
| 166 | - this.chartData.indicator.push({ name: item, max: max }) | 231 | + this.chartData.indicator.push({ name: item, max: max }); |
| 167 | } | 232 | } |
| 168 | - }) | 233 | + }); |
| 169 | // 为了美观 | 234 | // 为了美观 |
| 170 | if (this.chartData.indicator.length < 3) { | 235 | if (this.chartData.indicator.length < 3) { |
| 171 | - let num = this.chartData.indicator.length | 236 | + let num = this.chartData.indicator.length; |
| 172 | for (let i = 0; i < 6; i++) { | 237 | for (let i = 0; i < 6; i++) { |
| 173 | if (i >= num) { | 238 | if (i >= num) { |
| 174 | - this.chartData.indicator.push({ name: "", max: max }) | 239 | + this.chartData.indicator.push({ name: "", max: max }); |
| 175 | } | 240 | } |
| 176 | } | 241 | } |
| 177 | } | 242 | } |
| 178 | this.chartData.seriesData = [ | 243 | this.chartData.seriesData = [ |
| 179 | { | 244 | { |
| 180 | - value: dataList.map(item => item.highestScore), | ||
| 181 | - name: '班级最高分' | 245 | + value: dataList.map((item) => item.highestScore), |
| 246 | + name: "班级最高分", | ||
| 182 | }, | 247 | }, |
| 183 | { | 248 | { |
| 184 | - value: dataList.map(item => item.avgScore), | ||
| 185 | - name: '班平均分' | 249 | + value: dataList.map((item) => item.avgScore), |
| 250 | + name: "班平均分", | ||
| 186 | }, | 251 | }, |
| 187 | { | 252 | { |
| 188 | - value: dataList.map(item => item.score), | ||
| 189 | - name: '本人得分' | 253 | + value: dataList.map((item) => item.score), |
| 254 | + name: "本人得分", | ||
| 190 | }, | 255 | }, |
| 191 | - ] | ||
| 192 | - this.chartDia = true | ||
| 193 | - | ||
| 194 | - | 256 | + ]; |
| 257 | + this.chartDia = true; | ||
| 195 | }, | 258 | }, |
| 196 | async phaseExamReport() { | 259 | async phaseExamReport() { |
| 197 | this.loading = true; | 260 | this.loading = true; |
| @@ -222,7 +285,7 @@ export default { | @@ -222,7 +285,7 @@ export default { | ||
| 222 | }; | 285 | }; |
| 223 | }); | 286 | }); |
| 224 | this.answerList = [...subjectName]; | 287 | this.answerList = [...subjectName]; |
| 225 | - this.exportStudent = [...this.tableData] | 288 | + this.exportStudent = [...this.tableData]; |
| 226 | } else { | 289 | } else { |
| 227 | this.$message.error(info); | 290 | this.$message.error(info); |
| 228 | } | 291 | } |
| @@ -237,21 +300,20 @@ export default { | @@ -237,21 +300,20 @@ export default { | ||
| 237 | async exportData(arr) { | 300 | async exportData(arr) { |
| 238 | if (this.exportLoading == true) return; | 301 | if (this.exportLoading == true) return; |
| 239 | this.exportLoading = true; | 302 | this.exportLoading = true; |
| 240 | - let studentIds = arr | 303 | + let studentIds = arr; |
| 241 | let query = {}; | 304 | let query = {}; |
| 242 | - if(studentIds != null){ | 305 | + if (studentIds != null) { |
| 243 | if (studentIds.length > 0) { | 306 | if (studentIds.length > 0) { |
| 244 | - query.studentIds = studentIds | 307 | + query.studentIds = studentIds; |
| 245 | } else { | 308 | } else { |
| 246 | - query.studentIds = [] | 309 | + query.studentIds = []; |
| 247 | } | 310 | } |
| 248 | } | 311 | } |
| 249 | 312 | ||
| 250 | - | ||
| 251 | const data = await this.$request.cTExportPhaseExamReport({ | 313 | const data = await this.$request.cTExportPhaseExamReport({ |
| 252 | classId: this.classId, | 314 | classId: this.classId, |
| 253 | examIds: this.ids, | 315 | examIds: this.ids, |
| 254 | - ...query | 316 | + ...query, |
| 255 | }); | 317 | }); |
| 256 | this.exportLoading = false; | 318 | this.exportLoading = false; |
| 257 | if (data) { | 319 | if (data) { |
| @@ -265,12 +327,12 @@ export default { | @@ -265,12 +327,12 @@ export default { | ||
| 265 | blob | 327 | blob |
| 266 | ); | 328 | ); |
| 267 | this.$message.success("下载成功"); | 329 | this.$message.success("下载成功"); |
| 268 | - this.cancel() | 330 | + this.cancel(); |
| 269 | } else { | 331 | } else { |
| 270 | this.$message.error("下载失败"); | 332 | this.$message.error("下载失败"); |
| 271 | } | 333 | } |
| 272 | }, | 334 | }, |
| 273 | - } | 335 | + }, |
| 274 | }; | 336 | }; |
| 275 | </script> | 337 | </script> |
| 276 | <style lang="scss" scoped> | 338 | <style lang="scss" scoped> |
src/views/basic/test/components/scoreSet.vue
| @@ -178,36 +178,44 @@ export default { | @@ -178,36 +178,44 @@ export default { | ||
| 178 | if (status === 0) { | 178 | if (status === 0) { |
| 179 | let studentList = data.students || []; | 179 | let studentList = data.students || []; |
| 180 | this.questionList = data?.questionList || []; | 180 | this.questionList = data?.questionList || []; |
| 181 | + if (this.questionList.length == 0) { | ||
| 182 | + this.questionList = Object.keys(studentList[0].scoreMap).map( | ||
| 183 | + (item) => { | ||
| 184 | + return { | ||
| 185 | + questionId: item, | ||
| 186 | + questionScore: 20, | ||
| 187 | + }; | ||
| 188 | + } | ||
| 189 | + ); | ||
| 190 | + } | ||
| 181 | this.tableData = | 191 | this.tableData = |
| 182 | - (this.questionList.length && | ||
| 183 | - studentList.map((item) => { | ||
| 184 | - item.all = item.all || 0; //总分 | ||
| 185 | - item.object = item.object || 0; //客观题分数 | ||
| 186 | - item.subject = item.subject || 0; //主观题分数 | ||
| 187 | - if (!item.scoreMap) item.scoreMap = {}; | ||
| 188 | - this.questionList.map((question) => { | ||
| 189 | - let keys = question.questionId; | ||
| 190 | - if (!item.scoreMap[keys]) { | ||
| 191 | - if (item.scoreMap[keys] == 0) { | ||
| 192 | - item.scoreMap[keys] = 0; | ||
| 193 | - } else { | ||
| 194 | - item.scoreMap[keys] = ""; | ||
| 195 | - } | 192 | + studentList.map((item) => { |
| 193 | + item.all = item.all || 0; //总分 | ||
| 194 | + item.object = item.object || 0; //客观题分数 | ||
| 195 | + item.subject = item.subject || 0; //主观题分数 | ||
| 196 | + if (!item.scoreMap) item.scoreMap = {}; | ||
| 197 | + this.questionList.map((question) => { | ||
| 198 | + let keys = question.questionId; | ||
| 199 | + if (!item.scoreMap[keys]) { | ||
| 200 | + if (item.scoreMap[keys] == 0) { | ||
| 201 | + item.scoreMap[keys] = 0; | ||
| 196 | } else { | 202 | } else { |
| 197 | - let num = Number(item.scoreMap[keys]); | ||
| 198 | - item.scoreMap[keys] = num; | ||
| 199 | - // item.score += num | ||
| 200 | - // if (question.questionType == 5) { | ||
| 201 | - // item.subjectiveScore += num | ||
| 202 | - // } else { | ||
| 203 | - // item.objectiveScore += num | ||
| 204 | - // } | 203 | + item.scoreMap[keys] = ""; |
| 205 | } | 204 | } |
| 206 | - }); | 205 | + } else { |
| 206 | + let num = Number(item.scoreMap[keys]); | ||
| 207 | + item.scoreMap[keys] = num; | ||
| 208 | + // item.score += num | ||
| 209 | + // if (question.questionType == 5) { | ||
| 210 | + // item.subjectiveScore += num | ||
| 211 | + // } else { | ||
| 212 | + // item.objectiveScore += num | ||
| 213 | + // } | ||
| 214 | + } | ||
| 215 | + }); | ||
| 207 | 216 | ||
| 208 | - return item; | ||
| 209 | - })) || | ||
| 210 | - []; | 217 | + return item; |
| 218 | + }) || []; | ||
| 211 | this.setTableHeight(); | 219 | this.setTableHeight(); |
| 212 | } else { | 220 | } else { |
| 213 | this.$message.error(info); | 221 | this.$message.error(info); |
src/views/examinationPaper/add.vue
| @@ -2022,9 +2022,9 @@ export default { | @@ -2022,9 +2022,9 @@ export default { | ||
| 2022 | id: item.tagId, | 2022 | id: item.tagId, |
| 2023 | }; | 2023 | }; |
| 2024 | }) || []; | 2024 | }) || []; |
| 2025 | - if (this.type != 2) { | ||
| 2026 | - this.form.tagId = this.answerTypeList[0]?.id || ""; | ||
| 2027 | - } | 2025 | + // if (this.type != 2) { |
| 2026 | + // this.form.tagId = this.answerTypeList[0]?.id || ""; | ||
| 2027 | + // } | ||
| 2028 | } else { | 2028 | } else { |
| 2029 | this.$message.error(info); | 2029 | this.$message.error(info); |
| 2030 | } | 2030 | } |