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, Dialog } from 'vant' import { defineComponent } from 'vue' import styles from './video-class-detail.module.less' import { state } from '@/state' import iconTeacher from '@common/images/icon_teacher.png' import ColResult from '@/components/col-result' import dayjs from 'dayjs' import { onSubmitZero, orderStatus } from '@/views/order-detail/orderStatus' 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, videoDetail: {} as any, detailList: [], posterUrl: '', srcUrl: '', message: '', navHeight: 0 as any, currentClassIndex: 1, 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() { // 处理视频显示 const width = document.body.clientWidth || document.body.offsetWidth this.videoHeight = (width / 16) * 9 + 'px' this.navHeight = sessionStorage.getItem('navHeight') || 0 try { // await this.__init() const config = await request.get( '/api-student/sysConfig/queryByParamNameList', { params: { paramNames: 'video_lesson_free_rate' } } ) this.freeRate = config.data[0]?.paramValue || 0 } catch {} this.getList() }, methods: { async __init() { this.reload = true try { const res = await request.get( '/api-student/videoLesson/selectVideoLesson', { params: { groupId: this.groupId } } ) const result = res.data || {} this.videoDetail = result.lessonGroup this.title = result.lessonGroup.lessonName this.lessonPrice = result.lessonGroup.lessonPrice this.useRelationType = result.lessonGroup.relationType this.alreadyBuy = result.alreadyBuy this.detailList = result.detailList || [] 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 } }) } catch { // } this.reload = false }, 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 || {} // 处理重复请求数据 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-student/videoLesson/evaluate', { data: { isTeacher: 0, videoId: this.classId, content: this.message, studentId: state.user.data.userId } }) Toast('评论成功') this.message = '' setTimeout(() => { this.onSearch() }, 500) } catch {} } }, render() { return (