You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
educoder/public/react/src/modules/courses/Video/VideoIndex.js

468 lines
10 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import React, {Component} from "react";
import {WordsBtn, on, trigger, publicSearchs} from 'educoder';
import {Menu, Spin} from 'antd';
import axios from 'axios';
import Videos from './Video';
import Lives from './Live';
import LivesNew from './LiveNew';
import VideoLink from './VideoLink';
import Videostatistics from '../videostatistics/Videostatistics';
import './video.css';
import '../css/Courses.css';
import '../publicNav/nav.css';
import Videostatisticscomtwo from '../videostatistics/component/Videostatisticscomtwo';
const PAGE_SIZE = 15;
const LIVE_PAGE_SIZE = 10;
const $ = window.$;
function getRight() {
var right = parseInt($(".-task-sidebar").css("right"));
return right === 0 ? 0 : right;
}
class VideoIndex extends Component {
constructor(props) {
super(props);
this.state = {
page: 1,
upload: false,
videos: undefined,
videoData: undefined,
otherLinkVisible: false,
type: "video",
isSpining: false,
lives: undefined,
liveData: undefined,
liveId: undefined,
liveVisible: false,
statistics: false,
myktid:null,
mytitle:''
}
}
checkType = (type, page) => {
this.setState({
type,
isSpining: true
})
if (type === "video") {
this.getList(page);
} else {
this.getLiveList(page);
}
}
Setmyktid=(id,title)=>{
const isAdmin = this.props&& this.props.isAdmin();
if(isAdmin===true){
this.setState({
myktid:id,
statistics:true,
mytitle:title,
})
}else{
this.setState({
statistics:true,
myktid:null,
mytitle:"",
})
}
}
componentDidMount = () => {
const {search} = this.props.location;
const {page} = this.state;
if (search && search === "?open=live") {
this.setState({
type: "live"
})
this.checkType("live", page);
} else {
if (search === "?open=new") {
this.setState({
upload: true
})
}
this.checkType("video", page);
}
}
componentDidUpdate = (prevProps) => {
try {
if (this.props.homedirectory !== prevProps.homedirectory) {
if(this.props.homedirectory ===true){
this.setState({
statistics:false,
myktid:null,
mytitle:"",
})
}
}
}catch (e) {
}
if (this.props.match.params.videoId !== prevProps.match.params.videoId) {
this.setState({
upload: false,
})
const {page} = this.state;
this.checkType("video", page);
}
}
// 获取直播列表
getLiveList = (page) => {
const CourseId = this.props.match.params.coursesId;
const url = `/courses/${CourseId}/live_links.json`;
axios.get(url, {
params: {
page,
limit: LIVE_PAGE_SIZE
}
}).then(result => {
if (result) {
this.setState({
liveData: result.data,
lives: result.data.lives,
isSpining: false,
})
}
}).catch(error => {
console.log(error);
})
}
// 获取视频列表
getList = (page) => {
const {coursesId, videoId} = this.props.match.params;
const fetchUrl = `/courses/${coursesId}/course_videos.json`;
axios.get(fetchUrl, {
params: {
page,
limit: PAGE_SIZE,
category_id: videoId
}
})
.then((response) => {
if (response) {
this.setState({
videos: response.data.videos,
videoData: response.data,
isSpining: false
})
}
}).catch((error) => {
console.log(error);
})
}
changeType = (e) => {
this.setState({
type: e.key,
upload: false,
page: 1
})
this.checkType(e.key, 1);
}
changePage = (page, type) => {
this.setState({
page
})
this.checkType(type, page);
}
onEditVideo = (item) => {
let videoId = {
videoId: item.id,
title: item.title
}
this.setState({
videoId,
})
this.setVisible(true);
}
uploadVideo = (upload) => {
this.setState({
upload,
isSpining: true
})
const {page} = this.state;
setTimeout(() => {
this.getList(page);
}, 500)
}
toUpload = () => {
const {admin, is_teacher, business} = this.props.user;
if (admin || business || (is_teacher && this.props.checkIfProfessionalCertification())) {
this.setState({
type: "video",
upload: true,
page: 1
})
} else {
this.props.showProfessionalCertificationDialog();
}
}
// 直播设置后回调的方法
// successFunc=()=>{
// this.setState({
// type:"live",
// page:1
// })
// this.checkType("live",1);
// }
// 直播设置
liveSetting = () => {
this.setState({
liveId: undefined
})
this.setliveVisibel(true);
}
//直播设置弹框
setliveVisibel = (flag, changetypeFlag) => {
this.setState({
liveVisible: flag
})
if (flag === false) {
this.setState({
liveId: undefined
})
}
if (changetypeFlag) {
this.checkType("live", 1);
}
}
// 列表-编辑修改传到编辑的id
setLiveId = (id) => {
this.setState({
liveId: id
})
this.setliveVisibel(true);
}
// 新增目录
addDir = () => {
let {videoData} = this.state;
trigger('videoAdd', parseInt(videoData.course_module_id));
}
// 目录重命名
editDir = (name, id) => {
let data = {id, name, update: this.getList}
trigger('editVideo', data);
}
// 增加外链
setLinkeVisible = (flag, refresh) => {
this.setState({
otherLinkVisible: flag
})
if (refresh) {
const {page} = this.state;
this.getList(page);
}
}
//统计
statisticsy = (bool) => {
this.setState({
statistics: bool,
myktid:null,
mytitle:"",
})
}
mystatisticsys = (bool,n) => {
this.setState({
statistics: bool,
myktid:null,
mytitle:"",
})
}
render() {
const {videos, upload, videoData, type, liveData, lives, page, liveVisible, isSpining, liveId, otherLinkVisible, statistics,myktid,mytitle} = this.state;
const {coursesId, videoId} = this.props.match.params;
let {course_identity} = this.props && this.props.coursedata;
let is_teacher = this.props && this.props.user && this.props.user.is_teacher;
const flag = parseInt(course_identity) < 5;
const newOperation = flag;
const new_upload = flag && (is_teacher && this.props.checkIfProfessionalCertification());
let isAdmin = this.props&&this.props.isAdmin();
return (
<React.Fragment>
<VideoLink
coursesId={coursesId}
videoId={videoId}
visible={otherLinkVisible}
notification={this.props.showNotification}
setVisible={this.setLinkeVisible}
></VideoLink>
<LivesNew
visible={liveVisible}
liveId={liveId}
setliveVisibel={this.setliveVisibel}
{...this.props}
{...this.state}
></LivesNew>
{
liveVisible ?
<style>{
`
body{
width: calc(100% - 7px)!important;
overflow: hidden!important;
}
.-task-sidebar{
right:${getRight() + 7}px!important;
}
`}</style> :
<style>{
`
body{
width: 100%!important;
}
`}</style>
}
{
statistics === false ?
<div className="edu-back-white" style={{marginBottom: "1px"}}>
<div className="clearfix pl30 pr30 menuDiv">
{
videoData && videoData.category_name && type === "video" ?
<span className="font-18 fl color-dark-21 mt20 mb20">{videoData.category_name}</span>
:
<div className="task_menu_ul fl mt2" style={{width: "240px"}}>
<Menu mode="horizontal" selectedKeys={[type]} onClick={this.changeType}>
<Menu.Item key="video">视频</Menu.Item>
<Menu.Item key="live">直播</Menu.Item>
</Menu>
</div>
}
<li className="fr mt20 mb20">
{
type === "video" ?
<React.Fragment>
<span>
{
videoId ?
""
:videos&&videos.length>0?
<WordsBtn style="blue" className="ml30 font-16 tongjis"
onClick={() => this.statisticsy(true)}
><i className="iconfont icon-tongji1 mr5 font-14"></i></WordsBtn>
:""
}
</span>
{
newOperation ?
<span>
{
videoId ?
<WordsBtn style="blue"
onClick={() => this.editDir(videoData && videoData.category_name, videoId)}
className={"ml30 font-16"}>目录重命名</WordsBtn>
:
<WordsBtn style="blue" className="ml30 font-16" onClick={this.addDir}>新建目录</WordsBtn>
}
<WordsBtn style="blue" className="ml30 font-16"
onClick={() => this.setLinkeVisible(true)}>增加外链</WordsBtn>
</span> : ""
}
{
new_upload ?
<span>
{
upload ?
<WordsBtn style="grey" className="font-16 ml30"
onClick={() => this.uploadVideo(false)}>取消</WordsBtn>
:
<WordsBtn style="blue" className="font-16 ml30" onClick={this.toUpload}>上传视频</WordsBtn>
}
</span>
: ""
}
</React.Fragment>
:
isAdmin===true?
<WordsBtn style="blue" className="font-16 ml30" onClick={this.liveSetting}>添加直播</WordsBtn>
:
""
}
</li>
</div>
</div>
:
(
myktid===null||myktid===undefined?
<Videostatistics {...this.props} {...this.state} statisticsy={(b) => this.statisticsy(b)}></Videostatistics>
:
<Videostatisticscomtwo {...this.state} {...this.props} tisid={myktid} mytitle={mytitle} tisticsbools={(b,id)=>this.mystatisticsys(b,id)}></Videostatisticscomtwo>
)
}
{
statistics === false ?
<Spin spinning={isSpining}>
{
type === "video" ?
<Videos
mykt={"mykt"}
Setmyktid={(id,title)=>this.Setmyktid(id,title)}
upload={upload}
videos={videos}
page={page}
data={videoData}
pageSize={PAGE_SIZE}
uploadVideo={this.uploadVideo}
listFunc={this.getList}
changePage={this.changePage}
{...this.props}
{...this.state}
></Videos>
:
<Lives
lives={lives}
liveData={liveData}
page={page}
pageSize={LIVE_PAGE_SIZE}
successFunc={this.getLiveList}
changePage={this.changePage}
setLiveId={this.setLiveId}
{...this.props}
{...this.state}
></Lives>
}
</Spin>
:
""
}
</React.Fragment>
)
}
}
export default VideoIndex;