mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/fe-student.git
synced 2025-12-11 20:06:49 +08:00
Merge remote-tracking branch 'origin/manage-release'
# Conflicts: # src/App.vue # src/views/faceteach/FaceTeachSignUp.vue
This commit is contained in:
@@ -88,7 +88,7 @@ export const QueryDiscussSubmitDetailByDiscussId = '/discussSubmit/queryDiscussS
|
|||||||
export const EvaluationToLearn = '/evaluation/evaluationToLearn post'
|
export const EvaluationToLearn = '/evaluation/evaluationToLearn post'
|
||||||
|
|
||||||
// 个人/小组完成度排行
|
// 个人/小组完成度排行
|
||||||
export const CompletionList = `/stu/project/rank_list/completion_list`
|
export const CompletionList = `/stu/project/rank_list/project_rank_list`
|
||||||
|
|
||||||
// 积分排行榜
|
// 积分排行榜
|
||||||
export const PointList = `/stu/project/rank_list/point_list`
|
export const PointList = `/stu/project/rank_list/point_list`
|
||||||
@@ -126,5 +126,8 @@ export const QueryEvaluationTaskStatusOne = `/evaluation/queryEvaluationTaskStat
|
|||||||
// 投票浏览和参与数目
|
// 投票浏览和参与数目
|
||||||
export const EditVoteInvolvedAndBrowse = `/vote/editVoteInvolvedAndBrowse post`
|
export const EditVoteInvolvedAndBrowse = `/vote/editVoteInvolvedAndBrowse post`
|
||||||
|
|
||||||
|
//查询路径关卡列表
|
||||||
|
export const ROUTER_DETAIL_CHAPTER_LIST = `/stu/router/chapterPcList`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,10 @@ export function getCookie(name) {
|
|||||||
return document.cookie?.split(";").find(e => e.includes(name))?.replace(`${name}=`, '') || ''
|
return document.cookie?.split(";").find(e => e.includes(name))?.replace(`${name}=`, '') || ''
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function delCookie(name){
|
||||||
|
setCookie(name, "", -1)
|
||||||
|
}
|
||||||
|
|
||||||
export function useUserInfo(id) {
|
export function useUserInfo(id) {
|
||||||
const userInfo = ref({})
|
const userInfo = ref({})
|
||||||
watch(id, () => {
|
watch(id, () => {
|
||||||
|
|||||||
@@ -6,34 +6,34 @@
|
|||||||
background:`url('${imgAttr.backurl}') no-repeat`,
|
background:`url('${imgAttr.backurl}') no-repeat`,
|
||||||
backgroundSize: 'contain'
|
backgroundSize: 'contain'
|
||||||
}">
|
}">
|
||||||
<div v-if="detail.chapterDtoList" v-for="(item,i) in detail.chapterDtoList.slice(0,8)" :key="i" class="cha"
|
<div v-if="detail.chapterDtoList" v-for="(item,i) in showList" :key="i" class="cha"
|
||||||
:style="{top:`${imgAttr.positions[i]?.top - (current===i?5:0)}px`,left:`${imgAttr.positions[i]?.left - (current===i?10:0)}px`}">
|
:style="{top:`${imgAttr.positions[i]?.top - (currentIndex===i?5:0)}px`,left:`${imgAttr.positions[i]?.left - (currentIndex===i?10:0)}px`}">
|
||||||
<div @click="toDetail(i)"
|
<div @click="toDetail(i)"
|
||||||
class="nameClass"
|
class="nameClass"
|
||||||
:title="item.name"
|
:title="item.name"
|
||||||
:style="{
|
:style="{
|
||||||
background: `url('${current===i?imgAttr.currentBack:imgAttr.nameBack}')`,
|
background: `url('${currentIndex===i?imgAttr.currentBack:imgAttr.nameBack}')`,
|
||||||
backgroundSize:'100%',
|
backgroundSize:'100%',
|
||||||
width:`${current===i?107:93}px`,
|
width:`${currentIndex===i?107:93}px`,
|
||||||
height:`${current===i?imgAttr.cheightC:imgAttr.cheight}px`,
|
height:`${currentIndex===i?imgAttr.cheightC:imgAttr.cheight}px`,
|
||||||
lineHeight:'50px',color: current===i?imgAttr.ccolors:imgAttr.colors}">
|
lineHeight:'50px',color: currentIndex===i?imgAttr.ccolors:imgAttr.colors}">
|
||||||
{{ item.name }}
|
{{ item.name }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
import {computed, defineProps, ref} from "vue";
|
import {computed, defineProps, ref, watch} from "vue";
|
||||||
import {ElMessage} from "element-plus";
|
import {ElMessage} from "element-plus";
|
||||||
import back from '@/assets/image/pathdetails/pathDetailBack.png'
|
import back from "@/assets/image/pathdetails/pathDetailBack.png";
|
||||||
import nameBack from '@/assets/image/pathdetails/pathDetailImg.png'
|
import nameBack from "@/assets/image/pathdetails/pathDetailImg.png";
|
||||||
import currentBack from '@/assets/image/pathdetails/pathDetailImgSelect.png'
|
import currentBack from "@/assets/image/pathdetails/pathDetailImgSelect.png";
|
||||||
import back1 from '@/assets/image/pathdetails/back1.png'
|
import back1 from "@/assets/image/pathdetails/back1.png";
|
||||||
import nameBack1 from '@/assets/image/pathdetails/nameBack1.png'
|
import nameBack1 from "@/assets/image/pathdetails/nameBack1.png";
|
||||||
import currentBack1 from '@/assets/image/pathdetails/currentBack1.png'
|
import currentBack1 from "@/assets/image/pathdetails/currentBack1.png";
|
||||||
import back2 from '@/assets/image/pathdetails/back2.png'
|
import back2 from "@/assets/image/pathdetails/back2.png";
|
||||||
import nameBack2 from '@/assets/image/pathdetails/nameBack2.png'
|
import nameBack2 from "@/assets/image/pathdetails/nameBack2.png";
|
||||||
import currentBack2 from '@/assets/image/pathdetails/currentBack2.png'
|
import currentBack2 from "@/assets/image/pathdetails/currentBack2.png";
|
||||||
import {useRouter} from "vue-router/dist/vue-router";
|
import {useRouter} from "vue-router/dist/vue-router";
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
@@ -43,11 +43,11 @@ const props = defineProps({
|
|||||||
type: Object,
|
type: Object,
|
||||||
default: {}
|
default: {}
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const visiable = ref(true)
|
const visiable = ref(true);
|
||||||
const imageAttrs = {
|
const imageAttrs = {
|
||||||
'路径图背景': {
|
"路径图背景": {
|
||||||
width: 1437,
|
width: 1437,
|
||||||
height: 594,
|
height: 594,
|
||||||
cheight: 70,
|
cheight: 70,
|
||||||
@@ -55,8 +55,8 @@ const imageAttrs = {
|
|||||||
backurl: back,
|
backurl: back,
|
||||||
currentBack: currentBack,
|
currentBack: currentBack,
|
||||||
nameBack: nameBack,
|
nameBack: nameBack,
|
||||||
ccolors: '#FFF',
|
ccolors: "#FFF",
|
||||||
colors: '#FFF',
|
colors: "#FFF",
|
||||||
positions: [
|
positions: [
|
||||||
{ left: 50, top: 425 },
|
{ left: 50, top: 425 },
|
||||||
{ left: 440, top: 425 },
|
{ left: 440, top: 425 },
|
||||||
@@ -68,7 +68,7 @@ const imageAttrs = {
|
|||||||
{ left: 1000, top: 25 },
|
{ left: 1000, top: 25 },
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
'路径图2': {
|
"路径图2": {
|
||||||
width: 1437,
|
width: 1437,
|
||||||
height: 594,
|
height: 594,
|
||||||
cheight: 100,
|
cheight: 100,
|
||||||
@@ -76,8 +76,8 @@ const imageAttrs = {
|
|||||||
backurl: back2,
|
backurl: back2,
|
||||||
currentBack: currentBack2,
|
currentBack: currentBack2,
|
||||||
nameBack: nameBack2,
|
nameBack: nameBack2,
|
||||||
ccolors: '#FFF3E5',
|
ccolors: "#FFF3E5",
|
||||||
colors: '#FFF',
|
colors: "#FFF",
|
||||||
positions: [
|
positions: [
|
||||||
{ left: 40, top: 380 },
|
{ left: 40, top: 380 },
|
||||||
{ left: 160, top: 290 },
|
{ left: 160, top: 290 },
|
||||||
@@ -89,7 +89,7 @@ const imageAttrs = {
|
|||||||
{ left: 1060, top: 30 },
|
{ left: 1060, top: 30 },
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
'路径图3': {
|
"路径图3": {
|
||||||
width: 1437,
|
width: 1437,
|
||||||
height: 594,
|
height: 594,
|
||||||
cheight: 70,
|
cheight: 70,
|
||||||
@@ -97,8 +97,8 @@ const imageAttrs = {
|
|||||||
backurl: back1,
|
backurl: back1,
|
||||||
currentBack: currentBack1,
|
currentBack: currentBack1,
|
||||||
nameBack: nameBack1,
|
nameBack: nameBack1,
|
||||||
ccolors: '#FFF',
|
ccolors: "#FFF",
|
||||||
colors: '#A06438',
|
colors: "#A06438",
|
||||||
positions: [
|
positions: [
|
||||||
{ left: 20, top: 390 },
|
{ left: 20, top: 390 },
|
||||||
{ left: 210, top: 380 },
|
{ left: 210, top: 380 },
|
||||||
@@ -110,14 +110,27 @@ const imageAttrs = {
|
|||||||
{ left: 1050, top: 60 },
|
{ left: 1050, top: 60 },
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
const imgAttr = computed(() => imageAttrs[Object.keys(imageAttrs).find(e => props.img&&props.img.includes(e))] || {})
|
const imgAttr = computed(() => imageAttrs[Object.keys(imageAttrs).find(e => props.img && props.img.includes(e))] || {});
|
||||||
console.log(imgAttr)
|
const current = computed(() => props.detail.chapterDtoList.findIndex(e => e.id === props.detail.currentStageId));
|
||||||
const current = computed(() => props.detail.chapterDtoList.findIndex(e => e.id === props.detail.currentStageId))
|
//当关卡太多时只显示 当前关卡中间8个
|
||||||
|
const currentIndex = computed(() => {
|
||||||
|
if (props.detail.chapterDtoList?.length <= 8) {
|
||||||
|
return current.value;
|
||||||
|
}
|
||||||
|
return current.value < 3 ? current.value : props.detail.chapterDtoList.length - current.value <= 4 ? (8 - (props.detail.chapterDtoList.length - current.value)) : 3;
|
||||||
|
});
|
||||||
|
const startIndex = computed(() => {
|
||||||
|
if (props.detail.chapterDtoList?.length <= 8) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return current.value < 3 ? 0 : props.detail.chapterDtoList.length - current.value <= 4 ? props.detail.chapterDtoList.length - 8 : current.value - 3;
|
||||||
|
});
|
||||||
|
const showList = computed(() => props.detail.chapterDtoList?.length <= 8 ? props.detail.chapterDtoList : props.detail.chapterDtoList?.slice(startIndex.value, startIndex.value + 8));
|
||||||
|
|
||||||
function show() {
|
function show() {
|
||||||
visiable.value = true
|
visiable.value = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function toDetail(i) {
|
function toDetail(i) {
|
||||||
@@ -125,23 +138,23 @@ function toDetail(i) {
|
|||||||
let previewSetting = props.detail.previewSetting;
|
let previewSetting = props.detail.previewSetting;
|
||||||
let studySetting = props.detail.studySetting;
|
let studySetting = props.detail.studySetting;
|
||||||
let isStudy = false;
|
let isStudy = false;
|
||||||
let chapterId = props.detail.chapterDtoList[i].id
|
let chapterId = props.detail.chapterDtoList[i].id;
|
||||||
console.log(studySetting)
|
console.log(studySetting);
|
||||||
if (previewSetting == null) {
|
if (previewSetting == null) {
|
||||||
// 如果未设置预览 则只可以看当前关卡 其余关卡不让点击
|
// 如果未设置预览 则只可以看当前关卡 其余关卡不让点击
|
||||||
if (current.value !== i) {
|
if (current.value !== i) {
|
||||||
ElMessage.warning("当前关卡不可预览");
|
ElMessage.warning("当前关卡不可预览");
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
isStudy = true;
|
isStudy = true;
|
||||||
} else {
|
} else {
|
||||||
if (current.value !== i) {
|
if (current.value !== i) {
|
||||||
let lookArr = [];
|
let lookArr = [];
|
||||||
lookArr = previewSetting.split(',')
|
lookArr = previewSetting.split(",");
|
||||||
if ((i + 1) >= lookArr[0] && (i + 1) <= lookArr[1]) {
|
if ((i + 1) >= lookArr[0] && (i + 1) <= lookArr[1]) {
|
||||||
if (studySetting !== null) {
|
if (studySetting !== null) {
|
||||||
let studyArr = [];
|
let studyArr = [];
|
||||||
studyArr = studySetting.split(',')
|
studyArr = studySetting.split(",");
|
||||||
if ((i + 1) >= studyArr[0] && (i + 1) <= studyArr[1]) {
|
if ((i + 1) >= studyArr[0] && (i + 1) <= studyArr[1]) {
|
||||||
isStudy = true;
|
isStudy = true;
|
||||||
} else {
|
} else {
|
||||||
@@ -152,7 +165,7 @@ function toDetail(i) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ElMessage.warning("当前关卡不可预览");
|
ElMessage.warning("当前关卡不可预览");
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
isStudy = true;
|
isStudy = true;
|
||||||
@@ -167,11 +180,11 @@ function toDetail(i) {
|
|||||||
`${window.location.protocol + import.meta.env.VITE_BOE_PATH_DETAIL_URL}/pathdetails¶ms=${encodeURIComponent(
|
`${window.location.protocol + import.meta.env.VITE_BOE_PATH_DETAIL_URL}/pathdetails¶ms=${encodeURIComponent(
|
||||||
`routerId=${props.detail.id}&routerName=${props.detail.name}&chapterId=${chapterId}&isStudy=${isStudy}`
|
`routerId=${props.detail.id}&routerName=${props.detail.name}&chapterId=${chapterId}&isStudy=${isStudy}`
|
||||||
)}`
|
)}`
|
||||||
,'_top');
|
, "_top");
|
||||||
}
|
}
|
||||||
|
|
||||||
function close() {
|
function close() {
|
||||||
visiable.value = false
|
visiable.value = false;
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
@@ -186,6 +199,7 @@ function close() {
|
|||||||
position: absolute;
|
position: absolute;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.nameClass {
|
.nameClass {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
|||||||
@@ -51,6 +51,17 @@ function handleChange(file) {
|
|||||||
f.uid = file.uid;
|
f.uid = file.uid;
|
||||||
file.raw = f;
|
file.raw = f;
|
||||||
console.log(file.raw)
|
console.log(file.raw)
|
||||||
|
if(file.raw.name.includes('.mp4') || file.raw.name.includes('.MP4')){
|
||||||
|
files.value = []
|
||||||
|
emit('update:value', files.value)
|
||||||
|
ElMessage.error(`暂不支持视频文件上传`);
|
||||||
|
return
|
||||||
|
}else if(file.raw.name.includes('.jpeg') || file.raw.name.includes('.JPEG')){
|
||||||
|
files.value = []
|
||||||
|
emit('update:value', files.value)
|
||||||
|
ElMessage.error(`暂不支持jpeg格式图片文件上传`);
|
||||||
|
return
|
||||||
|
}else{
|
||||||
imageRef.value.submit();
|
imageRef.value.submit();
|
||||||
|
|
||||||
if (file.response && file.response.code === 200) {
|
if (file.response && file.response.code === 200) {
|
||||||
@@ -65,6 +76,7 @@ function handleChange(file) {
|
|||||||
|
|
||||||
emit('update:value', files.value)
|
emit('update:value', files.value)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function remove(i) {
|
function remove(i) {
|
||||||
files.value.splice(i, 1)
|
files.value.splice(i, 1)
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ export default createStore({
|
|||||||
if (state.projectInfo.unlockMode === 1) {
|
if (state.projectInfo.unlockMode === 1) {
|
||||||
state.projectInfo.stageProcessList.forEach((t) => {
|
state.projectInfo.stageProcessList.forEach((t) => {
|
||||||
t.statusName = "进行中";
|
t.statusName = "进行中";
|
||||||
t.taskProcessList?.forEach((s) => s.statusName = (s.status === 1) ? "已完成" : TASK_TYPES.toName[s.type]);
|
t.taskProcessList?.forEach((s) => s.statusName = (s.status === 1) ? "已完成" : s.status === 2 ? (s.statusName = "进行中") : TASK_TYPES.toName[s.type]);
|
||||||
t.taskProcessList?.every((s) => s.status === 1) && (t.statusName = "已完成");
|
t.taskProcessList?.every((s) => s.status === 1) && (t.statusName = "已完成");
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
@@ -38,8 +38,8 @@ export default createStore({
|
|||||||
const stageState = t.taskProcessList?.some((s) => {
|
const stageState = t.taskProcessList?.some((s) => {
|
||||||
s.unlock = true;
|
s.unlock = true;
|
||||||
s.statusName = "已完成";
|
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.projectInfo.unlockMode === 2 ? s.status !== 1 : (s.status !== 1 && s.flag);
|
return state.projectInfo.unlockMode === 2 ? s.status !== 1 : (s.status !== 1 && s.flag)
|
||||||
});
|
});
|
||||||
stageState && (t.statusName = "进行中");
|
stageState && (t.statusName = "进行中");
|
||||||
return stageState;
|
return stageState;
|
||||||
@@ -57,7 +57,7 @@ export default createStore({
|
|||||||
}
|
}
|
||||||
state.routerInfo.statusName = "进行中";
|
state.routerInfo.statusName = "进行中";
|
||||||
if (state.routerInfo.unlockMode === 1) {
|
if (state.routerInfo.unlockMode === 1) {
|
||||||
state.routerInfo.taskBoList?.forEach((s) => s.statusName = (s.status === 1) ? "已完成" : TASK_TYPES.toName[s.type]);
|
state.routerInfo.taskBoList?.forEach((s) => s.statusName = (s.status === 1) ? "已完成" : s.status === 2 ? (s.statusName = "进行中") : TASK_TYPES.toName[s.type]);
|
||||||
state.routerInfo.taskBoList?.every((s) => s.status === 1) && (state.routerInfo.statusName = "已完成");
|
state.routerInfo.taskBoList?.every((s) => s.status === 1) && (state.routerInfo.statusName = "已完成");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -99,6 +99,7 @@
|
|||||||
style="width: 140px; height: 140px; border-radius: 8px"
|
style="width: 140px; height: 140px; border-radius: 8px"
|
||||||
:src="value.optionPictureAddress"
|
:src="value.optionPictureAddress"
|
||||||
/>
|
/>
|
||||||
|
<div v-else-if="isExistImg(item.optionDetailList)" style="width: 140px; height: 140px; border-radius: 8px"></div>
|
||||||
<div class="radio">
|
<div class="radio">
|
||||||
<label @click="choiceQuestion(item,value)">
|
<label @click="choiceQuestion(item,value)">
|
||||||
<div class="radio-img">
|
<div class="radio-img">
|
||||||
@@ -219,6 +220,18 @@ const choiceQuestion = (item, value) => {
|
|||||||
item.optionDetailList?.forEach(t => t.isAnswer = false);
|
item.optionDetailList?.forEach(t => t.isAnswer = false);
|
||||||
value.isAnswer = true;
|
value.isAnswer = true;
|
||||||
};
|
};
|
||||||
|
// 判断当前题目中是否有的选项有图片有的没有
|
||||||
|
const isExistImg = (data) => {
|
||||||
|
let exist = false;
|
||||||
|
data.forEach((i,n)=>{
|
||||||
|
console.log(i,n)
|
||||||
|
if(i.optionPictureAddress){
|
||||||
|
exist = true;
|
||||||
|
return exist;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return exist;
|
||||||
|
}
|
||||||
// 提交投票
|
// 提交投票
|
||||||
const submitVote = () => {
|
const submitVote = () => {
|
||||||
let nowTime = new Date().getTime();
|
let nowTime = new Date().getTime();
|
||||||
|
|||||||
@@ -118,7 +118,7 @@
|
|||||||
<div
|
<div
|
||||||
class="imgone"
|
class="imgone"
|
||||||
:style="{
|
:style="{
|
||||||
backgroundImage: `url('${img.url}')`,
|
backgroundImage: `url('${fielPath}${img.url}')`,
|
||||||
marginLeft: '15px',
|
marginLeft: '15px',
|
||||||
}"
|
}"
|
||||||
></div>
|
></div>
|
||||||
@@ -143,7 +143,7 @@
|
|||||||
<div class="bottom">
|
<div class="bottom">
|
||||||
<div v-for="(row, i) in commontList" :key="i" style="margin-bottom: 24px;">
|
<div v-for="(row, i) in commontList" :key="i" style="margin-bottom: 24px;">
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<img :src="row.studentAvatar" alt="" srcset="" class="avator">
|
<img :src="row.studentAvatar.includes('upload') ? row.studentAvatar : fielPath+row.studentAvatar" alt="" srcset="" class="avator">
|
||||||
<div class="id">{{ row.createName }}</div>
|
<div class="id">{{ row.createName }}</div>
|
||||||
<div class="showCareer">{{row.studentJobName}}</div>
|
<div class="showCareer">{{row.studentJobName}}</div>
|
||||||
<div class="idThink"></div>
|
<div class="idThink"></div>
|
||||||
@@ -156,7 +156,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div style="display:flex;margin-top: 12px;margin-bottom: 12px;">
|
<div style="display:flex;margin-top: 12px;margin-bottom: 12px;">
|
||||||
<div v-if="row.img" v-for="(rowimg, index) in row.img.split(',')" :key="index" style="width:55px;height:55px;margin-right: 12px;">
|
<div v-if="row.img" v-for="(rowimg, index) in row.img.split(',')" :key="index" style="width:55px;height:55px;margin-right: 12px;">
|
||||||
<img class="image" style="width:55px;height:55px;border-radius: 4px;" :src="rowimg" />
|
<img class="image" style="width:55px;height:55px;border-radius: 4px;" :src="fielPath+rowimg" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="intime">{{ row.ctime }}</div>
|
<div class="intime">{{ row.ctime }}</div>
|
||||||
@@ -184,16 +184,16 @@
|
|||||||
<div v-if="row.children.length!==0" :style="{height:spreadReply==i ? 'auto' : 210 +'px',overflow:'hidden',position: 'relative'}">
|
<div v-if="row.children.length!==0" :style="{height:spreadReply==i ? 'auto' : 210 +'px',overflow:'hidden',position: 'relative'}">
|
||||||
<div v-for="(replay, j) in row.children" :key="j">
|
<div v-for="(replay, j) in row.children" :key="j">
|
||||||
<div class="reply">
|
<div class="reply">
|
||||||
<img :src="replay.studentAvatar" alt="" srcset="" class="sameava avaone">
|
<img :src="replay.studentAvatar.includes('upload') ? replay.studentAvatar : fielPath+replay.studentAvatar" alt="" srcset="" class="sameava avaone">
|
||||||
<div class="sameuser">{{ replay.studentName }}</div>
|
<div class="sameuser">{{ replay.studentName }}</div>
|
||||||
<div class="centerreply">回复</div>
|
<div class="centerreply">回复</div>
|
||||||
<img :src="replay.targetStudentAvatar" alt="" srcset="" class="sameava avaone">
|
<img :src="replay.targetStudentAvatar.includes('upload') ? replay.targetStudentAvatar : fielPath+replay.targetStudentAvatar" alt="" srcset="" class="sameava avaone">
|
||||||
<div class="sameuser">{{ replay.targetStudentName }}</div>
|
<div class="sameuser">{{ replay.targetStudentName }}</div>
|
||||||
<div class="replytime">{{ replay.createTime }}</div>
|
<div class="replytime">{{ replay.createTime }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="display:flex;margin-top: 12px;margin-bottom: 12px;">
|
<div style="display:flex;margin-top: 12px;margin-bottom: 12px;">
|
||||||
<div v-if="replay.img" v-for="(rowimg, index) in replay.img.split(',')" :key="index" style="width:65px;height:65px;margin-right: 7px;">
|
<div v-if="replay.img" v-for="(rowimg, index) in replay.img.split(',')" :key="index" style="width:65px;height:65px;margin-right: 7px;">
|
||||||
<img class="image" style="width:65px;height:65px;border-radius: 4px;" :src="rowimg" />
|
<img class="image" style="width:65px;height:65px;border-radius: 4px;" :src="fielPath+rowimg" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="mainreply">
|
<div class="mainreply">
|
||||||
@@ -263,7 +263,7 @@
|
|||||||
<div
|
<div
|
||||||
class="imgone"
|
class="imgone"
|
||||||
:style="{
|
:style="{
|
||||||
backgroundImage: `url('${img.url}')`,
|
backgroundImage: `url('${fielPath}${img.url}')`,
|
||||||
marginLeft: '15px',
|
marginLeft: '15px',
|
||||||
}"
|
}"
|
||||||
></div>
|
></div>
|
||||||
@@ -324,6 +324,7 @@ import UploadPostImg from "@/components/img/UploadPostImg.vue";
|
|||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const refInput =ref()
|
const refInput =ref()
|
||||||
|
const fielPath = ref(import.meta.env.VITE_FILE_PATH);
|
||||||
const getFocus = () => {
|
const getFocus = () => {
|
||||||
refInput.value.focus()
|
refInput.value.focus()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -307,7 +307,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { computed, reactive, toRefs, watch, onUnmounted } from "vue";
|
import { computed, reactive, toRefs, watch, onUnmounted, ref } from "vue";
|
||||||
import FileTypeImg from "@/components/FileTypeImg.vue";
|
import FileTypeImg from "@/components/FileTypeImg.vue";
|
||||||
import { request, useRequest } from "@/api/request";
|
import { request, useRequest } from "@/api/request";
|
||||||
import {
|
import {
|
||||||
@@ -343,8 +343,10 @@ const { activeName, enclosure, isAllowSign } = toRefs(state);
|
|||||||
const handleClick = (tab, event) => {
|
const handleClick = (tab, event) => {
|
||||||
console.log("附件", tab, event);
|
console.log("附件", tab, event);
|
||||||
};
|
};
|
||||||
|
const fielPath = ref(import.meta.env.VITE_FILE_PATH);
|
||||||
const download = (url) => {
|
const download = (url) => {
|
||||||
window.open(url);
|
console.log(fielPath.value+url)
|
||||||
|
window.open(fielPath.value+url);
|
||||||
};
|
};
|
||||||
const downloads = (url) => {
|
const downloads = (url) => {
|
||||||
ElMessage.warning("未到开始时间,请耐心等待!");
|
ElMessage.warning("未到开始时间,请耐心等待!");
|
||||||
@@ -445,8 +447,12 @@ const signClick = () => {
|
|||||||
|
|
||||||
data.value.signFlag = 1;
|
data.value.signFlag = 1;
|
||||||
ElMessage.warning("签到成功");
|
ElMessage.warning("签到成功");
|
||||||
|
let taskId = courseId
|
||||||
|
console.log("taskId:" + taskId)
|
||||||
|
console.log("courseId:" + courseId)
|
||||||
|
console.log("请求入参:" + JSON.stringify( { courseId: courseId,taskId: taskId,type:type }))
|
||||||
|
|
||||||
request(TASK_OFFCOURSE_NOTASK_SIGN, { courseId: courseId });
|
request(TASK_OFFCOURSE_NOTASK_SIGN, { courseId: courseId,taskId: taskId,type:type });
|
||||||
};
|
};
|
||||||
|
|
||||||
function toSurvery() {
|
function toSurvery() {
|
||||||
@@ -467,10 +473,10 @@ function toSurvery() {
|
|||||||
router.push({
|
router.push({
|
||||||
path: "/surveydetail",
|
path: "/surveydetail",
|
||||||
query: {
|
query: {
|
||||||
id: taskId,
|
id: data.value.planDto.id,
|
||||||
courseId: data.value.planDto.evaluateId,
|
courseId: data.value.planDto.assessmentId,
|
||||||
pName: "面授课",
|
pName: "面授课",
|
||||||
infoId: data.value.planDto.offcoursePlanId,
|
infoId: data.value.planDto.id,
|
||||||
chapterOrStageId: 0,
|
chapterOrStageId: 0,
|
||||||
sName: data.value.planDto.name,
|
sName: data.value.planDto.name,
|
||||||
type: 3,
|
type: 3,
|
||||||
|
|||||||
@@ -29,8 +29,7 @@
|
|||||||
<img style="width: 15px; height: 17px" src="../../assets/image/time.png"/>
|
<img style="width: 15px; height: 17px" src="../../assets/image/time.png"/>
|
||||||
<div style="margin-left: 8px">
|
<div style="margin-left: 8px">
|
||||||
{{
|
{{
|
||||||
dayjs(data.planDto?.beginTime).format('YYYY-MM-DD HH:mm') + " 至 " +
|
data.planDto?.beginTime + " 至 " + data.planDto?.endTime
|
||||||
dayjs(data.planDto?.endTime).format('YYYY-MM-DD HH:mm')
|
|
||||||
}}
|
}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -39,7 +38,23 @@
|
|||||||
<div style="margin-left: 8px">{{ data.planDto?.address }}</div>
|
<div style="margin-left: 8px">{{ data.planDto?.address }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="time" style="margin-top: 37px">
|
<div class="time" style="margin-top: 37px">
|
||||||
<el-button class="btn" style="margin-right: 20px;width: 160px;height: 46px;" v-if="data.hasTask || data.planDto.applyFlag" :disabled="dayjs(data.planDto?.endTime) < dayjs(new Date())" @click="onLineSignUp" :style="{ background: (data.isSignUp || (dayjs(data.planDto?.endTime) < dayjs(new Date()))) ? '#999' : 'rgb(57, 146, 249)'}">{{data.isSignUp ?'已报名':'立即报名'}}</el-button>
|
<botton
|
||||||
|
class="btn"
|
||||||
|
style="margin-right: 20px;width: 160px;height: 46px;"
|
||||||
|
v-if="data.planDto.applyFlag"
|
||||||
|
@click="onLineSignUp(false)"
|
||||||
|
:style="{ background: isAllowSign?data.isSignUp || data.isRefused ? '#999' : 'rgb(57, 146, 249)':'#999'}">
|
||||||
|
{{
|
||||||
|
data.isRefused ? '审核拒绝' : data.isSignUp? '已报名' :'立即报名'
|
||||||
|
}}
|
||||||
|
</botton>
|
||||||
|
<botton
|
||||||
|
v-if="data.isRefused && !data.isSignUpAgain"
|
||||||
|
class="btn"
|
||||||
|
style="margin-right: 20px;width: 160px;height: 46px;"
|
||||||
|
@click="onLineSignUp(true)">
|
||||||
|
重新报名
|
||||||
|
</botton>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -262,12 +277,12 @@
|
|||||||
</div>
|
</div>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="材料下载" name="four" >
|
<el-tab-pane label="材料下载" name="four" >
|
||||||
<div v-if="data.offcourseDto?.attach == ''"
|
<div v-if="data.planDto?.attach == ''"
|
||||||
style="font-size: 14px;font-weight: 400; line-height: 24px; cursor: pointer;margin-left: 40px; margin-top: 20px;">
|
style="font-size: 14px;font-weight: 400; line-height: 24px; cursor: pointer;margin-left: 40px; margin-top: 20px;">
|
||||||
此课程无附件
|
此课程无附件
|
||||||
</div>
|
</div>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
<div v-for="(el, index) in formateArr(data.offcourseDto.attach)" :key="index" class="enclosure"
|
<div v-for="(el, index) in formateArr(data.planDto.attach)" :key="index" class="enclosure"
|
||||||
:style="{ borderBottom: '1px solid rgba(56, 125, 247, 0.2)' }">
|
:style="{ borderBottom: '1px solid rgba(56, 125, 247, 0.2)' }">
|
||||||
<div class="enclosureL">
|
<div class="enclosureL">
|
||||||
<FileTypeImg :v-model="el.slice(el.lastIndexOf('/')+1,el.indexOf('-')) + el.slice(el.lastIndexOf('.'))" :style="{
|
<FileTypeImg :v-model="el.slice(el.lastIndexOf('/')+1,el.indexOf('-')) + el.slice(el.lastIndexOf('.'))" :style="{
|
||||||
@@ -279,12 +294,12 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="download">
|
<div class="download">
|
||||||
<img style="width: 16px; height: 15px" src="../../assets/image/download.png"/>
|
<img style="width: 16px; height: 15px" src="../../assets/image/download.png"/>
|
||||||
<div style="margin-left: 5px;color:#999;">
|
<!-- <div style="margin-left: 5px;color:#999;">
|
||||||
下载
|
|
||||||
</div>
|
|
||||||
<!-- <div style="margin-left: 5px;color:#999;" @click="download(el)">
|
|
||||||
下载
|
下载
|
||||||
</div> -->
|
</div> -->
|
||||||
|
<div style="margin-left: 5px;color:#2478ff;" @click="download(el)">
|
||||||
|
下载
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -357,15 +372,30 @@ const {activeName, enclosure, isAllowSign} = toRefs(state);
|
|||||||
const handleClick = (tab, event) => {
|
const handleClick = (tab, event) => {
|
||||||
console.log("附件", tab, event);
|
console.log("附件", tab, event);
|
||||||
};
|
};
|
||||||
|
const fielPath = ref(import.meta.env.VITE_FILE_PATH);
|
||||||
const download = (url) => {
|
const download = (url) => {
|
||||||
// console.log('下载url',url)
|
console.log('下载url',fielPath.value+url)
|
||||||
window.open(url);
|
window.open(fielPath.value+url);
|
||||||
};
|
};
|
||||||
const downloads = (url) => {
|
const downloads = (url) => {
|
||||||
ElMessage.warning("未在有效时间范围内,请耐心等待!");
|
ElMessage.warning("未在有效时间范围内,请耐心等待!");
|
||||||
};
|
};
|
||||||
let timer = null;
|
|
||||||
|
|
||||||
|
//判断能否报名 (TODO-大于面授课截止时间就不能报名了,其余均可以)
|
||||||
|
function isSignClick() {
|
||||||
|
let endTime = new Date(data.value.planDto?.endTime).getTime()
|
||||||
|
let nowTime = new Date().getTime();
|
||||||
|
if (nowTime < endTime) {
|
||||||
|
state.isAllowSign = true;
|
||||||
|
} else {
|
||||||
|
state.isAllowSign = false;
|
||||||
|
}
|
||||||
|
console.log(state.isAllowSign)
|
||||||
|
}
|
||||||
|
|
||||||
|
watch(data,()=>{
|
||||||
|
isSignClick();
|
||||||
|
})
|
||||||
|
|
||||||
// 查看更多-展开回复列表
|
// 查看更多-展开回复列表
|
||||||
function lookMore(i) {
|
function lookMore(i) {
|
||||||
@@ -541,13 +571,21 @@ function submitReplayComment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 报名
|
// 报名
|
||||||
function onLineSignUp() {
|
function onLineSignUp(isAgain) {
|
||||||
if(data.value.isSignUp){
|
if (!state.isAllowSign) {
|
||||||
|
// console.log("data.signFlag", data.value.signFlag, isAllowSign);
|
||||||
|
ElMessage.warning("未在允许报名时间范围内");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(data.value.isSignUp && !isAgain){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
request(FACETEACH_SIGNUP, {courseId})
|
request(FACETEACH_SIGNUP, {courseId})
|
||||||
data.value.isSignUp = true
|
data.value.isSignUp = true
|
||||||
ElMessage.success("报名成功");
|
//重置按钮
|
||||||
|
data.value.isSignUpAgain = isAgain;
|
||||||
|
data.value.isRefused = false;
|
||||||
|
ElMessage.success(isAgain? "重新报名成功" : "报名成功");
|
||||||
}
|
}
|
||||||
|
|
||||||
function formateArr(strs) {
|
function formateArr(strs) {
|
||||||
|
|||||||
@@ -229,7 +229,7 @@
|
|||||||
<!-- <div style="font-size: 14px;color: rgba(51, 51, 51, 1);font-weight: 600;">完成度排行榜</div> -->
|
<!-- <div style="font-size: 14px;color: rgba(51, 51, 51, 1);font-weight: 600;">完成度排行榜</div> -->
|
||||||
<el-select @change="choiceStatus" v-model="stateValue" class="m-2" mode="tags" placeholder="完成度排行榜"
|
<el-select @change="choiceStatus" v-model="stateValue" class="m-2" mode="tags" placeholder="完成度排行榜"
|
||||||
style="width: 130px;border: 0px solid red !important; box-shadow:none !important; ">
|
style="width: 130px;border: 0px solid red !important; box-shadow:none !important; ">
|
||||||
<el-option v-for="item in studyProgress" :key="item.value" :label="item.label" :value="item.value" />
|
<el-option v-for="item in studyProgress" :key="item.value" :label="item.label" :value="item.value" :disabled="item.label.includes('小组') && data.groupId==null?true:false" :title="item.label.includes('小组') && data.groupId==null?'当前学员无小组':''"/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</div>
|
</div>
|
||||||
<!-- line -->
|
<!-- line -->
|
||||||
@@ -267,7 +267,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- 学员列表 -->
|
<!-- 学员列表 -->
|
||||||
<div>
|
<div>
|
||||||
<div v-for="(item, i) in tableRankData" :key="i"
|
<div v-for="(item, i) in tableRankData.slice(0,5)" :key="i"
|
||||||
style="display: flex;justify-content: center;align-items: center;width: 100%;position: relative;top:-60px;margin-bottom: 38px;">
|
style="display: flex;justify-content: center;align-items: center;width: 100%;position: relative;top:-60px;margin-bottom: 38px;">
|
||||||
<div
|
<div
|
||||||
style="font-size: 14px;color:rgba(36, 120, 255, 1);font-weight: 600;width:30%;display: flex;justify-content: center;align-items: center;position: relative;">
|
style="font-size: 14px;color:rgba(36, 120, 255, 1);font-weight: 600;width:30%;display: flex;justify-content: center;align-items: center;position: relative;">
|
||||||
@@ -290,7 +290,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 我的排名 -->
|
<!-- 我的排名 -->
|
||||||
<div v-if="myIndex > tableRankData.length"
|
<div v-if="myIndex > 5"
|
||||||
style="display: flex;justify-content: center;align-items: center;width: 100%;position: relative;top:-60px;margin-bottom: 38px;">
|
style="display: flex;justify-content: center;align-items: center;width: 100%;position: relative;top:-60px;margin-bottom: 38px;">
|
||||||
<div
|
<div
|
||||||
style="font-size: 14px;color:rgba(36, 120, 255, 1);font-weight: 600;width:30%;display: flex;justify-content: center;align-items: center;">
|
style="font-size: 14px;color:rgba(36, 120, 255, 1);font-weight: 600;width:30%;display: flex;justify-content: center;align-items: center;">
|
||||||
@@ -306,7 +306,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="myIndex > tableRankData.length"
|
<div v-if="myIndex > 5"
|
||||||
style="display: flex;justify-content: center;align-items: center;width: 100%;position: relative;top:-60px;margin-bottom: 38px;">
|
style="display: flex;justify-content: center;align-items: center;width: 100%;position: relative;top:-60px;margin-bottom: 38px;">
|
||||||
<div
|
<div
|
||||||
style="font-size: 14px;color:rgba(36, 120, 255, 1);font-weight: 600;width:30%;display: flex;justify-content: center;align-items: center;">
|
style="font-size: 14px;color:rgba(36, 120, 255, 1);font-weight: 600;width:30%;display: flex;justify-content: center;align-items: center;">
|
||||||
@@ -364,7 +364,7 @@ const { commit, dispatch, state } = useStore()
|
|||||||
const store = useStore()
|
const store = useStore()
|
||||||
const userInfo = computed(() => state.userInfo)
|
const userInfo = computed(() => state.userInfo)
|
||||||
const data = computed(() => state.projectInfo)
|
const data = computed(() => state.projectInfo)
|
||||||
|
console.log(data)
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
dispatch('getProjectInfo', { projectId })
|
dispatch('getProjectInfo', { projectId })
|
||||||
})
|
})
|
||||||
@@ -407,7 +407,6 @@ const tabChange = (tabs) => {
|
|||||||
myIndex.value = res.data.myIndex
|
myIndex.value = res.data.myIndex
|
||||||
myPoint.value = res.data.myPointsCount
|
myPoint.value = res.data.myPointsCount
|
||||||
})
|
})
|
||||||
tableRankData.value = 12
|
|
||||||
}
|
}
|
||||||
const myIndex = ref('')
|
const myIndex = ref('')
|
||||||
const myPoint = ref('')
|
const myPoint = ref('')
|
||||||
|
|||||||
@@ -52,7 +52,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<template #reference>
|
<template #reference>
|
||||||
<div class="titleR">进入未完成任务</div>
|
<!-- <div class="titleR">进入未完成任务</div>-->
|
||||||
</template>
|
</template>
|
||||||
</el-popover>
|
</el-popover>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
33
src/views/roadmap/PathChapterDetails.vue
Normal file
33
src/views/roadmap/PathChapterDetails.vue
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
<template>
|
||||||
|
<div class="mapdetail">
|
||||||
|
<PathDetailImage
|
||||||
|
:img="data?.picUrl"
|
||||||
|
:detail="data"
|
||||||
|
></PathDetailImage>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup>
|
||||||
|
import PathDetailImage from "@/components/PathDetailImage.vue";
|
||||||
|
import {useRequest} from "@/api/request";
|
||||||
|
import {ROUTER_DETAIL_CHAPTER_LIST} from "@/api/api";
|
||||||
|
import {useRoute} from "vue-router/dist/vue-router";
|
||||||
|
|
||||||
|
const {query:{routerId}} = useRoute()
|
||||||
|
const {data} = useRequest(ROUTER_DETAIL_CHAPTER_LIST,{routerId})
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.mapdetail {
|
||||||
|
width: calc(100% - 107px);
|
||||||
|
min-height: 577px;
|
||||||
|
background: rgba(242, 245, 247, 0.6);
|
||||||
|
margin-top: 26px;
|
||||||
|
border-radius: 8px;
|
||||||
|
margin-left: 53px;
|
||||||
|
margin-right: 54px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -219,7 +219,7 @@
|
|||||||
<div class="progress">
|
<div class="progress">
|
||||||
<div style="width: 291px">
|
<div style="width: 291px">
|
||||||
<el-progress
|
<el-progress
|
||||||
:percentage="parseInt((((data.currentReqCnt || 0) / (data.totalReqCnt || 1)) * 100) / 20)"
|
:percentage="parseInt((((data.currentReqCnt || 0) / (data.totalReqCnt || 1)) * 100))"
|
||||||
:show-text="false" :stroke-width="8" :color="
|
:show-text="false" :stroke-width="8" :color="
|
||||||
{
|
{
|
||||||
0: 'rgba(238, 112, 108, 1)',
|
0: 'rgba(238, 112, 108, 1)',
|
||||||
@@ -231,12 +231,9 @@
|
|||||||
}[parseInt((((data.currentReqCnt || 0) / (data.totalReqCnt || 1)) * 100) / 20)]
|
}[parseInt((((data.currentReqCnt || 0) / (data.totalReqCnt || 1)) * 100) / 20)]
|
||||||
"/>
|
"/>
|
||||||
</div>
|
</div>
|
||||||
<div style="
|
<div
|
||||||
font-size: 14px;
|
style="font-size: 14px;font-weight: 500;color: #277aff;margin-left: 10px;"
|
||||||
font-weight: 500;
|
:style="{
|
||||||
color: #277aff;
|
|
||||||
margin-left: 10px;
|
|
||||||
" :style="{
|
|
||||||
color: {
|
color: {
|
||||||
0: 'rgba(238, 112, 108, 1)',
|
0: 'rgba(238, 112, 108, 1)',
|
||||||
1: 'rgba(255, 151, 38, 1)',
|
1: 'rgba(255, 151, 38, 1)',
|
||||||
@@ -473,6 +470,7 @@ async function toFinish(d) {
|
|||||||
targetId: data.value.id,
|
targetId: data.value.id,
|
||||||
logo: ROUTER,
|
logo: ROUTER,
|
||||||
type: ROUTER,
|
type: ROUTER,
|
||||||
|
taskType: d.type,
|
||||||
stageOrChapterId: data.value.currentStageId,
|
stageOrChapterId: data.value.currentStageId,
|
||||||
taskId: d.id,
|
taskId: d.id,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -348,7 +348,7 @@ const returnclick = () => {
|
|||||||
clearInterval(timers)
|
clearInterval(timers)
|
||||||
router.back();
|
router.back();
|
||||||
};
|
};
|
||||||
const {nextPage,prevPage,hasPrev, hasNext} = useTaskPage()
|
const {nextPage,prevPage,hasPrev, hasNext} = type==3 ? '' : useTaskPage()
|
||||||
const fielPath = ref(import.meta.env.VITE_FILE_PATH);
|
const fielPath = ref(import.meta.env.VITE_FILE_PATH);
|
||||||
const { data } = useRequest(ASSESSMENT_QUERY(courseId), { id: courseId, type, chapterOrStageId, targetId: infoId ? infoId : 0 });
|
const { data } = useRequest(ASSESSMENT_QUERY(courseId), { id: courseId, type, chapterOrStageId, targetId: infoId ? infoId : 0 });
|
||||||
console.log(data)
|
console.log(data)
|
||||||
|
|||||||
@@ -60,7 +60,7 @@
|
|||||||
<!-- <div style="display: flex; align-items: center"></div> -->
|
<!-- <div style="display: flex; align-items: center"></div> -->
|
||||||
<div class="all" style="font-size:14px;color:rgba(51, 51, 48, 1);">
|
<div class="all" style="font-size:14px;color:rgba(51, 51, 48, 1);">
|
||||||
<div>
|
<div>
|
||||||
{{ state.datainfo.externalExplain ? state.datainfo.externalExplain : "暂无考试说明" }}
|
{{ state.datainfo.examinationExplain ? state.datainfo.examinationExplain : "暂无考试说明" }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user