Files
fe-student/src/views/faceteach/FaceTeachNoCourse.vue
2024-02-29 16:15:04 +08:00

515 lines
14 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div style=" background: #0078fc;height: 150px;width: 100%;position: absolute;top: 0;z-index:-9999;"></div>
<div class="faceteach" style="padding: 30px">
<!-- 面包屑导航 -->
<div class="crumb">
<div>课程列表</div>
<div style="margin-left: 6px; margin-right: 6px">/</div>
<div style="font-weight: 700">课程报名</div>
<div v-if="pName != ''" class="return">
<div style="display: flex" @click="returnclick">
<el-button style="color:#0073FB"><img class="img2" style="margin-right:11px;cursor: pointer;"
src="../../assets/image/return.png"/>返回
</el-button>
</div>
</div>
</div>
<!-- 面包屑导航 -->
<!-- 基本信息 -->
<div class="bascinfo" style="height: 310px;">
<div style="display:flex;">
<img style="width:405px;height:230px;margin-left: 48px;border-radius: 8px;margin-top: 40px;"
:src="data.offcourseDto.picUrl" alt="">
<div style="margin-left: 40px;margin-top: 56px;">
<div class="title">面授课{{ data.planDto?.name }}</div>
<!-- <div class="time" style="margin-top: 30px">
<img style="width: 15px; height: 17px" src="../../assets/image/time.png"/>
<div style="margin-left: 8px">
{{
dayjs(data.planDto?.beginTime).format('YYYY-MM-DD HH:MM') + " 至 " +
dayjs(data.planDto?.endTime).format('YYYY-MM-DD HH:MM')
}}
</div>
</div>
<div v-if="data.planDto.address" class="time" style="margin-top: 10px">
<img style="width: 16px; height: 18px" src="../../assets/image/position.png"/>
<div style="margin-left: 8px">{{ data.planDto?.address }}</div>
</div> -->
<div class="time" style="margin-top: 37px">
<botton class="btn" style="margin-right: 20px;width: 260px;height: 46px;" :style="{ background: '#999'}">当前任务暂未开放请联系管理员</botton>
</div>
</div>
</div>
<div style="display: flex">
</div>
</div>
<!-- 基本信息 -->
<!-- 详细信息 -->
<div class="detailinfo">
<div class="detail">
<div class="detailB">
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="内容简介" name="first">
<div class="notice" style="padding:20px;font-size:14px;">
{{ data.offcourseDto?.intro || "暂无内容简介" }}
</div>
</el-tab-pane>
<el-tab-pane label="课程速览" name="second">
<div style="display: flex; align-items: center">
<div style="padding:20px;" class="content" v-html="data.offcourseDto?.outline"></div>
</div>
</el-tab-pane>
<!-- <el-tab-pane label="材料下载" name="third" >
<div v-if="!data.offcourseDto?.attach"
style="font-size: 14px;font-weight: 400; line-height: 24px; cursor: pointer;margin-left: 40px; margin-top: 20px;">
此课程无附件
</div>
<div v-else>
<div v-for="(el, index) in formateArr(data.offcourseDto.attach)" :key="index" class="enclosure"
:style="{ borderBottom: '1px solid rgba(56, 125, 247, 0.2)' }">
<div class="enclosureL">
<FileTypeImg :v-model="el.slice(el.lastIndexOf('/')+1,el.indexOf('-')) + el.slice(el.lastIndexOf('.'))" :style="{
width: '22px',
height: '26px',
marginLeft: '10px',
}"></FileTypeImg>
<div style="margin-left: 20px">{{ el.slice(el.lastIndexOf('/')+1,el.indexOf('-')) + el.slice(el.lastIndexOf('.')) }}</div>
</div>
</div>
</div>
</el-tab-pane> -->
</el-tabs>
</div>
</div>
<div class="teacher">
<div class="title">
<img style="width: 21px; height: 23px" src="../../assets/image/livelecturer.png"/>
<div class="text">面授课讲师</div>
<div class="box"></div>
</div>
<!-- todo #面授课接口 讲师缺少img和介绍-->
<div class="teacheritem" v-for="(item,index) in teacherItem">
<img class="peopleimg" :src="item.avatar"/>
<div class="nameSpan" style="align-items: flex-start;justify-content:flex-start;flex-direction: column;padding-left: 10px;">
<div class="teacherName" style="padding: 5px 0;">
{{ item.realName }}
</div>
<!-- <div class="introduce">{{ data.planDto?.bandDesc }}</div> -->
<div class="introduce" style="margin: 0;">{{useOrgName(item.orgNamePath)}}</div>
</div>
</div>
</div>
</div>
<!-- 详细信息 -->
</div>
</template>
<script setup>
import {computed, reactive, toRefs, watch, onUnmounted, ref} from "vue";
import FileTypeImg from "@/components/FileTypeImg.vue";
import {request, useRequest,boeRequest} from "@/api/request";
import {
STU_OFFCOURSE_DETAIL,
FACETEACH_SIGNUP
} from "@/api/api";
import {useRoute, useRouter} from "vue-router";
import {useUserInfo} from "@/api/utils";
import {ElMessage, messageConfig} from "element-plus";
import dayjs from "dayjs";
import { useOrgName } from "@/hooks/useOrgName.js";
import {BASE, GET_USER_LIST,GET_USER_INFO_OLDURL} from "@/api/ThirdApi";
const router = useRouter();
const returnclick = () => {
router.back();
};
const {
query: {courseId, type, id: taskId},
} = useRoute();
const {data} = useRequest(STU_OFFCOURSE_DETAIL, {courseId});
watch(data, (newVal) => {
// newVal.planDto.offteachers.map(item => teacherInfos(item.teacherId));
const teacherIdsArray = newVal.planDto.offteachers.map(item => item.teacherId);
const teacherItemArr = []
teacherIdsArray.forEach(id => {
teacherItemArr.push(boeRequest(GET_USER_INFO_OLDURL, { userId: id }))
})
Promise.all(teacherItemArr).then(responses => {
responses.map((arr)=>{
const userInfo = arr.result;
userInfo.avatar = userInfo?.avatar
? userInfo?.avatar.includes('upload')
? userInfo?.avatar
: '/upload' + userInfo?.avatar
: '/800e23f7-b58c-4192-820d-0c6a2b7544cc.png';
teacherItem.value.push(userInfo)
})
}).catch(error => {
console.log(error)
})
});
const teacherItem = ref([])
// const teacherInfos = async (id) => {
// const res = await boeRequest(GET_USER_INFO_OLDURL, { userId: id });
// const userInfo = res.result;
// userInfo.avatar = userInfo.avatar
// ? userInfo.avatar.includes('upload')
// ? userInfo.avatar
// : '/upload' + userInfo.avatar
// : '/800e23f7-b58c-4192-820d-0c6a2b7544cc.png';
// teacherItem.value.push(userInfo)
// };
const teacherInfo = useUserInfo(computed(() => data.value?.planDto?.teacherId));
const activeName = ref("first");
const handleClick = (tab, event) => {
console.log("附件", tab, event);
};
const download = (url) => {
window.open(url);
};
const downloads = (url) => {
ElMessage.warning("未在有效时间范围内,请耐心等待!");
};
let timer = null;
// 报名
function onLineSignUp() {
if(data.value.isSignUp){
return;
}
request(FACETEACH_SIGNUP, {courseId})
data.value.isSignUp = true
ElMessage.success("报名成功");
}
function formateArr(strs) {
let arrs = strs.split(',')
console.log('112233', arrs)
return arrs
}
</script>
<style lang="scss">
.faceteach {
.crumb {
color: #fff;
display: flex;
font-size: 14px;
line-height: 24px;
}
.bascinfo {
width: 100%;
height: 310px;
border-radius: 8px;
background-color: rgba(255, 255, 255, 1);
margin-top: 37px;
display: flex;
justify-content: space-between;
align-items: center;
.btn {
width: 146px;
height: 46px;
background: #2478ff;
border-radius: 4px;
box-shadow: 0px 1px 8px 0px rgba(56, 125, 247, 0.7);
display: flex;
align-items: center;
justify-content: center;
color: #fff;
font-size: 14px;
font-weight: 800;
line-height: 24px;
cursor: pointer;
margin-right: 96px;
}
.title {
font-size: 20px;
font-weight: 800;
color: #333333;
line-height: 24px;
margin-left: -9px;
}
.time {
font-size: 14px;
color: #6e7b84;
line-height: 24px;
display: flex;
align-items: center;
}
}
.return {
position: absolute;
right: 10%;
.text {
text-align: center;
display: flex;
flex-direction: row;
align-items: center;
}
}
.detailinfo {
width: 100%;
margin-top: 20px;
display: flex;
align-items: flex-start;
.detail {
flex: 1;
margin-right: 20px;
.detailT {
min-height: 263px;
background: #ffffff;
border-radius: 8px;
color: rgba(51, 51, 51, 1);
.title {
display: flex;
align-items: center;
padding-top: 39px;
position: relative;
}
.title .text {
margin-left: 8px;
font-size: 16px;
color: rgba(51, 51, 51, 1);
font-weight: 800;
}
.title .box {
width: 75px;
height: 10px;
background-color: rgba(36, 120, 255, 0.15);
position: absolute;
left: 23px;
top: 53px;
}
.content {
margin-left: 8px;
font-size: 14px;
color: rgba(51, 51, 48, 1);
font-weight: 500;
line-height: 35px;
margin-top: 30px;
padding-bottom: 30px;
}
}
.detailB {
min-height: 363px;
background: #ffffff;
border-radius: 8px;
margin-top: 20px;
.wenxintishi {
display: flex;
justify-content: stretch;
padding: 72px;
}
.el-tabs__item {
height: 69px;
padding: 25px 7px 0px 52px;
font-size: 14px;
font-weight: 500;
}
.el-tabs__nav-wrap::after {
background-color: rgba(56, 125, 247, 0.2);
}
.enclosure {
height: 89px;
margin-left: 51px;
margin-right: 40px;
// border-bottom: 1px solid rgba(56, 125, 247, 0.2);
display: flex;
justify-content: space-between;
align-items: center;
.enclosureL {
display: flex;
align-items: center;
font-size: 14px;
font-weight: 400;
color: #677d86;
line-height: 24px;
}
.download {
display: flex;
align-items: center;
font-size: 16px;
font-weight: 400;
color: #2478ff;
line-height: 24px;
cursor: pointer;
}
}
.work {
margin-left: 51px;
margin-right: 40px;
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 37px;
}
.work .question {
font-size: 14px;
font-weight: 500;
color: #333330;
line-height: 18px;
}
.work .submit {
width: 126px;
height: 46px;
background: #2478ff;
box-shadow: 0px 1px 8px 0px rgba(56, 125, 247, 0.7);
border-radius: 4px;
font-size: 16px;
font-weight: 800;
color: #ffffff;
line-height: 24px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
}
}
}
.teacher {
width: 434px;
min-height: 500px;
// height: 10%;
background-color: rgba(255, 255, 255, 1);
border-radius: 8px;
.title {
display: flex;
align-items: center;
padding-top: 39px;
position: relative;
margin-left: 48px;
}
.title .text {
margin-left: 8px;
font-size: 16px;
color: rgba(51, 51, 51, 1);
font-weight: 800;
}
.title .box {
width: 75px;
height: 10px;
background-color: rgba(36, 120, 255, 0.15);
position: absolute;
left: 23px;
top: 53px;
}
.teacheritem {
margin-left: 48px;
margin-right: 48px;
// min-height: 115px;
margin-top: 20px;
padding: 25px 0px;
display: flex;
position: relative;
// align-items: center;
}
.teacheritem .peopleimg {
width: 60px;
height: 60px;
border-radius: 30px;
}
.teacheritem {
.nameSpan {
width: 190px;
display: flex;
align-items: center;
justify-content: center;
.teacherName {
font-size: 14px;
font-weight: bold;
color: #394145;
display: flex;
align-items: center;
}
}
}
.teacheritem {
.nameSpan {
width: 190px;
display: flex;
align-items: center;
justify-content: center;
.teacherName {
font-size: 14px;
font-weight: bold;
color: #394145;
display: flex;
align-items: center;
}
}
}
.teacheritem .introduce {
font-size: 14px;
font-weight: 500;
color: #394145;
margin-top: 14px;
}
.teacheritem .follow {
width: 80px;
height: 30px;
background: #387df7;
border-radius: 4px;
margin-top: 28px;
position: absolute;
right: -25px;
font-size: 14px;
font-weight: 500;
color: #ffffff;
line-height: 24px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
}
}
}
}
</style>