From da2f959b7f5e0ec28dc29b638dffad8eae305152 Mon Sep 17 00:00:00 2001
From: ZhangXianQiang <1135831638@qq.com>
Date: 星期三, 19 六月 2024 11:52:35 +0800
Subject: [PATCH] fix:限制图片大小

---
 src/views/exam/index.vue |  232 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 225 insertions(+), 7 deletions(-)

diff --git a/src/views/exam/index.vue b/src/views/exam/index.vue
index cdc820e..585a0ec 100644
--- a/src/views/exam/index.vue
+++ b/src/views/exam/index.vue
@@ -1,22 +1,211 @@
 <template>
-  <div class="exam-container w-screen h-screen relative overflow-hidden">
-    <div class="top-bg bg-blue-400"></div>
-    <div class="exam-content flex flex-col ">
-      <div class="exam-header">
-        <div class="title-container">
-          娴嬭瘯娴嬭瘯娴嬭瘯
+  <div class="exam-container w-screen h-screen bg-slate-50 relative overflow-hidden">
+    <div class="top-bg bg-blue-500"></div>
+    <div class="exam-content">
+      <div class="exam-wrapper container mx-auto h-full flex flex-col">
+        <div class="exam-header flex items-center mt-12 mb-10">
+          <div class="title-container text-3xl font-semibold text-white mr-8">
+            娴嬭瘯娴嬭瘯娴嬭瘯
+          </div>
+          <AnswerTime></AnswerTime>
+
+          <div class="return-container grow flex justify-end">
+            <el-button type="danger" size="large" circle @click="closeClick">
+              <template #icon>
+                <el-icon :size="20">
+                  <Close />
+                </el-icon>
+              </template>
+            </el-button>
+          </div>
+        </div>
+
+        <div class="exam-main grow flex justify-between">
+          <!-- 绛旈鍗″尯 -->
+          <div class="answer-wrapper answer-left mr-8 shadow-xl p-4 box-border">
+            <div class="wrapper h-full flex flex-col items-center">
+              <div class="title-wrapper w-full flex justify-between items-center mb-5">
+                <div class="title text-xl font-semibold ">绛旈鍗�</div>
+                <AnswerTag></AnswerTag>
+              </div>
+
+              <div class="progress-wrapper w-full">
+                <AnswerProgress></AnswerProgress>
+              </div>
+
+              <div class="sheet-wrapper w-full grow relative my-5">
+                <div class="sheet-content absolute top-0 bottom-0 w-full">
+                  <AnswerSheet></AnswerSheet>
+                </div>
+              </div>
+
+              <div class="submit-wrapper">
+                <el-button type="primary" class="submit-button">鎻愪氦璇曞嵎</el-button>
+              </div>
+
+            </div>
+          </div>
+
+          <!-- 绛旈鍐呭鍖� -->
+          <div class="answer-wrapper answer-right grow shadow-xl p-4">
+            <div class="wrapper h-full flex flex-col">
+              <div class="title-wrapper w-full flex mb-5">
+                <div class="title text-xl font-semibold ">{{ examType[currentType] }} ({{ examStore.getActiveQuestion.score}}鍒�)</div>
+              </div>
+
+              <div class="main-wrapper w-full grow relative my-5">
+                <div class="main-content absolute top-0 bottom-0 w-full">
+                  <Transition appear name="fade-transform" mode="out-in">
+                    <component :is="typeComponent[currentType]" :key="currentIndex"></component>
+                  </Transition>
+                </div>
+              </div>
+
+              <div class="tool-wrapper flex justify-end">
+                <div class="button-container flex items-center">
+                  <div class="button-item">
+                    <el-button class="tool-button" @click="prevQuestion">涓婁竴棰�</el-button>
+                  </div>
+                  <div class="button-item">
+                    <el-button class="tool-button" type="primary" @click="nextQuestion">涓嬩竴棰�</el-button>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
         </div>
       </div>
-      <div class="exam-main flex-1"></div>
     </div>
+
+
+    <!-- 閫�鍑鸿�冭瘯鎻愮ず寮圭獥 -->
+    <el-dialog v-model="dialogVisible" title="娉ㄦ剰" width="500">
+      <div class="dialog-container">
+        <p>璇风‘璁ゆ槸鍚﹂��鍑哄綋鍓嶈�冭瘯</p>
+        <p>褰撳墠鑰冭瘯璇曞嵎浼氳嚜鍔ㄦ彁浜�,鍚庣画灏嗘棤娉曠户缁綔绛�</p>
+      </div>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button @click="dialogVisible = false">鍙栨秷</el-button>
+          <el-button type="primary" @click="confirmCancel">
+            纭畾
+          </el-button>
+        </div>
+      </template>
+    </el-dialog>
   </div>
 </template>
 
 <script setup>
+import { ref, watchEffect } from 'vue';
+import { storeToRefs } from 'pinia';
+import { Close } from '@element-plus/icons-vue';
+import AnswerTag from './components/answer-tag/index.vue';
+import AnswerProgress from './components/answer-progress/index.vue';
+import AnswerSheet from './components/answer-sheet/index.vue';
+import AnswerSingle from './components/answer-main/answer-single/index.vue';
+import AnswerMultiple from './components/answer-main/answer-multiple/index.vue';
+import AnswerTime from './components/answer-time/index.vue';
+import { useExamStore } from '@/store/index.js';
+import { useRouter } from 'vue-router';
 
+const router = useRouter();
+
+const examStore = useExamStore();
+const { currentType, currentIndex, examDetail, examType } = storeToRefs(examStore);
+
+const typeComponent = {
+  1: AnswerSingle,
+  2: AnswerMultiple,
+};
+
+const dialogVisible = ref(false);
+
+const prevQuestion = () => {
+  currentIndex.value--;
+  checkList();
+};
+
+const nextQuestion = () => {
+  currentIndex.value++;
+  checkList();
+};
+
+const checkList = () => {
+  let tempIndex = 0;
+  const typeQuestion = examDetail.value.find((typeItem, index) => {
+    if (typeItem.questionType === currentType.value) {
+      tempIndex = index;
+      return typeItem;
+    } else {
+      return false;
+    }
+  });
+  if (typeQuestion) {
+    if (currentIndex.value >= typeQuestion.questionList.length) {
+      tempIndex++;
+      if (examDetail.value[tempIndex]) {
+        currentType.value = examDetail.value[tempIndex].questionType;
+        currentIndex.value = 0;
+      } else {
+        currentType.value = typeQuestion.questionType;
+        currentIndex.value = typeQuestion.questionList.length - 1;
+      }
+
+    } else if (currentIndex.value < 0) {
+      tempIndex--;
+      if (examDetail.value[tempIndex]) {
+        currentType.value = examDetail.value[tempIndex].questionType;
+        currentIndex.value = examDetail.value[tempIndex].questionList.length - 1;
+      } else {
+        currentType.value = typeQuestion.questionType;
+        currentIndex.value = 0;
+      }
+    }
+    // findQuestion(currentType.value, currentIndex.value);
+  }
+
+};
+
+const findQuestion = (type, index) => {
+  const typeQuestion = examDetail.value.find(typeItem => typeItem.questionType === type);
+  if (typeQuestion) {
+    const question = typeQuestion.questionList[index];
+    if (question) {
+      examStore.setActiveQuestion(question);
+    }
+  }
+};
+
+const closeClick = () => {
+  dialogVisible.value = true;
+};
+
+const confirmCancel = () => {
+  dialogVisible.value = false;
+  router.back();
+};
+
+watchEffect(() => {
+  let progress = 0;
+  examDetail.value.forEach(item => {
+    item.questionList.forEach(question => {
+      if (question.correct) {
+        progress += 1;
+      }
+    });
+  });
+  examStore.setProgress(progress);
+});
 </script>
 
 <style lang="scss" scoped>
+@media (min-width: 1836px) {
+  .container {
+    max-width: 1724px;
+  }
+}
+
 .top-bg {
   width: 130%;
   height: 200px;
@@ -26,8 +215,37 @@
   left: 50%;
   transform: translateX(-50%);
 }
+
 .exam-content {
   width: 100%;
   height: 100%;
+  position: absolute;
+  top: 0;
+  left: 0;
+  z-index: 2;
+}
+
+.exam-header {
+  width: 100%;
+}
+
+.answer-wrapper {
+  background-color: #fff;
+  border-top-left-radius: 10px;
+  border-top-right-radius: 10px;
+}
+
+.answer-left {
+  width: 340px;
+}
+
+.submit-button,
+.tool-button {
+  width: 160px;
+  height: 40px;
+}
+
+.tool-button {
+  margin: 0 20px;
 }
 </style>
\ No newline at end of file

--
Gitblit v1.8.0