diff --git a/.env b/.env index 8aaa1a9..49ae16e 100644 --- a/.env +++ b/.env @@ -1,7 +1,9 @@ VITE_BASE=/fe-student VITE_BASE_API= +VITE_OUTPUT_DIR=./dist +VITE_FILE_PATH=/upload/ VITE_BASE_LOGIN_URL=https://u-pre.boe.com/web/ -VITE_PROXY_URL=http://111.231.196.214:30001 +VITE_PROXY_URL=http://111.231.196.214/manageApi VITE_BOE_ONLINE_CLASS_URL=https://u-pre.boe.com/pc/course/studyindex?id= diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..2617103 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,5 @@ +FROM devforth/spa-to-http:latest +WORKDIR / + +ADD ./dist/ . +EXPOSE 8080 diff --git a/src/App.vue b/src/App.vue index 02fd026..1a67bb1 100644 --- a/src/App.vue +++ b/src/App.vue @@ -30,23 +30,31 @@ diff --git a/src/views/faceteach/FaceTeachSignUp.vue b/src/views/faceteach/FaceTeachSignUp.vue index 08068c9..795530d 100644 --- a/src/views/faceteach/FaceTeachSignUp.vue +++ b/src/views/faceteach/FaceTeachSignUp.vue @@ -22,7 +22,7 @@
+ :src="data.offcourseDto?.picUrl" alt="">
【面授课】{{ data.planDto?.name }}
@@ -39,7 +39,7 @@
{{ data.planDto?.address }}
- {{data.isSignUp?'已报名':'立即报名'}} + {{data.isSignUp?'已报名':'立即报名'}}
@@ -126,9 +126,6 @@ import FileTypeImg from "@/components/FileTypeImg.vue"; import {request, useRequest} from "@/api/request"; import { STU_OFFCOURSE_DETAIL, - TASK_OFFCOURSE_NOTASK_SIGN, - TASK_OFFCOURSE_SIGN, - TASK_BROADCAST_SIGN, FACETEACH_SIGNUP } from "@/api/api"; import {useRoute, useRouter} from "vue-router"; @@ -144,7 +141,7 @@ const { query: {courseId, type, id: taskId}, } = useRoute(); -const {data} = useRequest(STU_OFFCOURSE_DETAIL, {courseId}); +const {data = {}} = useRequest(STU_OFFCOURSE_DETAIL, {courseId}); const teacherInfo = useUserInfo( computed(() => data.value?.planDto?.teacherId) @@ -163,7 +160,7 @@ const download = (url) => { window.open(url); }; const downloads = (url) => { - ElMessage.warning("未到开始时间,请耐心等待!"); + ElMessage.warning("未在有效时间范围内,请耐心等待!"); }; let timer = null; diff --git a/src/views/homework/HomeworkPage.vue b/src/views/homework/HomeworkPage.vue index 7a74bc6..35ae47d 100644 --- a/src/views/homework/HomeworkPage.vue +++ b/src/views/homework/HomeworkPage.vue @@ -141,11 +141,11 @@ }}提交
- +
+ style="background:#999;border-radius: 6px;cursor: not-allowed;">未在有效时间范围内
@@ -158,11 +158,11 @@ }}提交 - +
+ style="background:#999;border-radius: 6px;cursor: not-allowed;">未在有效时间范围内
@@ -190,17 +190,14 @@ }">
{{ value.createTime }}
-
+
{{ value.workUploadContent }}
- {{ - value.workUploadAddress?.split(',')[0].split('/').at(-1) || - '' -}} + {{value.workUploadAddress?.split(',')[0] }}
@@ -281,6 +278,7 @@ import { ElMessage } from "element-plus"; //import AlertSuccess from "@/components/alert/AlertSuccess.vue"; const fileList = ref([]); +const fielPath = ref(import.meta.env.VITE_FILE_PATH); const uploadRef = ref(); const centerDialogVisible = ref(false); @@ -293,7 +291,7 @@ const returnclick = () => { router.back(); }; const { - query: { courseId: workId, type, id: taskId, pName, sName, projectStatus, projectEndTime}, + query: { courseId: workId, type, id: taskId, pName, sName, projectStatus, projectEndTime,infoId}, } = useRoute(); const { data } = taskId && taskId !== 'undefined' ? useRequest(TASK_WORK_DETAIL, { workId, taskId }) : useRequest(TASK_WORK_DETAIL, { workId }); @@ -315,18 +313,17 @@ const showFileList = computed(() => { const handleClick = () => { console.log(fileList.value, uploadRef.value) if (!sbValue.value.content) { - if (fileList.value.length == 0) { + if (fileList.value.length === 0) { return ElMessage.warning("请输入作业内容"); } } - request(TASK_WORK_COMMIT, { projectOrRouterLogo: type, workUploadContent: sbValue.value.content, workUploadAddress: fileList.value.map((e) => e.url).join(",") || "", workId, type, - taskId, + taskId:taskId || infoId, }).then((res) => { console.log(res); submitList.value.unshift(res.data); diff --git a/src/views/project/ProjectDetails.vue b/src/views/project/ProjectDetails.vue index cac31de..ff69fd3 100644 --- a/src/views/project/ProjectDetails.vue +++ b/src/views/project/ProjectDetails.vue @@ -117,7 +117,7 @@
@@ -171,7 +169,7 @@
- +
@@ -287,6 +285,7 @@ import { import { useRoute, useRouter } from "vue-router"; import store from "@/store"; import { ElMessage } from "element-plus"; +import {PROJECT} from "@/api/CONST"; const { query: { courseId, projectId }, @@ -300,7 +299,7 @@ const { data } = useRequest(PROJECT_PROCESS, { console.log("datadata", data); const loading = ref(false); -loading.value = ElLoading.service({ +loading.value = ElLoading.service({ lock: true, text: 'Loading', background: 'rgba(0, 0, 0, 0.7)' @@ -362,7 +361,7 @@ const types = ref({ }, path: { 1: import.meta.env.VITE_BOE_ONLINE_CLASS_URL, //在线 - 2: "/faceteach", + 2: ({ courseId }) => window.open(`${location.protocol}//${location.host}${import.meta.env.VITE_BASE_API}/stu/project/redirectDetail?courseId=${courseId}`, '_top'), 3: import.meta.env.VITE_BOE_CASS_DETAIL_URL, //案例 4: "/homeworkpage", 5: import.meta.env.VITE_BOE_EXAM_DETAIL_URL, //考试 @@ -505,7 +504,7 @@ function toFinish(d, sName, chapterOrStageId) { d.status!==1 && request(STUDY_RECORD, { studentId: data.value.userInfoBo.userId, targetId: data.value.routerId, - logo: 2, + logo: PROJECT, stageOrChapterId: chapterOrStageId, taskId: d.projectTaskId, }); @@ -521,14 +520,12 @@ function toFinish(d, sName, chapterOrStageId) { path: types.value.path[d.type], query: { id: d.projectTaskId, - type: 2, + type: PROJECT, infoId: data.value.projectId, courseId: d.courseId, pName: data.value.name, sName, chapterOrStageId, - projectStatus: data.value.status?data.value.status:0, // 项目状态 -- 用于判断当前项目是否已经结束 - projectEndTime: data.value.endTime?data.value.endTime:0 // 项目结束 -- 用于判断当前项目是否已经结束 }, }); } else if (typeof types.value.path[d.type] === "function") { diff --git a/src/views/project/ProjectManage.vue b/src/views/project/ProjectManage.vue index 9bcc651..e95c576 100644 --- a/src/views/project/ProjectManage.vue +++ b/src/views/project/ProjectManage.vue @@ -40,43 +40,50 @@
-
- + +
+
-
-
- -
-
- {{ i.name }} -
-
-
当前进度:
-
- +
+ {{ loading.close() }} +
+ +
+
+
+ +
+
+ {{ i.name }}
-
- {{ - (i.finishTaskNum && i.totalTaskNum) ? parseInt(i.finishTaskNum / i.totalTaskNum * 100) : 0 - }}% +
+
当前进度:
+
+ +
+
+ {{ + (i.finishTaskNum && i.totalTaskNum) ? parseInt(i.finishTaskNum / i.totalTaskNum * 100) : 0 + }}% +
+
最新一次学习时间:{{ i.lastStudyTime }}
-
最新一次学习时间:{{ i.lastStudyTime }}
-
-
- 待开始 -
-
- 去学习 -
-
- 已完成 -
-
- 已结束 +
+ 待开始 +
+
+ 去学习 +
+
+ 已完成 +
+
+ 已结束 +
-
+
+ +
+
+ {{ loading.close() }}
@@ -107,17 +111,30 @@ import {ROUTER_LIST,} from "@/api/api"; import {useRouter} from "vue-router"; import store from "@/store"; import PathDetailImage from "@/components/PathDetailImage.vue"; +import { ElLoading } from 'element-plus'; const detail = ref(); const showmapdetail = ref(false); const currentStageId = ref(); const userInfo = computed(() => store.state.userInfo); -const {data} = usePage(ROUTER_LIST, {pageSize: 60}); +const loading = ref(false); +const isLoading = ref(true); +loading.value = ElLoading.service({ + lock: true, + text: 'Loading', + background: 'rgba(0, 0, 0, 0.7)' +}) + +const {data} = usePage(ROUTER_LIST, {pageSize: 60}, (e)=>{ + console.log('我请求成功了吗', e) + isLoading.value = false; +}); const router = useRouter(); const returnclick = () => { router.back(); }; + // const {unCompleteTaskList} = useRequest(ROUTER_UNCOMPLETE_LIST, {}); const returnfun = () => { diff --git a/src/views/roadmap/PathDetails.vue b/src/views/roadmap/PathDetails.vue index c7977f2..1ec9a45 100644 --- a/src/views/roadmap/PathDetails.vue +++ b/src/views/roadmap/PathDetails.vue @@ -160,7 +160,7 @@
- +
@@ -282,6 +282,7 @@ import { ROUTER_PROCESS, LINK_DETAILS, STUDY_RECORD } from "@/api/api"; import { useRoute, useRouter } from "vue-router"; import { ElMessage } from "element-plus"; import store from "@/store"; +import {ROUTER} from "@/api/CONST"; const { query: { routerId, routerName }, @@ -338,8 +339,8 @@ const types = ref({ }, path: { 1: import.meta.env.VITE_BOE_ONLINE_CLASS_URL, //在线 - 2: "/faceteach", - 3: import.meta.env.VITE_BOE_CASS_DETAIL_URL, //案例 + 2: ({ courseId }) => window.open(`${location.protocol}//${location.host}${import.meta.env.VITE_BASE_API}/stu/project/redirectDetail?courseId=${courseId}`, '_top'), + 3: import.meta.env.VITE_BOE_CASS_DETAIL_URL, //案例 4: "/homeworkpage", 5: import.meta.env.VITE_BOE_EXAM_DETAIL_URL, //考试 6: "/livebroadcast", @@ -445,7 +446,7 @@ function toFinish(d) { d.status!==1 && request(STUDY_RECORD, { studentId: userInfo.value.id, targetId: data.value.routerId, - logo: 1, + logo: ROUTER, stageOrChapterId: data.value.currentStageId, taskId: d.routerTaskId, }); @@ -460,7 +461,7 @@ function toFinish(d) { path: types.value.path[d.type], query: { id: d.routerTaskId, - type: 1, + type: ROUTER, infoId: routerId, courseId: d.courseId, pName: data.value.name, diff --git a/src/views/survey/SurveyDetail.vue b/src/views/survey/SurveyDetail.vue index 4363f44..0b6edf5 100644 --- a/src/views/survey/SurveyDetail.vue +++ b/src/views/survey/SurveyDetail.vue @@ -44,38 +44,39 @@ return a[0].orderNumber - b[0].orderNumber }) }} --> -
-
-
+
+
+
{{ value.assessmentScTitle }}
完全没用
-
+ +
{{ item + 1 }}
@@ -84,69 +85,62 @@
-
-
+
+
- {{ data.assessmentSingleChoiceDtoList[0]?.singleStemName }} + {{ value?.singleStemName }}
-
- -
{{ value.singleOptionName }}
+ +
{{ values.singleOptionName }}
-
-
+
+
- {{ data.assessmentMultipleChoiceDtoList[0]?.multipleStemName }} + {{ value?.multipleStemName }}
-
- -
{{ value.multipleOptionName }}
+ +
{{ values.multipleOptionName }}
-
-
-
{{ item.assessmentQaTitle }}
+
+
+
{{ value.assessmentQaTitle }}
- -
{{ item.content?.length || 0 }}/200
+
{{ value.content?.length || 0 }}/200
@@ -290,12 +284,11 @@
{{ item.content?.length || 0 }}/200
--> -
提交 @@ -338,33 +331,65 @@ import { request, usePage, useRequest } from "@/api/request"; import { ASSESSMENT_QUERY, ASSESSMENT_SUBMIT } from "@/api/api"; import { ElMessage } from "element-plus"; import { ref } from "vue"; +import dayjs from "dayjs"; const { query: { courseId, id: taskId, infoId, type, pName, sName, chapterOrStageId, projectStatus, projectEndTime }, } = useRoute(); const router = useRouter(); const returnclick = () => { + clearInterval(timers) router.back(); }; -// 数组去空对象 -function formateArr(arr1) { - console.log(arr1, arr1[0], arr1[0].length) - let newarr = [] - for (let i = 0; i < arr1.length; i++) { - if (arr1[i].length !== 0) { - newarr.push(arr1[i]) - } - } - return newarr -} - const { data } = useRequest(ASSESSMENT_QUERY(courseId), { id: courseId, type, chapterOrStageId, targetId: infoId ? infoId : 0 }); console.log('我是查询评估的参数', { id: courseId, type, chapterOrStageId, targetId: infoId ? infoId : 0 }) console.log('我是需要排序得题目', data) -function goHome() { +// 答题时间 +const answerTime = dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss'); +console.log('录入首次进入页面时间', answerTime) + + +// 数组去空对象 +function formateArr(datas) { + let allArr = [] + for(let i=0;i { return a.orderNumber - b.orderNumber}) + console.log('我是排序后的题目', newarr) + return newarr +} + +const questionList = ref([]) + +const timers = setInterval(() => { + console.log(data) + console.log(data.value.assessmentId) + if(data.value.assessmentId){ + clearInterval(timers) + console.log([data.value.essayQuestionVoList, data.value.multipleStemVoList, data.value.scoringQuestionVoList, data.value.singleStemVoList]) + questionList.value = formateArr([data.value.essayQuestionVoList, data.value.multipleStemVoList, data.value.scoringQuestionVoList, data.value.singleStemVoList]) + } +}, 1000); + +setTimeout(() => { + clearInterval(timers); +}, 30000); + +// 生成数组 +function orderArr(a,b) { + let arrs = [] + for(let i=0;i<10;i++){ + if((i+1)>=a && (i+1)<=b){ + arrs.push(i) + } + } + return arrs; } const centerDialogVisible = ref(false); @@ -372,6 +397,7 @@ const open = () => { centerDialogVisible.value = true }; function submit() { + console.log('录入首次进入页面时间', answerTime) if (1 > 0) { console.log(data) console.log('我是提交的数据', { @@ -436,6 +462,7 @@ function submit() { taskId: taskId ? taskId : 0, type, result: JSON.stringify(data.value), + beginTime: answerTime }).then(() => { open(); }); @@ -579,3 +606,4 @@ function submit() { } } + diff --git a/vite.config.js b/vite.config.js index f6d6081..57bd0e3 100644 --- a/vite.config.js +++ b/vite.config.js @@ -14,6 +14,9 @@ const path = require('path') export default defineConfig(({ command, mode }) => ({ base: loadEnv(mode, process.cwd()).VITE_BASE, + build:{ + outDir: loadEnv(mode, process.cwd()).VITE_OUTPUT_DIR, + }, plugins: [ vue(), // legacy({