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
66fa34f4
Commit
66fa34f4
authored
May 28, 2021
by
guomingpang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix:修改测试bug
parent
a0744081
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
485 additions
and
353 deletions
+485
-353
src/domains/basic-domain/constants.ts
+16
-16
src/modules/course-manage/components/LiveCourseFilter.jsx
+194
-140
src/modules/course-manage/graphics-course/components/GraphicsCourseFilter.jsx
+159
-114
src/modules/course-manage/offline-course/components/OfflineCourseFilter.jsx
+105
-79
src/modules/course-manage/video-course/components/VideoCourseFilter.jsx
+3
-3
src/modules/knowledge-base/modal/AddCourse.jsx
+8
-1
No files found.
src/domains/basic-domain/constants.ts
View file @
66fa34f4
/*
* @Author: 陈剑宇
* @Date: 2020-05-07 14:43:01
* @LastEditTime: 2021-0
4-19 16:42:24
* @LastEditors:
zhangleyuan
* @LastEditTime: 2021-0
5-28 15:20:40
* @LastEditors:
fusanqiasng
* @Description:
* @FilePath: /wheat-web-demo/src/domains/basic-domain/constants.ts
*/
import
{
MapInterface
}
from
'@/domains/basic-domain/interface'
// 默认是 dev 环境
const
ENV
:
string
=
process
.
env
.
DEPLOY_ENV
||
'dev'
;
console
.
log
(
"process.env.DEPLOY_ENV"
,
process
)
const
ENV
:
string
=
process
.
env
.
DEPLOY_ENV
||
'dev'
console
.
log
(
'process.env.DEPLOY_ENV'
,
process
)
const
BASIC_HOST_MAP
:
MapInterface
=
{
dev
:
'https://dev-heimdall.xiaomai5.com/'
,
dev1
:
'https://dev1-heimdall.xiaomai5.com/'
,
rc
:
'https://rc-heimdall.xiaomai5.com/'
,
gray
:
'https://gray-heimdall.xiaomai5.com/'
,
prod
:
'https://gateway.xiaomai5.com/'
}
;
prod
:
'https://gateway.xiaomai5.com/'
,
}
const
PATH_MAP
:
MapInterface
=
{
dev
:
'https://dev.xiaomai5.com/xiaomai-cloud-class-web/h5.html'
,
dev1
:
'https://dev.xiaomai5.com/xiaomai-cloud-class-web/h5.html'
,
rc
:
'https://rc.xiaomai5.com/xiaomai-cloud-class-web/h5.html'
,
gray
:
'https://res.xiaomai0.com/xiaomai-cloud-class-web/gray/h5.html'
,
prod
:
'https://res.xiaomai0.com/xiaomai-cloud-class-web/h5.html'
}
;
prod
:
'https://res.xiaomai0.com/xiaomai-cloud-class-web/h5.html'
,
}
// axios headers config
export
const
TIME_OUT
:
number
=
20000
;
export
const
USER_TYPE
:
string
=
'B'
;
export
const
PROJECT
=
'xmzj-web-b'
;
export
const
VERSION
=
'5.4.8'
;
export
const
PREFIX
=
'cloud-class'
;
export
const
USER_PREFIX
=
'store-live'
;
export
const
TIME_OUT
:
number
=
20000
export
const
USER_TYPE
:
string
=
'B'
export
const
PROJECT
=
'xmzj-web-b'
export
const
VERSION
=
'5.4.8'
export
const
PREFIX
=
'cloud-class'
export
const
USER_PREFIX
=
'store-live'
// host
export
const
BASIC_HOST
:
string
=
BASIC_HOST_MAP
[
ENV
]
;
export
const
PATH
:
string
=
PATH_MAP
[
ENV
]
;
export
const
BASIC_HOST
:
string
=
BASIC_HOST_MAP
[
ENV
]
export
const
PATH
:
string
=
PATH_MAP
[
ENV
]
src/modules/course-manage/components/LiveCourseFilter.jsx
View file @
66fa34f4
...
...
@@ -6,127 +6,141 @@
* @Description: 大班直播、互动班课列表的筛选组件
*/
import
React
from
'react'
;
import
{
withRouter
}
from
'react-router-dom'
;
import
{
Row
,
Col
,
Input
,
Select
,
Tooltip
}
from
'antd'
;
import
RangePicker
from
"@/modules/common/DateRangePicker"
;
import
moment
from
'moment'
;
import
StoreService
from
"@/domains/store-domain/storeService"
;
import
User
from
'@/common/js/user'
;
import
'./LiveCourseFilter.less'
;
import
React
from
'react'
import
{
withRouter
}
from
'react-router-dom'
import
{
Row
,
Col
,
Input
,
Select
,
Tooltip
}
from
'antd'
import
RangePicker
from
'@/modules/common/DateRangePicker'
import
moment
from
'moment'
import
StoreService
from
'@/domains/store-domain/storeService'
import
User
from
'@/common/js/user'
import
'./LiveCourseFilter.less'
const
{
Search
}
=
Input
;
const
{
Option
}
=
Select
;
const
{
Search
}
=
Input
const
{
Option
}
=
Select
const
defaultQuery
=
{
courseName
:
null
,
startTime
:
null
,
teacherId
:
null
,
courseState
:
null
,
shelfState
:
null
,
shelfState
:
null
,
}
const
defaultTeacherQuery
=
{
size
:
10
,
current
:
1
,
nickName
:
null
nickName
:
null
,
}
class
LiveCourseFilter
extends
React
.
Component
{
constructor
(
props
)
{
super
(
props
)
;
super
(
props
)
this
.
state
=
{
query
:
{
...
defaultQuery
},
query
:
{
...
defaultQuery
},
teacherQuery
:
defaultTeacherQuery
,
teacherList
:[],
expandFilter
:
false
teacherList
:
[],
expandFilter
:
false
,
}
}
componentDidMount
()
{
this
.
getTeacherList
()
;
this
.
getTeacherList
()
}
getTeacherList
(
current
=
1
,
selectList
){
const
{
teacherQuery
,
teacherList
}
=
this
.
state
;
getTeacherList
(
current
=
1
,
selectList
)
{
const
{
teacherQuery
,
teacherList
}
=
this
.
state
const
_query
=
{
...
teacherQuery
,
current
,
size
:
10
}
;
StoreService
.
getStoreUserBasicPage
(
_query
).
then
((
res
)
=>
{
const
{
result
=
{}
}
=
res
;
const
{
records
=
[],
total
=
0
,
hasNext
}
=
result
;
const
list
=
current
>
1
?
teacherList
.
concat
(
records
)
:
records
;
size
:
10
,
}
StoreService
.
getStoreUserBasicPage
(
_query
).
then
((
res
)
=>
{
const
{
result
=
{}
}
=
res
const
{
records
=
[],
total
=
0
,
hasNext
}
=
result
const
list
=
current
>
1
?
teacherList
.
concat
(
records
)
:
records
this
.
setState
({
hasNext
,
teacherList
:
list
,
})
})
;
})
}
// 滑动加载更多讲师列表
handleScrollTeacherList
=
(
e
)
=>
{
const
{
hasNext
}
=
this
.
state
;
const
container
=
e
.
target
;
const
scrollToBottom
=
container
&&
container
.
scrollHeight
<=
container
.
clientHeight
+
container
.
scrollTop
;
const
{
hasNext
}
=
this
.
state
const
container
=
e
.
target
const
scrollToBottom
=
container
&&
container
.
scrollHeight
<=
container
.
clientHeight
+
container
.
scrollTop
if
(
scrollToBottom
&&
hasNext
)
{
const
{
teacherQuery
}
=
this
.
state
;
let
_teacherQuery
=
teacherQuery
;
const
{
teacherQuery
}
=
this
.
state
let
_teacherQuery
=
teacherQuery
_teacherQuery
.
current
=
_teacherQuery
.
current
+
1
this
.
setState
({
teacherQuery
:{...
_teacherQuery
}
},()
=>
{
this
.
getTeacherList
(
_teacherQuery
.
current
)})
this
.
setState
(
{
teacherQuery
:
{
...
_teacherQuery
},
},
()
=>
{
this
.
getTeacherList
(
_teacherQuery
.
current
)
}
)
}
}
// 改变搜索条件
handleChangeQuery
=
(
field
,
value
)
=>
{
this
.
setState
({
this
.
setState
(
{
query
:
{
...
this
.
state
.
query
,
[
field
]:
value
,
current
:
1
,
}
},
()
=>
{
if
(
field
===
'courseName'
)
return
;
},
},
()
=>
{
if
(
field
===
'courseName'
)
return
this
.
props
.
onChange
(
this
.
state
.
query
)
});
}
)
}
handleChangeDates
=
(
dates
)
=>
{
const
{
query
}
=
this
.
state
;
const
{
query
}
=
this
.
state
if
(
_
.
isEmpty
(
dates
))
{
delete
query
.
startTime
;
delete
query
.
endTime
;
delete
query
.
startTime
delete
query
.
endTime
}
else
{
query
.
startTime
=
dates
[
0
]
.
valueOf
();
query
.
endTime
=
dates
[
1
].
valueOf
();
query
.
startTime
=
dates
[
0
]
?.
startOf
(
'day'
).
valueOf
()
query
.
endTime
=
dates
[
0
]?.
endOf
(
'day'
).
valueOf
()
}
this
.
setState
({
query
:{
this
.
setState
(
{
query
:
{
...
query
,
current
:
1
,
},
},
()
=>
{
this
.
props
.
onChange
(
this
.
state
.
query
)
}
},
()
=>
{
this
.
props
.
onChange
(
this
.
state
.
query
);
})
)
}
// 选择老师
handleSelectTeacher
=
(
teacher
)
=>
{
const
{
name
:
teacherName
,
teacherId
}
=
teacher
;
this
.
setState
({
const
{
name
:
teacherName
,
teacherId
}
=
teacher
this
.
setState
(
{
query
:
{
...
this
.
state
.
query
,
teacherId
,
teacherName
,
current
:
1
,
},
},
()
=>
{
this
.
props
.
onChange
(
this
.
state
.
query
)
}
},
()
=>
{
this
.
props
.
onChange
(
this
.
state
.
query
);
})
)
}
// 清空搜索条件
handleReset
=
()
=>
{
this
.
setState
({
this
.
setState
(
{
query
:
{
courseName
:
null
,
startTime
:
null
,
...
...
@@ -135,136 +149,177 @@ class LiveCourseFilter extends React.Component {
teacherName
:
null
,
courseState
:
undefined
,
current
:
1
,
shelfState
:
null
,
shelfState
:
null
,
},
},
()
=>
{
this
.
props
.
onChange
(
this
.
state
.
query
);
})
},
()
=>
{
this
.
props
.
onChange
(
this
.
state
.
query
)
}
)
}
render
()
{
const
{
courseName
,
startTime
,
endTime
,
courseState
,
teacherName
,
teacherId
,
shelfState
}
=
this
.
state
.
query
;
const
{
expandFilter
,
teacherList
,
teacherQuery
}
=
this
.
state
;
const
{
teacherId
:
_teahcerId
}
=
{};
const
isTeacher
=
!!
_teahcerId
;
// 判断是否是老师身份
const
{
courseName
,
startTime
,
endTime
,
courseState
,
teacherName
,
teacherId
,
shelfState
}
=
this
.
state
.
query
const
{
expandFilter
,
teacherList
,
teacherQuery
}
=
this
.
state
const
{
teacherId
:
_teahcerId
}
=
{}
const
isTeacher
=
!!
_teahcerId
// 判断是否是老师身份
return
(
<
div
className=
"live-course-filter"
>
<
Row
type=
"flex"
justify=
"space-between"
align=
"top"
>
<
div
className=
"search-condition"
>
<
div
className=
"search-condition__item"
>
<
span
className=
"search-name"
>
直播名称:
</
span
>
<
div
className=
'live-course-filter'
>
<
Row
type=
'flex'
justify=
'space-between'
align=
'top'
>
<
div
className=
'search-condition'
>
<
div
className=
'search-condition__item'
>
<
span
className=
'search-name'
>
直播名称:
</
span
>
<
Search
value=
{
courseName
}
placeholder=
"搜索直播名称"
onChange=
{
(
e
)
=>
{
this
.
handleChangeQuery
(
'courseName'
,
e
.
target
.
value
)}
}
onSearch=
{
()
=>
{
this
.
props
.
onChange
(
this
.
state
.
query
)
}
}
style=
{
{
width
:
"calc(100% - 70px)"
}
}
className=
"search-input"
enterButton=
{
<
span
className=
"icon iconfont"
>

</
span
>
}
placeholder=
'搜索直播名称'
onChange=
{
(
e
)
=>
{
this
.
handleChangeQuery
(
'courseName'
,
e
.
target
.
value
)
}
}
onSearch=
{
()
=>
{
this
.
props
.
onChange
(
this
.
state
.
query
)
}
}
style=
{
{
width
:
'calc(100% - 70px)'
}
}
className=
'search-input'
enterButton=
{
<
span
className=
'icon iconfont'
>

</
span
>
}
/>
</
div
>
<
div
className=
"search-condition__item"
>
<
span
className=
"search-date"
>
上课日期:
</
span
>
<
div
className=
'search-condition__item'
>
<
span
className=
'search-date'
>
上课日期:
</
span
>
<
RangePicker
id=
"course_date_picker"
id=
'course_date_picker'
allowClear=
{
false
}
value=
{
startTime
?
[
moment
(
startTime
),
moment
(
endTime
)]
:
null
}
format=
{
"YYYY-MM-DD"
}
onChange=
{
(
dates
)
=>
{
this
.
handleChangeDates
(
dates
)
}
}
style=
{
{
width
:
"calc(100% - 70px)"
}
}
value=
{
startTime
?
[
moment
(
startTime
),
moment
(
endTime
)]
:
null
}
format=
{
'YYYY-MM-DD'
}
onChange=
{
(
dates
)
=>
{
this
.
handleChangeDates
(
dates
)
}
}
style=
{
{
width
:
'calc(100% - 70px)'
}
}
/>
</
div
>
{
User
.
getUserRole
()
!==
"CloudLecturer"
&&
<
div
className=
"search-condition__item"
>
{
User
.
getUserRole
()
!==
'CloudLecturer'
&&
(
<
div
className=
'search-condition__item'
>
<
span
>
讲师:
</
span
>
<
Select
placeholder=
"请选择讲师"
style=
{
{
width
:
"calc(100% - 70px)"
}
}
placeholder=
'请选择讲师'
style=
{
{
width
:
'calc(100% - 70px)'
}
}
showSearch
allowClear
filterOption=
{
(
input
,
option
)
=>
option
}
onPopupScroll=
{
this
.
handleScrollTeacherList
}
suffixIcon=
{
<
span
className=
"icon iconfont"
style=
{
{
fontSize
:
'12px'
,
color
:
'#BFBFBF'
}
}
>

</
span
>
}
suffixIcon=
{
<
span
className=
'icon iconfont'
style=
{
{
fontSize
:
'12px'
,
color
:
'#BFBFBF'
}
}
>

</
span
>
}
value=
{
teacherId
}
onChange=
{
(
value
)
=>
{
this
.
handleChangeQuery
(
'teacherId'
,
value
);
this
.
handleChangeQuery
(
'teacherId'
,
value
)
}
}
onSearch=
{
(
value
)
=>
{
teacherQuery
.
nickName
=
value
this
.
setState
({
teacherQuery
},
()
=>
{
this
.
setState
(
{
teacherQuery
,
},
()
=>
{
this
.
getTeacherList
()
})
}
)
}
}
onClear
={(
value
)=
>
{
this
.
setState
({
teacherQuery
:{
onClear=
{
(
value
)
=>
{
this
.
setState
(
{
teacherQuery
:
{
size
:
10
,
current
:
1
,
nickName
:
null
}
},
()
=>
{
nickName
:
null
,
},
},
()
=>
{
this
.
getTeacherList
()
})
}
}
>
)
}
}
>
{
_
.
map
(
teacherList
,
(
item
,
index
)
=>
{
return
(
<
Select
.
Option
value=
{
item
.
userId
}
key=
{
item
.
userId
}
>
{
item
.
nickName
}
</
Select
.
Option
>
);
<
Select
.
Option
value=
{
item
.
userId
}
key=
{
item
.
userId
}
>
{
item
.
nickName
}
</
Select
.
Option
>
)
})
}
</
Select
>
</
div
>
}
{
((
expandFilter
&&
User
.
getUserRole
()
!==
"CloudLecturer"
)
||
User
.
getUserRole
()
===
"CloudLecturer"
)
&&
<
div
className=
"search-condition__item"
>
<
span
className=
"select-status"
>
上课状态:
</
span
>
)
}
{
((
expandFilter
&&
User
.
getUserRole
()
!==
'CloudLecturer'
)
||
User
.
getUserRole
()
===
'CloudLecturer'
)
&&
(
<
div
className=
'search-condition__item'
>
<
span
className=
'select-status'
>
上课状态:
</
span
>
<
Select
style=
{
{
width
:
"calc(100% - 70px)"
}
}
placeholder=
"请选择"
style=
{
{
width
:
'calc(100% - 70px)'
}
}
placeholder=
'请选择'
allowClear=
{
true
}
value=
{
courseState
}
onChange=
{
(
value
)
=>
{
this
.
handleChangeQuery
(
'courseState'
,
value
)
}
}
suffixIcon=
{
<
span
className=
"icon iconfont"
style=
{
{
fontSize
:
'12px'
,
color
:
'#BFBFBF'
}
}
>

</
span
>
}
>
<
Option
value=
"UN_START"
>
待开课
</
Option
>
<
Option
value=
"STARTING"
>
上课中
</
Option
>
<
Option
value=
"FINISH"
>
已完成
</
Option
>
<
Option
value=
"EXPIRED"
>
未成功开课
</
Option
>
onChange=
{
(
value
)
=>
{
this
.
handleChangeQuery
(
'courseState'
,
value
)
}
}
suffixIcon=
{
<
span
className=
'icon iconfont'
style=
{
{
fontSize
:
'12px'
,
color
:
'#BFBFBF'
}
}
>

</
span
>
}
>
<
Option
value=
'UN_START'
>
待开课
</
Option
>
<
Option
value=
'STARTING'
>
上课中
</
Option
>
<
Option
value=
'FINISH'
>
已完成
</
Option
>
<
Option
value=
'EXPIRED'
>
未成功开课
</
Option
>
</
Select
>
</
div
>
}
{
expandFilter
&&
<
div
className=
"search-condition__item"
>
<
span
className=
"shelf-status"
>
学院展示:
</
span
>
)
}
{
expandFilter
&&
(
<
div
className=
'search-condition__item'
>
<
span
className=
'shelf-status'
>
学院展示:
</
span
>
<
Select
style=
{
{
width
:
"calc(100% - 70px)"
}
}
placeholder=
"请选择"
style=
{
{
width
:
'calc(100% - 70px)'
}
}
placeholder=
'请选择'
allowClear=
{
true
}
value=
{
shelfState
}
onChange=
{
(
value
)
=>
{
this
.
handleChangeQuery
(
'shelfState'
,
value
)
}
}
suffixIcon=
{
<
span
className=
"icon iconfont"
style=
{
{
fontSize
:
'12px'
,
color
:
'#BFBFBF'
}
}
>

</
span
>
}
>
<
Option
value=
"YES"
>
开启
</
Option
>
<
Option
value=
"NO"
>
关闭
</
Option
>
onChange=
{
(
value
)
=>
{
this
.
handleChangeQuery
(
'shelfState'
,
value
)
}
}
suffixIcon=
{
<
span
className=
'icon iconfont'
style=
{
{
fontSize
:
'12px'
,
color
:
'#BFBFBF'
}
}
>

</
span
>
}
>
<
Option
value=
'YES'
>
开启
</
Option
>
<
Option
value=
'NO'
>
关闭
</
Option
>
</
Select
>
</
div
>
}
)
}
</
div
>
<
div
className=
"reset-fold-area"
>
<
Tooltip
title=
"清空筛选"
><
span
className=
"resetBtn iconfont icon"
onClick=
{
this
.
handleReset
}
>

</
span
></
Tooltip
>
<
span
style=
{
{
cursor
:
'pointer'
}
}
className=
"fold-btn"
onClick=
{
()
=>
{
this
.
setState
({
expandFilter
:
!
expandFilter
});
}
}
>
{
this
.
state
.
expandFilter
?
<
span
><
span
>
收起
</
span
><
span
className=
"iconfont icon fold-icon"
>

</
span
>
</
span
>
:
<
span
>
展开
<
span
className=
"iconfont icon fold-icon"
>

</
span
></
span
>
}
</
span
>
<
div
className=
'reset-fold-area'
>
<
Tooltip
title=
'清空筛选'
>
<
span
className=
'resetBtn iconfont icon'
onClick=
{
this
.
handleReset
}
>

{
' '
}
</
span
>
</
Tooltip
>
<
span
style=
{
{
cursor
:
'pointer'
}
}
className=
'fold-btn'
onClick=
{
()
=>
{
this
.
setState
({
expandFilter
:
!
expandFilter
})
}
}
>
{
this
.
state
.
expandFilter
?
(
<
span
>
<
span
>
收起
</
span
>
<
span
className=
'iconfont icon fold-icon'
>

</
span
>
{
' '
}
</
span
>
)
:
(
<
span
>
展开
<
span
className=
'iconfont icon fold-icon'
>

</
span
>
</
span
>
)
}
</
span
>
</
div
>
</
Row
>
</
div
>
...
...
@@ -272,4 +327,4 @@ class LiveCourseFilter extends React.Component {
}
}
export
default
withRouter
(
LiveCourseFilter
);
\ No newline at end of file
export
default
withRouter
(
LiveCourseFilter
)
src/modules/course-manage/graphics-course/components/GraphicsCourseFilter.jsx
View file @
66fa34f4
import
React
from
'react'
;
import
{
Row
,
Input
,
Select
,
Tooltip
}
from
'antd'
;
import
React
from
'react'
import
{
Row
,
Input
,
Select
,
Tooltip
}
from
'antd'
import
RangePicker
from
"@/modules/common/DateRangePicker"
;
import
RangePicker
from
'@/modules/common/DateRangePicker'
import
'./GraphicsCourseFilter.less'
;
import
moment
from
'moment'
;
import
StoreService
from
"@/domains/store-domain/storeService"
;
import
'./GraphicsCourseFilter.less'
import
moment
from
'moment'
import
StoreService
from
'@/domains/store-domain/storeService'
const
{
Search
}
=
Input
;
const
{
Option
}
=
Select
;
const
{
Search
}
=
Input
const
{
Option
}
=
Select
const
DEFAULT_QUERY
=
{
courseName
:
null
,
// 课程名称
operatorId
:
null
,
// 创建人
beginTime
:
null
,
// 开始日期
endTime
:
null
,
// 结束日期
shelfState
:
null
,
shelfState
:
null
,
}
const
defaultTeacherQuery
=
{
size
:
10
,
current
:
1
,
nickName
:
null
nickName
:
null
,
}
class
GraphicsCourseFilter
extends
React
.
Component
{
constructor
(
props
)
{
super
(
props
)
;
super
(
props
)
this
.
state
=
{
query
:
{
...
DEFAULT_QUERY
},
// 使用扩展运算符,避免浅拷贝
teacherQuery
:
defaultTeacherQuery
,
teacherList
:[],
expandFilter
:
false
teacherList
:
[],
expandFilter
:
false
,
}
}
componentDidMount
()
{
this
.
getTeacherList
()
;
this
.
getTeacherList
()
}
getTeacherList
(
current
=
1
,
selectList
){
const
{
teacherQuery
,
teacherList
}
=
this
.
state
;
getTeacherList
(
current
=
1
,
selectList
)
{
const
{
teacherQuery
,
teacherList
}
=
this
.
state
const
_query
=
{
...
teacherQuery
,
current
,
size
:
10
}
;
StoreService
.
getStoreUserBasicPage
(
_query
).
then
((
res
)
=>
{
const
{
result
=
{}
}
=
res
;
const
{
records
=
[],
total
=
0
,
hasNext
}
=
result
;
const
list
=
current
>
1
?
teacherList
.
concat
(
records
)
:
records
;
size
:
10
,
}
StoreService
.
getStoreUserBasicPage
(
_query
).
then
((
res
)
=>
{
const
{
result
=
{}
}
=
res
const
{
records
=
[],
total
=
0
,
hasNext
}
=
result
const
list
=
current
>
1
?
teacherList
.
concat
(
records
)
:
records
this
.
setState
({
hasNext
,
teacherList
:
list
,
})
})
;
})
}
// 滑动加载更多讲师列表
handleScrollTeacherList
=
(
e
)
=>
{
const
{
hasNext
}
=
this
.
state
;
const
container
=
e
.
target
;
const
scrollToBottom
=
container
&&
container
.
scrollHeight
<=
container
.
clientHeight
+
container
.
scrollTop
;
const
{
hasNext
}
=
this
.
state
const
container
=
e
.
target
const
scrollToBottom
=
container
&&
container
.
scrollHeight
<=
container
.
clientHeight
+
container
.
scrollTop
if
(
scrollToBottom
&&
hasNext
)
{
const
{
teacherQuery
}
=
this
.
state
;
let
_teacherQuery
=
teacherQuery
;
const
{
teacherQuery
}
=
this
.
state
let
_teacherQuery
=
teacherQuery
_teacherQuery
.
current
=
_teacherQuery
.
current
+
1
this
.
setState
({
teacherQuery
:{...
_teacherQuery
}
},()
=>
{
this
.
getTeacherList
(
_teacherQuery
.
current
)})
this
.
setState
(
{
teacherQuery
:
{
...
_teacherQuery
},
},
()
=>
{
this
.
getTeacherList
(
_teacherQuery
.
current
)
}
)
}
}
// 改变搜索条件
handleChangeQuery
=
(
field
,
value
)
=>
{
this
.
setState
({
this
.
setState
(
{
query
:
{
...
this
.
state
.
query
,
[
field
]:
value
,
current
:
1
,
}
},
()
=>
{
if
(
field
===
'courseName'
)
return
;
},
},
()
=>
{
if
(
field
===
'courseName'
)
return
this
.
props
.
onChange
(
this
.
state
.
query
)
});
}
)
}
handleChangeDates
=
(
dates
)
=>
{
const
query
=
_
.
clone
(
this
.
state
.
query
)
;
const
query
=
_
.
clone
(
this
.
state
.
query
)
if
(
_
.
isEmpty
(
dates
))
{
delete
query
.
beginTime
;
delete
query
.
endTime
;
delete
query
.
beginTime
delete
query
.
endTime
}
else
{
query
.
beginTime
=
dates
[
0
]
.
valueOf
();
query
.
endTime
=
dates
[
1
].
valueOf
();
query
.
beginTime
=
dates
[
0
]
?.
startOf
(
'day'
).
valueOf
()
query
.
endTime
=
dates
[
0
]?.
endOf
(
'day'
).
valueOf
()
}
this
.
setState
({
query
:{
this
.
setState
(
{
query
:
{
...
query
,
current
:
1
,
},
},
()
=>
{
this
.
props
.
onChange
(
this
.
state
.
query
)
}
},
()
=>
{
this
.
props
.
onChange
(
this
.
state
.
query
);
})
)
}
// 重置搜索条件
handleReset
=
()
=>
{
this
.
setState
({
this
.
setState
(
{
query
:
DEFAULT_QUERY
,
},
()
=>
{
this
.
props
.
onChange
(
this
.
state
.
query
);
})
},
()
=>
{
this
.
props
.
onChange
(
this
.
state
.
query
)
}
)
}
render
()
{
const
{
query
:
{
courseName
,
operator
,
beginTime
,
endTime
,
operatorId
,
shelfState
},
query
:
{
courseName
,
operator
,
beginTime
,
endTime
,
operatorId
,
shelfState
},
expandFilter
,
teacherList
,
teacherQuery
}
=
this
.
state
;
teacherQuery
,
}
=
this
.
state
return
(
<
div
className=
"video-course-filter"
>
<
Row
type=
"flex"
justify=
"space-between"
align=
"top"
>
<
div
className=
"search-condition"
>
<
div
className=
"search-condition__item"
>
<
span
className=
"search-name"
>
图文课名称:
</
span
>
<
div
className=
'video-course-filter'
>
<
Row
type=
'flex'
justify=
'space-between'
align=
'top'
>
<
div
className=
'search-condition'
>
<
div
className=
'search-condition__item'
>
<
span
className=
'search-name'
>
图文课名称:
</
span
>
<
Search
value=
{
courseName
}
placeholder=
"搜索图文课名称"
onChange=
{
(
e
)
=>
{
this
.
handleChangeQuery
(
'courseName'
,
e
.
target
.
value
)}
}
onSearch=
{
()
=>
{
this
.
props
.
onChange
(
this
.
state
.
query
)
}
}
style=
{
{
width
:
"calc(100% - 84px)"
}
}
enterButton=
{
<
span
className=
"icon iconfont"
>

</
span
>
}
placeholder=
'搜索图文课名称'
onChange=
{
(
e
)
=>
{
this
.
handleChangeQuery
(
'courseName'
,
e
.
target
.
value
)
}
}
onSearch=
{
()
=>
{
this
.
props
.
onChange
(
this
.
state
.
query
)
}
}
style=
{
{
width
:
'calc(100% - 84px)'
}
}
enterButton=
{
<
span
className=
'icon iconfont'
>

</
span
>
}
/>
</
div
>
<
div
className=
"search-condition__item"
>
<
div
className=
'search-condition__item'
>
<
span
>
创建人:
</
span
>
<
Select
placeholder=
"请选择创建人"
style=
{
{
width
:
"calc(100% - 70px)"
}
}
placeholder=
'请选择创建人'
style=
{
{
width
:
'calc(100% - 70px)'
}
}
showSearch
allowClear
filterOption=
{
(
input
,
option
)
=>
option
}
onPopupScroll=
{
this
.
handleScrollTeacherList
}
suffixIcon=
{
<
span
className=
"icon iconfont"
style=
{
{
fontSize
:
'12px'
,
color
:
'#BFBFBF'
}
}
>

</
span
>
}
suffixIcon=
{
<
span
className=
'icon iconfont'
style=
{
{
fontSize
:
'12px'
,
color
:
'#BFBFBF'
}
}
>

</
span
>
}
value=
{
operatorId
}
onChange=
{
(
value
)
=>
{
this
.
handleChangeQuery
(
'operatorId'
,
value
)
}
}
onSearch=
{
(
value
)
=>
{
teacherQuery
.
nickName
=
value
this
.
setState
({
teacherQuery
},
()
=>
{
this
.
setState
(
{
teacherQuery
,
},
()
=>
{
this
.
getTeacherList
()
})
}
)
}
}
onClear
={(
value
)=
>
{
this
.
setState
({
teacherQuery
:{
onClear=
{
(
value
)
=>
{
this
.
setState
(
{
teacherQuery
:
{
size
:
10
,
current
:
1
,
nickName
:
null
}
},
()
=>
{
nickName
:
null
,
},
},
()
=>
{
this
.
getTeacherList
()
})
}
}
>
)
}
}
>
{
_
.
map
(
teacherList
,
(
item
,
index
)
=>
{
return
(
<
Select
.
Option
value=
{
item
.
id
}
key=
{
item
.
id
}
>
{
item
.
nickName
}
</
Select
.
Option
>
);
<
Select
.
Option
value=
{
item
.
id
}
key=
{
item
.
id
}
>
{
item
.
nickName
}
</
Select
.
Option
>
)
})
}
</
Select
>
</
div
>
<
div
className=
"search-condition__item"
>
<
span
className=
"search-date"
>
创建日期:
</
span
>
<
div
className=
'search-condition__item'
>
<
span
className=
'search-date'
>
创建日期:
</
span
>
<
RangePicker
id=
"course_date_picker"
id=
'course_date_picker'
allowClear=
{
false
}
value=
{
beginTime
?
[
moment
(
beginTime
),
moment
(
endTime
)]
:
null
}
format=
{
"YYYY-MM-DD"
}
onChange=
{
(
dates
)
=>
{
this
.
handleChangeDates
(
dates
)
}
}
style=
{
{
width
:
"calc(100% - 70px)"
}
}
value=
{
beginTime
?
[
moment
(
beginTime
),
moment
(
endTime
)]
:
null
}
format=
{
'YYYY-MM-DD'
}
onChange=
{
(
dates
)
=>
{
this
.
handleChangeDates
(
dates
)
}
}
style=
{
{
width
:
'calc(100% - 70px)'
}
}
/>
</
div
>
{
expandFilter
&&
<
div
className=
"search-condition__item"
>
<
span
className=
"shelf-status"
>
学院展示:
</
span
>
{
expandFilter
&&
(
<
div
className=
'search-condition__item'
>
<
span
className=
'shelf-status'
>
学院展示:
</
span
>
<
Select
style=
{
{
width
:
"calc(100% - 84px)"
}
}
placeholder=
"请选择"
style=
{
{
width
:
'calc(100% - 84px)'
}
}
placeholder=
'请选择'
allowClear=
{
true
}
value=
{
shelfState
}
onChange=
{
(
value
)
=>
{
this
.
handleChangeQuery
(
'shelfState'
,
value
)
}
}
suffixIcon=
{
<
span
className=
"icon iconfont"
style=
{
{
fontSize
:
'12px'
,
color
:
'#BFBFBF'
}
}
>

</
span
>
}
>
<
Option
value=
"YES"
>
开启
</
Option
>
<
Option
value=
"NO"
>
关闭
</
Option
>
onChange=
{
(
value
)
=>
{
this
.
handleChangeQuery
(
'shelfState'
,
value
)
}
}
suffixIcon=
{
<
span
className=
'icon iconfont'
style=
{
{
fontSize
:
'12px'
,
color
:
'#BFBFBF'
}
}
>

</
span
>
}
>
<
Option
value=
'YES'
>
开启
</
Option
>
<
Option
value=
'NO'
>
关闭
</
Option
>
</
Select
>
</
div
>
}
)
}
</
div
>
<
div
className=
"reset-fold-area"
>
<
Tooltip
title=
"清空筛选"
><
span
className=
"resetBtn iconfont icon"
onClick=
{
this
.
handleReset
}
>

</
span
></
Tooltip
>
<
span
style=
{
{
cursor
:
'pointer'
}
}
className=
"fold-btn"
onClick=
{
()
=>
{
this
.
setState
({
expandFilter
:
!
expandFilter
});
}
}
>
{
this
.
state
.
expandFilter
?
<
span
><
span
>
收起
</
span
><
span
className=
"iconfont icon fold-icon"
>

</
span
>
</
span
>
:
<
span
>
展开
<
span
className=
"iconfont icon fold-icon"
>

</
span
></
span
>
}
</
span
>
<
div
className=
'reset-fold-area'
>
<
Tooltip
title=
'清空筛选'
>
<
span
className=
'resetBtn iconfont icon'
onClick=
{
this
.
handleReset
}
>

{
' '
}
</
span
>
</
Tooltip
>
<
span
style=
{
{
cursor
:
'pointer'
}
}
className=
'fold-btn'
onClick=
{
()
=>
{
this
.
setState
({
expandFilter
:
!
expandFilter
})
}
}
>
{
this
.
state
.
expandFilter
?
(
<
span
>
<
span
>
收起
</
span
>
<
span
className=
'iconfont icon fold-icon'
>

</
span
>
{
' '
}
</
span
>
)
:
(
<
span
>
展开
<
span
className=
'iconfont icon fold-icon'
>

</
span
>
</
span
>
)
}
</
span
>
</
div
>
</
Row
>
</
div
>
...
...
@@ -226,4 +271,4 @@ class GraphicsCourseFilter extends React.Component {
}
}
export
default
GraphicsCourseFilter
;
export
default
GraphicsCourseFilter
src/modules/course-manage/offline-course/components/OfflineCourseFilter.jsx
View file @
66fa34f4
import
React
from
'react'
;
import
{
Row
,
Input
,
Select
,
Tooltip
}
from
'antd'
;
import
React
from
'react'
import
{
Row
,
Input
,
Select
,
Tooltip
}
from
'antd'
import
RangePicker
from
"@/modules/common/DateRangePicker"
;
import
RangePicker
from
'@/modules/common/DateRangePicker'
import
'./OfflineCourseFilter.less'
;
import
moment
from
'moment'
;
import
StoreService
from
"@/domains/store-domain/storeService"
;
import
'./OfflineCourseFilter.less'
import
moment
from
'moment'
import
StoreService
from
'@/domains/store-domain/storeService'
const
{
Search
}
=
Input
;
const
{
Option
}
=
Select
;
const
{
Search
}
=
Input
const
{
Option
}
=
Select
const
DEFAULT_QUERY
=
{
courseName
:
null
,
// 课程名称
operatorId
:
null
,
// 创建人
beginTime
:
null
,
// 开始日期
endTime
:
null
,
// 结束日期
shelfState
:
null
,
shelfState
:
null
,
}
const
defaultTeacherQuery
=
{
size
:
10
,
current
:
1
,
nickName
:
null
nickName
:
null
,
}
class
OfflineCourseFilter
extends
React
.
Component
{
constructor
(
props
)
{
super
(
props
)
;
super
(
props
)
this
.
state
=
{
query
:
{
...
DEFAULT_QUERY
},
// 使用扩展运算符,避免浅拷贝
teacherQuery
:
defaultTeacherQuery
,
teacherList
:[],
expandFilter
:
false
teacherList
:
[],
expandFilter
:
false
,
}
}
componentDidMount
()
{
this
.
getTeacherList
()
;
this
.
getTeacherList
()
}
getTeacherList
(
current
=
1
,
selectList
){
const
{
teacherQuery
,
teacherList
}
=
this
.
state
;
getTeacherList
(
current
=
1
,
selectList
)
{
const
{
teacherQuery
,
teacherList
}
=
this
.
state
const
_query
=
{
...
teacherQuery
,
current
,
size
:
10
}
;
StoreService
.
getStoreUserBasicPage
(
_query
).
then
((
res
)
=>
{
const
{
result
=
{}
}
=
res
;
const
{
records
=
[],
total
=
0
,
hasNext
}
=
result
;
const
list
=
current
>
1
?
teacherList
.
concat
(
records
)
:
records
;
size
:
10
,
}
StoreService
.
getStoreUserBasicPage
(
_query
).
then
((
res
)
=>
{
const
{
result
=
{}
}
=
res
const
{
records
=
[],
total
=
0
,
hasNext
}
=
result
const
list
=
current
>
1
?
teacherList
.
concat
(
records
)
:
records
this
.
setState
({
hasNext
,
teacherList
:
list
,
})
})
;
})
}
// 滑动加载更多讲师列表
handleScrollTeacherList
=
(
e
)
=>
{
const
{
hasNext
}
=
this
.
state
;
const
container
=
e
.
target
;
const
scrollToBottom
=
container
&&
container
.
scrollHeight
<=
container
.
clientHeight
+
container
.
scrollTop
;
const
{
hasNext
}
=
this
.
state
const
container
=
e
.
target
const
scrollToBottom
=
container
&&
container
.
scrollHeight
<=
container
.
clientHeight
+
container
.
scrollTop
if
(
scrollToBottom
&&
hasNext
)
{
const
{
teacherQuery
}
=
this
.
state
;
let
_teacherQuery
=
teacherQuery
;
const
{
teacherQuery
}
=
this
.
state
let
_teacherQuery
=
teacherQuery
_teacherQuery
.
current
=
_teacherQuery
.
current
+
1
this
.
setState
({
teacherQuery
:{...
_teacherQuery
}
},()
=>
{
this
.
getTeacherList
(
_teacherQuery
.
current
)})
this
.
setState
(
{
teacherQuery
:
{
...
_teacherQuery
},
},
()
=>
{
this
.
getTeacherList
(
_teacherQuery
.
current
)
}
)
}
}
// 改变搜索条件
handleChangeQuery
=
(
field
,
value
)
=>
{
this
.
setState
({
this
.
setState
(
{
query
:
{
...
this
.
state
.
query
,
[
field
]:
value
,
current
:
1
,
}
},
()
=>
{
if
(
field
===
'courseName'
)
return
;
},
},
()
=>
{
if
(
field
===
'courseName'
)
return
this
.
props
.
onChange
(
this
.
state
.
query
)
});
}
)
}
handleChangeDates
=
(
dates
)
=>
{
const
query
=
_
.
clone
(
this
.
state
.
query
)
;
const
query
=
_
.
clone
(
this
.
state
.
query
)
if
(
_
.
isEmpty
(
dates
))
{
delete
query
.
beginTime
;
delete
query
.
endTime
;
delete
query
.
beginTime
delete
query
.
endTime
}
else
{
query
.
beginTime
=
dates
[
0
]
.
valueOf
();
query
.
endTime
=
dates
[
1
].
valueOf
();
query
.
beginTime
=
dates
[
0
]
?.
startOf
(
'day'
).
valueOf
()
query
.
endTime
=
dates
[
0
]?.
endOf
(
'day'
).
valueOf
()
}
this
.
setState
({
query
:{
this
.
setState
(
{
query
:
{
...
query
,
current
:
1
,
},
},
()
=>
{
this
.
props
.
onChange
(
this
.
state
.
query
)
}
},
()
=>
{
this
.
props
.
onChange
(
this
.
state
.
query
);
})
)
}
// 重置搜索条件
handleReset
=
()
=>
{
this
.
setState
({
this
.
setState
(
{
query
:
DEFAULT_QUERY
,
},
()
=>
{
this
.
props
.
onChange
(
this
.
state
.
query
);
})
},
()
=>
{
this
.
props
.
onChange
(
this
.
state
.
query
)
}
)
}
render
()
{
const
{
query
:
{
courseName
,
courseState
,
shelfState
,
},
query
:
{
courseName
,
courseState
,
shelfState
},
expandFilter
,
}
=
this
.
state
;
}
=
this
.
state
return
(
<
div
className=
"video-course-filter"
>
<
Row
type=
"flex"
justify=
"space-between"
align=
"top"
>
<
div
className=
"search-condition"
>
<
div
className=
"search-condition__item"
>
<
span
className=
"search-name"
>
线下课名称:
</
span
>
<
div
className=
'video-course-filter'
>
<
Row
type=
'flex'
justify=
'space-between'
align=
'top'
>
<
div
className=
'search-condition'
>
<
div
className=
'search-condition__item'
>
<
span
className=
'search-name'
>
线下课名称:
</
span
>
<
Search
value=
{
courseName
}
placeholder=
"搜索线下课名称"
onChange=
{
(
e
)
=>
{
this
.
handleChangeQuery
(
'courseName'
,
e
.
target
.
value
)}
}
onSearch=
{
()
=>
{
this
.
props
.
onChange
(
this
.
state
.
query
)
}
}
style=
{
{
width
:
"calc(100% - 84px)"
}
}
enterButton=
{
<
span
className=
"icon iconfont"
style=
{
{
fontSize
:
'16px'
}
}
>

</
span
>
}
placeholder=
'搜索线下课名称'
onChange=
{
(
e
)
=>
{
this
.
handleChangeQuery
(
'courseName'
,
e
.
target
.
value
)
}
}
onSearch=
{
()
=>
{
this
.
props
.
onChange
(
this
.
state
.
query
)
}
}
style=
{
{
width
:
'calc(100% - 84px)'
}
}
enterButton=
{
<
span
className=
'icon iconfont'
style=
{
{
fontSize
:
'16px'
}
}
>

</
span
>
}
/>
</
div
>
<
div
className=
"search-condition__item"
>
<
span
className=
"shelf-status"
>
学院展示:
</
span
>
<
div
className=
'search-condition__item'
>
<
span
className=
'shelf-status'
>
学院展示:
</
span
>
<
Select
style=
{
{
width
:
"calc(100% - 84px)"
}
}
placeholder=
"请选择"
style=
{
{
width
:
'calc(100% - 84px)'
}
}
placeholder=
'请选择'
allowClear=
{
true
}
value=
{
shelfState
}
onChange=
{
(
value
)
=>
{
this
.
handleChangeQuery
(
'shelfState'
,
value
)
}
}
suffixIcon=
{
<
span
className=
"icon iconfont"
style=
{
{
fontSize
:
'12px'
,
color
:
'#BFBFBF'
}
}
>

</
span
>
}
>
<
Option
value=
"YES"
>
开启
</
Option
>
<
Option
value=
"NO"
>
关闭
</
Option
>
onChange=
{
(
value
)
=>
{
this
.
handleChangeQuery
(
'shelfState'
,
value
)
}
}
suffixIcon=
{
<
span
className=
'icon iconfont'
style=
{
{
fontSize
:
'12px'
,
color
:
'#BFBFBF'
}
}
>

</
span
>
}
>
<
Option
value=
'YES'
>
开启
</
Option
>
<
Option
value=
'NO'
>
关闭
</
Option
>
</
Select
>
</
div
>
</
div
>
<
div
className=
"reset-fold-area"
>
<
Tooltip
title=
"清空筛选"
><
span
className=
"resetBtn iconfont icon"
onClick=
{
this
.
handleReset
}
>

</
span
></
Tooltip
>
<
div
className=
'reset-fold-area'
>
<
Tooltip
title=
'清空筛选'
>
<
span
className=
'resetBtn iconfont icon'
onClick=
{
this
.
handleReset
}
>

{
' '
}
</
span
>
</
Tooltip
>
</
div
>
</
Row
>
</
div
>
...
...
@@ -161,4 +187,4 @@ class OfflineCourseFilter extends React.Component {
}
}
export
default
OfflineCourseFilter
;
export
default
OfflineCourseFilter
src/modules/course-manage/video-course/components/VideoCourseFilter.jsx
View file @
66fa34f4
...
...
@@ -2,7 +2,7 @@
* @Author: 吴文洁
* @Date: 2020-08-05 10:11:57
* @LastEditors: fusanqiasng
* @LastEditTime: 2021-05-28 1
4:07:37
* @LastEditTime: 2021-05-28 1
5:38:11
* @Description: 视频课-搜索模块
* @Copyright: 杭州杰竞科技有限公司 版权所有
*/
...
...
@@ -192,7 +192,6 @@ class VideoCourseFilter extends React.Component {
teacherList
,
teacherQuery
,
categoryList
,
categoryName
,
}
=
this
.
state
console
.
log
(
'categoryList'
,
categoryList
)
...
...
@@ -276,10 +275,11 @@ class VideoCourseFilter extends React.Component {
<
TreeSelect
treeNodeFilterProp=
'categoryName'
showSearch
value=
{
categoryId
||
null
}
style=
{
{
width
:
'calc(100% - 75px)'
}
}
dropdownStyle=
{
{
maxHeight
:
400
,
overflow
:
'auto'
}
}
treeData=
{
categoryList
}
placeholder=
'请选择课程
类型
'
placeholder=
'请选择课程
分类
'
allowClear
onChange=
{
(
value
)
=>
{
this
.
handleChangeQuery
(
'categoryId'
,
value
)
...
...
src/modules/knowledge-base/modal/AddCourse.jsx
View file @
66fa34f4
...
...
@@ -3,7 +3,7 @@
* @Author: zangsuyun
* @Date: 2021-03-13 09:54:26
* @LastEditors: fusanqiasng
* @LastEditTime: 2021-05-28 1
4:21:22
* @LastEditTime: 2021-05-28 1
5:35:33
* @Copyright: © 2020 杭州杰竞科技有限公司 版权所有
*/
...
...
@@ -453,10 +453,17 @@ class AddCourse extends React.Component {
dataIndex
:
'categoryName'
,
render
:
(
val
,
record
)
=>
{
return
(
<
Choose
>
<
When
condition=
{
videoCourseDivision
===
'internal'
}
>
<
div
className=
'record__item'
>
{
record
.
categoryOneName
}
{
record
.
categoryTwoName
?
`-${record.categoryTwoName}`
:
''
}
</
div
>
</
When
>
<
Otherwise
>
<
div
className=
'record__item'
>
{
record
.
categorySonName
}
</
div
>
</
Otherwise
>
</
Choose
>
)
},
},
...
...
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