Commit 47e919133345e7f26f070bc2e1561b1a8141dbdd
1 parent
d8f38eeb
feat: 代码提交
Showing
2 changed files
with
193 additions
and
60 deletions
src/views/basic/askTestQuestion/components/wrongQuestionDialog.vue
| 1 | <template> | 1 | <template> |
| 2 | - <el-dialog :visible.sync="visible" width="70%" :before-close="handleClose" :modal-append-to-body="false"> | 2 | + <el-dialog |
| 3 | + :visible.sync="visible" | ||
| 4 | + width="70%" | ||
| 5 | + :before-close="handleClose" | ||
| 6 | + :modal-append-to-body="false" | ||
| 7 | + > | ||
| 3 | <div class="test-box" v-if="groups"> | 8 | <div class="test-box" v-if="groups"> |
| 4 | <div class="test"> | 9 | <div class="test"> |
| 5 | <div class="test-title" @click="enableEditing"> | 10 | <div class="test-title" @click="enableEditing"> |
| 6 | - <div class="test-title" v-if="!isEditing" @mouseenter="handleMouseEnter" @mouseleave="handleMouseLeave" | ||
| 7 | - :class="isHovered ? 'hover' : ''"> | 11 | + <div |
| 12 | + class="test-title" | ||
| 13 | + v-if="!isEditing" | ||
| 14 | + @mouseenter="handleMouseEnter" | ||
| 15 | + @mouseleave="handleMouseLeave" | ||
| 16 | + :class="isHovered ? 'hover' : ''" | ||
| 17 | + > | ||
| 8 | {{ inputValue }} | 18 | {{ inputValue }} |
| 9 | </div> | 19 | </div> |
| 10 | - <div v-if="isHovered" class="tooltip" :style="{ | ||
| 11 | - top: tooltipPosition.y + 'px', | ||
| 12 | - left: tooltipPosition.x + 'px', | ||
| 13 | - }"> | 20 | + <div |
| 21 | + v-if="isHovered" | ||
| 22 | + class="tooltip" | ||
| 23 | + :style="{ | ||
| 24 | + top: tooltipPosition.y + 'px', | ||
| 25 | + left: tooltipPosition.x + 'px', | ||
| 26 | + }" | ||
| 27 | + > | ||
| 14 | 单击设置试卷标题 | 28 | 单击设置试卷标题 |
| 15 | </div> | 29 | </div> |
| 16 | - <el-input class="test-title" ref="editInput" v-if="isEditing" v-model="inputValue" @blur="save" | ||
| 17 | - @keyup.enter.native="save" style="padding: 0 200px" /> | 30 | + <el-input |
| 31 | + class="test-title" | ||
| 32 | + ref="editInput" | ||
| 33 | + v-if="isEditing" | ||
| 34 | + v-model="inputValue" | ||
| 35 | + @blur="save" | ||
| 36 | + @keyup.enter.native="save" | ||
| 37 | + style="padding: 0 200px" | ||
| 38 | + /> | ||
| 18 | </div> | 39 | </div> |
| 19 | <div class="test-group"> | 40 | <div class="test-group"> |
| 20 | - <div class="outer-item" v-for="(group, index) in groups" :key="group.questionType" :class="{ | ||
| 21 | - border: selectedIndex === group.questionType, | ||
| 22 | - }" @mouseenter="handleGroupMouseEnter(group.questionType, 'all')" @mouseleave="handleGroupMouseLeave"> | ||
| 23 | - <div v-if="selectedIndex == group.questionType" class="border-del" | ||
| 24 | - @click="handleDel(group.questionType, 'all')"> | 41 | + <div |
| 42 | + class="outer-item" | ||
| 43 | + v-for="(group, index) in groups" | ||
| 44 | + :key="group.questionType" | ||
| 45 | + :class="{ | ||
| 46 | + border: selectedIndex === group.questionType, | ||
| 47 | + }" | ||
| 48 | + @mouseenter="handleGroupMouseEnter(group.questionType, 'all')" | ||
| 49 | + @mouseleave="handleGroupMouseLeave" | ||
| 50 | + > | ||
| 51 | + <div | ||
| 52 | + v-if="selectedIndex == group.questionType" | ||
| 53 | + class="border-del" | ||
| 54 | + @click="handleDel(group.questionType, 'all')" | ||
| 55 | + > | ||
| 25 | 删除 | 56 | 删除 |
| 26 | </div> | 57 | </div> |
| 27 | <!-- 每个组的标题 --> | 58 | <!-- 每个组的标题 --> |
| 28 | - <div class="test-group-title" :class="{ | ||
| 29 | - border: selectedIndex == group.questionType, | ||
| 30 | - }" @mouseenter="handleGroupMouseEnter(group.questionType, 'all')"> | 59 | + <div |
| 60 | + class="test-group-title" | ||
| 61 | + :class="{ | ||
| 62 | + border: selectedIndex == group.questionType, | ||
| 63 | + }" | ||
| 64 | + @mouseenter="handleGroupMouseEnter(group.questionType, 'all')" | ||
| 65 | + > | ||
| 31 | <div class="size-16" style="font-weight: 600"> | 66 | <div class="size-16" style="font-weight: 600"> |
| 32 | {{ index + 1 }}、 | 67 | {{ index + 1 }}、 |
| 33 | - <span @mouseenter="(event) => handleItemMouseEnter(event, group.questionType) | ||
| 34 | - " @mouseleave="handleItemMouseLeave" :class="isItemHovered == group.questionType ? 'hover' : ''" | ||
| 35 | - class="size-16" @click="groupEditing(index)" v-show="!group.input">{{ group.questionTitle }}</span> | ||
| 36 | - | ||
| 37 | - <el-input :ref="'refInput' + index" class="size-16" size="mini" v-show="group.input" | ||
| 38 | - v-model="group.questionTitle" @blur="groupSave(index)" @keyup.enter.native="groupSave(index)" | ||
| 39 | - style="width: fit-content" /> | ||
| 40 | - <div v-if="isItemHovered == group.questionType" class="tooltip" :style="{ | ||
| 41 | - top: tooltipPosition.y + 'px', | ||
| 42 | - left: tooltipPosition.x + 'px', | ||
| 43 | - }"> | 68 | + <span |
| 69 | + @mouseenter=" | ||
| 70 | + (event) => handleItemMouseEnter(event, group.questionType) | ||
| 71 | + " | ||
| 72 | + @mouseleave="handleItemMouseLeave" | ||
| 73 | + :class="isItemHovered == group.questionType ? 'hover' : ''" | ||
| 74 | + class="size-16" | ||
| 75 | + @click="groupEditing(index)" | ||
| 76 | + v-show="!group.input" | ||
| 77 | + >{{ group.questionTitle }}</span | ||
| 78 | + > | ||
| 79 | + | ||
| 80 | + <el-input | ||
| 81 | + :ref="'refInput' + index" | ||
| 82 | + class="size-16" | ||
| 83 | + size="mini" | ||
| 84 | + v-show="group.input" | ||
| 85 | + v-model="group.questionTitle" | ||
| 86 | + @blur="groupSave(index)" | ||
| 87 | + @keyup.enter.native="groupSave(index)" | ||
| 88 | + style="width: fit-content" | ||
| 89 | + /> | ||
| 90 | + <div | ||
| 91 | + v-if="isItemHovered == group.questionType" | ||
| 92 | + class="tooltip" | ||
| 93 | + :style="{ | ||
| 94 | + top: tooltipPosition.y + 'px', | ||
| 95 | + left: tooltipPosition.x + 'px', | ||
| 96 | + }" | ||
| 97 | + > | ||
| 44 | 单击设置试卷标题 | 98 | 单击设置试卷标题 |
| 45 | </div> | 99 | </div> |
| 46 | 100 | ||
| 47 | - <span v-if="group.subQuestionIds" class="size-16" style="margin-left: 10px">(共{{ | ||
| 48 | - group.subQuestionIds.length }}题 / 共{{ | 101 | + <span |
| 102 | + v-if="group.subQuestionIds" | ||
| 103 | + class="size-16" | ||
| 104 | + style="margin-left: 10px" | ||
| 105 | + >(共{{ group.subQuestionIds.length }}题 / 共{{ | ||
| 49 | group.questionScore * group.subQuestionIds.length | 106 | group.questionScore * group.subQuestionIds.length |
| 50 | - }}分)</span> | 107 | + }}分)</span |
| 108 | + > | ||
| 51 | </div> | 109 | </div> |
| 52 | </div> | 110 | </div> |
| 53 | 111 | ||
| 54 | <!-- 内部的题目列表,允许组内排序 --> | 112 | <!-- 内部的题目列表,允许组内排序 --> |
| 55 | - <div style="display: flex" v-for="question in group.subQuestionIds" :key="question.id" :class="{ | ||
| 56 | - border: selectedItemIndex === question.id, | ||
| 57 | - }" @mouseenter="handleGroupMouseEnter(question.id, 'number')" @mouseleave="handleGroupMouseLeave" | ||
| 58 | - class="inner-item"> | ||
| 59 | - <div v-if="selectedItemIndex === question.id" class="border-del" | ||
| 60 | - @click="handleDel(question.id, group.questionType)"> | 113 | + <div |
| 114 | + style="display: flex" | ||
| 115 | + v-for="question in group.subQuestionIds" | ||
| 116 | + :key="question.id" | ||
| 117 | + :class="{ | ||
| 118 | + border: selectedItemIndex === question.id, | ||
| 119 | + }" | ||
| 120 | + @mouseenter="handleGroupMouseEnter(question.id, 'number')" | ||
| 121 | + @mouseleave="handleGroupMouseLeave" | ||
| 122 | + class="inner-item" | ||
| 123 | + > | ||
| 124 | + <div | ||
| 125 | + v-if="selectedItemIndex === question.id" | ||
| 126 | + class="border-del" | ||
| 127 | + @click="handleDel(question.id, group.questionType)" | ||
| 128 | + > | ||
| 61 | 删除 | 129 | 删除 |
| 62 | </div> | 130 | </div> |
| 63 | <div class="size color" style="margin-top: 20px"> | 131 | <div class="size color" style="margin-top: 20px"> |
| 64 | - <div style="max-width: 100px; white-space: nowrap; /* 不换行 */"> | 132 | + <div |
| 133 | + style="max-width: 100px; white-space: nowrap; /* 不换行 */" | ||
| 134 | + > | ||
| 65 | {{ question.globalIndex }}、 | 135 | {{ question.globalIndex }}、 |
| 66 | </div> | 136 | </div> |
| 67 | </div> | 137 | </div> |
| 68 | 138 | ||
| 69 | - <iframe :src="question.screenshot" :ref="'iframe' + question.id" @load="onIFrameLoad(question.id)" style=" | 139 | + <iframe |
| 140 | + :src="question.screenshot" | ||
| 141 | + :ref="'iframe' + question.id" | ||
| 142 | + @load="onIFrameLoad(question.id)" | ||
| 143 | + style=" | ||
| 70 | width: 100%; | 144 | width: 100%; |
| 71 | pointer-events: none; | 145 | pointer-events: none; |
| 72 | border: none; /* 启用点击穿透 */ | 146 | border: none; /* 启用点击穿透 */ |
| 73 | - "></iframe> | 147 | + " |
| 148 | + ></iframe> | ||
| 74 | </div> | 149 | </div> |
| 75 | </div> | 150 | </div> |
| 76 | </div> | 151 | </div> |
| @@ -78,23 +153,43 @@ | @@ -78,23 +153,43 @@ | ||
| 78 | <div class="edit"> | 153 | <div class="edit"> |
| 79 | <div class="edit-title"> | 154 | <div class="edit-title"> |
| 80 | <div class="edit-title-info"> | 155 | <div class="edit-title-info"> |
| 81 | - 共<span>{{ list.length }}</span>小题,卷面分<span>{{ sumValues() }}</span>分 | 156 | + 共<span>{{ list.length }}</span |
| 157 | + >小题,卷面分<span>{{ sumValues() }}</span | ||
| 158 | + >分 | ||
| 82 | </div> | 159 | </div> |
| 83 | <div class="edit-button"> | 160 | <div class="edit-button"> |
| 84 | - <el-button class="button-width" type="primary" @click="handleSava">保存试卷</el-button> | ||
| 85 | - <el-button class="button-width" plain @click="handleSava('print')">保存并打印</el-button> | ||
| 86 | - <el-button class="button-width" type="danger" plain @click="handleClear">清空题目</el-button> | ||
| 87 | - <el-button class="button-width" plain @click="handleSelect">继续选题</el-button> | 161 | + <el-button class="button-width" type="primary" @click="handleSava" |
| 162 | + >保存试卷</el-button | ||
| 163 | + > | ||
| 164 | + <el-button class="button-width" plain @click="handleSava('print')" | ||
| 165 | + >保存并打印</el-button | ||
| 166 | + > | ||
| 167 | + <el-button | ||
| 168 | + class="button-width" | ||
| 169 | + type="danger" | ||
| 170 | + plain | ||
| 171 | + @click="handleClear" | ||
| 172 | + >清空题目</el-button | ||
| 173 | + > | ||
| 174 | + <el-button class="button-width" plain @click="handleSelect" | ||
| 175 | + >继续选题</el-button | ||
| 176 | + > | ||
| 88 | </div> | 177 | </div> |
| 89 | </div> | 178 | </div> |
| 90 | <div class="edit-info"> | 179 | <div class="edit-info"> |
| 91 | <div class="title size color" style="padding: 15px 0 0 10px"> | 180 | <div class="title size color" style="padding: 15px 0 0 10px"> |
| 92 | 题目排序 | 181 | 题目排序 |
| 93 | - <span class="title size" style="color: #999999">(拖拽题号可拖拽排序)</span> | 182 | + <span class="title size" style="color: #999999" |
| 183 | + >(拖拽题号可拖拽排序)</span | ||
| 184 | + > | ||
| 94 | </div> | 185 | </div> |
| 95 | <!-- 外层容器,允许拖拽整个组 --> | 186 | <!-- 外层容器,允许拖拽整个组 --> |
| 96 | <draggable v-model="groups" group="groups" @end="onEnd"> | 187 | <draggable v-model="groups" group="groups" @end="onEnd"> |
| 97 | - <div v-for="(group, index) in groups" :key="group.id" class="group-item"> | 188 | + <div |
| 189 | + v-for="(group, index) in groups" | ||
| 190 | + :key="group.id" | ||
| 191 | + class="group-item" | ||
| 192 | + > | ||
| 98 | <!-- 每个组的标题 --> | 193 | <!-- 每个组的标题 --> |
| 99 | <div class="group-title"> | 194 | <div class="group-title"> |
| 100 | <div class="size" style="font-weight: 600"> | 195 | <div class="size" style="font-weight: 600"> |
| @@ -102,14 +197,28 @@ | @@ -102,14 +197,28 @@ | ||
| 102 | </div> | 197 | </div> |
| 103 | <div class="size"> | 198 | <div class="size"> |
| 104 | 单题分值: | 199 | 单题分值: |
| 105 | - <el-input-number size="mini" v-model="group.questionScore" :min="1" :max="30" | ||
| 106 | - style="width: 100px"></el-input-number> | 200 | + <el-input-number |
| 201 | + size="mini" | ||
| 202 | + v-model="group.questionScore" | ||
| 203 | + :min="1" | ||
| 204 | + :max="30" | ||
| 205 | + style="width: 100px" | ||
| 206 | + ></el-input-number> | ||
| 107 | </div> | 207 | </div> |
| 108 | </div> | 208 | </div> |
| 109 | 209 | ||
| 110 | <!-- 内部的题目列表,允许组内排序 --> | 210 | <!-- 内部的题目列表,允许组内排序 --> |
| 111 | - <draggable class="questions" v-model="group.subQuestionIds" group="questions" @end="onItemEnd(group)"> | ||
| 112 | - <div v-for="question in group.subQuestionIds" :key="question.id" class="question-item"> | 211 | + <draggable |
| 212 | + class="questions" | ||
| 213 | + v-model="group.subQuestionIds" | ||
| 214 | + group="questions" | ||
| 215 | + @end="onItemEnd(group)" | ||
| 216 | + > | ||
| 217 | + <div | ||
| 218 | + v-for="question in group.subQuestionIds" | ||
| 219 | + :key="question.id" | ||
| 220 | + class="question-item" | ||
| 221 | + > | ||
| 113 | {{ question.globalIndex }} | 222 | {{ question.globalIndex }} |
| 114 | </div> | 223 | </div> |
| 115 | </draggable> | 224 | </draggable> |
| @@ -157,6 +266,13 @@ export default { | @@ -157,6 +266,13 @@ export default { | ||
| 157 | return null; | 266 | return null; |
| 158 | }, | 267 | }, |
| 159 | }, | 268 | }, |
| 269 | + sectionId: { | ||
| 270 | + // 科目 | ||
| 271 | + type: [String, Number], | ||
| 272 | + default() { | ||
| 273 | + return null; | ||
| 274 | + }, | ||
| 275 | + }, | ||
| 160 | }, | 276 | }, |
| 161 | data() { | 277 | data() { |
| 162 | return { | 278 | return { |
| @@ -279,8 +395,9 @@ export default { | @@ -279,8 +395,9 @@ export default { | ||
| 279 | const iframeRef = this.$refs["iframe" + id][0]; // 获取对应的 iframe | 395 | const iframeRef = this.$refs["iframe" + id][0]; // 获取对应的 iframe |
| 280 | const doc = iframeRef.contentDocument || iframeRef.contentWindow.document; | 396 | const doc = iframeRef.contentDocument || iframeRef.contentWindow.document; |
| 281 | const body = iframeRef.contentWindow.document.body; | 397 | const body = iframeRef.contentWindow.document.body; |
| 398 | + body.style.overflowX = "hidden"; // 不允许出现横向滚动条 | ||
| 282 | const height = body.scrollHeight; // 获取内容的高度 | 399 | const height = body.scrollHeight; // 获取内容的高度 |
| 283 | - iframeRef.style.height = `${height}px`; // 设置 iframe 的高度 | 400 | + iframeRef.style.height = `${height + 20}px`; // 设置 iframe 的高度 |
| 284 | // 获取第一个P标签 | 401 | // 获取第一个P标签 |
| 285 | const firstP = doc.getElementsByTagName("p")[0]; | 402 | const firstP = doc.getElementsByTagName("p")[0]; |
| 286 | // 或者修改第一个 < p > 标签的内容; | 403 | // 或者修改第一个 < p > 标签的内容; |
| @@ -547,6 +664,7 @@ export default { | @@ -547,6 +664,7 @@ export default { | ||
| 547 | let param = { | 664 | let param = { |
| 548 | paperTitle: this.inputValue, | 665 | paperTitle: this.inputValue, |
| 549 | subjectName: this.subjectName, | 666 | subjectName: this.subjectName, |
| 667 | + sectionId: this.sectionId, | ||
| 550 | gradeId: this.gradeId, | 668 | gradeId: this.gradeId, |
| 551 | questions: this.groups.filter((item) => item.subQuestionIds.length > 0), | 669 | questions: this.groups.filter((item) => item.subQuestionIds.length > 0), |
| 552 | }; | 670 | }; |
| @@ -559,11 +677,13 @@ export default { | @@ -559,11 +677,13 @@ export default { | ||
| 559 | this.$emit("setQuestions"); | 677 | this.$emit("setQuestions"); |
| 560 | this.handleClose(); | 678 | this.handleClose(); |
| 561 | if (type) { | 679 | if (type) { |
| 562 | - this.$request.tPaperDetail({ | ||
| 563 | - paperId: res.data | ||
| 564 | - }).then(detail => { | ||
| 565 | - paperPrint(detail.data); | ||
| 566 | - }); | 680 | + this.$request |
| 681 | + .tPaperDetail({ | ||
| 682 | + paperId: res.data, | ||
| 683 | + }) | ||
| 684 | + .then((detail) => { | ||
| 685 | + paperPrint(detail.data); | ||
| 686 | + }); | ||
| 567 | } | 687 | } |
| 568 | } | 688 | } |
| 569 | }); | 689 | }); |
src/views/basic/askTestQuestion/wrongQuestion.vue
| @@ -507,7 +507,11 @@ export default { | @@ -507,7 +507,11 @@ export default { | ||
| 507 | 507 | ||
| 508 | // 获取科目列表 | 508 | // 获取科目列表 |
| 509 | async getSubject(params) { | 509 | async getSubject(params) { |
| 510 | + console.log(params, "params"); | ||
| 511 | + | ||
| 510 | let data = await this.$request.getSubjectList(params); | 512 | let data = await this.$request.getSubjectList(params); |
| 513 | + console.log(data, "--------"); | ||
| 514 | + | ||
| 511 | this.subjectList = data.data.subjectNames; | 515 | this.subjectList = data.data.subjectNames; |
| 512 | this.formData.subjectName = this.subjectList[0]; | 516 | this.formData.subjectName = this.subjectList[0]; |
| 513 | this.getClassList(); | 517 | this.getClassList(); |
| @@ -515,10 +519,15 @@ export default { | @@ -515,10 +519,15 @@ export default { | ||
| 515 | // 获取年级列表 | 519 | // 获取年级列表 |
| 516 | async getGradeList() { | 520 | async getGradeList() { |
| 517 | let data = await this.$request.getClassList(); | 521 | let data = await this.$request.getClassList(); |
| 522 | + console.log(data, "----------data"); | ||
| 523 | + | ||
| 518 | this.gradeList = Array.from( | 524 | this.gradeList = Array.from( |
| 519 | - new Map(data.data.list.map((item) => [item.section, item])).values() | 525 | + new Map(data.data.list.map((item) => [item.grade, item])).values() |
| 520 | ); | 526 | ); |
| 527 | + console.log(this.gradeList, "gradeList"); | ||
| 528 | + | ||
| 521 | this.formData.grade = this.gradeList[0].grade; | 529 | this.formData.grade = this.gradeList[0].grade; |
| 530 | + this.formData.sectionId = this.gradeList[0].section; | ||
| 522 | this.formData.gradeName = this.gradeList.find( | 531 | this.formData.gradeName = this.gradeList.find( |
| 523 | (itme) => itme.grade == this.formData.grade | 532 | (itme) => itme.grade == this.formData.grade |
| 524 | ).gradeName; | 533 | ).gradeName; |
| @@ -539,9 +548,12 @@ export default { | @@ -539,9 +548,12 @@ export default { | ||
| 539 | }, | 548 | }, |
| 540 | 549 | ||
| 541 | // 年级改变 | 550 | // 年级改变 |
| 542 | - changeGrade() { | 551 | + changeGrade(value) { |
| 552 | + let item = this.gradeList.find((subItem) => subItem.grade == value); | ||
| 553 | + this.formData.sectionId = item.section; | ||
| 554 | + this.formData.gradeName = item.gradeName; | ||
| 543 | this.queryLoading = true; | 555 | this.queryLoading = true; |
| 544 | - this.getSubject(); | 556 | + this.getSubject({ gradeName: this.formData.gradeName }); |
| 545 | }, | 557 | }, |
| 546 | // 科目改变 | 558 | // 科目改变 |
| 547 | changeSubject() { | 559 | changeSubject() { |
| @@ -569,6 +581,7 @@ export default { | @@ -569,6 +581,7 @@ export default { | ||
| 569 | const iframeRef = this.$refs["iframe" + index][0]; // 获取对应的 iframe | 581 | const iframeRef = this.$refs["iframe" + index][0]; // 获取对应的 iframe |
| 570 | const doc = iframeRef.contentDocument || iframeRef.contentWindow.document; | 582 | const doc = iframeRef.contentDocument || iframeRef.contentWindow.document; |
| 571 | const body = iframeRef.contentWindow.document.body; | 583 | const body = iframeRef.contentWindow.document.body; |
| 584 | + body.style.overflowX = "hidden"; // 不允许出现横向滚动条 | ||
| 572 | const height = body.scrollHeight; // 获取内容的高度 | 585 | const height = body.scrollHeight; // 获取内容的高度 |
| 573 | iframeRef.style.height = `${height}px`; // 设置 iframe 的高度 | 586 | iframeRef.style.height = `${height}px`; // 设置 iframe 的高度 |
| 574 | // 获取第一个P标签 | 587 | // 获取第一个P标签 |