| | |
| | | <template> |
| | | <div class="time-container flex justify-center text-white items-center shadow-md"> |
| | | <div |
| | | class="time-container flex justify-center text-white items-center shadow-md" |
| | | > |
| | | <el-icon class="mr-1 text-xl" size="24"><Timer /></el-icon> |
| | | <div class="label mr-1">剩余时间:</div> |
| | | <el-countdown :value="time" @finish="timeFinish" /> |
| | |
| | | </template> |
| | | |
| | | <script setup> |
| | | import {ref} from 'vue'; |
| | | import dayjs from 'dayjs'; |
| | | import { storeToRefs } from 'pinia'; |
| | | import { Timer } from '@element-plus/icons-vue'; |
| | | import { useExamStore } from '@/store/index.js'; |
| | | import { ref, defineExpose } from "vue"; |
| | | import dayjs from "dayjs"; |
| | | import { storeToRefs } from "pinia"; |
| | | import { Timer } from "@element-plus/icons-vue"; |
| | | import { useExamStore } from "@/store/index.js"; |
| | | |
| | | const examStore = useExamStore(); |
| | | const { examInfo } = storeToRefs(examStore); |
| | | |
| | | const emit = defineEmits(['timeOut']); |
| | | const emit = defineEmits(["timeOut"]); |
| | | |
| | | const time = ref(dayjs().valueOf() + examInfo.value.suggestTime * 1000 * 60); |
| | | |
| | | const timeFinish = () => { |
| | | emit('timeOut'); |
| | | } |
| | | |
| | | emit("timeOut"); |
| | | }; |
| | | const addTime = (data) => { |
| | | time.value = time.value + data * 1000; |
| | | }; |
| | | defineExpose({ addTime }); |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | |
| | | border-radius: 100px; |
| | | padding: 10px 0; |
| | | background-color: rgba($color: #86d7f7, $alpha: 0.3); |
| | | |
| | | } |
| | | |
| | | :deep(.el-statistic__number) { |
| | | color: #ffffff; |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | <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"> |
| | |
| | | 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: 'wss://42.193.1.25:8000/websocket/' + userInfo.value.id, |
| | | url: '//192.168.3.64:8000/websocket/' + userInfo.value.id, |
| | | heartBeatData: 'ping' |
| | | }); |
| | | |
| | |
| | | }); |
| | | examStore.setProgress(progress); |
| | | }); |
| | | |
| | | const answerTime = ref() |
| | | watch(() => message.value, (msg) => { |
| | | console.log(msg); |
| | | if(msg.commend=="delayed"){ |
| | | answerTime.value.addTime(msg.data.addTimeM) |
| | | }else if(msg.commend=="forceSubmit"){ |
| | | confirmSubmit() |
| | | } |
| | | }); |
| | | |
| | | |
| | |
| | | default: () => [], |
| | | }, |
| | | }); |
| | | |
| | | const userId = JSON.parse(localStorage.getItem('user')).userInfo.id |
| | | const itemClick = (item) => { |
| | | classMeet(item.id) |
| | | .then((res) => { |
| | |
| | | query: { |
| | | meetName: item.meetName, |
| | | id: item.id, |
| | | userName: userInfo.value?.realName + "_" + item.id || "", |
| | | userCode: userInfo.value?.phone + "_" + item.id || "", |
| | | userName: userInfo.value?.realName + "_" + userId || "", |
| | | userCode: userInfo.value?.phone + "_" + userId || "", |
| | | }, |
| | | }); |
| | | window.open(path.href, "_blank"); |