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
fe30365a
Commit
fe30365a
authored
Aug 16, 2021
by
yuananting
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix:历史记录接口联调,已选课程过滤
parent
65495721
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
136 additions
and
134 deletions
+136
-134
src/modules/task-center/data-center/components/CourseTable.tsx
+66
-73
src/modules/task-center/train-task/AddTrainTask.jsx
+1
-11
src/modules/task-center/train-task/components/ExpiredCourseList.jsx
+60
-38
src/modules/task-center/train-task/components/RelatedCourseDrawer.jsx
+5
-3
src/modules/task-center/train-task/components/TrainContent.jsx
+4
-9
No files found.
src/modules/task-center/data-center/components/CourseTable.tsx
View file @
fe30365a
/*
* @Author: yuananting
* @Date: 2021-08-16 17:35:15
* @LastEditors: yuananting
* @LastEditTime: 2021-08-16 19:54:39
* @Description: 描述一下咯
* @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/
import
React
,
{
useEffect
,
useState
}
from
'react'
;
import
React
,
{
useEffect
,
useState
}
from
'react'
;
import
{
withRouter
}
from
"react-router-dom"
;
import
{
withRouter
}
from
'react-router-dom'
;
import
RichText
from
'@/components/RichText'
import
RichText
from
'@/components/RichText'
;
import
ExpiredCourseList
from
'../../train-task/components/ExpiredCourseList'
;
import
ExpiredCourseList
from
'../../train-task/components/ExpiredCourseList'
;
import
ENUM
from
'../../enum'
;
import
ENUM
from
'../../enum'
;
import
'./course.less'
import
'./course.less'
;
function
CourseTable
(
props
:
any
)
{
function
CourseTable
(
props
:
any
)
{
const
IndexText
=
[
'一'
,
'二'
,
'三'
,
'四'
,
'五'
,
'六'
,
'七'
,
'八'
,
'九'
,
'十'
]
const
IndexText
=
[
'一'
,
'二'
,
'三'
,
'四'
,
'五'
,
'六'
,
'七'
,
'八'
,
'九'
,
'十'
];
const
[
list
,
setList
]
=
useState
<
any
[]
>
([]);
const
[
list
,
setList
]
=
useState
<
any
[]
>
([]);
useEffect
(()
=>
{
useEffect
(()
=>
{
console
.
log
(
props
.
info
,
'rtyuio'
)
console
.
log
(
props
.
info
,
'rtyuio'
);
setList
(
props
.
info
.
trainingStageList
||
[])
setList
(
props
.
info
.
trainingStageList
||
[]);
},
[
props
.
info
.
trainingStageList
])
},
[
props
.
info
.
trainingStageList
]);
return
(
<
div
className=
'courseTabContent'
>
<
div
className=
'tips'
>
{
`培训目的:`
}
<
RichText
url=
{
props
.
info
?.
intro
?.
mediaUrl
}
/>
</
div
>
return
<
div
className=
"courseTabContent"
>
<
div
className=
'coursecontent'
>
<
div
className=
"tips"
>
{
list
?.
map
((
item
:
any
,
index
:
number
)
=>
{
{
`培训目的:`
}
return
(
<
div
className=
'task'
>
<
RichText
url=
{
props
.
info
?.
intro
?.
mediaUrl
}
/>
<
div
className=
'title'
onClick=
{
()
=>
{
const
_list
=
[...
list
];
_list
[
index
].
open
=
!
_list
[
index
].
open
;
setList
(
_list
);
}
}
>
{
item
.
open
?
<
span
className=
'icon iconfont open'
>

</
span
>
:
<
span
className=
'icon iconfont'
>

</
span
>
}
{
`${IndexText[index]}、 `
}
{
item
.
stageName
}
</
div
>
{
item
.
open
&&
(
<
div
className=
'taskItemList'
>
{
item
.
contentVOList
.
map
((
_item
:
any
,
_index
:
number
)
=>
{
return
(
<
div
className=
{
_index
==
item
.
contentVOList
.
length
-
1
?
'item noBorder'
:
'item'
}
>
<
div
className=
'name'
>
<
img
className=
'type-option-icon'
src=
{
ENUM
.
LearningContentIcon
[
_item
.
courseType
||
_item
.
contentType
]
}
/>
<
span
style=
{
{
marginRight
:
4
}
}
>
{
`${index + 1}.${_index + 1}`
}
</
span
>
</
div
>
{
_item
.
contentName
}
{
_item
.
courseType
==
'LIVE'
&&
<
span
className=
'desc'
>
{
ENUM
.
courseStateShow
[
_item
.
courseState
].
title
}
</
span
>
}
<
div
className=
"coursecontent"
>
{
_item
.
courseType
==
'VOICE'
&&
<
span
className=
'desc'
>
{
`(共${_item.courseChapterNum}节)`
}
</
span
>
}
{
list
?.
map
((
item
:
any
,
index
:
number
)
=>
{
return
<
div
className=
"task"
>
<
div
className=
"title"
onClick=
{
()
=>
{
const
_list
=
[...
list
];
_list
[
index
].
open
=
!
_list
[
index
].
open
;
setList
(
_list
)
}
}
>
{
item
.
open
?
<
span
className=
"icon iconfont open"
>

</
span
>
:
<
span
className=
"icon iconfont"
>

</
span
>
}
{
`${IndexText[index]}、 `
}
{
item
.
stageName
}
</
div
>
</
div
>
{
</
div
>
item
.
open
&&
<
div
className=
"taskItemList"
>
);
{
})
}
item
.
contentVOList
.
map
((
_item
:
any
,
_index
:
number
)
=>
{
</
div
>
return
<
div
className=
{
_index
==
item
.
contentVOList
.
length
-
1
?
"item noBorder"
:
"item"
}
>
)
}
<
div
className=
"name"
>
<
img
className=
'type-option-icon'
src=
{
ENUM
.
LearningContentIcon
[
_item
.
courseType
||
_item
.
contentType
]
}
/>
<
span
style=
{
{
marginRight
:
4
}
}
>
{
`${index + 1}.${_index + 1}`
}
</
span
>
{
_item
.
contentName
}
{
(
_item
.
courseType
==
'LIVE'
)
&&
<
span
className=
'desc'
>
{
ENUM
.
courseStateShow
[
_item
.
courseState
].
title
}
</
span
>
}
{
_item
.
courseType
==
'VOICE'
&&
<
span
className=
'desc'
>
{
`(共${_item.courseChapterNum}节)`
}
</
span
>
}
</
div
>
</
div
>
})
}
</
div
>
}
</
div
>
})
}
</
div
>
<
div
className=
"expired"
>
<
div
className=
"title"
>
失效课程
</
div
>
<
div
className=
"list"
>
<
ExpiredCourseList
expiredCourseList=
{
list
}
/>
</
div
>
</
div
>
</
div
>
);
})
}
</
div
>
<
div
className=
'expired'
>
<
div
className=
'title'
>
失效课程
</
div
>
<
div
className=
'list'
>
<
ExpiredCourseList
/>
</
div
>
</
div
>
</
div
>
</
div
>
);
}
}
export
default
withRouter
(
CourseTable
)
export
default
withRouter
(
CourseTable
);
\ No newline at end of file
src/modules/task-center/train-task/AddTrainTask.jsx
View file @
fe30365a
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* @Author: yuananting
* @Author: yuananting
* @Date: 2021-07-29 13:57:03
* @Date: 2021-07-29 13:57:03
* @LastEditors: yuananting
* @LastEditors: yuananting
* @LastEditTime: 2021-08-16 1
7:03:17
* @LastEditTime: 2021-08-16 1
9:47:41
* @Description: 任务中心-培训任务-新建页面
* @Description: 任务中心-培训任务-新建页面
* @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
* @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
...
@@ -56,7 +56,6 @@ function AddTrainTask() {
...
@@ -56,7 +56,6 @@ function AddTrainTask() {
const
[
percentCompleteLive
,
setPercentCompleteLive
]
=
useState
(
80
);
// 完成百分比
const
[
percentCompleteLive
,
setPercentCompleteLive
]
=
useState
(
80
);
// 完成百分比
const
[
percentCompleteVideo
,
setPercentCompleteVideo
]
=
useState
(
80
);
// 完成百分比
const
[
percentCompleteVideo
,
setPercentCompleteVideo
]
=
useState
(
80
);
// 完成百分比
const
[
percentCompletePicture
,
setPercentCompletePicture
]
=
useState
(
80
);
// 完成百分比
const
[
percentCompletePicture
,
setPercentCompletePicture
]
=
useState
(
80
);
// 完成百分比
const
[
expiredCourseList
,
setExpiredCourseList
]
=
useState
([]);
// 失效课程
const
[
startCheck
,
setStartCheck
]
=
useState
(
false
);
// 是否启动校验
const
[
startCheck
,
setStartCheck
]
=
useState
(
false
);
// 是否启动校验
const
basicInfoRef
=
useRef
(
null
);
const
basicInfoRef
=
useRef
(
null
);
...
@@ -67,7 +66,6 @@ function AddTrainTask() {
...
@@ -67,7 +66,6 @@ function AddTrainTask() {
useEffect
(()
=>
{
useEffect
(()
=>
{
if
(
type
===
'edit'
)
{
if
(
type
===
'edit'
)
{
initTaskData
();
initTaskData
();
getTrainingCourseAutoCancel
();
// 编辑回显数据详情
// 编辑回显数据详情
function
initTaskData
()
{
function
initTaskData
()
{
...
@@ -141,13 +139,6 @@ function AddTrainTask() {
...
@@ -141,13 +139,6 @@ function AddTrainTask() {
introduceInfo
&&
getTextDetail
(
'introduce'
,
introduceInfo
);
introduceInfo
&&
getTextDetail
(
'introduce'
,
introduceInfo
);
});
});
}
}
// 获取培训任务失效的课程
function
getTrainingCourseAutoCancel
()
{
TaskCenterService
.
getTrainingCourseAutoCancel
({
taskId
}).
then
((
res
)
=>
{
setExpiredCourseList
(
res
.
result
);
});
}
}
}
},
[
taskId
,
type
]);
},
[
taskId
,
type
]);
...
@@ -415,7 +406,6 @@ function AddTrainTask() {
...
@@ -415,7 +406,6 @@ function AddTrainTask() {
<
TrainContent
<
TrainContent
stageList=
{
stageList
}
stageList=
{
stageList
}
basicInfo=
{
basicInfo
}
basicInfo=
{
basicInfo
}
expiredCourseList=
{
expiredCourseList
}
startCheck=
{
startCheck
}
startCheck=
{
startCheck
}
percentCompleteLive=
{
percentCompleteLive
}
percentCompleteLive=
{
percentCompleteLive
}
percentCompleteVideo=
{
percentCompleteVideo
}
percentCompleteVideo=
{
percentCompleteVideo
}
...
...
src/modules/task-center/train-task/components/ExpiredCourseList.jsx
View file @
fe30365a
...
@@ -2,70 +2,92 @@
...
@@ -2,70 +2,92 @@
* @Author: yuananting
* @Author: yuananting
* @Date: 2021-08-03 10:47:59
* @Date: 2021-08-03 10:47:59
* @LastEditors: yuananting
* @LastEditors: yuananting
* @LastEditTime: 2021-08-1
4 17:35:0
4
* @LastEditTime: 2021-08-1
6 19:48:4
4
* @Description: 编辑培训任务-失效课程
* @Description: 编辑培训任务-失效课程
* @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
* @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/
*/
import
React
from
'react'
;
import
React
,
{
useState
,
useEffect
}
from
'react'
;
import
{
List
,
message
,
Modal
}
from
'antd'
;
import
{
List
,
message
,
Modal
}
from
'antd'
;
import
'./ExpiredCourseList.less'
;
import
'./ExpiredCourseList.less'
;
import
ENUM
from
'../../enum'
;
import
ENUM
from
'../../enum'
;
import
moment
from
'moment'
;
import
moment
from
'moment'
;
import
TaskCenterService
from
'@/domains/task-center-domain/TaskCenterService'
;
import
TaskCenterService
from
'@/domains/task-center-domain/TaskCenterService'
;
function
ExpiredCourseList
(
props
)
{
function
ExpiredCourseList
()
{
const
taskId
=
window
.
getParameterByName
(
'taskId'
);
const
type
=
window
.
getParameterByName
(
'type'
);
const
[
expiredCourseList
,
setExpiredCourseList
]
=
useState
([]);
// 失效课程
useEffect
(()
=>
{
if
(
type
===
'edit'
)
{
getTrainingCourseAutoCancel
();
}
},
[]);
// 获取培训任务失效的课程
function
getTrainingCourseAutoCancel
()
{
TaskCenterService
.
getTrainingCourseAutoCancel
({
taskId
}).
then
((
res
)
=>
{
setExpiredCourseList
(
res
.
result
);
});
}
// 移除未成功开课课程
// 移除未成功开课课程
function
deLExpiredCourse
(
contentId
)
{
function
deLExpiredCourse
(
contentId
)
{
Modal
.
confirm
({
Modal
.
confirm
({
content
:
'你确定要删除该数据内容吗?'
,
content
:
'你确定要删除该数据内容吗?'
,
okText
:
'
取消
'
,
okText
:
'
确定
'
,
cancelText
:
'
确定
'
,
cancelText
:
'
取消
'
,
icon
:
<
span
className=
'icon iconfont default-confirm-icon'
>

</
span
>,
icon
:
<
span
className=
'icon iconfont default-confirm-icon'
>

</
span
>,
onOk
:
()
=>
{
onOk
:
()
=>
{
const
params
=
{
const
params
=
{
taskId
:
window
.
getParameterByName
(
'taskId'
)
,
taskId
,
contentId
:
[
contentId
],
contentId
List
:
[
contentId
],
};
};
TaskCenterService
.
de
LExpiredCourse
(
params
).
then
((
res
)
=>
{
TaskCenterService
.
de
lTaskCancelContent
(
params
).
then
((
res
)
=>
{
message
.
success
(
'删除成功'
);
message
.
success
(
'删除成功'
);
getTrainingCourseAutoCancel
();
});
});
},
},
});
});
}
}
return
(
return
(
<
div
className=
'expired-list-page'
>
<
div
>
<
div
className=
'tip'
>
为了不影响学员学习,「未成功开课」的课程已从任务中移出,具体课程如下所示:
</
div
>
{
expiredCourseList
.
length
>
0
&&
(
<
List
<
div
className=
'expired-list-page'
>
dataSource=
{
props
.
expiredCourseList
}
<
div
className=
'tip'
>
为了不影响学员学习,「未成功开课」的课程已从任务中移出,具体课程如下所示:
</
div
>
renderItem=
{
(
item
)
=>
(
<
List
<
List
.
Item
>
dataSource=
{
expiredCourseList
}
<
div
className=
'item-detail'
>
renderItem=
{
(
item
)
=>
(
<
span
className=
'icon iconfont'
>

</
span
>
<
List
.
Item
>
<
span
className=
'content-status'
>
未成功开课
</
span
>
<
div
className=
'item-detail'
>
<
span
className=
'stage-name'
>
{
item
.
stageName
}
</
span
>
<
span
className=
'icon iconfont'
>

</
span
>
<
span
className=
'content-name'
>
<
span
className=
'content-status'
>
未成功开课
</
span
>
<
img
src=
{
ENUM
.
LearningContentIcon
[
item
.
courseType
]
}
/>
<
span
className=
'stage-name'
>
{
item
.
stageName
}
</
span
>
<
span
>
{
item
.
courseName
}
</
span
>
<
span
className=
'content-name'
>
</
span
>
<
img
src=
{
ENUM
.
LearningContentIcon
[
item
.
courseType
]
}
/>
<
span
className=
'teacher-name'
>
{
item
.
teacherName
}
</
span
>
<
span
>
{
item
.
courseName
}
</
span
>
<
span
className=
'split'
>
|
</
span
>
</
span
>
<
span
className=
'course-time'
>
<
span
className=
'teacher-name'
>
{
item
.
teacherName
}
</
span
>
{
moment
(
item
.
startTime
).
format
(
'YYYY-MM-DD HH:mm'
)
}
~
{
moment
(
item
.
endTime
).
format
(
'HH:mm'
)
}
<
span
className=
'split'
>
|
</
span
>
</
span
>
<
span
className=
'course-time'
>
<
span
{
moment
(
item
.
startTime
).
format
(
'YYYY-MM-DD HH:mm'
)
}
~
{
moment
(
item
.
endTime
).
format
(
'HH:mm'
)
}
className=
'del-btn'
</
span
>
onClick=
{
()
=>
{
<
span
deLExpiredCourse
(
item
.
courseId
);
className=
'del-btn'
}
}
>
onClick=
{
()
=>
{
删除记录
deLExpiredCourse
(
item
.
courseId
);
</
span
>
}
}
>
</
div
>
删除记录
</
List
.
Item
>
</
span
>
)
}
</
div
>
/>
</
List
.
Item
>
)
}
/>
</
div
>
)
}
</
div
>
</
div
>
);
);
}
}
...
...
src/modules/task-center/train-task/components/RelatedCourseDrawer.jsx
View file @
fe30365a
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* @Author: yuananting
* @Author: yuananting
* @Date: 2021-08-01 17:28:30
* @Date: 2021-08-01 17:28:30
* @LastEditors: yuananting
* @LastEditors: yuananting
* @LastEditTime: 2021-08-1
4 15:41:33
* @LastEditTime: 2021-08-1
6 19:53:06
* @Description: 新建培训任务-关联课程抽屉
* @Description: 新建培训任务-关联课程抽屉
* @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
* @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
...
@@ -126,11 +126,13 @@ class RelatedCourseDrawer extends Component {
...
@@ -126,11 +126,13 @@ class RelatedCourseDrawer extends Component {
handleFetchVideoDataList
=
()
=>
{
handleFetchVideoDataList
=
()
=>
{
const
{
videoQuery
,
videoSize
,
videoDataSource
,
videoTotalCount
,
videoCourseDivision
}
=
this
.
state
;
const
{
videoQuery
,
videoSize
,
videoDataSource
,
videoTotalCount
,
videoCourseDivision
}
=
this
.
state
;
const
_data
=
[...
this
.
props
.
data
];
const
_data
=
[...
this
.
props
.
data
];
console
.
log
(
'_data'
,
_data
);
let
currentVideoCourseListData
=
[];
let
currentVideoCourseListData
=
[];
_data
.
map
((
item
,
index
)
=>
{
_data
.
map
((
item
,
index
)
=>
{
item
.
contentList
.
map
((
childItem
,
childIndex
)
=>
{
item
.
contentList
.
map
((
childItem
,
childIndex
)
=>
{
console
.
log
(
'childItem'
,
childItem
);
if
(
childItem
.
courseType
===
'VOICE'
)
{
if
(
childItem
.
courseType
===
'VOICE'
)
{
currentVideoCourseListData
.
push
(
childItem
.
co
urse
Id
);
currentVideoCourseListData
.
push
(
childItem
.
co
ntent
Id
);
}
}
return
childItem
;
return
childItem
;
});
});
...
@@ -168,7 +170,7 @@ class RelatedCourseDrawer extends Component {
...
@@ -168,7 +170,7 @@ class RelatedCourseDrawer extends Component {
_data
.
map
((
item
,
index
)
=>
{
_data
.
map
((
item
,
index
)
=>
{
item
.
contentList
.
map
((
childItem
,
childIndex
)
=>
{
item
.
contentList
.
map
((
childItem
,
childIndex
)
=>
{
if
(
childItem
.
courseType
===
'PICTURE'
)
{
if
(
childItem
.
courseType
===
'PICTURE'
)
{
currentPictureCourseListData
.
push
(
childItem
.
co
urse
Id
);
currentPictureCourseListData
.
push
(
childItem
.
co
ntent
Id
);
}
}
return
childItem
;
return
childItem
;
});
});
...
...
src/modules/task-center/train-task/components/TrainContent.jsx
View file @
fe30365a
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* @Author: yuananting
* @Author: yuananting
* @Date: 2021-07-30 16:33:58
* @Date: 2021-07-30 16:33:58
* @LastEditors: yuananting
* @LastEditors: yuananting
* @LastEditTime: 2021-08-16 1
7:06
:01
* @LastEditTime: 2021-08-16 1
9:50
:01
* @Description: 任务中心-培训任务-新建-培训内容
* @Description: 任务中心-培训任务-新建-培训内容
* @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
* @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
...
@@ -58,7 +58,6 @@ class TrainContent extends Component {
...
@@ -58,7 +58,6 @@ class TrainContent extends Component {
showCourseDrawer
:
false
,
showCourseDrawer
:
false
,
showExamDrawer
:
false
,
showExamDrawer
:
false
,
selectedStageIndex
:
0
,
selectedStageIndex
:
0
,
expiredCourseList
:
props
.
expiredCourseList
,
// 失效课程
showStandardDetail
:
false
,
// 是否展开高级设置
showStandardDetail
:
false
,
// 是否展开高级设置
};
};
}
}
...
@@ -451,7 +450,6 @@ class TrainContent extends Component {
...
@@ -451,7 +450,6 @@ class TrainContent extends Component {
stageList
,
stageList
,
showCourseDrawer
,
showCourseDrawer
,
showExamDrawer
,
showExamDrawer
,
expiredCourseList
,
showStandardDetail
,
showStandardDetail
,
basicInfo
,
basicInfo
,
selectedStageIndex
,
selectedStageIndex
,
...
@@ -485,12 +483,9 @@ class TrainContent extends Component {
...
@@ -485,12 +483,9 @@ class TrainContent extends Component {
)
}
)
}
{
showExamDrawer
&&
<
RelatedExamDrawer
basicInfo=
{
basicInfo
}
stageList=
{
stageList
}
onClose=
{
this
.
onCloseExamDrawer
}
onSave=
{
this
.
confirmCreateExam
}
/>
}
{
showExamDrawer
&&
<
RelatedExamDrawer
basicInfo=
{
basicInfo
}
stageList=
{
stageList
}
onClose=
{
this
.
onCloseExamDrawer
}
onSave=
{
this
.
confirmCreateExam
}
/>
}
</
div
>
</
div
>
{
window
.
getParameterByName
(
'type'
)
===
'edit'
&&
expiredCourseList
.
length
>
0
&&
(
<
div
className=
'expired-info__wrap'
>
<
ExpiredCourseList
/>
<
div
className=
'module-title'
>
失效课程
</
div
>
<
ExpiredCourseList
expiredCourseList=
{
expiredCourseList
}
/>
</
div
>
)
}
<
div
className=
'finish-standard__warp'
>
<
div
className=
'finish-standard__warp'
>
<
div
<
div
className=
'module-title'
className=
'module-title'
...
...
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