| | |
| | | VITE_BASE_API_URL = ''; |
| | | VITE_BASE_API_URL = |
| | |
| | | ElSlider: typeof import('element-plus/es')['ElSlider'] |
| | | ElTable: typeof import('element-plus/es')['ElTable'] |
| | | ElTableColumn: typeof import('element-plus/es')['ElTableColumn'] |
| | | ElTabPane: typeof import('element-plus/es')['ElTabPane'] |
| | | ElTabs: typeof import('element-plus/es')['ElTabs'] |
| | | ElTag: typeof import('element-plus/es')['ElTag'] |
| | | ExamAudio: typeof import('./src/components/ExamAudio/index.vue')['default'] |
| | | ExamInfo: typeof import('./src/components/ExamInfo/index.vue')['default'] |
| | | ExamInfoDialog: typeof import('./src/components/ExamInfoDialog/index.vue')['default'] |
| | | NormalHeader: typeof import('./src/components/NormalHeader/index.vue')['default'] |
| | | PDFViewer: typeof import('./src/components/PDFViewer/index.vue')['default'] |
| | | PDFVIewer: typeof import('./src/components/PDFVIewer/index.vue')['default'] |
| | | RouterLink: typeof import('vue-router')['RouterLink'] |
| | | RouterView: typeof import('vue-router')['RouterView'] |
| | | VideoViewer: typeof import('./src/components/VideoViewer/index.vue')['default'] |
| | |
| | | </div> |
| | | |
| | | <div class="audio-container" v-if="activeQuestion.audioFile"> |
| | | <ExamAudio :audioSrc="activeQuestion.audioFile"></ExamAudio> |
| | | <ExamAudio :audioSrc="'/api/files/' +activeQuestion.audioFile"></ExamAudio> |
| | | </div> |
| | | |
| | | <div class="img-container flex" v-if="activeQuestion.img"> |
| | |
| | | } |
| | | } |
| | | |
| | | </style> |
| | | </style> |
| | |
| | | export const useExamStore = defineStore('exam', () => { |
| | | const examInfo = ref(null); |
| | | const examDetail = ref([]); |
| | | |
| | | |
| | | const examType = ref({ |
| | | 1: '单选题', |
| | | 2: '多选题', |
| | |
| | | answerProgress.value = progress; |
| | | }; |
| | | |
| | | const initExam = () => { |
| | | const initExam = (questionType) => { |
| | | answerProgress.value = 0; |
| | | currentIndex.value = 0; |
| | | currentType.value = 1; |
| | | currentType.value = questionType; |
| | | } |
| | | |
| | | |
| | |
| | | suggestTime: res.data.suggestTime, |
| | | }); |
| | | examStore.setExamDetail(res.data.titleList); |
| | | examStore.initExam(); |
| | | examStore.initExam(res.data.titleList[0].questionType); |
| | | router.push('/exam'); |
| | | }).catch(err => { |
| | | |
| | |
| | | .bottom-item { |
| | | margin-right: 30px; |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | const timeDialog = ref(false); |
| | | |
| | | const { status, message, error, connect, disconnect, sendMessage } = useWebScoket({ |
| | | url: 'ws://192.168.3.64:8000/websocket/' + userInfo.value.id, |
| | | url: 'wss://42.193.1.25:8000/websocket/' + userInfo.value.id, |
| | | heartBeatData: 'ping' |
| | | }); |
| | | |
| | |
| | | resetAllDialog(); |
| | | |
| | | disconnect(); |
| | | |
| | | |
| | | submitExam(temp).then(res => { |
| | | returnBack(); |
| | | }).catch(() => { |
| | |
| | | background-color: rgba($color: #3680fa, $alpha: 0.2); |
| | | margin-bottom: 20px; |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | </div> |
| | | |
| | | <div class="card-footer flex justify-center mb-7 shrink-0"> |
| | | <el-pagination background layout="prev, pager, next" :total="fileList.length" |
| | | <el-pagination background layout="prev, pager, next" :total="fileList.length" |
| | | :default-page-size="20" |
| | | :currentPage="currentIndex" |
| | | :hide-on-single-page="true" |
| | |
| | | const userStore = useUserStore(); |
| | | const { userInfo } = storeToRefs(userStore); |
| | | const { status, message, error, connect, disconnect, sendMessage } = useWebScoket({ |
| | | url: 'ws://192.168.3.64:8000/websocket/' + userInfo.value.id, |
| | | url: 'wss://42.193.1.25:8000/websocket/' + userInfo.value.id, |
| | | heartBeatData: 'ping' |
| | | }); |
| | | |
| | |
| | | handle: (item) => { |
| | | console.log(item); |
| | | imageViewer.value = true; |
| | | imageList.value = [item.contentUrl.url]; |
| | | imageList.value = ['/api/files/'+item.contentUrl.url]; |
| | | resendMessage(); |
| | | } |
| | | }, |
| | |
| | | handle: (item) => { |
| | | console.log(item); |
| | | videoViewer.value = true; |
| | | videoUrl.value = [item.contentUrl.url]; |
| | | videoUrl.value = ['/api/files/'+item.contentUrl.url]; |
| | | resendMessage(); |
| | | } |
| | | }, |
| | |
| | | handle: (item) => { |
| | | console.log(item); |
| | | pdfViewer.value = true; |
| | | pdfFile.value = item.contentUrl.url; |
| | | pdfFile.value = '/api/files/'+item.contentUrl.url; |
| | | resendMessage(); |
| | | } |
| | | }, |
| | |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | enabled: false |
| | | }, |
| | | whiteboard: { |
| | | enabled: true |
| | | enabled: false |
| | | } |
| | | }, |
| | | userInfo: { |
| | |
| | | }; |
| | | jitsiApi = new JitsiMeetExternalAPI(domain, options); |
| | | jitsiInit(); |
| | | |
| | | |
| | | }); |
| | | |
| | | const jitsiInit = () => { |
| | | jitsiApi.addListener('readyToClose', () => { |
| | | |
| | | |
| | | }); |
| | | } |
| | | |
| | |
| | | |
| | | </script> |
| | | |
| | | <style lang="scss" scoped></style> |
| | | <style lang="scss" scoped></style> |
| | |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref } from 'vue'; |
| | | import { Timer } from '@element-plus/icons-vue'; |
| | | import { storeToRefs } from 'pinia'; |
| | | import { useRouter } from 'vue-router'; |
| | | import { useUserStore } from '@/store/index.js'; |
| | | import { classMeet } from '@/api/modules/meet.js'; |
| | | import {storeToRefs} from 'pinia'; |
| | | import {useRouter} from 'vue-router'; |
| | | import {useUserStore} from '@/store/index.js'; |
| | | import {classMeet} from '@/api/modules/meet.js'; |
| | | |
| | | const userStore = useUserStore(); |
| | | const { userInfo } = storeToRefs(userStore); |
| | |
| | | .list-card { |
| | | border-radius: 10px; |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | proxy: { |
| | | '/api': { |
| | | // target: 'http://192.168.3.88:8000', |
| | | target: 'http://192.168.3.64:8000', |
| | | target: 'localhost:8000', |
| | | changeOrigin: true, |
| | | } |
| | | } |
| | | }, |
| | | |
| | | |
| | | resolve: { |
| | | alias: { |
| | | '@': resolve(__dirname, './src') |
| | |
| | | proxy: { |
| | | '/api': { |
| | | // target: 'http://192.168.3.88:8000', |
| | | target: 'http://192.168.3.64:8000', |
| | | target: 'http://localhost:8000', |
| | | changeOrigin: true, |
| | | } |
| | | } |
| | | }, |
| | | |
| | | |
| | | resolve: { |
| | | alias: { |
| | | '@': resolve(__dirname, './src') |