Commit 9ea73d53 by wufan

feat:全局替换视频课文案为线上课

parent 84416698
......@@ -57,7 +57,7 @@ export function getLiveCloudCourseBasePage(params: object) {
return Service.Hades("public/courseCloud/getLiveCloudCourseBasePage", params);
}
//视频课相关接口
//相关接口
export function changeVideoShelfState(params: object) {
return Service.Hades("public/hades/changeVideoShelfState", params);
}
......
......@@ -81,7 +81,7 @@ class KnowledgeAPI {
exportPicLearnSync = (params: object) => {
return Service.Hades("public/knowledge/exportPicLearnSync", params);
}
// 视频课观看记录导出
// 观看记录导出
exportVideoLearnSync = (params: object) => {
return Service.Hades("public/knowledge/exportVideoLearnSync", params);
}
......
......@@ -19,7 +19,7 @@
/>
<meta
name="keywords"
content="小麦企学院,企业培训,员工培训,企业大学,企业内训,企业外训,培训计划,培训素材,企培,企训,资料云盘,培训课程,培训任务,直播课,视频课,图文课,线下课,知识库,作业,考试,排行榜,培训类别管理,定制培训计划,管理数据,学习数据,企学院,资料共享,培训数字化,数字化培训,培训工具,在线培训,线上培训,培训saas,培训管理,企业微信培训,对客培训,客户培训,直播培训,互联网培训,新员工培训,管理培训,管理者培训,工人培训,制造业培训,餐饮培训,服务业培训,零售培训,门店培训,工厂培训,车间培训,培训补贴,人事培训,财务培训,职场培训,企业学院平台,教育企业学院,教育企业平台,教育平台学院,企业学习,酷学院,小鹅通,企业学院,云学堂,时代光华,云课堂,魔学院,云大学,米知云,授课学堂"
content="小麦企学院,企业培训,员工培训,企业大学,企业内训,企业外训,培训计划,培训素材,企培,企训,资料云盘,培训课程,培训任务,直播课,,图文课,线下课,知识库,作业,考试,排行榜,培训类别管理,定制培训计划,管理数据,学习数据,企学院,资料共享,培训数字化,数字化培训,培训工具,在线培训,线上培训,培训saas,培训管理,企业微信培训,对客培训,客户培训,直播培训,互联网培训,新员工培训,管理培训,管理者培训,工人培训,制造业培训,餐饮培训,服务业培训,零售培训,门店培训,工厂培训,车间培训,培训补贴,人事培训,财务培训,职场培训,企业学院平台,教育企业学院,教育企业平台,教育平台学院,企业学习,酷学院,小鹅通,企业学院,云学堂,时代光华,云课堂,魔学院,云大学,米知云,授课学堂"
/>
<!-- <link rel="apple-touch-icon" href="../src/common/images/logo.png" /> -->
<link rel="shortcut icon" href="https://image.xiaomaiketang.com/xm/c4KiP2epBP.png" />
......
......@@ -3,7 +3,7 @@
* @Date: 2020-08-05 10:12:45
* @LastEditors: Please set LastEditors
* @LastEditTime: 2021-06-15 20:01:05
* @Description: 视频课-列表模块
* @Description: -列表模块
* @Copyright: 杭州杰竞科技有限公司 版权所有
*/
import React from 'react';
......@@ -32,7 +32,7 @@ class GraphicsCourseList extends React.Component {
constructor(props) {
super(props);
this.state = {
id: '', // 视频课ID
id: '', // ID
studentIds:[],
RelatedPlanModalVisible:false,
selectPlanList:{}
......@@ -319,10 +319,10 @@ class GraphicsCourseList extends React.Component {
}
})
}
// 删除视频课
// 删除
handleDeleteGraphicsCourse = (scheduleId) => {
Modal.confirm({
title: '你确定要删除此视频课吗?',
title: '你确定要删除此吗?',
content: '删除后,学员将不能进行观看。',
icon: <span className="icon iconfont default-confirm-icon">&#xe6f4;</span>,
okText: '确定',
......
......@@ -3,7 +3,7 @@
* @Date: 2020-08-05 10:12:15
* @LastEditors: zhangleyuan
* @LastEditTime: 2020-12-26 16:07:27
* @Description: 视频课-操作模块
* @Description: -操作模块
* @Copyright: 杭州杰竞科技有限公司 版权所有
*/
......
......@@ -17,17 +17,17 @@ class GraphicsCourse extends React.Component {
courseType: 'PICTURE',
storeId:User.getStoreId()
},
dataSource: [], // 视频课列表
totalCount: 0, // 视频课数据总条数
dataSource: [], // 列表
totalCount: 0, // 数据总条数
}
}
componentWillMount() {
// 获取视频课列表
// 获取列表
this.handleFetchScheduleList();
}
// 获取视频课列表
// 获取列表
handleFetchScheduleList = (_query = {}) => {
const query = {
...this.state.query,
......@@ -69,7 +69,7 @@ class GraphicsCourse extends React.Component {
{/* 操作模块 */}
<GraphicsCourseOpt />
{/* 视频课列表模块 */}
{/* 列表模块 */}
<GraphicsCourseList
query={query}
dataSource={dataSource}
......
......@@ -237,8 +237,8 @@ class LiveStudentListModal extends React.Component {
});
}
// 如果是非视频课, 显示操作的条件是课程未开始,且不是T端
// 如果是视频课,那么只要满足不是T端就可以了
// 如果是非, 显示操作的条件是课程未开始,且不是T端
// 如果是,那么只要满足不是T端就可以了
if ((liveItem.courseState === "UN_START" || type === 'videoCourse') && !isTeacher) {
// 未开始
columns.push({
......@@ -251,7 +251,7 @@ class LiveStudentListModal extends React.Component {
<Popconfirm
title="你确定要移出这个学员吗?"
onConfirm={() => {
// 如果是非视频课,且直播间类型是自研, 且晚于开课前30分钟, 不允许移出
// 如果是非,且直播间类型是自研, 且晚于开课前30分钟, 不允许移出
if (
liveItem.channel == "XIAOMAI" &&
liveItem.startTime - Date.now() < 1800000
......
......@@ -156,7 +156,7 @@ class PreviewCourseModal extends React.Component {
<div className='container__introduction'>
{type === 'videoCourse' ? (
<div className='container__introduction__title'>视频课简介</div>
<div className='container__introduction__title'>简介</div>
) : (
<div className='container__introduction__title'>直播课简介</div>
)}
......
......@@ -118,7 +118,7 @@ class ShareLiveModal extends React.Component {
coverImgSrc = 'https://image.xiaomaiketang.com/xm/Yip2YtFDwH.png';
}
break;
case 'videoClass': // 视频课
case 'videoClass': //
coverImgSrc = coverUrl || (courseDivision === 'internal' ? `${scheduleVideoUrl}?x-oss-process=video/snapshot,t_0,m_fast&anystring=anystring` : 'https://image.xiaomaiketang.com/xm/mt3ZQRxGKB.png')
break;
case 'graphicsClass': // 图文课
......
......@@ -3,7 +3,7 @@
* @Date: 2020-08-05 10:12:45
* @LastEditors: Please set LastEditors
* @LastEditTime: 2021-06-11 16:44:42
* @Description: 视频课-列表模块
* @Description: -列表模块
* @Copyright: 杭州杰竞科技有限公司 版权所有
*/
import React from 'react';
......@@ -32,7 +32,7 @@ class OfflineCourseList extends React.Component {
constructor(props) {
super(props);
this.state = {
id: '', // 视频课ID
id: '', // ID
studentIds: [],
}
}
......@@ -297,7 +297,7 @@ class OfflineCourseList extends React.Component {
}
})
}
// 删除视频课
// 删除
handleDeleteOfflineCourse = (courseId, isDelete) => {
if (isDelete) {
Modal.confirm({
......
......@@ -3,7 +3,7 @@
* @Date: 2020-08-05 10:12:15
* @LastEditors: zhangleyuan
* @LastEditTime: 2020-12-26 16:07:27
* @Description: 视频课-操作模块
* @Description: -操作模块
* @Copyright: 杭州杰竞科技有限公司 版权所有
*/
......
......@@ -14,7 +14,7 @@ const hasExportPermission = (type) => {
return Permission.hasInteractiveExport();
}
// 视频课导出权限
// 导出权限
if (type === 'videoClass') {
return Permission.hasVideoClassExport();
}
......
......@@ -3,7 +3,7 @@
* @Date: 2020-08-05 10:07:47
* @LastEditors: wufan
* @LastEditTime: 2021-05-30 20:35:49
* @Description: 视频课新增/编辑页
* @Description: 新增/编辑页
* @Copyright: 杭州杰竞科技有限公司 版权所有
*/
......@@ -54,18 +54,18 @@ class AddVideoCourse extends React.Component {
const pageType = getParameterByName('type')
this.state = {
id, // 视频课ID,编辑的时候从URL上带过来
id, // ID,编辑的时候从URL上带过来
pageType, // 页面类型: add->新建 edit->编辑
imageFile: null, // 需要被截取的图片
courseName: null, // 视频课名称
scheduleVideoId: null, // 视频课链接
courseName: null, // 名称
scheduleVideoId: null, // 链接
coverId: null, // 视频封面的recourceId
coverUrl: null, // 视频课封面
coverUrl: null, // 封面
studentList: [], // 上课学员列表
shelfState: 'YES', //是否开启学院展示
scheduleMedia: [
{
// 视频课媒体资源
// 媒体资源
contentType: 'INTRO',
mediaType: 'TEXT',
mediaContent: '',
......@@ -118,7 +118,7 @@ class AddVideoCourse extends React.Component {
break
}
}
// 获取视频课详情
// 获取详情
handleFetchScheudleDetail = (courseId) => {
CourseService.videoScheduleDetail({
courseId
......@@ -562,7 +562,7 @@ class AddVideoCourse extends React.Component {
return (
<div className='page add-video-course-page'>
<Breadcrumbs navList={pageType === 'add' ? '新建视频课' : '编辑视频课'} goBack={this.handleGoBack} />
<Breadcrumbs navList={pageType === 'add' ? '新建' : '编辑'} goBack={this.handleGoBack} />
<div className='box'>
<div className='show-tips'>
......@@ -574,7 +574,7 @@ class AddVideoCourse extends React.Component {
<span className='label'>课程名称:</span>
<Input
value={courseName}
placeholder='请输入视频课的名称(40字以内)'
placeholder='请输入的名称(40字以内)'
maxLength={40}
style={{ width: 240 }}
onChange={(e) => {
......
......@@ -144,7 +144,7 @@ class AddVideoIntro extends React.Component {
</div>
</div>
<div className="introduce">
<span className="label">视频课简介:</span>
<span className="label">简介:</span>
<div className="content">
<div className="intro-list">
<div className="intro-list__item introduce-editor">
......
......@@ -3,7 +3,7 @@
* @Date: 2020-08-05 10:11:57
* @LastEditors: fusanqiasng
* @LastEditTime: 2021-05-28 20:14:37
* @Description: 视频课-搜索模块
* @Description: -搜索模块
* @Copyright: 杭州杰竞科技有限公司 版权所有
*/
......@@ -192,10 +192,10 @@ class VideoCourseFilter extends React.Component {
<Row type='flex' justify='space-between' align='top'>
<div className='search-condition'>
<div className='search-condition__item'>
<span className='search-name'>视频课名称:</span>
<span className='search-name'>名称:</span>
<Search
value={courseName}
placeholder='搜索视频课名称'
placeholder='搜索名称'
onChange={(e) => {
this.handleChangeQuery('courseName', e.target.value)
}}
......
......@@ -16,7 +16,7 @@ class VideoCourseList extends React.Component {
constructor(props) {
super(props)
this.state = {
id: "", // 视频课ID
id: "", // ID
studentIds: [],
RelatedPlanModalVisible: false,
selectPlanList: {},
......@@ -55,7 +55,7 @@ class VideoCourseList extends React.Component {
const { ShelfLoading } = this.state
const columns = [
{
title: "视频课",
title: "",
key: "scheduleName",
dataIndex: "scheduleName",
width: 321,
......@@ -328,10 +328,10 @@ class VideoCourseList extends React.Component {
})
}
// 删除视频课
// 删除
handleDeleteVideoCourse = (scheduleId) => {
Modal.confirm({
title: "你确定要删除此视频课吗?",
title: "你确定要删除此吗?",
content: "删除后,学员将不能进行观看。",
icon: <span className='icon iconfont default-confirm-icon'>&#xe6f4;</span>,
okText: "确定",
......@@ -370,7 +370,7 @@ class VideoCourseList extends React.Component {
data={shareData}
type='videoClass'
courseDivision={type}
title='视频课'
title=''
close={() => {
this.setState({
shareLiveModal: null
......
......@@ -3,7 +3,7 @@
* @Date: 2020-08-05 10:12:15
* @LastEditors: zhangleyuan
* @LastEditTime: 2020-12-26 16:07:27
* @Description: 视频课-操作模块
* @Description: -操作模块
* @Copyright: 杭州杰竞科技有限公司 版权所有
*/
......@@ -22,7 +22,7 @@ export default function VideoCourseOpt() {
RCHistory.push('/create-video-course?type=add');
}}
className="mr12"
>新建视频课</Button>
>新建</Button>
</div>
);
}
......@@ -15,18 +15,18 @@ class VideoCourse extends React.Component {
current: 1,
storeId: User.getStoreId(),
},
dataSource: [], // 视频课列表
totalCount: 0, // 视频课数据总条数
dataSource: [], // 列表
totalCount: 0, // 数据总条数
currentTabKey: 'internal',
};
}
componentWillMount() {
// 获取视频课列表
// 获取列表
this.handleFetchScheduleList();
}
// 获取视频课列表
// 获取列表
handleFetchScheduleList = (_query = {}) => {
const { currentTabKey } = this.state;
const query = {
......@@ -81,7 +81,7 @@ class VideoCourse extends React.Component {
const { dataSource, totalCount, query, currentTabKey } = this.state;
return (
<div className='page video-course-page'>
<div className='content-header'>视频课</div>
<div className='content-header'></div>
<div className='box'>
<Tabs onChange={this.currenTabChange} activeKey={currentTabKey}>
......@@ -95,7 +95,7 @@ class VideoCourse extends React.Component {
<If condition={currentTabKey === 'internal'}>
<VideoCourseOpt />
</If>
{/* 视频课列表模块 */}
{/* 列表模块 */}
<VideoCourseList
type={currentTabKey}
query={query}
......
......@@ -122,7 +122,7 @@ class WatchDataModal extends React.Component {
const { visible,size,dataSource,totalCount,query} = this.state;
return (
<Modal
title="视频课观看数据"
title="观看数据"
visible={visible}
footer={null}
onCancel={this.onClose}
......
......@@ -301,7 +301,7 @@ class Home extends React.Component {
</div>
</div>
<div className="course-item">
<div className="course-title">视频课</div>
<div className="course-title"></div>
<div className="data">
<span className="course-number">{videoCourseNum}</span>
<span className="course-word">本月新增</span>
......@@ -380,7 +380,7 @@ class Home extends React.Component {
<span
className={`tab${scheduleType === 'VOICE' ? ' selected' : ''}`}
onClick={() => this.setState({ scheduleType: 'VOICE' }, () => this.getHotCourse())}
>视频课</span>
></span>
<span
className={`tab${scheduleType === 'PICTURE' ? ' selected' : ''}`}
onClick={() => this.setState({ scheduleType: 'PICTURE' }, () => this.getHotCourse())}
......
......@@ -55,7 +55,7 @@ const ENUM = {
CourseTypeEnum: {
LIVE: "直播课",
VOICE: "视频课",
VOICE: "",
PICTURE: "图文课",
FOLDER: "学习资料",
},
......
......@@ -107,11 +107,11 @@ class AddCourse extends React.Component {
selectVideo: {
external: [],
internal: [],
}, //弹窗内已选择的视频课
}, //弹窗内已选择的程
currentVideoCourseListData: {
external: [],
internal: [],
}, //页面中已关联的视频课
}, //页面中已关联的程
pictureDataSource: [],
pictureSize: 10,
......@@ -201,7 +201,7 @@ class AddCourse extends React.Component {
});
};
// 获取视频课列表
// 获取列表
handleFetchVideoList = () => {
const { videoQuery, videoSize, videoCourseDivision, videoDataSource, videoTotalCount } = this.state;
......@@ -866,7 +866,7 @@ class AddCourse extends React.Component {
)}
</div>
</TabPane>
<TabPane tab='视频课' key='VIDEO'>
<TabPane tab='' key='VIDEO'>
<Radio.Group value={videoCourseDivision} onChange={this.videoCourseDivisionChange} style={{ marginBottom: 8 }}>
<Radio.Button value='internal'>内部课程</Radio.Button>
<Radio.Button value='external'>外部课程</Radio.Button>
......
......@@ -25,7 +25,7 @@ class VideoList extends React.Component {
constructor(props) {
super(props);
this.state = {
id: "", // 视频课ID
id: "", // ID
studentIds: [],
selectedRowKeys: [],
query: {
......@@ -33,8 +33,8 @@ class VideoList extends React.Component {
current: 1,
storeId: User.getStoreId(),
},
dataSource: [], // 视频课列表
totalCount: 0, // 视频课数据总条数
dataSource: [], // 列表
totalCount: 0, // 数据总条数
};
}
......@@ -50,11 +50,11 @@ class VideoList extends React.Component {
}
componentWillMount() {
// 获取视频课列表
// 获取列表
this.handleFetchScheduleList();
}
// 获取视频课列表
// 获取列表
handleFetchScheduleList = (_query = {}) => {
const query = {
...this.state.query,
......
......@@ -347,7 +347,7 @@ class BasicInfo extends React.Component {
<div className='live-standard-info'>
<span className='icon iconfont'>&#xe864;</span>
<span className='instro'>
视频课单个课程,学员学习进度达到
单个课程,学员学习进度达到
<Input
width='40'
value={percentCompleteVideo}
......
......@@ -18,7 +18,7 @@ function ExpiredCourseList(props) {
<span>直播课</span>
}
{ item.courseType === "VOICE " &&
<span>视频课</span>
<span></span>
}
</div>
<div className="course-instro">
......
......@@ -21,7 +21,7 @@ const CourseType = {
text: '直播课'
},
VOICE: {
text: '视频课'
text: ''
},
RECORD: {
text: '录播课'
......
......@@ -12,7 +12,7 @@ const CourseType = {
text: "直播课"
},
VOICE : {
text:"视频课"
text:""
},
RECORD : {
text:'录播课'
......
......@@ -78,11 +78,11 @@ class SelectOperatorModal extends React.Component {
selectVideo: {
external: [],
internal: []
}, //弹窗内已选择的视频课
}, //弹窗内已选择的程
currentVideoCourseListData: {
external: [],
internal: []
}, //页面中已关联的视频课
}, //页面中已关联的程
pictureDataSource: [],
pictureSize: 10,
......@@ -90,8 +90,8 @@ class SelectOperatorModal extends React.Component {
current: 1
},
pictureTotalCount: 0,
selectPicture: [], //弹窗内已选择的视频课
currentPictureCourseListData: [], //页面中已关联的视频课
selectPicture: [], //弹窗内已选择的程
currentPictureCourseListData: [], //页面中已关联的程
activeKey: "video",
currentTaskCourseData: this.props.data[this.props.selectedTaskIndex].courseList || []
......@@ -135,7 +135,7 @@ class SelectOperatorModal extends React.Component {
})
}
// 获取视频课列表
// 获取列表
handleFetchVideoDataList = () => {
const { videoQuery, videoSize, videoDataSource, videoTotalCount, videoCourseDivision } = this.state
......@@ -589,7 +589,7 @@ class SelectOperatorModal extends React.Component {
className='link-create-course'
href={window.location.origin + window.location.pathname + "#/create-video-course?type=add"}
onClick={this.props.onClose}>
没有找到需要的视频课<span>去创建</span>
没有找到需要的?<span>去创建</span>
</a>
)
break
......@@ -760,7 +760,7 @@ class SelectOperatorModal extends React.Component {
</div>
</TabPane>
<TabPane tab='视频课' key='video'>
<TabPane tab='' key='video'>
<Radio.Group value={videoCourseDivision} onChange={this.videoCourseDivisionChange} style={{ marginBottom: 16 }}>
<Radio.Button value='internal'>内部课程</Radio.Button>
<Radio.Button value='external'>外部课程</Radio.Button>
......
......@@ -81,7 +81,7 @@ const mainRoutes = [
{
path: '/video-course',
component: VideoCoursePage,
name: '视频课',
name: '',
},
{
path: '/graphics-course',
......@@ -101,7 +101,7 @@ const mainRoutes = [
{
path: '/create-video-course',
component: AddVideoCoursePage,
name: '创建视频课',
name: '创建',
},
{
path: '/knowledge-base',
......@@ -163,7 +163,7 @@ const mainRoutes = [
{
path: '/create-plan',
component: AddPlanPage,
name: '创建视频课',
name: '创建',
},
{
path: '/store-info',
......
......@@ -27,7 +27,7 @@ export const menuList: any = [
link: '/live-course'
},
{
groupName: "视频课",
groupName: "",
groupCode: "CourseVideoClass",
link: '/video-course'
},
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment