mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/fe-student.git
synced 2025-12-10 19:36:48 +08:00
Merge branch 'develop' into manage-release
This commit is contained in:
1
.env
1
.env
@@ -1,4 +1,5 @@
|
||||
VITE_BASE=/fe-student
|
||||
VITE_BASE_H5=/fe-student-h5
|
||||
VITE_BASE_API=
|
||||
VITE_OUTPUT_DIR=./dist
|
||||
VITE_FILE_PATH=/upload/
|
||||
|
||||
10890
pnpm-lock.yaml
generated
10890
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
16
src/App.vue
16
src/App.vue
@@ -36,22 +36,30 @@ import {useStore} from "vuex";
|
||||
import {onMounted} from "vue";
|
||||
import {useRoute} from "vue-router/dist/vue-router";
|
||||
import {USER_INFO} from "@/api/api";
|
||||
import {IsPhone} from "@/api/utils";
|
||||
|
||||
console.log("版本1.3.5------------");
|
||||
const store = useStore();
|
||||
const { path } = useRoute();
|
||||
onMounted(() => {
|
||||
path === '/login' || getUserInfo();
|
||||
path === "/login" || getUserInfo();
|
||||
if (IsPhone()) {
|
||||
if (import.meta.env.MODE === "development") {
|
||||
window.location.href = window.location.href.replace(import.meta.env.VITE_BASE, import.meta.env.VITE_BASE_H5).replace('5173','5174');
|
||||
} else {
|
||||
window.location.href = window.location.href.replace(import.meta.env.VITE_BASE, import.meta.env.VITE_BASE_H5)
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
function getUserInfo() {
|
||||
if (import.meta.env.MODE === 'development' || import.meta.env.MODE === 'test') {
|
||||
if (import.meta.env.MODE === "development" || import.meta.env.MODE === "test") {
|
||||
request(USER_INFO, {}).then(res => {
|
||||
store.commit("SET_USER", res.data);
|
||||
})
|
||||
});
|
||||
} else {
|
||||
boeRequest(GET_USER_INFO).then((res) => {
|
||||
res.result.avatar = res.result.avatar || '/800e23f7-b58c-4192-820d-0c6a2b7544cc.png'
|
||||
res.result.avatar = res.result.avatar || "/800e23f7-b58c-4192-820d-0c6a2b7544cc.png";
|
||||
store.commit("SET_USER", res.result);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -123,6 +123,8 @@ export const PostList = `/statement/list`
|
||||
// 查询单个测评的状态
|
||||
export const QueryEvaluationTaskStatusOne = `/evaluation/queryEvaluationTaskStatusOne`
|
||||
|
||||
// 投票浏览和参与数目
|
||||
export const EditVoteInvolvedAndBrowse = `/vote/editVoteInvolvedAndBrowse post`
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -26,3 +26,7 @@ export function useUserInfo(id) {
|
||||
})
|
||||
return userInfo
|
||||
}
|
||||
|
||||
export function IsPhone() {
|
||||
return /mobile/i.test(navigator.userAgent);
|
||||
}
|
||||
@@ -24,6 +24,7 @@
|
||||
</template>
|
||||
<script setup>
|
||||
import {computed, defineProps, ref} from "vue";
|
||||
import {ElMessage} from "element-plus";
|
||||
import back from '@/assets/image/pathdetails/pathDetailBack.png'
|
||||
import nameBack from '@/assets/image/pathdetails/pathDetailImg.png'
|
||||
import currentBack from '@/assets/image/pathdetails/pathDetailImgSelect.png'
|
||||
@@ -120,17 +121,51 @@ function show() {
|
||||
}
|
||||
|
||||
function toDetail(i) {
|
||||
// 预览和学习设置
|
||||
let previewSetting = props.detail.previewSetting;
|
||||
let studySetting = props.detail.studySetting;
|
||||
let isStudy = false;
|
||||
let chapterId = props.detail.chapterDtoList[i].id
|
||||
console.log(studySetting)
|
||||
if(previewSetting==null){
|
||||
// 如果未设置预览 则只可以看当前关卡 其余关卡不让点击
|
||||
if (current.value !== i) {
|
||||
ElMessage.warning("当前关卡不可预览");
|
||||
return
|
||||
}
|
||||
isStudy = true;
|
||||
}else{
|
||||
if (current.value !== i) {
|
||||
let lookArr = [];
|
||||
lookArr = previewSetting.split(',')
|
||||
if((i+1)>=lookArr[0] && (i+1)<=lookArr[1]){
|
||||
if(studySetting!==null){
|
||||
let studyArr = [];
|
||||
studyArr = studySetting.split(',')
|
||||
if((i+1)>=studyArr[0] && (i+1)<=studyArr[1]){
|
||||
isStudy = true;
|
||||
}else{
|
||||
isStudy = false;
|
||||
}
|
||||
}else{
|
||||
isStudy = false;
|
||||
}
|
||||
}else{
|
||||
ElMessage.warning("当前关卡不可预览");
|
||||
return
|
||||
}
|
||||
}else{
|
||||
isStudy = true;
|
||||
}
|
||||
}
|
||||
(import.meta.env.MODE === "development" || import.meta.env.MODE === "test")
|
||||
? router.push({
|
||||
path: "/pathdetails",
|
||||
query: {routerId: props.detail.id, routerName: props.detail.name},
|
||||
query: {routerId: props.detail.id, routerName: props.detail.name, isStudy, chapterId},
|
||||
})
|
||||
: window.open(
|
||||
`${window.location.protocol + import.meta.env.VITE_BOE_PATH_DETAIL_URL}/pathdetails¶ms=${encodeURIComponent(
|
||||
`routerId=${props.detail.id}&routerName=${props.detail.name}`
|
||||
`routerId=${props.detail.id}&routerName=${props.detail.name}&chapterId=${chapterId}&studySetting=${studySetting}`
|
||||
)}`
|
||||
,'_top');
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {createStore} from 'vuex'
|
||||
import {createStore} from "vuex";
|
||||
import {PROJECT_PROCESS, ROUTER_PROCESS} from "@/api/api";
|
||||
import {request} from "@/api/request";
|
||||
import {TASK_TYPES} from "@/api/CONST";
|
||||
@@ -9,82 +9,81 @@ export default createStore({
|
||||
projectInfo: {},
|
||||
routerInfo: {}
|
||||
},
|
||||
getters: {
|
||||
|
||||
},
|
||||
getters: {},
|
||||
mutations: {
|
||||
SET_USER(state, userInfo) {
|
||||
state.userInfo = userInfo
|
||||
state.userInfo = userInfo;
|
||||
},
|
||||
SET_PROJECT_INFO(state, info) {
|
||||
state.projectInfo = info
|
||||
state.projectInfo = info;
|
||||
},
|
||||
INIT_PROJECT_INFO(state) {
|
||||
if (state.projectInfo.status === -1) {
|
||||
state.projectInfo.stageProcessList.forEach((t) => {
|
||||
t.statusName = '已结束';
|
||||
t.taskProcessList?.forEach((s) => s.statusName = '已结束')
|
||||
})
|
||||
return
|
||||
t.statusName = "已结束";
|
||||
t.taskProcessList?.forEach((s) => s.statusName = "已结束");
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (state.projectInfo.unlockMode === 1) {
|
||||
state.projectInfo.stageProcessList.forEach((t) => {
|
||||
t.statusName = '进行中'
|
||||
t.taskProcessList?.forEach((s) => s.statusName = (s.status === 1) ? '已完成' : TASK_TYPES.toName[s.type])
|
||||
t.taskProcessList?.every((s) => s.status === 1) && (t.statusName = '已完成')
|
||||
})
|
||||
return
|
||||
t.statusName = "进行中";
|
||||
t.taskProcessList?.forEach((s) => s.statusName = (s.status === 1) ? "已完成" : TASK_TYPES.toName[s.type]);
|
||||
t.taskProcessList?.every((s) => s.status === 1) && (t.statusName = "已完成");
|
||||
});
|
||||
return;
|
||||
}
|
||||
state.projectInfo.stageProcessList?.some((t) => {
|
||||
t.statusName = '已完成'
|
||||
t.statusName = "已完成";
|
||||
const stageState = t.taskProcessList?.some((s) => {
|
||||
s.unlock = true
|
||||
s.statusName = '已完成'
|
||||
s.status !== 1 && (s.statusName = TASK_TYPES.toName[s.type])
|
||||
return state.projectInfo.unlockMode === 2 ? s.status !== 1 : (s.status !== 1 && s.flag)
|
||||
})
|
||||
stageState && (t.statusName = '进行中');
|
||||
return stageState
|
||||
})
|
||||
s.unlock = true;
|
||||
s.statusName = "已完成";
|
||||
s.status === 2 ? (s.statusName = "进行中") : (!s.status && (s.statusName = TASK_TYPES.toName[s.type]));
|
||||
return state.projectInfo.unlockMode === 2 ? s.status !== 1 : (s.status !== 1 && s.flag);
|
||||
});
|
||||
stageState && (t.statusName = "进行中");
|
||||
return stageState;
|
||||
});
|
||||
},
|
||||
SET_ROUTER_INFO(state, info) {
|
||||
state.routerInfo = info
|
||||
state.routerInfo = info;
|
||||
},
|
||||
INIT_ROUTER_INFO(state) {
|
||||
// state.routerInfo.unlockMode 1自由模式 2闯关模式 3 闯关模式 必修 flag true
|
||||
if (state.routerInfo.status === -1) {
|
||||
state.routerInfo.statusName = '已结束'
|
||||
state.routerInfo.taskBoList.forEach((t) => t.statusName = '已结束')
|
||||
return
|
||||
state.routerInfo.statusName = "已结束";
|
||||
state.routerInfo.taskBoList.forEach((t) => t.statusName = "已结束");
|
||||
return;
|
||||
}
|
||||
state.routerInfo.statusName = '进行中'
|
||||
state.routerInfo.statusName = "进行中";
|
||||
if (state.routerInfo.unlockMode === 1) {
|
||||
state.routerInfo.taskBoList?.forEach((s) => s.statusName = (s.status === 1) ? '已完成' : TASK_TYPES.toName[s.type])
|
||||
state.routerInfo.taskBoList?.every((s) => s.status === 1) && (state.routerInfo.statusName = '已完成')
|
||||
return
|
||||
state.routerInfo.taskBoList?.forEach((s) => s.statusName = (s.status === 1) ? "已完成" : TASK_TYPES.toName[s.type]);
|
||||
state.routerInfo.taskBoList?.every((s) => s.status === 1) && (state.routerInfo.statusName = "已完成");
|
||||
return;
|
||||
}
|
||||
state.routerInfo.statusName = '已完成'
|
||||
state.routerInfo.statusName = "已完成";
|
||||
state.routerInfo.taskBoList?.some((s) => {
|
||||
s.unlock = true
|
||||
s.statusName = '已完成'
|
||||
s.status !== 1 && (s.statusName = TASK_TYPES.toName[s.type])
|
||||
return state.routerInfo.unlockMode === 2 ? s.status !== 1 : (s.status !== 1 && s.flag)
|
||||
}) && (state.routerInfo.statusName = '进行中')
|
||||
s.unlock = true;
|
||||
s.statusName = "已完成";
|
||||
s.status === 2 ? (s.statusName = "进行中") : (!s.status && (s.statusName = TASK_TYPES.toName[s.type]));
|
||||
// s.status !== 1 && (s.statusName = TASK_TYPES.toName[s.type]);
|
||||
return state.routerInfo.unlockMode === 2 ? s.status !== 1 : (s.status !== 1 && s.flag);
|
||||
}) && (state.routerInfo.statusName = "进行中");
|
||||
},
|
||||
},
|
||||
actions: {
|
||||
getProjectInfo(content, { projectId }) {
|
||||
request(PROJECT_PROCESS, { projectId, type: 1 }).then(res => {
|
||||
content.commit('SET_PROJECT_INFO', res.data)
|
||||
content.commit('INIT_PROJECT_INFO')
|
||||
})
|
||||
content.commit("SET_PROJECT_INFO", res.data);
|
||||
content.commit("INIT_PROJECT_INFO");
|
||||
});
|
||||
},
|
||||
getRouterInfo(content, {routerId}) {
|
||||
request(ROUTER_PROCESS, {routerId,type:2}).then(res => {
|
||||
content.commit('SET_ROUTER_INFO', res.data)
|
||||
content.commit('INIT_ROUTER_INFO')
|
||||
})
|
||||
getRouterInfo(content, { routerId, chapterId }) {
|
||||
request(ROUTER_PROCESS, chapterId ? { routerId, type: 2, chapterId } : { routerId, type: 2 }).then(res => {
|
||||
content.commit("SET_ROUTER_INFO", res.data);
|
||||
content.commit("INIT_ROUTER_INFO");
|
||||
});
|
||||
},
|
||||
},
|
||||
modules: {}
|
||||
})
|
||||
});
|
||||
|
||||
@@ -186,12 +186,12 @@
|
||||
</template>
|
||||
<script setup>
|
||||
import {useRequest} from "@/api/request";
|
||||
import {VOTE_DETAIL3, VOTE_DETAIL_SUBMIT} from "@/api/api";
|
||||
import {VOTE_DETAIL3, VOTE_DETAIL_SUBMIT, EditVoteInvolvedAndBrowse} from "@/api/api";
|
||||
import dayjs from "dayjs";
|
||||
import store from "@/store";
|
||||
import {ElMessage} from "element-plus";
|
||||
import {useRoute, useRouter} from "vue-router/dist/vue-router";
|
||||
import {computed} from "vue";
|
||||
import {computed,watch} from "vue";
|
||||
import {useTaskPage} from "@/api/useCommon";
|
||||
|
||||
const {
|
||||
@@ -206,6 +206,11 @@ const { data: dataInfo } = useRequest(VOTE_DETAIL3(courseId), {type});
|
||||
const userInfo = computed(() => store.state.userInfo);
|
||||
const answerTime = dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss");
|
||||
|
||||
// 增加浏览量
|
||||
watch(dataInfo, () => {
|
||||
useRequest(EditVoteInvolvedAndBrowse, {operationType:'2', voteId:dataInfo.value.id });
|
||||
})
|
||||
|
||||
// 选择题目
|
||||
const choiceQuestion = (item, value) => {
|
||||
if (dataInfo.value.isSubmit) {
|
||||
@@ -245,6 +250,8 @@ const submitVote = () => {
|
||||
voteName: dataInfo.value.voteName,
|
||||
};
|
||||
useRequest(VOTE_DETAIL_SUBMIT, obj);
|
||||
// 增加参与数目
|
||||
useRequest(EditVoteInvolvedAndBrowse, {operationType:'1', voteId:dataInfo.value.id });
|
||||
};
|
||||
</script>
|
||||
<!-- Add "scoped" attribute to limit CSS to this component only -->
|
||||
|
||||
@@ -411,6 +411,7 @@ const getData = () => {
|
||||
request(COMMENT_LIST, {
|
||||
id: e.data.id,
|
||||
type: 1,
|
||||
current:hfPage.value.currentPage,
|
||||
pageNo:hfPage.value.currentPage,
|
||||
pageSize:10
|
||||
}).then(res=>{
|
||||
|
||||
@@ -388,6 +388,7 @@ const getData = () => {
|
||||
request(COMMENT_LIST, {
|
||||
id: courseId,
|
||||
type: 2,
|
||||
current:hfPage.value.currentPage,
|
||||
pageNo:hfPage.value.currentPage,
|
||||
pageSize:10
|
||||
}).then(res=>{
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="goclass"
|
||||
<div v-if="isStudy=='true'" class="goclass"
|
||||
:style="{ background: (value.statusName !== '已结束' && (value.statusName || data.unlockMode === 1)) ? '#2478ff' : '#999' }"
|
||||
@click="toFinish(value)">
|
||||
{{ value.statusName || (data.unlockMode === 1 ? TASK_TYPES.toName[value.type] : "未解锁") }}
|
||||
@@ -174,7 +174,7 @@
|
||||
<div class="box"></div>
|
||||
</div>
|
||||
|
||||
<div class="rate">
|
||||
<div v-if="isStudy=='true'" class="rate">
|
||||
<div class="ratetext">上次学到:{{ data.lastLearned }}</div>
|
||||
<div v-if="data.lastLearned" class="ratebtn" @click="continueLearn(data.lastLearned, data.taskBoList)">
|
||||
继续学习
|
||||
@@ -289,7 +289,7 @@ import FileTypeImg from "@/components/FileTypeImg.vue";
|
||||
import {useStore} from "vuex";
|
||||
|
||||
const {
|
||||
query: { routerId, routerName },
|
||||
query: { routerId, routerName, isStudy, chapterId },
|
||||
} = useRoute();
|
||||
const router = useRouter();
|
||||
const returnclick = () => {
|
||||
@@ -303,7 +303,7 @@ console.log(data);
|
||||
const activeName = ref("first");
|
||||
|
||||
onMounted(() => {
|
||||
dispatch("getRouterInfo", { routerId });
|
||||
dispatch("getRouterInfo", { routerId, chapterId });
|
||||
});
|
||||
|
||||
const handleClick = (tab, event) => {
|
||||
|
||||
@@ -164,6 +164,9 @@ export default defineConfig(({ command, mode }) =>
|
||||
},'/evaluation/queryEvaluationTaskStatusOne': {
|
||||
target: loadEnv(mode, process.cwd()).VITE_PROXY_URL,
|
||||
changeOrigin: true,
|
||||
},'/vote/editVoteInvolvedAndBrowse': {
|
||||
target: loadEnv(mode, process.cwd()).VITE_PROXY_URL,
|
||||
changeOrigin: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user