| 
					
				 | 
			
			
				@@ -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> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}) 
			 |