Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
X
xiaomai-cloud-class-web
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
xiaomai-cloud-class
xiaomai-cloud-class-web
Commits
13a2beac
Commit
13a2beac
authored
Mar 23, 2021
by
chenshu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix:优化样式
parent
e0c2dd51
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
216 additions
and
134 deletions
+216
-134
src/modules/course-manage/AddLive.jsx
+96
-18
src/modules/course-manage/components/AddLiveIntro.jsx
+12
-65
src/modules/course-manage/graphics-course/AddGraphicsCourse.jsx
+10
-1
src/modules/course-manage/video-course/AddVideoCourse.jsx
+83
-9
src/modules/course-manage/video-course/components/AddVideoIntro.jsx
+15
-41
No files found.
src/modules/course-manage/AddLive.jsx
View file @
13a2beac
/*
/*
* @Author: 吴文洁
* @Author: 吴文洁
* @Date: 2020-07-17 15:49:11
* @Date: 2020-07-17 15:49:11
* @Last Modified by:
mikey.zhaopeng
* @Last Modified by:
chenshu
* @Last Modified time: 202
0-11-23 22:02:49
* @Last Modified time: 202
1-03-23 19:18:11
* @Description: 大班互动-添加/编辑直播课
* @Description: 大班互动-添加/编辑直播课
*/
*/
...
@@ -12,15 +12,20 @@ import { Button, message, Modal } from 'antd';
...
@@ -12,15 +12,20 @@ import { Button, message, Modal } from 'antd';
import
ShowTips
from
"@/components/ShowTips"
;
import
ShowTips
from
"@/components/ShowTips"
;
import
Breadcrumbs
from
"@/components/Breadcrumbs"
;
import
Breadcrumbs
from
"@/components/Breadcrumbs"
;
import
Bus
from
'../../core/bus'
import
AddLiveBasic
from
'./components/AddLiveBasic'
;
import
AddLiveBasic
from
'./components/AddLiveBasic'
;
import
AddLiveClass
from
'./components/AddLiveClass'
;
import
AddLiveClass
from
'./components/AddLiveClass'
;
import
AddLiveIntro
from
'./components/AddLiveIntro'
;
import
AddLiveIntro
from
'./components/AddLiveIntro'
;
import
{
randomString
}
from
'@/domains/basic-domain/utils'
;
import
Upload
from
'@/core/upload'
;
import
PreviewCourseModal
from
'./modal/PreviewCourseModal'
;
import
PreviewCourseModal
from
'./modal/PreviewCourseModal'
;
import
SelectPrepareFileModal
from
'../prepare-lesson/modal/SelectPrepareFileModal'
;
import
CourseService
from
"@/domains/course-domain/CourseService"
;
import
CourseService
from
"@/domains/course-domain/CourseService"
;
import
moment
from
'moment'
;
import
moment
from
'moment'
;
import
User
from
'@/common/js/user'
;
import
User
from
'@/common/js/user'
;
import
_
from
"underscore"
;
import
_
from
"underscore"
;
import
$
from
'jquery'
;
import
'./AddLive.less'
;
import
'./AddLive.less'
;
const
defaultCover
=
'https://image.xiaomaiketang.com/xm/YNfi45JwFA.png'
;
const
defaultCover
=
'https://image.xiaomaiketang.com/xm/YNfi45JwFA.png'
;
...
@@ -97,12 +102,7 @@ class AddLive extends React.Component {
...
@@ -97,12 +102,7 @@ class AddLive extends React.Component {
needRecord
:
'YES'
,
needRecord
:
'YES'
,
whetherVisitorsJoin
:
'NO'
,
whetherVisitorsJoin
:
'NO'
,
liveCourseWarmMedia
:
{},
liveCourseWarmMedia
:
{},
liveCourseMediaRequests
:
[{
introduce
:
''
,
contentType
:
"INTRO"
,
mediaType
:
'TEXT'
,
mediaContent
:
''
,
key
:
Math
.
random
()
}]
},
},
}
}
}
}
...
@@ -112,6 +112,23 @@ class AddLive extends React.Component {
...
@@ -112,6 +112,23 @@ class AddLive extends React.Component {
if
(
type
===
'edit'
)
{
if
(
type
===
'edit'
)
{
this
.
getCourseDetail
();
this
.
getCourseDetail
();
}
}
this
.
initBus
();
}
componentWillUnmount
()
{
this
.
removeBus
();
}
initBus
=
()
=>
{
Bus
.
bind
(
'graphicsEditorImage'
,
this
.
uploadImage
)
}
removeBus
=
()
=>
{
Bus
.
unbind
(
'graphicsEditorImage'
,
this
.
uploadImage
)
}
uploadImage
=
()
=>
{
this
.
setState
({
showSelectImageModal
:
true
})
}
}
getCourseDetail
=
()
=>
{
getCourseDetail
=
()
=>
{
...
@@ -140,6 +157,7 @@ class AddLive extends React.Component {
...
@@ -140,6 +157,7 @@ class AddLive extends React.Component {
let
coverUrl
;
let
coverUrl
;
let
liveCourseMediaRequests
=
[];
let
liveCourseMediaRequests
=
[];
let
liveCourseWarmMedia
;
let
liveCourseWarmMedia
;
let
hasIntro
=
false
;
courseMediaVOS
.
map
((
item
)
=>
{
courseMediaVOS
.
map
((
item
)
=>
{
switch
(
item
.
contentType
){
switch
(
item
.
contentType
){
case
"COVER"
:
case
"COVER"
:
...
@@ -150,7 +168,8 @@ class AddLive extends React.Component {
...
@@ -150,7 +168,8 @@ class AddLive extends React.Component {
liveCourseWarmMedia
=
item
;
liveCourseWarmMedia
=
item
;
break
;
break
;
case
"INTRO"
:
case
"INTRO"
:
liveCourseMediaRequests
=
[...
liveCourseMediaRequests
,
item
]
hasIntro
=
true
;
this
.
getTextDetail
(
'introduce'
,
item
.
mediaUrl
);
break
;
break
;
default
:
default
:
break
;
break
;
...
@@ -200,6 +219,7 @@ class AddLive extends React.Component {
...
@@ -200,6 +219,7 @@ class AddLive extends React.Component {
isEdit
=
false
isEdit
=
false
}
}
this
.
setState
({
this
.
setState
({
loadintroduce
:
!
hasIntro
,
isEdit
,
isEdit
,
loading
:
false
,
loading
:
false
,
courseState
,
courseState
,
...
@@ -210,6 +230,21 @@ class AddLive extends React.Component {
...
@@ -210,6 +230,21 @@ class AddLive extends React.Component {
})
})
}
}
getTextDetail
=
(
key
,
url
)
=>
{
$
.
ajax
({
data
:
{},
type
:
'GET'
,
url
,
contentType
:
'application/x-www-form-urlencoded; charset=UTF-8'
,
success
:
(
res
)
=>
{
this
.
setState
({
addLiveIntroInfo
:
{
...
this
.
state
.
addLiveIntroInfo
,
[
key
]:
res
},
[
`load
${
key
}
`
]:
true
});
},
error
:
()
=>
{
message
.
warning
(
'获取简介失败'
)
}
})
}
// 修改基本信息
// 修改基本信息
// 修改基本信息
// 修改基本信息
handleChangeBasicInfo
=
(
field
,
value
)
=>
{
handleChangeBasicInfo
=
(
field
,
value
)
=>
{
...
@@ -274,6 +309,13 @@ handleChangeBasicInfo = (field, value) => {
...
@@ -274,6 +309,13 @@ handleChangeBasicInfo = (field, value) => {
}
}
this
.
handleValidate
(
addLiveBasicInfo
,
addLiveClassInfo
,
addLiveIntroInfo
,
isEdit
).
then
((
res
)
=>
{
this
.
handleValidate
(
addLiveBasicInfo
,
addLiveClassInfo
,
addLiveIntroInfo
,
isEdit
).
then
((
res
)
=>
{
if
(
!
res
)
return
;
if
(
!
res
)
return
;
Upload
.
uploadTextToOSS
(
addLiveIntroInfo
.
introduce
,
`
${
randomString
()}
.txt`
,
(
introduceId
)
=>
{
this
.
submitRemote
({
introduceId
,
addLiveBasicInfo
,
addLiveClassInfo
,
addLiveIntroInfo
,
id
});
},
()
=>
message
.
warning
(
'上传课程简介失败'
));
})
}
submitRemote
=
({
introduceId
,
addLiveBasicInfo
,
addLiveClassInfo
,
addLiveIntroInfo
,
id
})
=>
{
const
{
type
}
=
this
.
state
;
const
{
type
}
=
this
.
state
;
const
{
courseName
,
coverUrl
,
coverId
,
categoryId
}
=
addLiveBasicInfo
;
const
{
courseName
,
coverUrl
,
coverId
,
categoryId
}
=
addLiveBasicInfo
;
const
{
const
{
...
@@ -286,7 +328,7 @@ handleChangeBasicInfo = (field, value) => {
...
@@ -286,7 +328,7 @@ handleChangeBasicInfo = (field, value) => {
}
=
addLiveClassInfo
;
}
=
addLiveClassInfo
;
let
{
startTime
,
endTime
}
=
addLiveClassInfo
;
let
{
startTime
,
endTime
}
=
addLiveClassInfo
;
const
{
liveCourseMediaRequests
,
needRecord
,
whetherVisitorsJoin
,
liveCourseWarmMedia
}
=
addLiveIntroInfo
;
const
{
needRecord
,
whetherVisitorsJoin
,
liveCourseWarmMedia
}
=
addLiveIntroInfo
;
if
(
type
===
'add'
)
{
if
(
type
===
'add'
)
{
startTime
=
startTime
;
startTime
=
startTime
;
...
@@ -305,7 +347,7 @@ handleChangeBasicInfo = (field, value) => {
...
@@ -305,7 +347,7 @@ handleChangeBasicInfo = (field, value) => {
mediaType
:
'PICTURE'
,
mediaType
:
'PICTURE'
,
mediaUrl
:
coverUrl
,
mediaUrl
:
coverUrl
,
}
}
let
scheduleMediaRequests
=
[...
liveCourseMediaRequests
];
let
scheduleMediaRequests
=
[
];
if
(
coverId
){
if
(
coverId
){
scheduleMediaRequests
=
[
coverObj
,...
scheduleMediaRequests
]
scheduleMediaRequests
=
[
coverObj
,...
scheduleMediaRequests
]
}
}
...
@@ -329,7 +371,8 @@ handleChangeBasicInfo = (field, value) => {
...
@@ -329,7 +371,8 @@ handleChangeBasicInfo = (field, value) => {
if
(
type
===
'add'
)
{
if
(
type
===
'add'
)
{
const
params
=
{
const
params
=
{
...
commonParams
,
...
commonParams
,
operatorId
:
User
.
getUserId
(),
operatorId
:
User
.
getUserId
(),
introduceId
,
}
}
CourseService
.
createLiveCloudCourse
(
params
).
then
((
res
)
=>
{
CourseService
.
createLiveCloudCourse
(
params
).
then
((
res
)
=>
{
...
@@ -346,6 +389,7 @@ handleChangeBasicInfo = (field, value) => {
...
@@ -346,6 +389,7 @@ handleChangeBasicInfo = (field, value) => {
...
commonParams
,
...
commonParams
,
updateUserId
:
User
.
getUserId
(),
updateUserId
:
User
.
getUserId
(),
liveCourseId
:
id
,
liveCourseId
:
id
,
introduceId
,
}
}
CourseService
.
updateLiveCloudCourse
(
params
).
then
((
res
)
=>
{
CourseService
.
updateLiveCloudCourse
(
params
).
then
((
res
)
=>
{
if
(
res
.
success
){
if
(
res
.
success
){
...
@@ -356,8 +400,8 @@ handleChangeBasicInfo = (field, value) => {
...
@@ -356,8 +400,8 @@ handleChangeBasicInfo = (field, value) => {
}
}
});
});
}
}
})
}
}
handleValidate
=
(
addLiveBasicInfo
,
addLiveClassInfo
,
addLiveIntroInfo
,
isEdit
)
=>
{
handleValidate
=
(
addLiveBasicInfo
,
addLiveClassInfo
,
addLiveIntroInfo
,
isEdit
)
=>
{
return
new
Promise
((
resolve
)
=>
{
return
new
Promise
((
resolve
)
=>
{
const
{
type
}
=
this
.
state
;
const
{
type
}
=
this
.
state
;
...
@@ -498,14 +542,33 @@ handleChangeBasicInfo = (field, value) => {
...
@@ -498,14 +542,33 @@ handleChangeBasicInfo = (field, value) => {
}
}
}
}
handleSelectImage
=
(
file
)
=>
{
this
.
setState
({
showSelectImageModal
:
false
})
const
{
ossUrl
}
=
file
;
const
{
addLiveIntroInfo
}
=
this
.
state
;
this
.
setState
({
addLiveIntroInfo
:
{
...
addLiveIntroInfo
,
introduce
:
`
${
addLiveIntroInfo
.
introduce
}
<p><img style="max-width: 100%;" src="
${
ossUrl
}
" /><br/><p>`
}
});
}
render
()
{
render
()
{
const
{
const
{
id
,
type
,
id
,
addLiveBasicInfo
,
addLiveClassInfo
,
addLiveIntroInfo
,
type
,
isEdit
addLiveBasicInfo
,
addLiveClassInfo
,
addLiveIntroInfo
,
isEdit
,
loadintroduce
,
showSelectImageModal
,
}
=
this
.
state
;
}
=
this
.
state
;
console
.
log
(
loadintroduce
,
addLiveIntroInfo
,
888888
)
return
(
return
(
<
div
className=
"page add-live-page"
>
<
div
className=
"page add-live-page"
>
<
Breadcrumbs
<
Breadcrumbs
...
@@ -541,7 +604,7 @@ handleChangeBasicInfo = (field, value) => {
...
@@ -541,7 +604,7 @@ handleChangeBasicInfo = (field, value) => {
<
div
className=
"title"
>
更多信息
</
div
>
<
div
className=
"title"
>
更多信息
</
div
>
<
AddLiveIntro
<
AddLiveIntro
isEdit=
{
isEdit
}
isEdit=
{
isEdit
}
data=
{
addLiveIntroInfo
}
data=
{
{
...
addLiveIntroInfo
,
loadintroduce
,
id
}
}
onChange=
{
this
.
handleChangeIntroInfo
}
onChange=
{
this
.
handleChangeIntroInfo
}
/>
/>
</
div
>
</
div
>
...
@@ -554,6 +617,21 @@ handleChangeBasicInfo = (field, value) => {
...
@@ -554,6 +617,21 @@ handleChangeBasicInfo = (field, value) => {
<
Button
type=
"primary"
onClick=
{
_
.
debounce
(()
=>
this
.
handleSubmit
(),
3000
,
true
)
}
>
保存
</
Button
>
<
Button
type=
"primary"
onClick=
{
_
.
debounce
(()
=>
this
.
handleSubmit
(),
3000
,
true
)
}
>
保存
</
Button
>
</
div
>
</
div
>
{
showSelectImageModal
&&
<
SelectPrepareFileModal
key=
"basic"
operateType=
"select"
multiple=
{
false
}
accept=
"image/jpeg,image/png,image/jpg"
selectTypeList=
{
[
'JPG'
,
'JPEG'
,
'PNG'
]
}
tooltip=
'支持文件类型:jpg、jpeg、png'
isOpen=
{
showSelectImageModal
}
onClose=
{
()
=>
{
this
.
setState
({
showSelectImageModal
:
false
})
}
}
onSelect=
{
this
.
handleSelectImage
}
/>
}
{
this
.
state
.
previewLiveCourseModal
}
{
this
.
state
.
previewLiveCourseModal
}
{
this
.
state
.
lackConsumeStudentModal
}
{
this
.
state
.
lackConsumeStudentModal
}
</
div
>
</
div
>
...
...
src/modules/course-manage/components/AddLiveIntro.jsx
View file @
13a2beac
...
@@ -2,14 +2,14 @@
...
@@ -2,14 +2,14 @@
* @Author: 吴文洁
* @Author: 吴文洁
* @Date: 2020-07-16 11:05:17
* @Date: 2020-07-16 11:05:17
* @Last Modified by: chenshu
* @Last Modified by: chenshu
* @Last Modified time: 2021-03-23 1
6:34:11
* @Last Modified time: 2021-03-23 1
7:39:50
* @Description: 添加直播-简介
* @Description: 添加直播-简介
*/
*/
import
React
from
'react'
;
import
React
from
'react'
;
import
{
Input
,
message
,
Upload
,
Radio
,
Row
,
Col
,
Button
,
Popover
,
Switch
}
from
'antd'
;
import
{
Input
,
message
,
Upload
,
Radio
,
Row
,
Col
,
Button
,
Popover
,
Switch
}
from
'antd'
;
import
Service
from
'@/common/js/service'
;
import
Service
from
'@/common/js/service'
;
import
EditorBox
from
'../components/EditorBox
'
;
import
GraphicsEditor
from
'./GraphicsEditor
'
;
import
User
from
'@/common/js/user'
;
import
User
from
'@/common/js/user'
;
import
UploadOss
from
'@/core/upload'
;
import
UploadOss
from
'@/core/upload'
;
import
'./AddLiveIntro.less'
;
import
'./AddLiveIntro.less'
;
...
@@ -138,32 +138,10 @@ class AddLiveIntro extends React.Component {
...
@@ -138,32 +138,10 @@ class AddLiveIntro extends React.Component {
)
)
}
}
handleChangeIntro
=
(
index
,
value
,
length
)
=>
{
changeIntro
=
(
value
)
=>
{
const
{
liveCourseMediaRequests
}
=
this
.
props
.
data
;
this
.
props
.
onChange
(
'introduce'
,
value
);
console
.
log
(
'index'
,
index
);
liveCourseMediaRequests
[
index
].
mediaContent
=
value
;
liveCourseMediaRequests
[
index
].
mediaContentLength
=
length
this
.
props
.
onChange
(
'liveCourseMediaRequests'
,
liveCourseMediaRequests
);
}
}
handleAddIntroText
=
()
=>
{
const
{
liveCourseMediaRequests
}
=
this
.
props
.
data
;
liveCourseMediaRequests
.
push
({
contentType
:
"INTRO"
,
mediaType
:
'TEXT'
,
mediaContent
:
''
,
key
:
Math
.
random
()
});
this
.
props
.
onChange
(
'liveCourseMediaRequests'
,
liveCourseMediaRequests
);
}
handleUpload
=
(
Blob
)
=>
{
this
.
setState
({
showSelectFileModal
:
true
,
selectType
:
'INTRO'
})
}
whetherVisitorsJoinChange
=
()
=>
{
whetherVisitorsJoinChange
=
()
=>
{
if
(
this
.
props
.
data
.
whetherVisitorsJoin
===
"NO"
){
if
(
this
.
props
.
data
.
whetherVisitorsJoin
===
"NO"
){
this
.
props
.
onChange
(
'whetherVisitorsJoin'
,
'YES'
)
this
.
props
.
onChange
(
'whetherVisitorsJoin'
,
'YES'
)
...
@@ -176,9 +154,8 @@ class AddLiveIntro extends React.Component {
...
@@ -176,9 +154,8 @@ class AddLiveIntro extends React.Component {
}
}
render
()
{
render
()
{
const
{
liveType
,
isXiaomai
,
isEdit
,
data
:
{
i
ntroduction
,
needRecord
,
whetherVisitorsJoin
,
liveCourseMediaRequests
=
[]
,
liveCourseWarmMedia
=
{}
}
}
=
this
.
props
;
const
{
liveType
,
isXiaomai
,
isEdit
,
data
:
{
i
d
,
introduce
,
needRecord
,
whetherVisitorsJoin
,
loadintroduce
,
liveCourseWarmMedia
=
{}
}
}
=
this
.
props
;
const
{
showCutModal
,
warmUrl
,
showSelectFileModal
,
diskList
,
imageFile
,
selectType
}
=
this
.
state
const
{
showCutModal
,
warmUrl
,
showSelectFileModal
,
diskList
,
imageFile
,
selectType
}
=
this
.
state
console
.
log
(
'liveCourseMediaRequests'
,
liveCourseMediaRequests
);
return
(
return
(
<
div
className=
"add-live__intro-info"
>
<
div
className=
"add-live__intro-info"
>
<
div
className=
"playback"
>
<
div
className=
"playback"
>
...
@@ -267,49 +244,19 @@ class AddLiveIntro extends React.Component {
...
@@ -267,49 +244,19 @@ class AddLiveIntro extends React.Component {
<
span
className=
"label"
>
直播课简介:
</
span
>
<
span
className=
"label"
>
直播课简介:
</
span
>
<
div
className=
"content"
>
<
div
className=
"content"
>
<
div
className=
"intro-list"
>
<
div
className=
"intro-list"
>
{
<
div
className=
"intro-list__item introduce-editor"
>
liveCourseMediaRequests
.
map
((
item
,
index
)
=>
{
{
(
!
id
||
loadintroduce
)
&&
if
(
item
.
mediaType
===
'TEXT'
)
{
<
GraphicsEditor
return
(
id=
"intro"
<
div
className=
"intro-list__item"
key=
{
item
.
key
}
>
isIntro=
{
true
}
<
EditorBox
detail=
{
{
detail=
{
{
content
:
item
.
mediaContent
content
:
introduce
}
}
}
}
onChange=
{
(
val
,
length
)
=>
{
this
.
handleChangeIntro
(
index
,
val
,
length
)
}
}
onChange=
{
(
val
)
=>
{
this
.
changeIntro
(
val
)
}
}
/>
/>
{
this
.
renderLittleIcon
(
index
)
}
</
div
>
)
}
}
if
(
item
.
mediaType
===
'PICTURE'
)
{
return
(
<
div
className=
"intro-list__item picture"
key=
{
index
}
>
<
div
className=
"img__wrap"
>
<
img
src=
{
item
.
mediaUrl
}
/>
</
div
>
</
div
>
{
this
.
renderLittleIcon
(
index
)
}
</
div
>
</
div
>
)
}
})
}
</
div
>
<
div
className=
"operate"
>
<
div
className=
"operate__item"
onClick=
{
this
.
handleAddIntroText
}
>
<
span
className=
"icon iconfont"
>

</
span
>
<
span
className=
"text"
>
文字
</
span
>
</
div
>
<
div
className=
"operate__item"
onClick=
{
this
.
handleUpload
}
>
<
span
className=
"icon iconfont"
>

</
span
>
<
span
className=
"text"
>
图片
</
span
>
</
div
>
</
div
>
<
div
className=
"tips"
>
• 图片支持jpeg、jpg、png、gif格式
</
div
>
</
div
>
</
div
>
</
div
>
</
div
>
{
/* 选择暖场图文件弹窗 */
}
{
/* 选择暖场图文件弹窗 */
}
...
...
src/modules/course-manage/graphics-course/AddGraphicsCourse.jsx
View file @
13a2beac
...
@@ -82,11 +82,20 @@ class AddGraphicsCourse extends React.Component {
...
@@ -82,11 +82,20 @@ class AddGraphicsCourse extends React.Component {
}
}
}
}
componentWillUnmount
()
{
this
.
removeBus
();
}
initBus
=
()
=>
{
initBus
=
()
=>
{
Bus
.
bind
(
'graphicsEditorImage'
,
this
.
uploadImage
)
Bus
.
bind
(
'graphicsEditorImage'
,
this
.
uploadImage
)
Bus
.
bind
(
'graphicsEditorVideo'
,
this
.
uploadVideo
)
Bus
.
bind
(
'graphicsEditorVideo'
,
this
.
uploadVideo
)
}
}
removeBus
=
()
=>
{
Bus
.
unbind
(
'graphicsEditorImage'
,
this
.
uploadImage
)
Bus
.
unbind
(
'graphicsEditorVideo'
,
this
.
uploadVideo
)
}
uploadImage
=
()
=>
{
uploadImage
=
()
=>
{
this
.
setState
({
showSelectImageModal
:
true
})
this
.
setState
({
showSelectImageModal
:
true
})
}
}
...
@@ -155,7 +164,6 @@ class AddGraphicsCourse extends React.Component {
...
@@ -155,7 +164,6 @@ class AddGraphicsCourse extends React.Component {
}
}
return
item
;
return
item
;
})
})
!
hasIntro
&&
this
.
setState
({
loadintroduce
:
true
})
let
categoryName
;
let
categoryName
;
if
(
categoryTwoName
){
if
(
categoryTwoName
){
...
@@ -164,6 +172,7 @@ class AddGraphicsCourse extends React.Component {
...
@@ -164,6 +172,7 @@ class AddGraphicsCourse extends React.Component {
categoryName
=
`
${
categoryOneName
}
`
;
categoryName
=
`
${
categoryOneName
}
`
;
}
}
this
.
setState
({
this
.
setState
({
loadintroduce
:
!
hasIntro
,
coverId
,
coverId
,
coverUrl
,
coverUrl
,
courseName
,
courseName
,
...
...
src/modules/course-manage/video-course/AddVideoCourse.jsx
View file @
13a2beac
...
@@ -21,9 +21,13 @@ import SelectPrepareFileModal from '../../prepare-lesson/modal/SelectPrepareFile
...
@@ -21,9 +21,13 @@ import SelectPrepareFileModal from '../../prepare-lesson/modal/SelectPrepareFile
import
PreviewCourseModal
from
'../modal/PreviewCourseModal'
;
import
PreviewCourseModal
from
'../modal/PreviewCourseModal'
;
import
StoreService
from
"@/domains/store-domain/storeService"
;
import
StoreService
from
"@/domains/store-domain/storeService"
;
import
CourseService
from
"@/domains/course-domain/CourseService"
;
import
CourseService
from
"@/domains/course-domain/CourseService"
;
import
Service
from
'@/common/js/service'
;
import
User
from
'@/common/js/user'
;
import
User
from
'@/common/js/user'
;
import
_
from
"underscore"
;
import
_
from
"underscore"
;
import
Upload
from
'@/core/upload'
;
import
Upload
from
'@/core/upload'
;
import
{
randomString
}
from
'@/domains/basic-domain/utils'
;
import
$
from
'jquery'
;
import
Bus
from
'../../../core/bus'
// import PhotoClip from 'photoclip';
// import PhotoClip from 'photoclip';
import
'./AddVideoCourse.less'
;
import
'./AddVideoCourse.less'
;
...
@@ -76,6 +80,7 @@ class AddVideoCourse extends React.Component {
...
@@ -76,6 +80,7 @@ class AddVideoCourse extends React.Component {
whetherVisitorsJoin
:
'NO'
,
// 是否允许游客加入
whetherVisitorsJoin
:
'NO'
,
// 是否允许游客加入
showSelectCoverModal
:
false
,
showSelectCoverModal
:
false
,
cutImageBlob
:
null
,
cutImageBlob
:
null
,
introduce
:
''
,
}
}
}
}
...
@@ -85,7 +90,21 @@ class AddVideoCourse extends React.Component {
...
@@ -85,7 +90,21 @@ class AddVideoCourse extends React.Component {
if
(
pageType
===
'edit'
)
{
if
(
pageType
===
'edit'
)
{
this
.
handleFetchScheudleDetail
(
id
);
this
.
handleFetchScheudleDetail
(
id
);
}
}
this
.
initBus
()
}
}
initBus
=
()
=>
{
Bus
.
bind
(
'graphicsEditorImage'
,
this
.
uploadIntroImage
)
}
removeBus
=
()
=>
{
Bus
.
unbind
(
'graphicsEditorImage'
,
this
.
uploadIntroImage
)
}
uploadIntroImage
=
()
=>
{
this
.
setState
({
showSelectImageModal
:
true
})
}
//获取分类列表
//获取分类列表
getCourseCatalogList
=
()
=>
{
getCourseCatalogList
=
()
=>
{
StoreService
.
getCourseCatalogList
({
current
:
1
,
size
:
1000
}).
then
((
res
)
=>
{
StoreService
.
getCourseCatalogList
({
current
:
1
,
size
:
1000
}).
then
((
res
)
=>
{
...
@@ -132,6 +151,7 @@ class AddVideoCourse extends React.Component {
...
@@ -132,6 +151,7 @@ class AddVideoCourse extends React.Component {
let
scheduleMedia
=
[];
let
scheduleMedia
=
[];
let
scheduleVideoId
;
let
scheduleVideoId
;
let
scheduleVideoUrl
;
let
scheduleVideoUrl
;
let
hasIntro
;
courseMediaVOS
.
map
((
item
)
=>
{
courseMediaVOS
.
map
((
item
)
=>
{
switch
(
item
.
contentType
){
switch
(
item
.
contentType
){
...
@@ -147,7 +167,8 @@ class AddVideoCourse extends React.Component {
...
@@ -147,7 +167,8 @@ class AddVideoCourse extends React.Component {
videoType
=
item
.
mediaType
;
videoType
=
item
.
mediaType
;
break
;
break
;
case
"INTRO"
:
case
"INTRO"
:
scheduleMedia
=
[...
scheduleMedia
,
item
]
hasIntro
=
true
;
this
.
getTextDetail
(
'introduce'
,
item
.
mediaUrl
);
break
;
break
;
default
:
default
:
break
;
break
;
...
@@ -162,6 +183,7 @@ class AddVideoCourse extends React.Component {
...
@@ -162,6 +183,7 @@ class AddVideoCourse extends React.Component {
categoryName
=
`
${
categoryOneName
}
`
;
categoryName
=
`
${
categoryOneName
}
`
;
}
}
this
.
setState
({
this
.
setState
({
loadintroduce
:
!
hasIntro
,
coverId
,
coverId
,
coverUrl
,
coverUrl
,
videoType
,
videoType
,
...
@@ -179,6 +201,18 @@ class AddVideoCourse extends React.Component {
...
@@ -179,6 +201,18 @@ class AddVideoCourse extends React.Component {
})
})
}
}
getTextDetail
=
(
key
,
url
)
=>
{
$
.
ajax
({
data
:
{},
type
:
'GET'
,
url
,
contentType
:
'application/x-www-form-urlencoded; charset=UTF-8'
,
success
:
(
res
)
=>
{
this
.
setState
({
[
key
]:
res
,
[
`load
${
key
}
`
]:
true
});
}
})
}
handleGoBack
=
()
=>
{
handleGoBack
=
()
=>
{
const
{
const
{
...
@@ -330,13 +364,14 @@ class AddVideoCourse extends React.Component {
...
@@ -330,13 +364,14 @@ class AddVideoCourse extends React.Component {
scheduleVideoUrl
,
scheduleVideoUrl
,
categoryId
,
categoryId
,
shelfState
,
shelfState
,
whetherVisitorsJoin
whetherVisitorsJoin
,
introduce
,
}
=
this
.
state
;
}
=
this
.
state
;
const
commonParams
=
{
const
commonParams
=
{
videoName
,
videoName
,
videoDuration
,
videoDuration
,
scheduleVideoId
,
courseMediaId
:
scheduleVideoId
,
scheduleMedia
:
scheduleMedia
.
filter
(
item
=>
!!
item
.
mediaContent
),
scheduleMedia
:
scheduleMedia
.
filter
(
item
=>
!!
item
.
mediaContent
),
categoryId
,
categoryId
,
courseName
,
courseName
,
...
@@ -344,13 +379,21 @@ class AddVideoCourse extends React.Component {
...
@@ -344,13 +379,21 @@ class AddVideoCourse extends React.Component {
operatorId
:
User
.
getStoreUserId
(),
operatorId
:
User
.
getStoreUserId
(),
storeId
:
User
.
getStoreId
(),
storeId
:
User
.
getStoreId
(),
shelfState
,
shelfState
,
whetherVisitorsJoin
whetherVisitorsJoin
,
courseType
:
'VOICE'
,
};
};
// 校验必填字段:课程名称, 课程视频
// 校验必填字段:课程名称, 课程视频
this
.
handleValidate
(
courseName
,
scheduleVideoId
,
categoryId
,
scheduleMedia
).
then
((
res
)
=>
{
this
.
handleValidate
(
courseName
,
scheduleVideoId
,
categoryId
,
scheduleMedia
).
then
((
res
)
=>
{
if
(
!
res
)
return
;
if
(
!
res
)
return
;
Upload
.
uploadTextToOSS
(
introduce
,
`
${
randomString
()}
.txt`
,
(
introduceId
)
=>
{
this
.
submitRemote
({
id
,
pageType
,
commonParams
:
{
...
commonParams
,
introduceId
}
})
});
});
}
submitRemote
=
({
id
,
pageType
,
commonParams
})
=>
{
if
(
pageType
===
'add'
)
{
if
(
pageType
===
'add'
)
{
CourseService
.
createVideoSchedule
(
commonParams
).
then
((
res
)
=>
{
Service
.
Hades
(
'public/hades/createMediaCourse'
,
commonParams
).
then
((
res
)
=>
{
if
(
!
res
)
return
;
if
(
!
res
)
return
;
message
.
success
(
"新建成功"
);
message
.
success
(
"新建成功"
);
window
.
RCHistory
.
push
({
window
.
RCHistory
.
push
({
...
@@ -362,7 +405,7 @@ class AddVideoCourse extends React.Component {
...
@@ -362,7 +405,7 @@ class AddVideoCourse extends React.Component {
courseId
:
id
,
courseId
:
id
,
...
commonParams
,
...
commonParams
,
}
}
CourseService
.
editVideoSchedule
(
editParams
).
then
((
res
)
=>
{
Service
.
Hades
(
'public/hades/editMediaCourse'
,
editParams
).
then
((
res
)
=>
{
if
(
!
res
)
return
;
if
(
!
res
)
return
;
message
.
success
(
"保存成功"
);
message
.
success
(
"保存成功"
);
window
.
RCHistory
.
push
({
window
.
RCHistory
.
push
({
...
@@ -370,7 +413,6 @@ class AddVideoCourse extends React.Component {
...
@@ -370,7 +413,6 @@ class AddVideoCourse extends React.Component {
});
});
});
});
}
}
});
}
}
handleValidate
=
(
courseName
,
scheduleVideoId
,
categoryId
,
scheduleMedia
)
=>
{
handleValidate
=
(
courseName
,
scheduleVideoId
,
categoryId
,
scheduleMedia
)
=>
{
...
@@ -405,6 +447,17 @@ class AddVideoCourse extends React.Component {
...
@@ -405,6 +447,17 @@ class AddVideoCourse extends React.Component {
this
.
uploadImage
(
file
);
this
.
uploadImage
(
file
);
}
}
handleSelectImage
=
(
file
)
=>
{
this
.
setState
({
showSelectImageModal
:
false
})
const
{
ossUrl
}
=
file
;
const
{
introduce
}
=
this
.
state
;
this
.
setState
({
introduce
:
`
${
introduce
}
<p><img style="max-width: 100%;" src="
${
ossUrl
}
" /><br/><p>`
});
}
//上传图片
//上传图片
uploadImage
=
(
imageFile
)
=>
{
uploadImage
=
(
imageFile
)
=>
{
const
{
folderName
}
=
imageFile
;
const
{
folderName
}
=
imageFile
;
...
@@ -516,7 +569,11 @@ class AddVideoCourse extends React.Component {
...
@@ -516,7 +569,11 @@ class AddVideoCourse extends React.Component {
showCutModal
,
showSelectFileModal
,
diskList
,
showCutModal
,
showSelectFileModal
,
diskList
,
imageFile
,
joinType
,
videoName
,
videoType
,
shelfState
,
imageFile
,
joinType
,
videoName
,
videoType
,
shelfState
,
categoryName
,
courseCatalogList
,
whetherVisitorsJoin
,
categoryName
,
courseCatalogList
,
whetherVisitorsJoin
,
visible
,
showSelectCoverModal
,
hasImgReady
,
cutImageBlob
visible
,
showSelectCoverModal
,
hasImgReady
,
cutImageBlob
,
introduce
,
loadintroduce
,
id
,
showSelectImageModal
,
}
=
this
.
state
;
}
=
this
.
state
;
// 已选择的上课学员数量
// 已选择的上课学员数量
...
@@ -605,10 +662,12 @@ class AddVideoCourse extends React.Component {
...
@@ -605,10 +662,12 @@ class AddVideoCourse extends React.Component {
<
div
className=
"intro-info mt16"
>
<
div
className=
"intro-info mt16"
>
<
AddVideoIntro
<
AddVideoIntro
data=
{
{
data=
{
{
id
,
liveCourseMediaRequests
:
scheduleMedia
,
liveCourseMediaRequests
:
scheduleMedia
,
shelfState
,
shelfState
,
whetherVisitorsJoin
,
whetherVisitorsJoin
,
label
:
'视频课简介'
introduce
,
loadintroduce
,
}
}
}
}
onChange=
{
this
.
handleChangeForm
}
onChange=
{
this
.
handleChangeForm
}
/>
/>
...
@@ -642,6 +701,21 @@ class AddVideoCourse extends React.Component {
...
@@ -642,6 +701,21 @@ class AddVideoCourse extends React.Component {
onSelect=
{
this
.
handleSelectVideo
}
onSelect=
{
this
.
handleSelectVideo
}
/>
/>
}
}
{
showSelectImageModal
&&
<
SelectPrepareFileModal
key=
"basic"
operateType=
"select"
multiple=
{
false
}
accept=
"image/jpeg,image/png,image/jpg"
selectTypeList=
{
[
'JPG'
,
'JPEG'
,
'PNG'
]
}
tooltip=
'支持文件类型:jpg、jpeg、png'
isOpen=
{
showSelectImageModal
}
onClose=
{
()
=>
{
this
.
setState
({
showSelectImageModal
:
false
})
}
}
onSelect=
{
this
.
handleSelectImage
}
/>
}
{
showSelectCoverModal
&&
{
showSelectCoverModal
&&
<
SelectPrepareFileModal
<
SelectPrepareFileModal
key=
"basic"
key=
"basic"
...
...
src/modules/course-manage/video-course/components/AddVideoIntro.jsx
View file @
13a2beac
/*
/*
* @Author: 吴文洁
* @Author: 吴文洁
* @Date: 2020-07-16 11:05:17
* @Date: 2020-07-16 11:05:17
* @Last Modified by:
mikey.zhaopeng
* @Last Modified by:
chenshu
* @Last Modified time: 202
0-11-24 14:29:52
* @Last Modified time: 202
1-03-23 18:12:05
* @Description: 添加直播-简介
* @Description: 添加直播-简介
*/
*/
import
React
from
'react'
;
import
React
from
'react'
;
import
{
Input
,
message
,
Upload
,
Radio
,
Row
,
Col
,
Button
,
Popover
,
Switch
}
from
'antd'
;
import
{
Input
,
message
,
Upload
,
Radio
,
Row
,
Col
,
Button
,
Popover
,
Switch
}
from
'antd'
;
import
Service
from
'@/common/js/service'
;
import
Service
from
'@/common/js/service'
;
import
EditorBox
from
'../../components/EditorBox
'
;
import
GraphicsEditor
from
'../../components/GraphicsEditor
'
;
import
User
from
'@/common/js/user'
;
import
User
from
'@/common/js/user'
;
import
UploadOss
from
'@/core/upload'
;
import
UploadOss
from
'@/core/upload'
;
import
'./AddVideoIntro.less'
;
import
'./AddVideoIntro.less'
;
...
@@ -144,6 +144,10 @@ class AddVideoIntro extends React.Component {
...
@@ -144,6 +144,10 @@ class AddVideoIntro extends React.Component {
this
.
props
.
onChange
(
'liveCourseMediaRequests'
,
liveCourseMediaRequests
);
this
.
props
.
onChange
(
'liveCourseMediaRequests'
,
liveCourseMediaRequests
);
}
}
changeIntro
=
(
value
)
=>
{
this
.
props
.
onChange
(
'introduce'
,
value
);
}
handleAddIntroText
=
()
=>
{
handleAddIntroText
=
()
=>
{
const
{
liveCourseMediaRequests
}
=
this
.
props
.
data
;
const
{
liveCourseMediaRequests
}
=
this
.
props
.
data
;
liveCourseMediaRequests
.
push
({
liveCourseMediaRequests
.
push
({
...
@@ -180,7 +184,7 @@ class AddVideoIntro extends React.Component {
...
@@ -180,7 +184,7 @@ class AddVideoIntro extends React.Component {
}
}
render
()
{
render
()
{
const
{
data
:
{
whetherVisitorsJoin
,
liveCourseMediaRequests
=
[],
shelfState
}
}
=
this
.
props
;
const
{
data
:
{
whetherVisitorsJoin
,
liveCourseMediaRequests
=
[],
shelfState
,
id
,
introduce
,
loadintroduce
}
}
=
this
.
props
;
const
{
showSelectFileModal
,
selectType
}
=
this
.
state
const
{
showSelectFileModal
,
selectType
}
=
this
.
state
return
(
return
(
<
div
className=
"add-video__intro-info"
>
<
div
className=
"add-video__intro-info"
>
...
@@ -218,49 +222,19 @@ class AddVideoIntro extends React.Component {
...
@@ -218,49 +222,19 @@ class AddVideoIntro extends React.Component {
<
span
className=
"label"
>
视频课简介:
</
span
>
<
span
className=
"label"
>
视频课简介:
</
span
>
<
div
className=
"content"
>
<
div
className=
"content"
>
<
div
className=
"intro-list"
>
<
div
className=
"intro-list"
>
{
<
div
className=
"intro-list__item introduce-editor"
>
liveCourseMediaRequests
.
map
((
item
,
index
)
=>
{
{
(
!
id
||
loadintroduce
)
&&
if
(
item
.
mediaType
===
'TEXT'
)
{
<
GraphicsEditor
return
(
id=
"intro"
<
div
className=
"intro-list__item"
key=
{
item
.
key
}
>
isIntro=
{
true
}
<
EditorBox
detail=
{
{
detail=
{
{
content
:
item
.
mediaContent
content
:
introduce
}
}
}
}
onChange=
{
(
val
,
length
)
=>
{
this
.
handleChangeIntro
(
index
,
val
,
length
)
}
}
onChange=
{
(
val
)
=>
{
this
.
changeIntro
(
val
)
}
}
/>
/>
{
this
.
renderLittleIcon
(
index
)
}
</
div
>
)
}
if
(
item
.
mediaType
===
'PICTURE'
)
{
return
(
<
div
className=
"intro-list__item picture"
key=
{
index
}
>
<
div
className=
"img__wrap"
>
<
img
src=
{
item
.
mediaUrl
}
/>
</
div
>
{
this
.
renderLittleIcon
(
index
)
}
</
div
>
)
}
})
}
}
</
div
>
</
div
>
<
div
className=
"operate"
>
<
div
className=
"operate__item"
onClick=
{
this
.
handleAddIntroText
}
>
<
span
className=
"icon iconfont"
>

</
span
>
<
span
className=
"text"
>
文字
</
span
>
</
div
>
</
div
>
<
div
className=
"operate__item"
onClick=
{
this
.
handleUpload
}
>
<
span
className=
"icon iconfont"
>

</
span
>
<
span
className=
"text"
>
图片
</
span
>
</
div
>
</
div
>
<
div
className=
"tips"
>
• 图片支持jpeg、jpg、png、gif格式
</
div
>
</
div
>
</
div
>
</
div
>
</
div
>
{
/* 选择暖场图文件弹窗 */
}
{
/* 选择暖场图文件弹窗 */
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment