From b66dc32f331b455ed1135235bbce14fc84a2f6fe Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期三, 26 六月 2024 16:56:20 +0800 Subject: [PATCH] 阅卷前端样式 --- src/views/exam/paper/list.vue | 4 src/views/answer/components/QuestionAnswerShow.vue | 10 + src/views/train/data-list/index.vue | 50 --------- src/views/train/index.vue | 34 ++++++ src/views/exam/exam/MarkPaperDetail.vue | 164 +++++++++++++++++++++++++++----- 5 files changed, 179 insertions(+), 83 deletions(-) diff --git a/src/views/answer/components/QuestionAnswerShow.vue b/src/views/answer/components/QuestionAnswerShow.vue index 7a0b0af..f94f3ad 100644 --- a/src/views/answer/components/QuestionAnswerShow.vue +++ b/src/views/answer/components/QuestionAnswerShow.vue @@ -1,6 +1,7 @@ <template> <div v-loading="qLoading" style="line-height:1.8"> <div v-if="qType == 1 || qType == 2 || qType == 3 || qType == 4 || qType == 5 || qType == 6 || qType == 7 || qType == 8"> + <!-- 閫夋嫨鎴栬闊� --> <div v-if="qType == 1 || qType == 6"> <div class="q-title" v-html="question.title" /> <div class="q-content"> @@ -12,6 +13,7 @@ </el-radio-group> </div> </div> + <!-- 澶氶�� --> <div v-else-if="qType == 2"> <div class="q-title" v-html="question.title" /> <div class="q-content"> @@ -23,6 +25,7 @@ </el-checkbox-group> </div> </div> + <!-- 鍒ゆ柇 --> <div v-else-if="qType == 3"> <div class="q-title" v-html="question.title" style="display: inline;margin-right: 10px" /> <span style="padding-right: 10px;">(</span> @@ -33,6 +36,7 @@ </el-radio-group> <span style="padding-left: 10px;">)</span> </div> + <!-- 濉┖ --> <div v-else-if="qType == 4"> <div class="q-title" v-html="question.title" /> <div v-if="answer.contentArray !== null"> @@ -42,6 +46,7 @@ </el-form-item> </div> </div> + <!-- 绠�绛斻�佽绠椼�佸垎鏋� --> <div v-else-if="qType == 5 || qType == 7 || qType == 8"> <div class="q-title" v-html="question.title" /> <div> @@ -69,13 +74,16 @@ </div> <div class="question-answer-show-item"> <span class="question-show-item">姝g‘绛旀锛�</span> + <!-- 閫夋嫨銆佸閫夈�佺畝绛斻�佽闊炽�佽绠椼�佸垎鏋� --> <span v-if="qType == 1 || qType == 2 || qType == 5 || qType == 6 || qType == 7 || qType == 8" v-html="question.correct" class="q-item-span-content" /> + <!-- 鍒ゆ柇 --> <span v-if="qType == 3" v-html="trueFalseFormatter(question)" class="q-item-span-content" /> + <!-- 濉┖ --> <span v-if="qType == 4">{{ question.correctArray }}</span> </div> <div v-if = "answer.doRight == null"> <span style="color:#ECAB3C;">{{'鎵规敼锛�'}}</span> - <el-input-number size="mini" v-model="question.markScore" :precision="1" :min="0" :max="parseInt(question.score)" ></el-input-number> + <el-input-number size="mini" v-model="answer.score" :precision="1" :min="0" :max="parseInt(question.score)" ></el-input-number> </div> </div> <div v-else> diff --git a/src/views/exam/exam/MarkPaperDetail.vue b/src/views/exam/exam/MarkPaperDetail.vue index 283198e..890b58b 100644 --- a/src/views/exam/exam/MarkPaperDetail.vue +++ b/src/views/exam/exam/MarkPaperDetail.vue @@ -1,21 +1,44 @@ <template> - <div> - <el-row style="text-align: center;margin-top: 20px;margin-bottom: 20px; font-size: 28px">璇枃鑰冭瘯</el-row> - <el-row :gutter="20"> - <el-col :span="8" class="info"> - <span class="exam-info">瀛﹀憳濮撳悕锛�</span> - <span class="exam-info">{{ userName }}</span> - </el-col> - <el-col :span="8" class="info"> - <span class="exam-info">浜ゅ嵎鏃堕棿锛�</span> - <span class="exam-info">{{ examInfo.updateTime }}</span> - </el-col> - <el-col :span="8" class="info"> - <span class="exam-info">瀹屾垚鑰楁椂锛�</span> - <span class="exam-info">{{ examInfo.doTime }}</span> - </el-col> - </el-row> - <el-main> + <div class="paper-container"> + <div class="paper-card"> + <el-card style="height: 100vh"> + <el-row style="text-align: left; margin-bottom : 20px; font-size: 20px">璇枃鑰冭瘯</el-row> + <el-row> + <el-col class="info"> + <span class="exam-info">瀛﹀憳濮撳悕锛�</span> + <span class="exam-info">{{ userName }}</span> + </el-col> + </el-row> + <el-row> + <el-col class="info"> + <span class="exam-info">浜ゅ嵎鏃堕棿锛�</span> + <span class="exam-info">{{ examInfo.updateTime }}</span> + </el-col> + </el-row> + <el-row> + <el-col class="info"> + <span class="exam-info">瀹屾垚鑰楁椂锛�</span> + <span class="exam-info">{{ examInfo.doTime }}</span> + </el-col> + </el-row> + <el-row> + <el-col class="info"> + <span class="exam-info">寰楀垎锛�</span> + <span class="exam-info">{{ 30 + ' / ' + 70 }}</span> + </el-col> + </el-row> + <el-divider></el-divider> + <el-row class="do-exam-title"> + <el-col :span="24"> + <span :key="item.itemOrder" v-for="item in answer.answerItems"> + <el-tag :type="questionDoRightTag(item.doRight)" class="do-exam-title-tag" + @click="goAnchor('#question-' + item.itemOrder)">{{ item.itemOrder }}</el-tag> + </span> + </el-col> + </el-row> + </el-card> + </div> + <div class="paper-form"> <el-form :model="form" ref="form" v-loading="formLoading" label-width="100px"> <el-row :key="index" v-for="(titleItem, index) in form.titleItems"> <h3>{{ titleItem.name }}</h3> @@ -29,7 +52,7 @@ </el-card> </el-row> </el-form> - </el-main> + </div> </div> </template> @@ -37,6 +60,7 @@ import { getStudentExam } from '@/api/exam' import QuestionAnswerShow from '@/views/answer/components/QuestionAnswerShow' import examPaperAnswerApi from '@/api/examPaperAnswer' +import { mapGetters, mapState } from 'vuex' export default { name: 'MarkPaperDetail', @@ -50,9 +74,9 @@ 'code': 1, 'message': '鎴愬姛', 'data': { 'paper': { 'id': 30, - 'level': 1, - 'subjectId': 4, 'paperType': 7, + 'score': '15', + 'classes': null, 'name': '杩欐槸涓�涓祴璇曡瘯鍗�', 'suggestTime': 12, 'limitDateTime': null, @@ -200,6 +224,48 @@ 'knowledgeIdList': [8, 9] }] }, { + 'name': '濉┖棰�', + 'questionItems': [{ + 'id': 2, + 'questionType': 4, + 'title': '涓崕鍥涘ぇ鍚嶈憲閮芥湁', + 'gradeLevel': 1, + 'analyze': '棰樼洰姣旇緝绠�鍗曪紝鑷鍒嗘瀽', + 'correct': null, + 'correctArray': '绾㈡ゼ姊�,鐧芥ゼ姊�,闈掓ゼ姊�,缁挎ゼ姊�', + 'score': '10', + 'difficult': 3, + 'itemOrder': 7, + 'knowledgeIdList': [8, 9], + 'items': [ + { prefix: '1', content: '绾㈡ゼ姊�' }, + { prefix: '2', content: '鐧芥ゼ姊�' }, + { prefix: '3', content: '闈掓ゼ姊�' }, + { prefix: '4', content: '缁挎ゼ姊�' } + ] + } + ] + }, { + 'name': '璇煶棰�', + 'questionItems': [{ + 'id': 55, + 'questionType': 1, + 'title': '鍚煶棰戝洖绛斿嚭灏忔槑浠婂ぉ鍚冪殑浠�涔�', + 'items': [ + { 'prefix': 'A', 'content': '鐣寗', 'score': null, 'itemUuid': null }, + { 'prefix': 'B', 'content': '鐧借彍', 'score': null, 'itemUuid': null }, + { 'prefix': 'C', 'content': '棣欒晧', 'score': null, 'itemUuid': null }, + { 'prefix': 'D', 'content': '鑿犺悵', 'score': null, 'itemUuid': null } + ], + 'analyze': '棰樼洰姣旇緝绠�鍗曪紝鑷鍒嗘瀽', + 'correctArray': null, + 'correct': 'A', + 'score': '2.5', + 'difficult': 3, + 'itemOrder': 8, + 'knowledgeIdList': [8, 9] + }] + }, { 'name': '绠�绛旈', 'questionItems': [{ 'id': 1, @@ -211,13 +277,11 @@ 'correct': '绾㈡ゼ姊︺�佽タ娓歌銆佹按娴掍紶銆佷笁鍥芥紨涔�', 'score': '10', 'difficult': 3, - 'itemOrder': 7, + 'itemOrder': 9, 'knowledgeIdList': [8, 9] } ] }], - 'score': '15', - 'classes': null }, 'answer': { 'id': 9, @@ -279,11 +343,29 @@ 'score': '2.5', 'questionScore': '2.5' }, { + 'id': 33, + 'questionId': 2, + 'doRight': null, + 'content': 'A', + 'itemOrder': 7, + 'contentArray': ['绾㈤棬姊�', '涓夊浗婕旂粠', '姘村6杞�'], + 'score': '2.5', + 'questionScore': '2.5' + }, { + 'id': 25, + 'questionId': 55, + 'doRight': true, + 'content': 'A', + 'itemOrder': 8, + 'contentArray': null, + 'score': '2.5', + 'questionScore': '2.5' + }, { 'id': 31, 'questionId': 1, 'doRight': null, 'content': '绾㈡ゼ姊�.......', - 'itemOrder': 6, + 'itemOrder': 9, 'questionScore': '10' }], 'doTimeStr': '26绉�' @@ -323,27 +405,53 @@ } }, methods: { + goAnchor (selector) { + this.$el.querySelector(selector).scrollIntoView({ behavior: 'instant', block: 'center', inline: 'nearest' }) + }, + questionDoRightTag (status) { + return this.enumFormat(this.doRightTag, status) + }, getStudentPaper () { getStudentExam(this.examInfo.examId, this.userId).then(res => { this.examInfo = res.data.data }) } + }, + computed: { + ...mapGetters('enumItem', ['enumFormat']), + ...mapState('enumItem', { + doRightTag: state => state.exam.question.answer.doRightTag + }) } } </script> <style scoped> -.question-warp { - margin-top: 50px; +.paper-container { + display: flex; + flex-direction: row; + height: 100%; + padding: 20px; + min-height: 100%; } -.exam-info { +.paper-card { + position: fixed; + width: 270px; +} + +.paper-form { + flex: 1; /* 鍗犳嵁鍓╀綑绌洪棿 */ + margin-left: 300px; } .info { display: flex; flex-direction: row; - justify-content: center; + justify-content: left; + font-size: 14px; + margin-top: 10px; } + </style> diff --git a/src/views/exam/paper/list.vue b/src/views/exam/paper/list.vue index bc8a314..b70a611 100644 --- a/src/views/exam/paper/list.vue +++ b/src/views/exam/paper/list.vue @@ -123,12 +123,12 @@ }) }, // 鑾峰彇绉戠洰 - getSubjects() { + getSubjects () { subjectApi.list().then(re => { this.subjects = re.data }) }, - translate(subjectId) { + translate (subjectId) { const subject = this.subjects.find(subject => subject.id == subjectId); return subject ? subject.name : '鏈煡'; } diff --git a/src/views/train/data-list/index.vue b/src/views/train/data-list/index.vue index db2b93a..8ae8f7f 100644 --- a/src/views/train/data-list/index.vue +++ b/src/views/train/data-list/index.vue @@ -38,42 +38,7 @@ export default { props: { - tableData: [ - { - id: 1, - meetName: '鑻辫', - startTime: '2024-6-13 8:00', - endTime: '2024-6-13 8:00', - teacherName: '鍏宠�佸笀' - }, - { - id: 2, - meetName: '璇枃', - startTime: '2024-6-13 8:00', - endTime: '2024-6-13 8:00', - teacherName: '娴嬭瘯娴嬭瘯' - }, - { - id: 3, - meetName: '鏁板', - startTime: '2024-6-13 8:00', - endTime: '2024-6-13 8:00', - teacherName: '娴嬭瘯娴嬭瘯' - }, - { - id: 4, - meetName: '鏈哄満鑸┖', - startTime: '2024-6-13 8:00', - endTime: '2024-6-13 8:00', - teacherName: '娴嬭瘯娴嬭瘯' - }, - { - id: 5, - startTime: '2024-6-13 8:00', - endTime: '2024-6-13 8:00', - teacherName: '娴嬭瘯娴嬭瘯', - } - ] + tableData: [] }, methods: { handleUpdate (item) { @@ -83,18 +48,7 @@ this.$emit('remove',item) }, start (item) { - let routeUrl = this.$router.resolve({ - path: "/meet", - query: { - domain: 'ycl.easyblog.vip:8443/' + item.id, - roomName: item.meetName, - userInfoStr: JSON.stringify({ - displayName: item.teacherName - }) - } - }) - window.open(routeUrl.href, '_blank') - // window.open('https://ycl.easyblog.vip:8443/test'); + this.$emit('start',item) } } }; diff --git a/src/views/train/index.vue b/src/views/train/index.vue index 6e982e3..9a574a4 100644 --- a/src/views/train/index.vue +++ b/src/views/train/index.vue @@ -26,7 +26,7 @@ <div class="card-main flex-1 my-5 relative"> <div class="main-content absolute top-0 bottom-0 left-0 right-0"> - <DataList :tableData="tableData" @handleUpdate="handleUpdate" @remove = "remove"></DataList> + <DataList :tableData="tableData" @handleUpdate="handleUpdate" @remove = "remove" @start = "start"></DataList> <div id="meet" ref="meet"></div> </div> </div> @@ -39,10 +39,10 @@ <!-- 娣诲姞浼氳瀵硅瘽妗� --> <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body> <el-form label-width="80px" ref="form" :model="form" :rules="rules" > - <el-form-item label="鎴块棿鍚嶏細" prop="meetName" > + <el-form-item label="鎴块棿鍚�" prop="meetName" > <el-input v-model="form.meetName" placeholder="璇疯緭鍏ユ埧闂村悕" style="width: 300px"></el-input> </el-form-item> - <el-form-item label="鐝骇锛�" > + <el-form-item label="鐝骇" > <el-select v-model="form.classesId" placeholder="鐝骇" @@ -62,6 +62,11 @@ end-placeholder="缁撴潫鏃ユ湡"> </el-date-picker> </el-form-item> + <el-form-item label="鐘舵��" > + <el-radio v-model="form.status" :label="0">寰呭紑濮�</el-radio> + <el-radio v-model="form.status" :label="1">杩涜涓�</el-radio> + <el-radio v-model="form.status" :label="2">宸茬粨鏉�</el-radio> + </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> <el-button type="primary" @click="submitForm">纭� 瀹�</el-button> @@ -80,7 +85,6 @@ import Pagination from '@/components/Pagination' import { getMeets,addMeet,editMeet,deleteMeetById } from '@/api/meet' import { myClasses } from '@/api/classes' - export default { components: { DataList,Pagination}, @@ -132,6 +136,28 @@ } }) }, + start (item) { + // 淇敼鎴块棿鐘舵�佷负杩涜涓� + item.status = 1 + editMeet(item).then(re => { + if (re.data.code === 1) { + this.getList() + let routeUrl = this.$router.resolve({ + path: "/meet", + query: { + domain: 'ycl.easyblog.vip:8443/' + item.id, + roomName: item.meetName, + userInfoStr: JSON.stringify({ + displayName: item.teacherName + }) + } + }) + window.open(routeUrl.href, '_blank') + } else { + this.$message.error(re.data.message) + } + }) + }, handleUpdate (item) { this.form = { ...item, -- Gitblit v1.8.0