|
@@ -1,372 +1,373 @@
|
|
|
-import CourseVideoItem from '@/business-components/course-video-item'
|
|
|
-import SectionDetail from '@/business-components/section-detail'
|
|
|
-import ColHeader from '@/components/col-header'
|
|
|
-import ColVideo from '@/components/col-video'
|
|
|
-import request from '@/helpers/request'
|
|
|
-import {
|
|
|
- Cell,
|
|
|
- Icon,
|
|
|
- Rate,
|
|
|
- Tab,
|
|
|
- Tabs,
|
|
|
- Image,
|
|
|
- Button,
|
|
|
- Sticky,
|
|
|
- Field,
|
|
|
- List,
|
|
|
- Toast
|
|
|
-} from 'vant'
|
|
|
-import { defineComponent } from 'vue'
|
|
|
-import styles from './video-class-detail.module.less'
|
|
|
-import { state } from '@/state'
|
|
|
-
|
|
|
-import iconStudent from '@common/images/icon_student.png'
|
|
|
-import dayjs from 'dayjs'
|
|
|
-import ColResult from '@/components/col-result'
|
|
|
-
|
|
|
-export default defineComponent({
|
|
|
- name: 'VideoClassDetail',
|
|
|
- data() {
|
|
|
- const query = this.$route.query
|
|
|
- return {
|
|
|
- groupId: query.groupId,
|
|
|
- classId: query.classId,
|
|
|
- tabIndex: 1,
|
|
|
- title: '',
|
|
|
- lessonPrice: 0,
|
|
|
- useRelationType: '',
|
|
|
- alreadyBuy: false,
|
|
|
- currentClassIndex: 1,
|
|
|
- detailList: [],
|
|
|
- posterUrl: '',
|
|
|
- srcUrl: '',
|
|
|
- message: '',
|
|
|
- navHeight: 0 as any,
|
|
|
- reload: false,
|
|
|
- videoContent: '',
|
|
|
- list: [],
|
|
|
- dataShow: true, // 判断是否有数据
|
|
|
- loading: false,
|
|
|
- finished: false,
|
|
|
- params: {
|
|
|
- page: 1,
|
|
|
- rows: 20
|
|
|
- },
|
|
|
- freeRate: 0, // 试看百分比
|
|
|
- trySee: false, // 是否试看
|
|
|
- videoHeight: '212px'
|
|
|
- }
|
|
|
- },
|
|
|
- computed: {
|
|
|
- users() {
|
|
|
- return state.user.data
|
|
|
- },
|
|
|
- offsetTop() {
|
|
|
- const navHeight: number = this.navHeight
|
|
|
- const top = Number(navHeight) + 44
|
|
|
- return top + 'px'
|
|
|
- }
|
|
|
- },
|
|
|
- async mounted() {
|
|
|
- this.navHeight = sessionStorage.getItem('navHeight') || 0
|
|
|
- try {
|
|
|
- const res = await request.get(
|
|
|
- '/api-teacher/videoLessonGroup/selectVideoLesson',
|
|
|
- {
|
|
|
- params: {
|
|
|
- groupId: this.groupId
|
|
|
- }
|
|
|
- }
|
|
|
- )
|
|
|
- const result = res.data || {}
|
|
|
- this.title = result.lessonGroup.lessonName
|
|
|
- this.useRelationType = result.lessonGroup.relationType
|
|
|
- this.lessonPrice = result.lessonGroup.lessonPrice
|
|
|
- this.alreadyBuy = result.alreadyBuy
|
|
|
- this.detailList = result.detailList || []
|
|
|
-
|
|
|
- if (state.user.data?.userId !== result.lessonGroup.teacherId) {
|
|
|
- this.trySee = !result.alreadyBuy
|
|
|
- }
|
|
|
-
|
|
|
- this.detailList.forEach((item: any, index: number) => {
|
|
|
- if (item.id === Number(this.classId)) {
|
|
|
- this.posterUrl = item.coverUrl
|
|
|
- this.srcUrl = item.videoUrl
|
|
|
- this.title = item.videoTitle
|
|
|
- this.currentClassIndex = index + 1
|
|
|
- this.videoContent = item.videoContent
|
|
|
- }
|
|
|
- })
|
|
|
-
|
|
|
- const config = await request.get(
|
|
|
- '/api-student/sysConfig/queryByParamNameList',
|
|
|
- {
|
|
|
- params: {
|
|
|
- paramNames: 'video_lesson_free_rate'
|
|
|
- }
|
|
|
- }
|
|
|
- )
|
|
|
- this.freeRate = config.data[0]?.paramValue || 0
|
|
|
-
|
|
|
- this.getList()
|
|
|
- } catch {}
|
|
|
- },
|
|
|
- methods: {
|
|
|
- onSearch() {
|
|
|
- this.params.page = 1
|
|
|
- this.list = []
|
|
|
- this.dataShow = true // 判断是否有数据
|
|
|
- this.loading = false
|
|
|
- this.finished = false
|
|
|
- this.getList()
|
|
|
- },
|
|
|
- async getList() {
|
|
|
- try {
|
|
|
- const params = this.params
|
|
|
- const res = await request.post('/api-student/videoLesson/page', {
|
|
|
- data: {
|
|
|
- ...params,
|
|
|
- videoId: this.classId
|
|
|
- }
|
|
|
- })
|
|
|
- this.loading = false
|
|
|
- const result = res.data || {}
|
|
|
- console.log(result)
|
|
|
- // 处理重复请求数据
|
|
|
- if (this.list.length > 0 && result.pageNo === 1) {
|
|
|
- return
|
|
|
- }
|
|
|
- this.list = this.list.concat(result.rows || [])
|
|
|
- this.finished = result.pageNo >= result.totalPage
|
|
|
- this.params.page = result.pageNo + 1
|
|
|
- this.dataShow = this.list.length > 0
|
|
|
- } catch {
|
|
|
- this.dataShow = false
|
|
|
- this.finished = true
|
|
|
- }
|
|
|
- },
|
|
|
- onPlay(item: any) {
|
|
|
- // 判断是否点击的是当前播放的视频
|
|
|
- if (item.id === Number(this.classId)) {
|
|
|
- return
|
|
|
- }
|
|
|
- this.reload = true
|
|
|
- this.posterUrl = item.imgUrl
|
|
|
- this.srcUrl = item.videoUrl
|
|
|
- this.title = item.title
|
|
|
- this.currentClassIndex = item.index
|
|
|
- this.videoContent = item.content
|
|
|
- this.classId = item.id
|
|
|
- this.onSearch()
|
|
|
- setTimeout(() => {
|
|
|
- this.reload = false
|
|
|
- }, 0)
|
|
|
- },
|
|
|
- async onSubmit() {
|
|
|
- try {
|
|
|
- await request.post('/api-teacher/videoLesson/evaluate', {
|
|
|
- data: {
|
|
|
- isTeacher: 1,
|
|
|
- videoId: this.classId,
|
|
|
- content: this.message,
|
|
|
- studentId: state.user.data.userId
|
|
|
- }
|
|
|
- })
|
|
|
- Toast('评论成功')
|
|
|
- this.message = ''
|
|
|
- setTimeout(() => {
|
|
|
- this.onSearch()
|
|
|
- }, 1000)
|
|
|
- } catch {}
|
|
|
- }
|
|
|
- },
|
|
|
- render() {
|
|
|
- return (
|
|
|
- <div class={styles['video-class-detail']}>
|
|
|
- {/* <ColHeader
|
|
|
- v-slots={{
|
|
|
- default: () => (
|
|
|
- <ColVideo
|
|
|
- src={this.srcUrl}
|
|
|
- poster={this.posterUrl}
|
|
|
- freeRate={Number(this.freeRate)}
|
|
|
- trySee={this.trySee}
|
|
|
- height={this.videoHeight}
|
|
|
- />
|
|
|
- )
|
|
|
- }}
|
|
|
- /> */}
|
|
|
- <ColVideo
|
|
|
- src={this.srcUrl}
|
|
|
- poster={this.posterUrl}
|
|
|
- freeTitleStatus={this.lessonPrice > 0 ? true : false}
|
|
|
- freeRate={Number(this.freeRate)}
|
|
|
- trySee={this.trySee}
|
|
|
- height={this.videoHeight}
|
|
|
- />
|
|
|
- <Cell
|
|
|
- border={false}
|
|
|
- class={styles.cell}
|
|
|
- title={this.title}
|
|
|
- titleClass={styles.titleInfo}
|
|
|
- v-slots={{
|
|
|
- icon: () => (
|
|
|
- <Icon
|
|
|
- name="video"
|
|
|
- size={18}
|
|
|
- color="var(--van-primary)"
|
|
|
- style={{ display: 'flex', alignItems: 'center' }}
|
|
|
- />
|
|
|
- ),
|
|
|
- value: () => (
|
|
|
- <div class={styles.label}>
|
|
|
- <span>{this.currentClassIndex}</span>/{this.detailList.length}
|
|
|
- 课时
|
|
|
- </div>
|
|
|
- )
|
|
|
- }}
|
|
|
- ></Cell>
|
|
|
- <div class={styles.videoDesc}>{this.videoContent}</div>
|
|
|
-
|
|
|
- <Tabs
|
|
|
- v-model:active={this.tabIndex}
|
|
|
- class={styles.infoField}
|
|
|
- color="var(--van-primary)"
|
|
|
- lineWidth={20}
|
|
|
- sticky
|
|
|
- lazyRender
|
|
|
- offsetTop={this.offsetTop}
|
|
|
- >
|
|
|
- <Tab title="目录" name={1}>
|
|
|
- <div style={{ height: 'calc(100vh - 320px)', overflowY: 'auto' }}>
|
|
|
- <SectionDetail title="课程列表" icon="courseList">
|
|
|
- {this.detailList.map((item: any, index: number) => {
|
|
|
- const musicAlbumInfos = item.musicAlbumInfos || []
|
|
|
- const temp = musicAlbumInfos.map((info: any) => {
|
|
|
- return {
|
|
|
- relationMusicAlbum: info.relationType,
|
|
|
- musicAlbumName: info.name,
|
|
|
- musicAlbumId: info.musicAlbumId,
|
|
|
- status: info.status,
|
|
|
- useRelationType: this.useRelationType
|
|
|
- }
|
|
|
- })
|
|
|
- return (
|
|
|
- <CourseVideoItem
|
|
|
- musicAlbumInfos={temp}
|
|
|
- playId={Number(this.classId)}
|
|
|
- detail={{
|
|
|
- id: item.id,
|
|
|
- title: item.videoTitle,
|
|
|
- content: item.videoContent,
|
|
|
- imgUrl: item.coverUrl,
|
|
|
- videoUrl: item.videoUrl,
|
|
|
- index: index + 1
|
|
|
- }}
|
|
|
- onPlay={this.onPlay}
|
|
|
- onMusicAlbumDetail={(item: any) => {
|
|
|
- if (!this.alreadyBuy && !item.status) {
|
|
|
- Toast('数据正在更新,请稍后再试')
|
|
|
- return
|
|
|
- }
|
|
|
- if (item.relationMusicAlbum === 'MUSIC') {
|
|
|
- this.$router.push({
|
|
|
- path: '/music-detail',
|
|
|
- query: {
|
|
|
- id: item.musicAlbumId
|
|
|
- }
|
|
|
- })
|
|
|
- } else if (item.relationMusicAlbum === 'ALBUM') {
|
|
|
- this.$router.push({
|
|
|
- path: '/music-album-detail/' + item.musicAlbumId
|
|
|
- })
|
|
|
- }
|
|
|
- }}
|
|
|
- />
|
|
|
- )
|
|
|
- })}
|
|
|
- </SectionDetail>
|
|
|
- </div>
|
|
|
- </Tab>
|
|
|
- <Tab title="讨论" name={3}>
|
|
|
- <div
|
|
|
- style={{
|
|
|
- overflowY: 'auto',
|
|
|
- marginBottom:
|
|
|
- 'calc(var(--van-cell-vertical-padding) * 2 + var( --van-cell-line-height))'
|
|
|
- }}
|
|
|
- >
|
|
|
- {this.dataShow ? (
|
|
|
- <List
|
|
|
- v-model:loading={this.loading}
|
|
|
- finished={this.finished}
|
|
|
- finishedText=" "
|
|
|
- immediateCheck={false}
|
|
|
- onLoad={this.getList}
|
|
|
- >
|
|
|
- {this.list.map((item: any) => (
|
|
|
- <Cell
|
|
|
- class={[
|
|
|
- styles['message-list'],
|
|
|
- item.isTeacher === 1 && styles['message-active']
|
|
|
- ]}
|
|
|
- valueClass={styles['message-time']}
|
|
|
- v-slots={{
|
|
|
- icon: () => (
|
|
|
- <Image
|
|
|
- class={styles.userLogo}
|
|
|
- src={item.avatar || iconStudent}
|
|
|
- fit="cover"
|
|
|
- />
|
|
|
- ),
|
|
|
- title: () => (
|
|
|
- <div class={styles.title}>
|
|
|
- <div class={styles['message-name']}>
|
|
|
- {item.userName}
|
|
|
- </div>
|
|
|
- <div class={styles['message-time']}>
|
|
|
- {dayjs(item.evaluateTime).format(
|
|
|
- 'YYYY年MM月DD日'
|
|
|
- )}
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- ),
|
|
|
- label: () => (
|
|
|
- <div class={styles.label}>{item.content}</div>
|
|
|
- )
|
|
|
- }}
|
|
|
- />
|
|
|
- ))}
|
|
|
- </List>
|
|
|
- ) : (
|
|
|
- <ColResult btnStatus={false} tips="暂无讨论" />
|
|
|
- )}
|
|
|
- </div>
|
|
|
-
|
|
|
- <div class={[styles.messageContainer]}>
|
|
|
- <Field
|
|
|
- placeholder="快来讨论吧~"
|
|
|
- v-model={this.message}
|
|
|
- v-slots={{
|
|
|
- button: () => (
|
|
|
- <Button
|
|
|
- type="primary"
|
|
|
- disabled={!this.message}
|
|
|
- style={{ padding: '0 20px' }}
|
|
|
- size="small"
|
|
|
- round
|
|
|
- onClick={this.onSubmit}
|
|
|
- >
|
|
|
- 发布
|
|
|
- </Button>
|
|
|
- )
|
|
|
- }}
|
|
|
- />
|
|
|
- </div>
|
|
|
- </Tab>
|
|
|
- </Tabs>
|
|
|
- </div>
|
|
|
- )
|
|
|
- }
|
|
|
-})
|
|
|
+import CourseVideoItem from '@/business-components/course-video-item'
|
|
|
+import SectionDetail from '@/business-components/section-detail'
|
|
|
+import ColHeader from '@/components/col-header'
|
|
|
+import ColVideo from '@/components/col-video'
|
|
|
+import request from '@/helpers/request'
|
|
|
+import {
|
|
|
+ Cell,
|
|
|
+ Icon,
|
|
|
+ Rate,
|
|
|
+ Tab,
|
|
|
+ Tabs,
|
|
|
+ Image,
|
|
|
+ Button,
|
|
|
+ Sticky,
|
|
|
+ Field,
|
|
|
+ List,
|
|
|
+ Toast
|
|
|
+} from 'vant'
|
|
|
+import { defineComponent } from 'vue'
|
|
|
+import styles from './video-class-detail.module.less'
|
|
|
+import { state } from '@/state'
|
|
|
+
|
|
|
+import iconStudent from '@common/images/icon_student.png'
|
|
|
+import dayjs from 'dayjs'
|
|
|
+import ColResult from '@/components/col-result'
|
|
|
+
|
|
|
+export default defineComponent({
|
|
|
+ name: 'VideoClassDetail',
|
|
|
+ data() {
|
|
|
+ const query = this.$route.query
|
|
|
+ return {
|
|
|
+ groupId: query.groupId,
|
|
|
+ classId: query.classId,
|
|
|
+ tabIndex: 1,
|
|
|
+ title: '',
|
|
|
+ lessonPrice: 0,
|
|
|
+ useRelationType: '',
|
|
|
+ alreadyBuy: false,
|
|
|
+ currentClassIndex: 1,
|
|
|
+ detailList: [],
|
|
|
+ posterUrl: '',
|
|
|
+ srcUrl: '',
|
|
|
+ message: '',
|
|
|
+ navHeight: 0 as any,
|
|
|
+ reload: false,
|
|
|
+ videoContent: '',
|
|
|
+ list: [],
|
|
|
+ dataShow: true, // 判断是否有数据
|
|
|
+ loading: false,
|
|
|
+ finished: false,
|
|
|
+ params: {
|
|
|
+ page: 1,
|
|
|
+ rows: 20
|
|
|
+ },
|
|
|
+ freeRate: 0, // 试看百分比
|
|
|
+ trySee: false, // 是否试看
|
|
|
+ videoHeight: '212px'
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ users() {
|
|
|
+ return state.user.data
|
|
|
+ },
|
|
|
+ offsetTop() {
|
|
|
+ const navHeight: number = this.navHeight
|
|
|
+ const top = Number(navHeight) + 44
|
|
|
+ return top + 'px'
|
|
|
+ }
|
|
|
+ },
|
|
|
+ async mounted() {
|
|
|
+ this.navHeight = sessionStorage.getItem('navHeight') || 0
|
|
|
+ try {
|
|
|
+ const res = await request.get(
|
|
|
+ '/api-teacher/videoLessonGroup/selectVideoLesson',
|
|
|
+ {
|
|
|
+ params: {
|
|
|
+ groupId: this.groupId
|
|
|
+ }
|
|
|
+ }
|
|
|
+ )
|
|
|
+ const result = res.data || {}
|
|
|
+ this.title = result.lessonGroup.lessonName
|
|
|
+ this.useRelationType = result.lessonGroup.relationType
|
|
|
+ this.lessonPrice = result.lessonGroup.lessonPrice
|
|
|
+ this.alreadyBuy = result.alreadyBuy
|
|
|
+ this.detailList = result.detailList || []
|
|
|
+
|
|
|
+ if (state.user.data?.userId !== result.lessonGroup.teacherId) {
|
|
|
+ this.trySee = !result.alreadyBuy
|
|
|
+ }
|
|
|
+
|
|
|
+ this.detailList.forEach((item: any, index: number) => {
|
|
|
+ if (item.id === Number(this.classId)) {
|
|
|
+ this.posterUrl = item.coverUrl
|
|
|
+ this.srcUrl = item.videoUrl
|
|
|
+ this.title = item.videoTitle
|
|
|
+ this.currentClassIndex = index + 1
|
|
|
+ this.videoContent = item.videoContent
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ const config = await request.get(
|
|
|
+ '/api-student/sysConfig/queryByParamNameList',
|
|
|
+ {
|
|
|
+ params: {
|
|
|
+ paramNames: 'video_lesson_free_rate'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ )
|
|
|
+ this.freeRate = config.data[0]?.paramValue || 0
|
|
|
+
|
|
|
+ this.getList()
|
|
|
+ } catch {}
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ onSearch() {
|
|
|
+ this.params.page = 1
|
|
|
+ this.list = []
|
|
|
+ this.dataShow = true // 判断是否有数据
|
|
|
+ this.loading = false
|
|
|
+ this.finished = false
|
|
|
+ this.getList()
|
|
|
+ },
|
|
|
+ async getList() {
|
|
|
+ try {
|
|
|
+ const params = this.params
|
|
|
+ const res = await request.post('/api-student/videoLesson/page', {
|
|
|
+ data: {
|
|
|
+ ...params,
|
|
|
+ videoId: this.classId
|
|
|
+ }
|
|
|
+ })
|
|
|
+ this.loading = false
|
|
|
+ const result = res.data || {}
|
|
|
+ console.log(result)
|
|
|
+ // 处理重复请求数据
|
|
|
+ if (this.list.length > 0 && result.pageNo === 1) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ this.list = this.list.concat(result.rows || [])
|
|
|
+ this.finished = result.pageNo >= result.totalPage
|
|
|
+ this.params.page = result.pageNo + 1
|
|
|
+ this.dataShow = this.list.length > 0
|
|
|
+ } catch {
|
|
|
+ this.dataShow = false
|
|
|
+ this.finished = true
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onPlay(item: any) {
|
|
|
+ // 判断是否点击的是当前播放的视频
|
|
|
+ if (item.id === Number(this.classId)) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ this.reload = true
|
|
|
+ this.posterUrl = item.imgUrl
|
|
|
+ this.srcUrl = item.videoUrl
|
|
|
+ this.title = item.title
|
|
|
+ this.currentClassIndex = item.index
|
|
|
+ this.videoContent = item.content
|
|
|
+ this.classId = item.id
|
|
|
+ this.onSearch()
|
|
|
+ setTimeout(() => {
|
|
|
+ this.reload = false
|
|
|
+ }, 0)
|
|
|
+ },
|
|
|
+ async onSubmit() {
|
|
|
+ try {
|
|
|
+ await request.post('/api-teacher/videoLesson/evaluate', {
|
|
|
+ data: {
|
|
|
+ isTeacher: 1,
|
|
|
+ videoId: this.classId,
|
|
|
+ content: this.message,
|
|
|
+ studentId: state.user.data.userId
|
|
|
+ }
|
|
|
+ })
|
|
|
+ Toast('评论成功')
|
|
|
+ this.message = ''
|
|
|
+ setTimeout(() => {
|
|
|
+ this.onSearch()
|
|
|
+ }, 1000)
|
|
|
+ } catch {}
|
|
|
+ }
|
|
|
+ },
|
|
|
+ render() {
|
|
|
+ return (
|
|
|
+ <div class={styles['video-class-detail']}>
|
|
|
+ {/* <ColHeader
|
|
|
+ v-slots={{
|
|
|
+ default: () => (
|
|
|
+ <ColVideo
|
|
|
+ src={this.srcUrl}
|
|
|
+ poster={this.posterUrl}
|
|
|
+ freeRate={Number(this.freeRate)}
|
|
|
+ trySee={this.trySee}
|
|
|
+ height={this.videoHeight}
|
|
|
+ />
|
|
|
+ )
|
|
|
+ }}
|
|
|
+ /> */}
|
|
|
+ <ColHeader />
|
|
|
+ <ColVideo
|
|
|
+ src={this.srcUrl}
|
|
|
+ poster={this.posterUrl}
|
|
|
+ freeTitleStatus={this.lessonPrice > 0 ? true : false}
|
|
|
+ freeRate={Number(this.freeRate)}
|
|
|
+ trySee={this.trySee}
|
|
|
+ height={this.videoHeight}
|
|
|
+ />
|
|
|
+ <Cell
|
|
|
+ border={false}
|
|
|
+ class={styles.cell}
|
|
|
+ title={this.title}
|
|
|
+ titleClass={styles.titleInfo}
|
|
|
+ v-slots={{
|
|
|
+ icon: () => (
|
|
|
+ <Icon
|
|
|
+ name="video"
|
|
|
+ size={18}
|
|
|
+ color="var(--van-primary)"
|
|
|
+ style={{ display: 'flex', alignItems: 'center' }}
|
|
|
+ />
|
|
|
+ ),
|
|
|
+ value: () => (
|
|
|
+ <div class={styles.label}>
|
|
|
+ <span>{this.currentClassIndex}</span>/{this.detailList.length}
|
|
|
+ 课时
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+ }}
|
|
|
+ ></Cell>
|
|
|
+ <div class={styles.videoDesc}>{this.videoContent}</div>
|
|
|
+
|
|
|
+ <Tabs
|
|
|
+ v-model:active={this.tabIndex}
|
|
|
+ class={styles.infoField}
|
|
|
+ color="var(--van-primary)"
|
|
|
+ lineWidth={20}
|
|
|
+ sticky
|
|
|
+ lazyRender
|
|
|
+ offsetTop={this.offsetTop}
|
|
|
+ >
|
|
|
+ <Tab title="目录" name={1}>
|
|
|
+ <div style={{ height: 'calc(100vh - 320px)', overflowY: 'auto' }}>
|
|
|
+ <SectionDetail title="课程列表" icon="courseList">
|
|
|
+ {this.detailList.map((item: any, index: number) => {
|
|
|
+ const musicAlbumInfos = item.musicAlbumInfos || []
|
|
|
+ const temp = musicAlbumInfos.map((info: any) => {
|
|
|
+ return {
|
|
|
+ relationMusicAlbum: info.relationType,
|
|
|
+ musicAlbumName: info.name,
|
|
|
+ musicAlbumId: info.musicAlbumId,
|
|
|
+ status: info.status,
|
|
|
+ useRelationType: this.useRelationType
|
|
|
+ }
|
|
|
+ })
|
|
|
+ return (
|
|
|
+ <CourseVideoItem
|
|
|
+ musicAlbumInfos={temp}
|
|
|
+ playId={Number(this.classId)}
|
|
|
+ detail={{
|
|
|
+ id: item.id,
|
|
|
+ title: item.videoTitle,
|
|
|
+ content: item.videoContent,
|
|
|
+ imgUrl: item.coverUrl,
|
|
|
+ videoUrl: item.videoUrl,
|
|
|
+ index: index + 1
|
|
|
+ }}
|
|
|
+ onPlay={this.onPlay}
|
|
|
+ onMusicAlbumDetail={(item: any) => {
|
|
|
+ if (!this.alreadyBuy && !item.status) {
|
|
|
+ Toast('数据正在更新,请稍后再试')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (item.relationMusicAlbum === 'MUSIC') {
|
|
|
+ this.$router.push({
|
|
|
+ path: '/music-detail',
|
|
|
+ query: {
|
|
|
+ id: item.musicAlbumId
|
|
|
+ }
|
|
|
+ })
|
|
|
+ } else if (item.relationMusicAlbum === 'ALBUM') {
|
|
|
+ this.$router.push({
|
|
|
+ path: '/music-album-detail/' + item.musicAlbumId
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ )
|
|
|
+ })}
|
|
|
+ </SectionDetail>
|
|
|
+ </div>
|
|
|
+ </Tab>
|
|
|
+ <Tab title="讨论" name={3}>
|
|
|
+ <div
|
|
|
+ style={{
|
|
|
+ overflowY: 'auto',
|
|
|
+ marginBottom:
|
|
|
+ 'calc(var(--van-cell-vertical-padding) * 2 + var( --van-cell-line-height))'
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ {this.dataShow ? (
|
|
|
+ <List
|
|
|
+ v-model:loading={this.loading}
|
|
|
+ finished={this.finished}
|
|
|
+ finishedText=" "
|
|
|
+ immediateCheck={false}
|
|
|
+ onLoad={this.getList}
|
|
|
+ >
|
|
|
+ {this.list.map((item: any) => (
|
|
|
+ <Cell
|
|
|
+ class={[
|
|
|
+ styles['message-list'],
|
|
|
+ item.isTeacher === 1 && styles['message-active']
|
|
|
+ ]}
|
|
|
+ valueClass={styles['message-time']}
|
|
|
+ v-slots={{
|
|
|
+ icon: () => (
|
|
|
+ <Image
|
|
|
+ class={styles.userLogo}
|
|
|
+ src={item.avatar || iconStudent}
|
|
|
+ fit="cover"
|
|
|
+ />
|
|
|
+ ),
|
|
|
+ title: () => (
|
|
|
+ <div class={styles.title}>
|
|
|
+ <div class={styles['message-name']}>
|
|
|
+ {item.userName}
|
|
|
+ </div>
|
|
|
+ <div class={styles['message-time']}>
|
|
|
+ {dayjs(item.evaluateTime).format(
|
|
|
+ 'YYYY年MM月DD日'
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ ),
|
|
|
+ label: () => (
|
|
|
+ <div class={styles.label}>{item.content}</div>
|
|
|
+ )
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ ))}
|
|
|
+ </List>
|
|
|
+ ) : (
|
|
|
+ <ColResult btnStatus={false} tips="暂无讨论" />
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class={[styles.messageContainer]}>
|
|
|
+ <Field
|
|
|
+ placeholder="快来讨论吧~"
|
|
|
+ v-model={this.message}
|
|
|
+ v-slots={{
|
|
|
+ button: () => (
|
|
|
+ <Button
|
|
|
+ type="primary"
|
|
|
+ disabled={!this.message}
|
|
|
+ style={{ padding: '0 20px' }}
|
|
|
+ size="small"
|
|
|
+ round
|
|
|
+ onClick={this.onSubmit}
|
|
|
+ >
|
|
|
+ 发布
|
|
|
+ </Button>
|
|
|
+ )
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </Tab>
|
|
|
+ </Tabs>
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+ }
|
|
|
+})
|