| | |
| | | <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"> |
| | |
| | | </el-radio-group> |
| | | </div> |
| | | </div> |
| | | <!-- 多选 --> |
| | | <div v-else-if="qType == 2"> |
| | | <div class="q-title" v-html="question.title" /> |
| | | <div class="q-content"> |
| | |
| | | </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> |
| | |
| | | </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"> |
| | |
| | | </el-form-item> |
| | | </div> |
| | | </div> |
| | | <!-- 简答、计算、分析 --> |
| | | <div v-else-if="qType == 5 || qType == 7 || qType == 8"> |
| | | <div class="q-title" v-html="question.title" /> |
| | | <div> |
| | |
| | | </div> |
| | | <div class="question-answer-show-item"> |
| | | <span class="question-show-item">正确答案:</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> |
| | |
| | | <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> |
| | |
| | | </el-card> |
| | | </el-row> |
| | | </el-form> |
| | | </el-main> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | 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', |
| | |
| | | 'code': 1, 'message': '成功', 'data': { |
| | | 'paper': { |
| | | 'id': 30, |
| | | 'level': 1, |
| | | 'subjectId': 4, |
| | | 'paperType': 7, |
| | | 'score': '15', |
| | | 'classes': null, |
| | | 'name': '这是一个测试试卷', |
| | | 'suggestTime': 12, |
| | | 'limitDateTime': null, |
| | |
| | | '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, |
| | |
| | | 'correct': '红楼梦、西游记、水浒传、三国演义', |
| | | 'score': '10', |
| | | 'difficult': 3, |
| | | 'itemOrder': 7, |
| | | 'itemOrder': 9, |
| | | 'knowledgeIdList': [8, 9] |
| | | } |
| | | ] |
| | | }], |
| | | 'score': '15', |
| | | 'classes': null |
| | | }, |
| | | 'answer': { |
| | | 'id': 9, |
| | |
| | | 'score': '2.5', |
| | | 'questionScore': '2.5' |
| | | }, { |
| | | 'id': 33, |
| | | 'questionId': 2, |
| | | 'doRight': null, |
| | | 'content': 'A', |
| | | 'itemOrder': 7, |
| | | 'contentArray': ['红门梦', '三国演绎', '水壶转'], |
| | | '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秒' |
| | |
| | | } |
| | | }, |
| | | 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> |
| | |
| | | }) |
| | | }, |
| | | // 获取科目 |
| | | 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 : '未知'; |
| | | } |
| | |
| | | |
| | | 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) { |
| | |
| | | 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) |
| | | } |
| | | } |
| | | }; |
| | |
| | | |
| | | <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> |
| | |
| | | <!-- 添加会议对话框 --> |
| | | <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="班级" |
| | |
| | | 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> |
| | |
| | | import Pagination from '@/components/Pagination' |
| | | import { getMeets,addMeet,editMeet,deleteMeetById } from '@/api/meet' |
| | | import { myClasses } from '@/api/classes' |
| | | |
| | | |
| | | export default { |
| | | components: { DataList,Pagination}, |
| | |
| | | } |
| | | }) |
| | | }, |
| | | 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, |