|
@@ -1,4 +1,4 @@
|
|
|
-import { defineComponent, toRefs, reactive, onMounted, ref } from 'vue'
|
|
|
+import { defineComponent, toRefs, reactive, onMounted, ref,nextTick } from 'vue'
|
|
|
|
|
|
// import classes from './index.module.less'
|
|
|
import detaile from '@/components/videoDetailItem/images/detaile.png'
|
|
@@ -10,9 +10,10 @@ import player from './images/player.png'
|
|
|
import teacher from './images/teacher.png'
|
|
|
import teacherHeader from '@/common/images/icon_teacher.png'
|
|
|
import TimetableIcon from './images/TimetableIcon.png'
|
|
|
+import musiceIcon from './images/musiceIcon.png'
|
|
|
import styles from './index.module.less'
|
|
|
import videoDetailItem from '@/components/videoDetailItem'
|
|
|
-
|
|
|
+import colVideo from '@/components/col-video/index'
|
|
|
import request from '@/helpers/request'
|
|
|
import pagination from '@/components/pagination'
|
|
|
import { useRoute } from 'vue-router'
|
|
@@ -27,48 +28,53 @@ export default defineComponent({
|
|
|
components: {
|
|
|
videoDetailItem,
|
|
|
videoCourseItem,
|
|
|
- pagination
|
|
|
+ pagination,
|
|
|
+ colVideo
|
|
|
},
|
|
|
setup(props, conent) {
|
|
|
const state = reactive({
|
|
|
title: props.title,
|
|
|
videoList: [],
|
|
|
videoDetail: {
|
|
|
- "auditId": 0,
|
|
|
- "auditName": "",
|
|
|
- "auditStatus": "",
|
|
|
- "auditVersion": "",
|
|
|
- "avatar": "",
|
|
|
- "countStudent": 0,
|
|
|
- "createTime": "",
|
|
|
- "hotFlag": 0,
|
|
|
- "id": 0,
|
|
|
- "lessonCount": 0,
|
|
|
- "lessonCoverUrl": "",
|
|
|
- "lessonDesc": "",
|
|
|
- "lessonName": "",
|
|
|
- "lessonPrice": 0,
|
|
|
- "lessonSubject": "",
|
|
|
- "lessonSubjectName": "",
|
|
|
- "lessonTag": "",
|
|
|
- "realName": "",
|
|
|
- "sortNumber": 0,
|
|
|
- "teacherId": 0,
|
|
|
- "topFlag": 0,
|
|
|
- "updateTime": "",
|
|
|
- "username": ""
|
|
|
+ auditId: 0,
|
|
|
+ auditName: '',
|
|
|
+ auditStatus: '',
|
|
|
+ auditVersion: '',
|
|
|
+ avatar: '',
|
|
|
+ countStudent: 0,
|
|
|
+ createTime: '',
|
|
|
+ hotFlag: 0,
|
|
|
+ id: 0,
|
|
|
+ lessonCount: 0,
|
|
|
+ lessonCoverUrl: '',
|
|
|
+ lessonDesc: '',
|
|
|
+ lessonName: '',
|
|
|
+ lessonPrice: 0,
|
|
|
+ lessonSubject: '',
|
|
|
+ lessonSubjectName: '',
|
|
|
+ lessonTag: '',
|
|
|
+ realName: '',
|
|
|
+ sortNumber: 0,
|
|
|
+ teacherId: 0,
|
|
|
+ topFlag: 0,
|
|
|
+ updateTime: '',
|
|
|
+ username: ''
|
|
|
},
|
|
|
+ otherVideoList:[],
|
|
|
+ teacherDetail: {} as any,
|
|
|
id: '',
|
|
|
pageInfo: {
|
|
|
// 分页规则
|
|
|
- limit: 9, // 限制显示条数
|
|
|
+ limit: 5, // 限制显示条数
|
|
|
page: 1, // 当前页
|
|
|
total: 0, // 总条数
|
|
|
- page_size: [9, 20, 40, 50] // 选择限制显示条数
|
|
|
+ page_size: [5, 20, 40, 50] // 选择限制显示条数
|
|
|
}
|
|
|
})
|
|
|
+
|
|
|
const route = useRoute()
|
|
|
const getVideoList = async () => {
|
|
|
+ console.log('getVideoList',state.id)
|
|
|
try {
|
|
|
const res = await request.post(
|
|
|
'/api-website/open/videoLessonGroup/info/page',
|
|
@@ -92,22 +98,57 @@ export default defineComponent({
|
|
|
const res = await request.get(
|
|
|
'/api-website/open/videoLessonGroup/selectVideoLesson',
|
|
|
{
|
|
|
- data: {
|
|
|
+ params: {
|
|
|
groupId: state.id
|
|
|
}
|
|
|
}
|
|
|
)
|
|
|
- state.videoDetail = {...res.data.lessonGroup}
|
|
|
+ state.videoDetail = { ...res.data.lessonGroup }
|
|
|
+ const teacherRes = await request.get(
|
|
|
+ `/api-website/open/teacher/detail/${res.data.lessonGroup.teacherId}`
|
|
|
+ )
|
|
|
+ state.teacherDetail = { ...teacherRes.data }
|
|
|
} catch (e) {}
|
|
|
}
|
|
|
- onMounted(() => {
|
|
|
- if (route.query.id) {
|
|
|
- state.id = route.query.id as string
|
|
|
+
|
|
|
+ const getOther = async ()=>{
|
|
|
+ try {
|
|
|
+ const res = await request.post(
|
|
|
+ '/api-website/open/videoLessonGroup/otherLesson',
|
|
|
+ {
|
|
|
+ data: {
|
|
|
+ videoLessonGroupId: state.id,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ )
|
|
|
+ state.otherVideoList = res.data
|
|
|
+ } catch (e) {
|
|
|
+ console.log(e)
|
|
|
}
|
|
|
+ }
|
|
|
+
|
|
|
+ const getDetail = (val:string)=>{
|
|
|
+ state.id = val;
|
|
|
+ console.log(state.id,'getDetail')
|
|
|
+ nextTick(()=>{
|
|
|
+ _init()
|
|
|
+ })
|
|
|
+
|
|
|
+ }
|
|
|
+ const _init = ()=>{
|
|
|
getVideoList()
|
|
|
setTimeout(() => {
|
|
|
getVideoDetail()
|
|
|
}, 100)
|
|
|
+ setTimeout(() => {
|
|
|
+ getOther()
|
|
|
+ }, 150)
|
|
|
+ }
|
|
|
+ onMounted(() => {
|
|
|
+ if (route.query.id) {
|
|
|
+ state.id = route.query.id as string
|
|
|
+ }
|
|
|
+ _init()
|
|
|
})
|
|
|
return () => (
|
|
|
<>
|
|
@@ -115,16 +156,22 @@ export default defineComponent({
|
|
|
<div class="wall" style={{ height: '70px' }}></div>
|
|
|
<div class={[styles.w1200, styles.detailWrap]}>
|
|
|
<div class={styles.detailLeft}>
|
|
|
- <img src={ state.videoDetail.lessonCoverUrl?state.videoDetail.lessonCoverUrl :detaile} class={styles.detailTopImg} alt="" />
|
|
|
+ <img
|
|
|
+ src={
|
|
|
+ state.videoDetail.lessonCoverUrl
|
|
|
+ ? state.videoDetail.lessonCoverUrl
|
|
|
+ : detaile
|
|
|
+ }
|
|
|
+ class={styles.detailTopImg}
|
|
|
+ alt=""
|
|
|
+ />
|
|
|
<div class={styles.courseWrap}>
|
|
|
<div class={styles.courseTitle}>
|
|
|
<img src={courseIcon} alt="" />
|
|
|
<span>课程介绍</span>
|
|
|
</div>
|
|
|
<div class={styles.courseInfo}>
|
|
|
- <p>
|
|
|
- {state.videoDetail.lessonDesc}
|
|
|
- </p>
|
|
|
+ <p>{state.videoDetail.lessonDesc}</p>
|
|
|
</div>
|
|
|
{/* courseList */}
|
|
|
<div class={styles.courseListWrap}>
|
|
@@ -133,10 +180,13 @@ export default defineComponent({
|
|
|
<img src={TimetableIcon} alt="" />
|
|
|
<span>课程列表</span>
|
|
|
</div>
|
|
|
- <span class={styles.courseTitlTimer}>共{state.videoDetail.lessonCount}课时</span>
|
|
|
+ <span class={styles.courseTitlTimer}>
|
|
|
+ 共{state.videoDetail.lessonCount}课时
|
|
|
+ </span>
|
|
|
</div>
|
|
|
- {state.videoList.map(item=>{return <videoCourseItem item={item}></videoCourseItem>})}
|
|
|
-
|
|
|
+ {state.videoList.map(item => {
|
|
|
+ return <videoCourseItem item={item}></videoCourseItem>
|
|
|
+ })}
|
|
|
</div>
|
|
|
</div>
|
|
|
<pagination
|
|
@@ -152,17 +202,42 @@ export default defineComponent({
|
|
|
<div class={styles.teacherHeadWrap}>
|
|
|
<div class={styles.teacherHeadLeft}>
|
|
|
<img
|
|
|
- src={teacherHeader}
|
|
|
+ src={
|
|
|
+ state.videoDetail.avatar
|
|
|
+ ? state.videoDetail.avatar
|
|
|
+ : teacherHeader
|
|
|
+ }
|
|
|
alt=""
|
|
|
class={styles.teacherHeader}
|
|
|
/>
|
|
|
<div class={styles.teacherHeadInfo}>
|
|
|
<div class={styles.teacherHeadName}>
|
|
|
- <span>李老师</span>
|
|
|
- <img src={teacher} class={styles.teacherIcon} alt="" />
|
|
|
+ <span>{state.videoDetail.username}</span>
|
|
|
+ {state.teacherDetail.teacherType &&
|
|
|
+ state.teacherDetail.teacherType.indexOf('ENTRY') ==
|
|
|
+ -1 ? (
|
|
|
+ ''
|
|
|
+ ) : (
|
|
|
+ <img
|
|
|
+ src={teacher}
|
|
|
+ class={styles.teacherIcon}
|
|
|
+ alt=""
|
|
|
+ />
|
|
|
+ )}
|
|
|
+ {state.teacherDetail.teacherType &&
|
|
|
+ state.teacherDetail.teacherType.indexOf('MUSICIAN') ==
|
|
|
+ -1 ? (
|
|
|
+ ''
|
|
|
+ ) : (
|
|
|
+ <img
|
|
|
+ src={musiceIcon}
|
|
|
+ class={styles.teacherIcon}
|
|
|
+ alt=""
|
|
|
+ />
|
|
|
+ )}
|
|
|
</div>
|
|
|
<p class={styles.fens}>
|
|
|
- 粉丝 <span>126</span>
|
|
|
+ 粉丝 <span>{state.teacherDetail.fansNum}</span>
|
|
|
</p>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -173,27 +248,41 @@ export default defineComponent({
|
|
|
<span>个人介绍</span>
|
|
|
</div>
|
|
|
<p class={styles.teacherDetail}>
|
|
|
- 毕业与中央音乐学员长笛专业,师从央音长笛系不得了大师,曾获2016年不得了长笛大赛冠军,自2018年起研究长笛启蒙、考级到专业考试教育,总结出一套适合各个阶段需要的教学方式,所教学员考级通过率100%,专业院校复试率92%
|
|
|
+ {state.teacherDetail.introduction}
|
|
|
</p>
|
|
|
<div class={styles.titleWrap}>
|
|
|
<img src={teacherIcon} alt="" />
|
|
|
<span>老师风采</span>
|
|
|
</div>
|
|
|
<div class={styles.teacherVideoList}>
|
|
|
- <div class={styles.videoItem}>
|
|
|
- <img src={detaile} alt="" class={styles.Styles} />
|
|
|
- <img src={player} alt="" class={styles.player} />
|
|
|
- </div>
|
|
|
- <div class={styles.videoItem}>
|
|
|
+ {state.teacherDetail.styleVideo&&state.teacherDetail.styleVideo.map((item: any) => {
|
|
|
+ return (
|
|
|
+ <div class={styles.videoItem}>
|
|
|
+ <colVideo
|
|
|
+ styleValue={ {with:'218px',height:'145px'}}
|
|
|
+ controls={true}
|
|
|
+ src={item.videoUrl}
|
|
|
+ class={styles.videoItemVideo}
|
|
|
+ />
|
|
|
+
|
|
|
+ {/* <img src={player} alt="" class={styles.player} /> */}
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+ })}
|
|
|
+
|
|
|
+ {/* <div class={styles.videoItem}>
|
|
|
<img src={detaile} alt="" class={styles.Styles} />
|
|
|
<img src={player} alt="" class={styles.player} />
|
|
|
- </div>
|
|
|
+ </div> */}
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class={styles.otherCourse}>
|
|
|
<h2>其他课程</h2>
|
|
|
<div>
|
|
|
- <videoDetailItem></videoDetailItem>
|
|
|
+ {state.otherVideoList.map(item=>{
|
|
|
+ return <videoDetailItem detail={item} isFull={true} onGetDetail={(val)=>{getDetail(val)}}></videoDetailItem>
|
|
|
+ })}
|
|
|
+
|
|
|
{/* videoDetailItem */}
|
|
|
</div>
|
|
|
</div>
|