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
d082113c
Commit
d082113c
authored
Jun 16, 2021
by
yuananting
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix:修复图文课编辑清空内容后隐藏的bug
parent
96108489
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
258 additions
and
269 deletions
+258
-269
src/modules/course-manage/graphics-course/AddGraphicsCourse.jsx
+258
-269
No files found.
src/modules/course-manage/graphics-course/AddGraphicsCourse.jsx
View file @
d082113c
/*
* @Author: 吴文洁
* @Date: 2020-08-05 10:07:47
* @LastEditors:
wufan
* @LastEditTime: 2021-0
5-27 16:37:28
* @LastEditors:
fusanqiasng
* @LastEditTime: 2021-0
6-16 18:16:14
* @Description: 图文课新增/编辑页
* @Copyright: 杭州杰竞科技有限公司 版权所有
*/
import
React
from
'react'
;
import
{
Button
,
Input
,
Radio
,
message
,
Modal
,
Cascader
}
from
'antd'
;
import
{
Button
,
Input
,
Radio
,
message
,
Modal
,
Cascader
}
from
'antd'
;
import
$
from
'jquery'
;
import
{
DISK_MAP
,
FileTypeIcon
,
FileVerifyMap
}
from
'@/common/constants/academic/lessonEnum'
;
import
{
ImgCutModalNew
}
from
'@/components'
;
import
ShowTips
from
"@/components/ShowTips"
;
import
Breadcrumbs
from
"@/components/Breadcrumbs"
;
import
ShowTips
from
'@/components/ShowTips'
;
import
Breadcrumbs
from
'@/components/Breadcrumbs'
;
import
AddGraphicsIntro
from
'./components/AddGraphicsIntro'
;
import
SelectStudent
from
'../modal/select-student'
;
import
SelectPrepareFileModal
from
'../../prepare-lesson/modal/SelectPrepareFileModal'
;
import
PreviewGraphicsModal
from
'../modal/PreviewGraphicsModal'
;
import
StoreService
from
"@/domains/store-domain/storeService"
;
import
StoreService
from
'@/domains/store-domain/storeService'
;
import
Service
from
'@/common/js/service'
;
import
{
randomString
}
from
'@/domains/basic-domain/utils'
;
import
User
from
'@/common/js/user'
;
import
_
from
"underscore"
;
import
_
from
'underscore'
;
import
Upload
from
'@/core/upload'
;
import
'./AddGraphicsCourse.less'
;
const
EDIT_BOX_KEY
=
Math
.
random
();
const
fieldNames
=
{
label
:
'categoryName'
,
value
:
'id'
,
children
:
'sonCategoryList'
};
const
fieldNames
=
{
label
:
'categoryName'
,
value
:
'id'
,
children
:
'sonCategoryList'
};
//添加课程时课程默认的一些值
const
defaultShelfState
=
'YES'
;
const
whetherVisitorsJoin
=
'NO'
const
whetherVisitorsJoin
=
'NO'
;
const
defaultCoverUrl
=
'https://image.xiaomaiketang.com/xm/wFnpZtp2yB.png'
;
let
cutFlag
=
false
;
class
AddGraphicsCourse
extends
React
.
Component
{
constructor
(
props
)
{
super
(
props
);
const
id
=
getParameterByName
(
"id"
);
const
pageType
=
getParameterByName
(
"type"
);
const
id
=
getParameterByName
(
'id'
);
const
pageType
=
getParameterByName
(
'type'
);
this
.
state
=
{
id
,
// 图文课ID,编辑的时候从URL上带过来
pageType
,
// 页面类型: add->新建 edit->编辑
imageFile
:
null
,
// 需要被截取的图片
courseName
:
null
,
// 图文课名称
id
,
// 图文课ID,编辑的时候从URL上带过来
pageType
,
// 页面类型: add->新建 edit->编辑
imageFile
:
null
,
// 需要被截取的图片
courseName
:
null
,
// 图文课名称
courseMedia
:
''
,
introduce
:
''
,
courseMediaId
:
null
,
// 图文课链接
coverId
:
null
,
// 图文封面的recourceId
coverUrl
:
defaultCoverUrl
,
// 图文课封面
studentList
:
[],
// 上课学员列表
shelfState
:
'YES'
,
//是否开启学院展示
selectedFileList
:
[],
// 已经从资料云盘中勾选的文件
showCutModal
:
false
,
// 是否显示截图弹窗
courseMediaId
:
null
,
// 图文课链接
coverId
:
null
,
// 图文封面的recourceId
coverUrl
:
defaultCoverUrl
,
// 图文课封面
studentList
:
[],
// 上课学员列表
shelfState
:
'YES'
,
//是否开启学院展示
selectedFileList
:
[],
// 已经从资料云盘中勾选的文件
showCutModal
:
false
,
// 是否显示截图弹窗
showSelectVideoModal
:
false
,
studentModal
:
false
,
categoryName
:
null
,
//分类名称
courseCatalogList
:[],
//分类列表
categoryId
:
null
,
//分类的Id值
categoryName
:
null
,
//分类名称
courseCatalogList
:
[],
//分类列表
categoryId
:
null
,
//分类的Id值
whetherVisitorsJoin
:
'NO'
,
// 是否允许游客加入
}
}
;
}
componentWillMount
()
{
...
...
@@ -76,88 +75,80 @@ class AddGraphicsCourse extends React.Component {
}
initBus
=
()
=>
{
Bus
.
bind
(
'graphicsEditorImage'
,
this
.
uploadImage
)
Bus
.
bind
(
'graphicsEditorVideo'
,
this
.
uploadVideo
)
}
Bus
.
bind
(
'graphicsEditorImage'
,
this
.
uploadImage
)
;
Bus
.
bind
(
'graphicsEditorVideo'
,
this
.
uploadVideo
)
;
}
;
removeBus
=
()
=>
{
Bus
.
unbind
(
'graphicsEditorImage'
,
this
.
uploadImage
)
Bus
.
unbind
(
'graphicsEditorVideo'
,
this
.
uploadVideo
)
}
Bus
.
unbind
(
'graphicsEditorImage'
,
this
.
uploadImage
)
;
Bus
.
unbind
(
'graphicsEditorVideo'
,
this
.
uploadVideo
)
;
}
;
uploadImage
=
()
=>
{
this
.
setState
({
showSelectImageModal
:
true
})
}
this
.
setState
({
showSelectImageModal
:
true
})
;
}
;
uploadVideo
=
()
=>
{
this
.
setState
({
showSelectVideoModal
:
true
})
}
this
.
setState
({
showSelectVideoModal
:
true
})
;
}
;
//获取分类列表
getCourseCatalogList
=
()
=>
{
StoreService
.
getCourseCatalogList
({
current
:
1
,
size
:
1000
}).
then
((
res
)
=>
{
this
.
setState
({
courseCatalogList
:
res
.
result
.
records
})
getCourseCatalogList
=
()
=>
{
StoreService
.
getCourseCatalogList
({
current
:
1
,
size
:
1000
}).
then
((
res
)
=>
{
this
.
setState
({
courseCatalogList
:
res
.
result
.
records
,
});
});
}
catalogChange
=
(
value
,
options
)
=>
{
}
;
catalogChange
=
(
value
,
options
)
=>
{
const
changeValueLength
=
value
.
length
;
switch
(
changeValueLength
){
switch
(
changeValueLength
)
{
case
1
:
this
.
setState
({
categoryId
:
value
[
0
],
categoryName
:
options
[
0
].
categoryName
});
break
;
break
;
case
2
:
this
.
setState
({
categoryId
:
value
[
1
],
categoryName
:
`
${
options
[
0
].
categoryName
}
-
${
options
[
1
].
categoryName
}
`
});
break
;
break
;
default
:
this
.
setState
({
categoryId
:
null
,
categoryName
:
''
});
break
;
break
;
}
}
}
;
// 获取图文课详情
handleFetchScheudleDetail
=
(
courseId
)
=>
{
Service
.
Hades
(
'public/hades/mediaCourseDetail'
,{
courseId
Service
.
Hades
(
'public/hades/mediaCourseDetail'
,
{
courseId
,
}).
then
((
res
)
=>
{
const
{
result
=
{}
}
=
res
||
{};
const
{
courseName
,
shelfState
,
whetherVisitorsJoin
,
courseMediaVOS
,
categoryOneName
,
categoryTwoName
,
categoryId
}
=
result
;
const
{
courseName
,
shelfState
,
whetherVisitorsJoin
,
courseMediaVOS
,
categoryOneName
,
categoryTwoName
,
categoryId
}
=
result
;
let
coverId
;
let
coverUrl
=
this
.
state
.
coverUrl
;
let
hasIntro
=
false
;
courseMediaVOS
.
map
((
item
)
=>
{
switch
(
item
.
contentType
){
case
"COVER"
:
switch
(
item
.
contentType
)
{
case
'COVER'
:
coverId
=
item
.
mediaContent
;
coverUrl
=
item
.
mediaUrl
;
break
;
case
"SCHEDULE"
:
break
;
case
'SCHEDULE'
:
this
.
getTextDetail
(
'courseMedia'
,
item
.
mediaUrl
);
break
;
case
"INTRO"
:
case
'INTRO'
:
hasIntro
=
true
;
this
.
getTextDetail
(
'introduce'
,
item
.
mediaUrl
);
break
;
break
;
default
:
break
;
}
return
item
;
})
let
categoryName
;
if
(
categoryTwoName
)
{
})
;
let
categoryName
;
if
(
categoryTwoName
)
{
categoryName
=
`
${
categoryOneName
}
-
${
categoryTwoName
}
`
;
}
else
{
}
else
{
categoryName
=
`
${
categoryOneName
}
`
;
}
this
.
setState
({
...
...
@@ -168,74 +159,74 @@ class AddGraphicsCourse extends React.Component {
shelfState
,
whetherVisitorsJoin
,
categoryName
,
categoryId
categoryId
,
});
})
}
})
;
}
;
getTextDetail
=
(
key
,
url
)
=>
{
$
.
ajax
({
data
:
{},
type
:
'GET'
,
url
,
contentType
:
'application/x-www-form-urlencoded; charset=UTF-8'
,
contentType
:
'application/x-www-form-urlencoded; charset=UTF-8'
,
success
:
(
res
)
=>
{
this
.
setState
({
[
key
]:
res
,
[
`load
${
key
}
`
]:
true
});
}
})
}
}
,
})
;
}
;
handleGoBack
=
()
=>
{
const
{
coverId
,
videoName
,
videoDuration
,
course
Name
,
c
ourseMediaId
,
c
ategoryId
,
shelfState
,
whetherVisitorsJoin
}
=
this
.
state
;
if
(
videoName
||
videoDuration
||
courseMediaId
||
categoryId
||
courseName
||
coverId
||
shelfState
!==
defaultShelfState
||
whetherVisitorsJoin
!==
whetherVisitorsJoin
)
{
const
{
coverId
,
videoName
,
videoDuration
,
courseName
,
courseMediaId
,
categoryId
,
shelfState
,
whetherVisitorsJoin
}
=
this
.
state
;
if
(
videoName
||
videoDuration
||
course
MediaId
||
c
ategoryId
||
c
ourseName
||
coverId
||
shelfState
!==
defaultShelfState
||
whetherVisitorsJoin
!==
whetherVisitorsJoin
)
{
Modal
.
confirm
({
title
:
'确认要返回吗?'
,
content
:
'返回后,本次编辑的内容将不被保存。'
,
okText
:
'确认返回'
,
cancelText
:
'留在本页'
,
icon
:
<
span
className=
"icon iconfont default-confirm-icon"
>

</
span
>,
icon
:
<
span
className=
'icon iconfont default-confirm-icon'
>

</
span
>,
onOk
:
()
=>
{
window
.
RCHistory
.
push
({
pathname
:
`/graphics-course`
,
});
}
}
,
});
}
else
{
}
else
{
window
.
RCHistory
.
push
({
pathname
:
`/graphics-course`
,
});
}
}
}
;
// 修改表单
handleChangeForm
=
(
field
,
value
,
coverUrl
)
=>
{
this
.
setState
({
[
field
]:
value
,
coverUrl
:
coverUrl
?
coverUrl
:
this
.
state
.
coverUrl
coverUrl
:
coverUrl
?
coverUrl
:
this
.
state
.
coverUrl
,
});
}
}
;
// 显示选择学员弹窗
handleShowSelectStuModal
=
()
=>
{
this
.
setState
({
studentModal
:
true
});
this
.
setState
({
studentModal
:
true
});
const
{
studentList
,
selectedStuList
}
=
this
.
state
;
// const _studentList = _.map(studentList, (item) => {
// const _studentList = _.map(studentList, (item) => {
// return item.studentId
// })
const
studentModal
=
(
<
SelectStudent
showTabs=
{
true
}
type=
"videoCourse"
type=
'videoCourse'
onSelect=
{
this
.
handleSelectStudent
}
after=
{
true
}
//表明是不是上课后的状态
studentList=
{
studentList
}
...
...
@@ -245,9 +236,9 @@ class AddGraphicsCourse extends React.Component {
});
}
}
/>
)
)
;
this
.
setState
({
studentModal
});
}
}
;
handleSelectStudent
=
(
studentIds
)
=>
{
let
studentList
=
[];
...
...
@@ -255,52 +246,46 @@ class AddGraphicsCourse extends React.Component {
studentList
.
push
({
studentId
:
item
});
});
// this.setState({ studentModal: null });
this
.
setState
({
studentList
});
this
.
setState
({
studentModal
:
false
});
}
this
.
setState
({
studentList
});
this
.
setState
({
studentModal
:
false
});
}
;
// 显示预览弹窗
handleShowPreviewModal
=
()
=>
{
const
{
coverUrl
,
courseName
,
courseMedia
,
introduce
,
categoryName
,
}
=
this
.
state
;
const
{
coverUrl
,
courseName
,
courseMedia
,
introduce
,
categoryName
}
=
this
.
state
;
const
courseBasinInfo
=
{
coverUrl
,
courseName
,
categoryName
}
categoryName
,
}
;
const
courseIntroInfo
=
{
courseMedia
,
introduce
,
}
}
;
const
previewGraphicsModal
=
(
<
PreviewGraphicsModal
courseBasicInfo=
{
courseBasinInfo
}
courseIntroInfo=
{
courseIntroInfo
}
close=
{
()
=>
{
this
.
setState
({
previewGraphicsModal
:
null
})
previewGraphicsModal
:
null
,
})
;
}
}
/>
);
this
.
setState
({
previewGraphicsModal
});
}
}
;
handleSelectCover
=
(
file
)
=>
{
handleSelectCover
=
(
file
)
=>
{
this
.
uploadCoverImage
(
file
);
}
}
;
//上传图片
uploadCoverImage
=
(
imageFile
)
=>
{
const
{
folderName
}
=
imageFile
;
const
fileName
=
window
.
random_string
(
16
)
+
folderName
.
slice
(
folderName
.
lastIndexOf
(
"."
));
const
fileName
=
window
.
random_string
(
16
)
+
folderName
.
slice
(
folderName
.
lastIndexOf
(
'.'
));
const
self
=
this
;
this
.
setState
(
{
...
...
@@ -308,56 +293,54 @@ class AddGraphicsCourse extends React.Component {
},
()
=>
{
setTimeout
(()
=>
{
const
okBtnDom
=
document
.
querySelector
(
"#headPicModal"
);
const
okBtnDom
=
document
.
querySelector
(
'#headPicModal'
);
const
options
=
{
size
:
[
500
,
282
],
ok
:
okBtnDom
,
maxZoom
:
3
,
style
:
{
jpgFillColor
:
"transparent"
,
jpgFillColor
:
'transparent'
,
},
done
:
function
(
dataUrl
)
{
clearTimeout
(
self
.
timer
);
self
.
timer
=
setTimeout
(()
=>
{
if
(
(
self
.
state
.
rotate
!=
this
.
rotate
())
||
(
self
.
state
.
scale
!=
this
.
scale
()
))
{
const
_dataUrl
=
this
.
clip
()
if
(
self
.
state
.
rotate
!=
this
.
rotate
()
||
self
.
state
.
scale
!=
this
.
scale
(
))
{
const
_dataUrl
=
this
.
clip
()
;
const
cutImageBlob
=
self
.
convertBase64UrlToBlob
(
_dataUrl
);
self
.
setState
({
cutImageBlob
,
dataUrl
:
_dataUrl
,
rotate
:
this
.
rotate
(),
scale
:
this
.
scale
()
})
scale
:
this
.
scale
()
,
})
;
}
},
500
)
},
500
);
const
cutImageBlob
=
self
.
convertBase64UrlToBlob
(
dataUrl
);
self
.
setState
({
cutImageBlob
,
dataUrl
})
dataUrl
,
})
;
setTimeout
(()
=>
{
cutFlag
=
false
;
},
2000
);
},
fail
:
(
failInfo
)
=>
{
message
.
error
(
"图片上传失败了,请重新上传"
);
message
.
error
(
'图片上传失败了,请重新上传'
);
},
loadComplete
:
function
(
img
)
{
setTimeout
(()
=>
{
const
_dataUrl
=
this
.
clip
()
const
_dataUrl
=
this
.
clip
()
;
self
.
setState
({
dataUrl
:
_dataUrl
,
hasImgReady
:
true
})
},
100
)
hasImgReady
:
true
,
});
},
100
);
},
};
const
imgUrl
=
`
${
imageFile
.
ossUrl
}
?
${
new
Date
().
getTime
()}
`
const
imgUrl
=
`
${
imageFile
.
ossUrl
}
?
${
new
Date
().
getTime
()}
`
;
if
(
!
this
.
state
.
photoclip
)
{
const
_photoclip
=
new
PhotoClip
(
"#headPicModal"
,
options
);
const
_photoclip
=
new
PhotoClip
(
'#headPicModal'
,
options
);
_photoclip
.
load
(
imgUrl
);
this
.
setState
({
photoclip
:
_photoclip
,
...
...
@@ -366,7 +349,6 @@ class AddGraphicsCourse extends React.Component {
this
.
state
.
photoclip
.
clear
();
this
.
state
.
photoclip
.
load
(
imgUrl
);
}
},
200
);
}
);
...
...
@@ -374,56 +356,48 @@ class AddGraphicsCourse extends React.Component {
//获取resourceId
getSignature
=
(
blob
,
fileName
)
=>
{
Upload
.
uploadBlobToOSS
(
blob
,
'cover'
+
(
new
Date
()).
valueOf
(),
null
,
'signInfo'
).
then
((
signInfo
)
=>
{
this
.
setState
({
coverClicpPath
:
signInfo
.
fileUrl
,
coverId
:
signInfo
.
resourceId
,
visible
:
false
},()
=>
this
.
updateCover
())
Upload
.
uploadBlobToOSS
(
blob
,
'cover'
+
new
Date
().
valueOf
(),
null
,
'signInfo'
).
then
((
signInfo
)
=>
{
this
.
setState
(
{
coverClicpPath
:
signInfo
.
fileUrl
,
coverId
:
signInfo
.
resourceId
,
visible
:
false
,
},
()
=>
this
.
updateCover
()
);
});
};
updateCover
=
()
=>
{
const
{
coverClicpPath
,
coverId
}
=
this
.
state
updateCover
=
()
=>
{
const
{
coverClicpPath
,
coverId
}
=
this
.
state
;
this
.
setState
({
showSelectCoverModal
:
false
,
coverUrl
:
coverClicpPath
,
coverId
:
coverId
})
}
coverUrl
:
coverClicpPath
,
coverId
:
coverId
,
})
;
}
;
// base64转换成blob
// base64转换成blob
convertBase64UrlToBlob
=
(
urlData
)
=>
{
const
bytes
=
window
.
atob
(
urlData
.
split
(
","
)[
1
]);
const
bytes
=
window
.
atob
(
urlData
.
split
(
','
)[
1
]);
const
ab
=
new
ArrayBuffer
(
bytes
.
length
);
const
ia
=
new
Uint8Array
(
ab
);
for
(
let
i
=
0
;
i
<
bytes
.
length
;
i
++
)
{
ia
[
i
]
=
bytes
.
charCodeAt
(
i
);
}
return
new
Blob
([
ab
],
{
type
:
"image/png"
});
return
new
Blob
([
ab
],
{
type
:
'image/png'
});
};
// 保存
handleSubmit
=
()
=>
{
const
{
id
,
coverId
,
pageType
,
courseName
,
courseMedia
,
introduce
,
categoryId
,
shelfState
,
whetherVisitorsJoin
,
}
=
this
.
state
;
const
{
id
,
coverId
,
pageType
,
courseName
,
courseMedia
,
introduce
,
categoryId
,
shelfState
,
whetherVisitorsJoin
}
=
this
.
state
;
const
commonParams
=
{
categoryId
,
courseName
,
coverId
,
operatorId
:
User
.
getStoreUserId
(),
storeId
:
User
.
getStoreId
(),
operatorId
:
User
.
getStoreUserId
(),
storeId
:
User
.
getStoreId
(),
shelfState
,
whetherVisitorsJoin
,
courseType
:
'PICTURE'
,
...
...
@@ -431,19 +405,29 @@ class AddGraphicsCourse extends React.Component {
// 校验必填字段:课程名称, 课程图文
this
.
handleValidate
(
courseName
,
courseMedia
,
categoryId
).
then
((
res
)
=>
{
if
(
!
res
)
return
;
Upload
.
uploadTextToOSS
(
courseMedia
,
`
${
randomString
()}
.txt`
,
(
courseMediaId
)
=>
{
Upload
.
uploadTextToOSS
(
introduce
,
`
${
randomString
()}
.txt`
,
(
introduceId
)
=>
{
this
.
submitRemote
({
id
,
pageType
,
commonParams
,
courseMediaId
,
introduceId
,
});
},
()
=>
message
.
warning
(
'上传课程简介失败'
));
},
()
=>
message
.
warning
(
'上传课程内容失败'
));
Upload
.
uploadTextToOSS
(
courseMedia
,
`
${
randomString
()}
.txt`
,
(
courseMediaId
)
=>
{
Upload
.
uploadTextToOSS
(
introduce
,
`
${
randomString
()}
.txt`
,
(
introduceId
)
=>
{
this
.
submitRemote
({
id
,
pageType
,
commonParams
,
courseMediaId
,
introduceId
,
});
},
()
=>
message
.
warning
(
'上传课程简介失败'
)
);
},
()
=>
message
.
warning
(
'上传课程内容失败'
)
);
});
}
}
;
submitRemote
=
(
data
)
=>
{
const
{
id
,
pageType
,
commonParams
,
courseMediaId
,
introduceId
}
=
data
;
...
...
@@ -452,42 +436,42 @@ class AddGraphicsCourse extends React.Component {
if
(
pageType
===
'add'
)
{
Service
.
Hades
(
'public/hades/createMediaCourse'
,
commonParams
).
then
((
res
)
=>
{
if
(
!
res
)
return
;
message
.
success
(
"新建成功"
);
message
.
success
(
'新建成功'
);
window
.
RCHistory
.
push
({
pathname
:
`/graphics-course`
,
});
})
})
;
}
else
{
const
editParams
=
{
courseId
:
id
,
courseId
:
id
,
...
commonParams
,
}
}
;
Service
.
Hades
(
'public/hades/editMediaCourse'
,
editParams
).
then
((
res
)
=>
{
if
(
!
res
)
return
;
message
.
success
(
"保存成功"
);
message
.
success
(
'保存成功'
);
window
.
RCHistory
.
push
({
pathname
:
`/graphics-course`
,
});
});
}
}
}
;
handleValidate
=
(
courseName
,
courseMedia
,
categoryId
)
=>
{
return
new
Promise
((
resolve
)
=>
{
if
(
!
courseName
)
{
message
.
warning
(
'请输入课程名称'
);
resolve
(
false
);
return
false
return
false
;
}
if
(
!
courseMedia
)
{
message
.
warning
(
'请输入课程内容'
);
resolve
(
false
);
return
false
return
false
;
}
if
(
!
categoryId
)
{
if
(
!
categoryId
)
{
message
.
warning
(
'请选择课程分类'
);
resolve
(
false
);
return
false
return
false
;
}
// const textMedia = scheduleMedia.filter((item) => item.mediaType === 'TEXT');
// for (let i = 0, len = textMedia.length; i < len; i++) {
...
...
@@ -499,7 +483,7 @@ class AddGraphicsCourse extends React.Component {
// }
resolve
(
true
);
});
}
}
;
render
()
{
const
{
...
...
@@ -528,58 +512,65 @@ class AddGraphicsCourse extends React.Component {
const
hasSelectedStu
=
studentList
.
length
;
const
courseWareIcon
=
FileVerifyMap
[
videoType
]
?
FileTypeIcon
[
FileVerifyMap
[
videoType
].
type
]
:
FileTypeIcon
[
videoType
];
return
(
<
div
className=
"page add-graphics-course-page"
>
<
Breadcrumbs
navList=
{
pageType
===
"add"
?
"新建图文课"
:
"编辑图文课"
}
goBack=
{
this
.
handleGoBack
}
/>
<
div
className=
"box"
>
<
div
className=
"show-tips"
>
<
ShowTips
message=
"请遵守国家相关规定,切勿上传低俗色情、暴力恐怖、谣言诈骗、侵权盗版等相关内容,小麦企学院保有依据国家规定及平台规则进行处理的权利"
/>
<
div
className=
'page add-graphics-course-page'
>
<
Breadcrumbs
navList=
{
pageType
===
'add'
?
'新建图文课'
:
'编辑图文课'
}
goBack=
{
this
.
handleGoBack
}
/>
<
div
className=
'box'
>
<
div
className=
'show-tips'
>
<
ShowTips
message=
'请遵守国家相关规定,切勿上传低俗色情、暴力恐怖、谣言诈骗、侵权盗版等相关内容,小麦企学院保有依据国家规定及平台规则进行处理的权利'
/>
</
div
>
<
div
className=
"form"
>
<
div
className=
"course-name required"
>
<
span
className=
"label"
>
课程名称:
</
span
>
<
div
className=
'form'
>
<
div
className=
'course-name required'
>
<
span
className=
'label'
>
课程名称:
</
span
>
<
Input
value=
{
courseName
}
placeholder=
"请输入图文课的名称(40字以内)"
placeholder=
'请输入图文课的名称(40字以内)'
maxLength=
{
40
}
style=
{
{
width
:
240
}
}
onChange=
{
(
e
)
=>
{
this
.
handleChangeForm
(
'courseName'
,
e
.
target
.
value
)}
}
onChange=
{
(
e
)
=>
{
this
.
handleChangeForm
(
'courseName'
,
e
.
target
.
value
);
}
}
/>
</
div
>
<
div
className=
"cover-url flex mt16"
>
<
div
className=
"label"
>
封面图:
</
div
>
<
div
className=
"cover-url__wrap"
>
<
div
className=
"img-content"
>
<
div
className=
'cover-url flex mt16'
>
<
div
className=
'label'
>
封面图:
</
div
>
<
div
className=
'cover-url__wrap'
>
<
div
className=
'img-content'
>
<
img
src=
{
coverUrl
}
/>
</
div
>
<
div
className=
"opt-btns"
>
<
Button
onClick=
{
()
=>
{
this
.
setState
({
showSelectCoverModal
:
true
});
}
}
>
{
`${(pageType === 'add' && !coverUrl)
? '上传' : '修改'}封面`
}
</
Button
>
<
div
className=
"tips"
>
建议尺寸1280*720px或16:9。封面图最大5M,支持jpg、jpeg和png。
</
div
>
<
div
className=
'opt-btns'
>
<
Button
onClick=
{
()
=>
{
this
.
setState
({
showSelectCoverModal
:
true
,
});
}
}
>
{
`${pageType === 'add' && !coverUrl
? '上传' : '修改'}封面`
}
</
Button
>
<
div
className=
'tips'
>
建议尺寸1280*720px或16:9。封面图最大5M,支持jpg、jpeg和png。
</
div
>
</
div
>
</
div
>
</
div
>
<
div
className=
"course-catalog required"
>
<
span
className=
"label"
>
课程分类:
</
span
>
{
(
pageType
===
'add'
)
&&
<
Cascader
defaultValue=
{
[
categoryName
]
}
options=
{
courseCatalogList
}
displayRender=
{
label
=>
label
.
join
(
'-'
)
}
fieldNames=
{
fieldNames
}
onChange=
{
this
.
catalogChange
}
style=
{
{
width
:
240
}
}
placeholder=
"请选择课程分类"
suffixIcon=
{
<
span
className=
"icon iconfont"
style=
{
{
fontSize
:
'12px'
,
color
:
'#BFBFBF'
}
}
>

</
span
>
}
/>
}
{
(
pageType
===
'edit'
&&
categoryName
)
&&
<
Cascader
defaultValue=
{
[
categoryName
]
}
options=
{
courseCatalogList
}
displayRender=
{
label
=>
label
.
join
(
'-'
)
}
fieldNames=
{
fieldNames
}
onChange=
{
this
.
catalogChange
}
style=
{
{
width
:
240
}
}
placeholder=
"请选择课程分类"
suffixIcon=
{
<
span
className=
"icon iconfont"
style=
{
{
fontSize
:
'12px'
,
color
:
'#BFBFBF'
}
}
>

</
span
>
}
/>
}
<
div
className=
'course-catalog required'
>
<
span
className=
'label'
>
课程分类:
</
span
>
<
Cascader
value=
{
categoryName
?
[
categoryName
]
:
undefined
}
options=
{
courseCatalogList
}
displayRender=
{
(
label
)
=>
label
.
join
(
'-'
)
}
fieldNames=
{
fieldNames
}
onChange=
{
this
.
catalogChange
}
style=
{
{
width
:
240
}
}
placeholder=
'请选择课程分类'
suffixIcon=
{
<
span
className=
'icon iconfont'
style=
{
{
fontSize
:
'12px'
,
color
:
'#BFBFBF'
}
}
>

</
span
>
}
/>
</
div
>
<
div
className=
"intro-info mt16"
>
<
div
className=
'intro-info mt16'
>
<
AddGraphicsIntro
data=
{
{
id
,
...
...
@@ -596,49 +587,50 @@ class AddGraphicsCourse extends React.Component {
</
div
>
</
div
>
<
div
className=
"footer shrink-footer"
>
<
div
className=
'footer shrink-footer'
>
<
Button
onClick=
{
this
.
handleGoBack
}
>
取消
</
Button
>
<
Button
onClick=
{
this
.
handleShowPreviewModal
}
>
预览
</
Button
>
<
Button
type=
"primary"
onClick=
{
_
.
debounce
(()
=>
this
.
handleSubmit
(),
3000
,
true
)
}
>
保存
</
Button
>
<
Button
type=
'primary'
onClick=
{
_
.
debounce
(()
=>
this
.
handleSubmit
(),
3000
,
true
)
}
>
保存
</
Button
>
</
div
>
{
showSelectCoverModal
&&
{
showSelectCoverModal
&&
(
<
SelectPrepareFileModal
key=
"basic"
operateType=
"select"
key=
'basic'
operateType=
'select'
multiple=
{
false
}
accept=
"image/jpeg,image/png,image/jpg"
accept=
'image/jpeg,image/png,image/jpg'
selectTypeList=
{
[
'JPG'
,
'JPEG'
,
'PNG'
]
}
tooltip=
'支持文件类型:jpg、jpeg、png'
isOpen=
{
showSelectCoverModal
}
onClose=
{
()
=>
{
this
.
setState
({
showSelectCoverModal
:
false
})
this
.
setState
({
showSelectCoverModal
:
false
})
;
}
}
onSelect=
{
this
.
handleSelectCover
}
/>
}
)
}
<
Modal
title=
"设置图片"
title=
'设置图片'
width=
{
1080
}
visible=
{
visible
}
maskClosable=
{
false
}
closeIcon=
{
<
span
className=
"icon iconfont modal-close-icon"
>

</
span
>
}
closeIcon=
{
<
span
className=
'icon iconfont modal-close-icon'
>

</
span
>
}
onCancel=
{
()
=>
{
this
.
setState
({
visible
:
false
});
}
}
zIndex=
{
10001
}
footer=
{
[
<
Button
key=
"back"
key=
'back'
onClick=
{
()
=>
{
this
.
setState
({
visible
:
false
});
}
}
>
}
}
>
重新上传
</
Button
>,
<
Button
key=
"submit"
type=
"primary"
key=
'submit'
type=
'primary'
disabled=
{
!
hasImgReady
}
onClick=
{
()
=>
{
if
(
!
cutFlag
)
{
...
...
@@ -646,39 +638,36 @@ class AddGraphicsCourse extends React.Component {
this
.
refs
.
hiddenBtn
.
click
();
}
this
.
getSignature
(
cutImageBlob
);
}
}
>
}
}
>
确定
</
Button
>,
]
}
>
<
div
className=
"clip-box"
>
]
}
>
<
div
className=
'clip-box'
>
<
div
id=
"headPicModal"
ref=
"headPicModal"
id=
'headPicModal'
ref=
'headPicModal'
style=
{
{
width
:
"500px"
,
height
:
"430px"
,
width
:
'500px'
,
height
:
'430px'
,
marginBottom
:
0
,
}
}
></
div
>
<
div
id=
"clipBtn"
style=
{
{
display
:
"none"
}
}
ref=
"hiddenBtn"
></
div
>
<
div
className=
"preview-img"
>
<
div
className=
"title"
>
效果预览
</
div
>
<
div
id=
"preview-url-box"
style=
{
{
width
:
500
,
height
:
282
}
}
>
<
img
src=
{
this
.
state
.
dataUrl
}
style=
{
{
width
:
'100%'
}
}
alt=
""
/>
}
}
></
div
>
<
div
id=
'clipBtn'
style=
{
{
display
:
'none'
}
}
ref=
'hiddenBtn'
></
div
>
<
div
className=
'preview-img'
>
<
div
className=
'title'
>
效果预览
</
div
>
<
div
id=
'preview-url-box'
style=
{
{
width
:
500
,
height
:
282
}
}
>
<
img
src=
{
this
.
state
.
dataUrl
}
style=
{
{
width
:
'100%'
}
}
alt=
''
/>
</
div
>
<
div
className=
"tip-box"
>
<
div
className=
"tip"
>
温馨提示
</
div
>
<
div
className=
"tip"
>
①预览效果图时可能存在延迟,单击左侧图片刷新即可
</
div
>
<
div
className=
"tip"
>
②设置图片时双击可旋转图片,滚动可放大或缩小图片
</
div
>
<
div
className=
'tip-box'
>
<
div
className=
'tip'
>
温馨提示
</
div
>
<
div
className=
'tip'
>
①预览效果图时可能存在延迟,单击左侧图片刷新即可
</
div
>
<
div
className=
'tip'
>
②设置图片时双击可旋转图片,滚动可放大或缩小图片
</
div
>
</
div
>
</
div
>
</
div
>
</
Modal
>
{
this
.
state
.
previewGraphicsModal
}
{
this
.
state
.
previewGraphicsModal
}
</
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