From a3cc0d240ee750fa23d6a7772346cc6bc1023bae Mon Sep 17 00:00:00 2001 From: 黄何裕 <1053952480@qq.com> Date: 星期五, 12 七月 2024 11:51:55 +0800 Subject: [PATCH] 考试操作加时和交卷 --- src/views/exam/index.vue | 48 +++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 41 insertions(+), 7 deletions(-) diff --git a/src/views/exam/index.vue b/src/views/exam/index.vue index 0918145..bd858ed 100644 --- a/src/views/exam/index.vue +++ b/src/views/exam/index.vue @@ -7,7 +7,7 @@ <div class="title-container text-3xl font-semibold text-white mr-8"> {{ examInfo.examName }} </div> - <AnswerTime @timeOut="timeOut"></AnswerTime> + <AnswerTime @timeOut="timeOut" ref="answerTime"></AnswerTime> <div class="return-container grow flex justify-end"> <el-button type="danger" size="large" circle @click="closeClick"> @@ -130,7 +130,7 @@ </template> <script setup> -import { ref, watchEffect } from 'vue'; +import { ref, watchEffect, watch, onMounted } from 'vue'; import { storeToRefs } from 'pinia'; import { Close, Timer } from '@element-plus/icons-vue'; import AnswerTag from './components/answer-tag/index.vue'; @@ -146,15 +146,19 @@ import AnswerShort from './components/answer-main/answer-short/index.vue'; import AnswerCount from './components/answer-main/answer-count/index.vue'; -import { useExamStore } from '@/store/index.js'; +import { useExamStore, useUserStore } from '@/store/index.js'; import { useRouter } from 'vue-router'; import { submitExam } from '@/api/modules/exam.js'; +import useWebScoket from '@/hooks/useWebScoket.js'; const router = useRouter(); const examStore = useExamStore(); +const userStore = useUserStore(); + +const { userInfo } = storeToRefs(userStore); const { currentType, currentIndex, examDetail, examType, examInfo } = storeToRefs(examStore); const typeComponent = { @@ -172,17 +176,30 @@ const submitDialog = ref(false); const timeDialog = ref(false); +// const { status, message, error, connect, disconnect, sendMessage } = useWebScoket({ +// url: 'wss://42.193.1.25:8000/websocket/' + userInfo.value.id, +// heartBeatData: 'ping' +// }); +const { status, message, error, connect, disconnect, sendMessage } = useWebScoket({ + url: '//192.168.3.64:8000/websocket/' + userInfo.value.id, + heartBeatData: 'ping' +}); + + +// 涓婁竴棰� const prevQuestion = () => { currentIndex.value--; checkList(); }; +// 涓嬩竴棰� const nextQuestion = () => { currentIndex.value++; checkList(); }; +// 鏌ヨ棰樼洰 const checkList = () => { let tempIndex = 0; const typeQuestion = examDetail.value.find((typeItem, index) => { @@ -218,7 +235,6 @@ }; - // 閫�鍑鸿�冭瘯 const closeClick = () => { quitDialog.value = true; @@ -244,12 +260,15 @@ // 鏃堕棿缁撴潫 const timeOut = () => { - resetAllDialog(); - timeDialog.value = true; const temp = { ...examInfo.value, titleList: examDetail.value }; + timeDialog.value = true; + resetAllDialog(); + + disconnect(); + submitExam(temp).then(res => { returnBack(); }).catch(() => { @@ -273,6 +292,21 @@ }); }); examStore.setProgress(progress); +}); +const answerTime = ref() +watch(() => message.value, (msg) => { + if(msg.commend=="delayed"){ + answerTime.value.addTime(msg.data.addTimeM) + }else if(msg.commend=="forceSubmit"){ + confirmSubmit() + } +}); + + +// -----------------------------------鐢熷懡鍛ㄦ湡 +onMounted(() => { + // 杩炴帴webscoket + connect(); }); </script> @@ -336,4 +370,4 @@ background-color: rgba($color: #3680fa, $alpha: 0.2); margin-bottom: 20px; } -</style> \ No newline at end of file +</style> -- Gitblit v1.8.0