Commit cb6ceaa8ef0af648a0a72fa3a7cde6d89b1e68b4

Authored by 梁保满
1 parent 3ca58022

添加备题,组卷参数调整

src/views/examinationPaper/add.vue
... ... @@ -394,7 +394,9 @@
394 394 v-if="subQuestions.screenshot && !subQuestions.screenshot.includes('html')"
395 395 :src="subQuestions.screenshot" alt="">
396 396 <p style="textAlign:center"><el-button type="primary" round size="mini" icon="el-icon-upload"
397   - @click="openStem(subQuestions, index, indexs, 1)">{{subQuestions.answerScreenshot?"重新选择图片":"上传题干"}}</el-button></p>
  397 + @click="openStem(subQuestions, index, indexs, 1)">{{ subQuestions.answerScreenshot ? "重新选择图片"
  398 + : "上传题干" }}</el-button>
  399 + </p>
398 400 </div>
399 401 <el-button slot="reference" class="icon-tickets" type="primary" circle size="mini"
400 402 icon="el-icon-tickets"></el-button>
... ... @@ -410,7 +412,9 @@
410 412 v-if="subQuestions.answerScreenshot && !subQuestions.answerScreenshot.includes('html')"
411 413 :src="subQuestions.answerScreenshot" alt="">
412 414 <p style="textAlign:center"><el-button type="primary" round size="mini" icon="el-icon-upload"
413   - @click="openStem(subQuestions, index, indexs, 2)">{{subQuestions.answerScreenshot?"重新选择图片":"上传题目解析"}}</el-button></p>
  415 + @click="openStem(subQuestions, index, indexs, 2)">{{ subQuestions.answerScreenshot ? "重新选择图片"
  416 + : "上传题目解析" }}</el-button>
  417 + </p>
414 418 </div>
415 419 <el-button slot="reference" class="icon-tickets" type="primary" circle size="mini"
416 420 icon="el-icon-tickets"></el-button>
... ... @@ -542,7 +546,8 @@
542 546 <el-form ref="form" :model="stem" label-width="160px">
543 547 <el-form-item label="知识点:">
544 548 <el-cascader size="small" filterable :show-all-levels="false" collapse clearable placeholder="选择知识点"
545   - v-model="stem.knowledge" :options="knowledgeData" :props="{ expandTrigger: 'hover' }"></el-cascader>
  549 + v-model="stem.knowledge" :options="knowledgeData"
  550 + :props="{ expandTrigger: 'hover', multiple: true }"></el-cascader>
546 551 </el-form-item>
547 552 </el-form>
548 553 </div>
... ... @@ -742,13 +747,7 @@ export default {
742 747  
743 748 this.dialogStem = true;
744 749 },
745   - // 知识点
746   - openKnowledge(obj, index, indexs) {
747   - this.stem.index = index;
748   - this.stem.indexs = indexs;
749   - this.stem.knowledge = (obj.knowledge && obj.knowledge.split(",")) || [];
750   - this.dialogKnowledge = true;
751   - },
  750 +
752 751 // 图片上传成功
753 752 upSuccess(res) {
754 753 if (res && res.status == 0) {
... ... @@ -767,11 +766,26 @@ export default {
767 766 upError(res) {
768 767 this.$message.error("上传失败");
769 768 },
770   - // 知识点
  769 + // 打开知识点
  770 + openKnowledge(obj, index, indexs) {
  771 + this.stem.index = index;
  772 + this.stem.indexs = indexs;
  773 + let knowledgeArr = (obj.knowledge && obj.knowledge.split(",")) || [];
  774 + console.log(obj.knowledge)
  775 + console.log(knowledgeArr)
  776 + this.stem.knowledge = knowledgeArr.map(item => {
  777 + return item.split("#")
  778 + })
  779 + this.dialogKnowledge = true;
  780 + },
  781 + // 选择知识点
771 782 setKnowledge() {
  783 + let knowledge = this.stem.knowledge.map(item => {
  784 + return item.join("#")
  785 + })
772 786 this.form.questionList[this.stem.index].subQuestions[
773 787 this.stem.indexs
774   - ].knowledge = this.stem.knowledge.join(",");
  788 + ].knowledge = knowledge.join(",")
775 789 this.dialogKnowledge = false;
776 790 },
777 791 //end
... ... @@ -1550,13 +1564,12 @@ export default {
1550 1564 let subQuestions =
1551 1565 item.subQuestions?.map((items) => {
1552 1566 return {
1553   - questionType: items.questionType,
1554   - score: items.score,
1555   - partScore: items.partScore,
  1567 + ...items,
1556 1568 selectNum: items.answerOptions.split(",").length,
1557 1569 answerOptions: items.answerOptions || "A,B,C,D",
1558   - correctAnswer: items.correctAnswer,
1559 1570 screenshot: items.screenshot || "",
  1571 + correctAnswer: items.correctAnswer || "",
  1572 + knowledge: items.knowledge || "",
1560 1573 };
1561 1574 }) || [];
1562 1575 return {
... ...
src/views/examinationPaper/addAsk.vue
... ... @@ -56,6 +56,8 @@
56 56 <div class="qs-partScore">漏选得分</div>
57 57 <div class="qs-options qs-options2">选项设置</div>
58 58 <div class="qs-upload">提干</div>
  59 + <div class="qs-upload">题目解析</div>
  60 + <div class="qs-upload">知识点</div>
59 61 <div class="qs-set"></div>
60 62 </li>
61 63 <li v-for="(subQuestions, index) in form.questionList" :key="index">
... ... @@ -116,12 +118,34 @@
116 118 v-if="subQuestions.screenshot && !subQuestions.screenshot.includes('html')"
117 119 :src="subQuestions.screenshot" alt="">
118 120 <p style="textAlign:center"><el-button type="primary" round size="mini" icon="el-icon-upload"
119   - @click="openStem(subQuestions, index)">重新选择图片</el-button></p>
  121 + @click="openStem(subQuestions, index, 1)">重新选择图片</el-button></p>
120 122 </div>
121 123 <el-button slot="reference" class="icon-tickets" type="primary" circle size="mini"
122 124 icon="el-icon-tickets"></el-button>
123 125 </el-popover>
124 126 </div>
  127 + <div class="qs-upload">
  128 + <el-popover placement="right" width="400" trigger="click">
  129 + <div class="screenshot-box">
  130 + <iframe class="screenshot"
  131 + v-if="subQuestions.answerScreenshot && subQuestions.answerScreenshot.includes('html')"
  132 + :src="subQuestions.answerScreenshot"></iframe>
  133 + <img class="screenshot screenshot-img"
  134 + v-if="subQuestions.answerScreenshot && !subQuestions.answerScreenshot.includes('html')"
  135 + :src="subQuestions.answerScreenshot" alt="">
  136 + <p style="textAlign:center"><el-button type="primary" round size="mini" icon="el-icon-upload"
  137 + @click="openStem(subQuestions, index, 2)">{{ subQuestions.answerScreenshot ? "重新选择图片" :
  138 + "上传题目解析" }}</el-button>
  139 + </p>
  140 + </div>
  141 + <el-button slot="reference" class="icon-tickets" type="primary" circle size="mini"
  142 + icon="el-icon-tickets"></el-button>
  143 + </el-popover>
  144 + </div>
  145 + <div class="qs-upload">
  146 + <el-button type="primary" circle size="mini" icon="el-icon-price-tag"
  147 + @click="openKnowledge(subQuestions, index)"></el-button>
  148 + </div>
125 149 <div class="qs-set">
126 150 <el-popconfirm title="确定删除这道题吗?" @confirm="delTabData(index)">
127 151 <el-button slot="reference" class="delete" type="danger" size="mini" circle
... ... @@ -184,20 +208,44 @@
184 208 <el-button round @click="step = 0">上一步</el-button>
185 209 <el-button type="primary" round @click="toStep(2)">下一步</el-button>
186 210 </div>
187   - <el-dialog :close-on-click-modal="false" title="上传题干" :visible.sync="dialogStem" v-if="dialogStem" width="500">
  211 + <el-dialog :close-on-click-modal="false" :title="stem.type == 1 ? '上传题干' : '上传题目解析'" :visible.sync="dialogStem"
  212 + v-if="dialogStem" width="500">
188 213 <div class="upload-box">
189   - <img v-if="stem.screenshot && !stem.screenshot.includes('html')" :src="stem.screenshot" class="stem-pic" />
  214 + <template v-show="stem.type == 1">
  215 + <img v-if="stem.screenshot && !stem.screenshot.includes('html')" :src="stem.screenshot" class="stem-pic" />
  216 + </template>
  217 + <template v-show="stem.type == 2">
  218 + <img v-if="stem.answerScreenshot && !stem.answerScreenshot.includes('html')" :src="stem.answerScreenshot"
  219 + class="stem-pic" />
  220 + </template>
190 221 <el-upload class="upload-demo" action="http://121.40.127.171/file/uploadImg" :limit="1"
191 222 :on-success="upSuccess" :on-error="upError" accept="image/*">
192   - <el-button size="small" type="primary">{{
  223 + <el-button v-show="stem.type == 1" size="small" type="primary">{{
193 224 stem.screenshot && !stem.screenshot.includes('html') ? "重新上传" : "选择照片"
194 225 }}</el-button>
  226 + <el-button v-show="stem.type == 2" size="small" type="primary">{{
  227 + stem.answerScreenshot && !stem.answerScreenshot.includes('html') ? "重新上传" : "选择照片"
  228 + }}</el-button>
195 229 </el-upload>
196 230 </div>
197 231 <div slot="footer">
198 232 <el-button @click="dialogStem = false">确定</el-button>
199 233 </div>
200 234 </el-dialog>
  235 + <el-dialog :close-on-click-modal="false" title="知识点" :visible.sync="dialogKnowledge" width="500">
  236 + <div>
  237 + <el-form ref="form" :model="stem" label-width="160px">
  238 + <el-form-item label="知识点:">
  239 + <el-cascader size="small" filterable :show-all-levels="false" collapse clearable placeholder="选择知识点"
  240 + v-model="stem.knowledge" :options="knowledgeData" :props="{ expandTrigger: 'hover' }"></el-cascader>
  241 + </el-form-item>
  242 + </el-form>
  243 + </div>
  244 + <div slot="footer">
  245 + <el-button @click="dialogKnowledge = false">取 消</el-button>
  246 + <el-button type="primary" @click="setKnowledge">确 定</el-button>
  247 + </div>
  248 + </el-dialog>
201 249 </div>
202 250 <div v-show="step == 2">
203 251 <div class="answer-title">
... ... @@ -224,15 +272,28 @@
224 272  
225 273 <script>
226 274 import { deepClone, checkAnswer } from "utils";
227   -const subQuesOptions = {
228   - questionType: 2,
229   - score: 1,
230   - partScore: 0,
231   - selectNum: 4,
232   - answerOptions: "A,B,C,D",
233   - correctAnswer: "",
234   -};
  275 +import knowledgeList from "assets/js/knowledgeList.js";
235 276 export default {
  277 + computed: {
  278 + // 知识点列表 根据学段-科目筛选
  279 + knowledgeData: function () {
  280 + let jsons = []
  281 + if (this.form.gradeName && this.form.subjectName) {
  282 + let sectionName = ""
  283 + this.gradeClassList.map(item => {
  284 + if (this.form.gradeName == item.gradeName) {
  285 + sectionName = item.sectionName
  286 + }
  287 + })
  288 + if (sectionName && Object.keys(this.knowledgeList).includes(sectionName)) {
  289 + if (Object.keys(this.knowledgeList[sectionName]).includes(this.form.subjectName)) {
  290 + jsons = this.knowledgeList[sectionName][this.form.subjectName]
  291 + }
  292 + }
  293 + }
  294 + return jsons
  295 + },
  296 + },
236 297 watch: {
237 298 step: function () {
238 299 this.$nextTick(function () {
... ... @@ -244,6 +305,7 @@ export default {
244 305 return {
245 306 role: "",
246 307 step: 0, //步骤
  308 + gradeClassList: [], //年级-班级数据
247 309 gradeList: [], //年级
248 310 subjectList: [], //科目
249 311 form: {
... ... @@ -274,6 +336,7 @@ export default {
274 336 },
275 337 tagList: [],
276 338 diaSetAns: false, //答案开关
  339 + dialogKnowledge: false, //知识点
277 340 dialogStem: false, //截图开关
278 341 formAns: {
279 342 index: 0, //相同题目最后一位题目的位置
... ... @@ -283,8 +346,11 @@ export default {
283 346 answerList: "", //答案列表-字符串
284 347 },
285 348 stem: {
  349 + type: 1,
286 350 index: 0, //大题位置
287 351 screenshot: "", //题干图片地址
  352 + answerScreenshot: "", //题目解析图片地址
  353 + knowledge: [], //知识点
288 354 },
289 355 type: 1, //1-创建,2-复制答题卡
290 356 questionOptions: [
... ... @@ -294,6 +360,7 @@ export default {
294 360 { label: "主观题", value: 5 },
295 361 ],
296 362 rightOptions: ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"],
  363 + knowledgeList: { ...knowledgeList }
297 364 };
298 365 },
299 366 async created() {
... ... @@ -321,16 +388,28 @@ export default {
321 388 methods: {
322 389 // v1.5
323 390 //上传截图
324   - openStem(obj, index) {
  391 + openStem(obj, index, type) {
325 392 this.stem.index = index;
326 393 this.stem.screenshot = obj.screenshot || "";
  394 + if (type == 1) {
  395 + this.stem.screenshot = obj.screenshot || "";
  396 + this.stem.answerScreenshot = "";
  397 + } else {
  398 + this.stem.answerScreenshot = obj.answerScreenshot || "";
  399 + this.stem.screenshot = "";
  400 + }
327 401 this.dialogStem = true;
328 402 },
329 403 //图片上传成功
330 404 upSuccess(res, file) {
331 405 if (res && res.status == 0) {
332   - this.stem.screenshot = res.data.url;
333   - this.form.questionList[this.stem.index].screenshot = this.stem.screenshot;
  406 + if (this.stem.type == 1) {
  407 + this.stem.screenshot = res.data.url;
  408 + this.form.questionList[this.stem.index].screenshot = this.stem.screenshot;
  409 + } else {
  410 + this.stem.answerScreenshot = res.data.url;
  411 + this.form.questionList[this.stem.index].answerScreenshot = this.stem.answerScreenshot;
  412 + }
334 413 this.$message.success("上传成功");
335 414 } else {
336 415 this.$message.error(res.info);
... ... @@ -340,6 +419,24 @@ export default {
340 419 upError(res) {
341 420 this.$message.error("上传失败");
342 421 },
  422 + // 知识点
  423 + openKnowledge(obj, index) {
  424 + this.stem.index = index;
  425 + let knowledgeArr = (obj.knowledge && obj.knowledge.split(",")) || [];
  426 + this.stem.knowledge = knowledgeArr.map(item => {
  427 + return item.split("#")
  428 + })
  429 + this.dialogKnowledge = true;
  430 + },
  431 + // 知识点
  432 + setKnowledge() {
  433 + let knowledge = this.stem.knowledge.join(",");
  434 + this.form.questionList[this.stem.index].knowledge = knowledge.map(item => {
  435 + item = item.join("#")
  436 + })
  437 + this.dialogKnowledge = false;
  438 + },
  439 +
343 440 //end
344 441 linkBack() {
345 442 this.$confirm(
... ... @@ -579,7 +676,7 @@ export default {
579 676 toStep(step) {
580 677 this.formatQuestionList();
581 678 this.step = step;
582   - if(step==1){
  679 + if (step == 1) {
583 680 this.formateQuestion()
584 681 }
585 682 },
... ... @@ -706,9 +803,24 @@ export default {
706 803  
707 804 async _GradeList() {
708 805 //查询年级列表
709   - const { data, status, info } = await this.$request.fetchGradeList();
  806 + // const { data, status, info } = await this.$request.fetchGradeList();
  807 + // 查找班级
  808 +
  809 + let fetchClassList =
  810 + this.role == "ROLE_PERSONAL"
  811 + ? this.$request.pClassList
  812 + : this.$request.fetchClassList;
  813 +
  814 + const { data, status, info } = await fetchClassList();
710 815 if (status == 0) {
711   - this.gradeList = (data.gradeNames && [...data.gradeNames]) || [];
  816 + this.gradeClassList = data.list?.map((item) => {
  817 + console.log(!this.gradeList.includes(item.gradeName))
  818 + if (!this.gradeList.includes(item.gradeName)) {
  819 + this.gradeList.push(item.gradeName)
  820 + }
  821 + return item
  822 + })
  823 + // this.gradeList = (data.gradeNames && [...data.gradeNames]) || [];
712 824 if (this.type != 2) {
713 825 this.form.gradeName = this.gradeList[0];
714 826 }
... ... @@ -788,14 +900,12 @@ export default {
788 900 }
789 901 this.form.questionList = data.questionList?.map((item) => {
790 902 return {
791   - questionTitle: item.questionTitle,
792   - questionType: item.questionType,
793   - score: item.score,
794   - partScore: item.partScore,
795   - selectNum: item.answerOptions.split(",").length,
796   - answerOptions: item.answerOptions || "A,B,C,D",
797   - correctAnswer: item.correctAnswer,
798   - screenshot: item.screenshot || "",
  903 + ...items,
  904 + selectNum: items.answerOptions.split(",").length,
  905 + answerOptions: items.answerOptions || "A,B,C,D",
  906 + screenshot: items.screenshot || "",
  907 + correctAnswer: items.correctAnswer || "",
  908 + knowledge: items.knowledge || "",
799 909 }
800 910 });
801 911 }
... ... @@ -1125,9 +1235,11 @@ export default {
1125 1235 .qs-options {
1126 1236 flex: 1;
1127 1237 }
1128   - .qs-upload{
  1238 +
  1239 + .qs-upload {
1129 1240 width: 60px;
1130 1241 }
  1242 +
1131 1243 .qs-set {
1132 1244 width: 60px;
1133 1245 }
... ...