黄何裕
2024-07-12 a3cc0d240ee750fa23d6a7772346cc6bc1023bae
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';
@@ -144,16 +144,21 @@
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 = {
@@ -162,24 +167,39 @@
  3: AnswerDetermine,
  4: AnswerFill,
  5: AnswerShort,
  6: AnswerAudio
  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: '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) => {
@@ -215,7 +235,6 @@
};
// 退出考试
const closeClick = () => {
  quitDialog.value = true;
@@ -241,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(() => {
@@ -270,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>
@@ -333,4 +370,4 @@
  background-color: rgba($color: #3680fa, $alpha: 0.2);
  margin-bottom: 20px;
}
</style>
</style>