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