From 98f494cf633e3acf5c20f3e9de0d708f2a6c2045 Mon Sep 17 00:00:00 2001 From: ZhangXianQiang <1135831638@qq.com> Date: 星期五, 05 七月 2024 09:39:59 +0800 Subject: [PATCH] feat:视频浏览 --- src/views/exam/index.vue | 50 ++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 42 insertions(+), 8 deletions(-) diff --git a/src/views/exam/index.vue b/src/views/exam/index.vue index 871b924..591e735 100644 --- a/src/views/exam/index.vue +++ b/src/views/exam/index.vue @@ -51,7 +51,7 @@ <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 }}鍒�) + examStore.getActiveQuestion.questionScore }}鍒�) </div> </div> @@ -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'; @@ -141,39 +141,60 @@ import AnswerSingle from './components/answer-main/answer-single/index.vue'; import AnswerMultiple from './components/answer-main/answer-multiple/index.vue'; import AnswerAudio from './components/answer-main/answer-audio/index.vue'; +import AnswerFill from './components/answer-main/answer-fill/index.vue'; +import AnswerDetermine from './components/answer-main/answer-determine/index.vue'; +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 = { 1: AnswerSingle, 2: AnswerMultiple, + 3: AnswerDetermine, + 4: AnswerFill, + 5: AnswerShort, 6: AnswerAudio, + 7: AnswerCount, + 8: AnswerShort, }; const quitDialog = ref(false); const submitDialog = ref(false); const timeDialog = ref(false); +const { status, message, error, connect, disconnect, sendMessage } = useWebScoket({ + url: 'ws://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) => { @@ -209,7 +230,6 @@ }; - // 閫�鍑鸿�冭瘯 const closeClick = () => { quitDialog.value = true; @@ -235,12 +255,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(() => { @@ -258,12 +281,23 @@ let progress = 0; examDetail.value.forEach(item => { item.questionList.forEach(question => { - if (question.answer || question.answerList) { + if (question.answer || (Array.isArray(question.answerList) && question.answerList.length)) { progress += 1; } }); }); examStore.setProgress(progress); +}); + +watch(() => message.value, (msg) => { + console.log(msg); +}); + + +// -----------------------------------鐢熷懡鍛ㄦ湡 +onMounted(() => { + // 杩炴帴webscoket + connect(); }); </script> @@ -304,7 +338,7 @@ } .answer-left { - width: 340px; + width: 370px; } .submit-button, -- Gitblit v1.8.0