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
30007480
Commit
30007480
authored
Aug 18, 2021
by
guomingpang
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feature/pangguoming/20210805/wechat_audit' into rc
parents
90015a99
a4e5eba6
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
782 additions
and
37 deletions
+782
-37
src/data-source/store/request-apis.ts
+13
-0
src/domains/store-domain/storeService.ts
+15
-1
src/modules/college-manage/CollegeInfoPage.jsx
+0
-0
src/modules/college-manage/CollegeInfoPage.less
+29
-2
src/modules/college-manage/NewUsersManagePage.jsx
+66
-9
src/modules/college-manage/NewUsersManagePage.less
+20
-0
src/modules/college-manage/UserManagePage.less
+17
-0
src/modules/college-manage/UserManagePage.tsx
+41
-3
src/modules/college-manage/WechatUserAudit/WechatUserAudit.jsx
+86
-0
src/modules/college-manage/WechatUserAudit/WechatUserAudit.less
+4
-0
src/modules/college-manage/WechatUserAudit/WechatUserAuditFilter.jsx
+117
-0
src/modules/college-manage/WechatUserAudit/WechatUserAuditFilter.less
+46
-0
src/modules/college-manage/WechatUserAudit/WechatUserAuditList.jsx
+168
-0
src/modules/college-manage/WechatUserAudit/WechatUserAuditList.less
+75
-0
src/modules/college-manage/WechatUserAudit/WechatUserAuditOpt.jsx
+19
-0
src/modules/college-manage/components/DepartMentTabCon.jsx
+3
-3
src/modules/course-manage/components/GraphicsEditor.jsx
+1
-0
src/modules/root/CreateCollege.jsx
+35
-13
src/modules/root/CreateCollege.less
+24
-3
src/modules/teach-tool/examination-manager/AddExam.tsx
+3
-3
No files found.
src/data-source/store/request-apis.ts
View file @
30007480
...
@@ -75,6 +75,19 @@ export function updateStoreMessage(params: object) {
...
@@ -75,6 +75,19 @@ export function updateStoreMessage(params: object) {
export
function
getStoreDetail
(
params
:
object
)
{
export
function
getStoreDetail
(
params
:
object
)
{
return
Service
.
Hades
(
"public/hades/getStoreDetail"
,
params
);
return
Service
.
Hades
(
"public/hades/getStoreDetail"
,
params
);
}
}
export
function
getCustomerAuditList
(
params
:
object
){
return
Service
.
Hades
(
'public/hades/getCustomerAuditList'
,
params
);
}
export
function
getCustomerAuditListCount
(
params
:
object
){
return
Service
.
Hades
(
'public/hades/getCustomerAuditCount'
,
params
);
}
export
function
auditOperation
(
params
:
object
){
return
Service
.
Hades
(
'public/hades/auditOperation'
,
params
);
}
export
function
getByDepartmentId
(
params
:
object
)
{
export
function
getByDepartmentId
(
params
:
object
)
{
return
Service
.
Hades
(
"public/hades/getByDepartmentId"
,
params
);
return
Service
.
Hades
(
"public/hades/getByDepartmentId"
,
params
);
}
}
...
...
src/domains/store-domain/storeService.ts
View file @
30007480
...
@@ -9,7 +9,7 @@
...
@@ -9,7 +9,7 @@
import
{
getEmployeeList
,
getUserList
,
getStoreDecorationList
,
getStoreRole
,
addEmployee
,
editEmployee
,
deleteEmployee
,
getCourseCatalogList
,
import
{
getEmployeeList
,
getUserList
,
getStoreDecorationList
,
getStoreRole
,
addEmployee
,
editEmployee
,
deleteEmployee
,
getCourseCatalogList
,
getAllSonCategory
,
addCourseCategory
,
delCourseCategory
,
editCourseCategory
,
deleteStoreDecorationList
,
addStoreBanner
,
editStoreBanner
,
getAllSonCategory
,
addCourseCategory
,
delCourseCategory
,
editCourseCategory
,
deleteStoreDecorationList
,
addStoreBanner
,
editStoreBanner
,
moveBannerSequence
,
getStoreUserBasicPage
,
updateStoreMessage
,
getStoreDetail
,
getByDepartmentId
,
getDepartmentUser
,
getDepartmentUserNotPage
,
addDepartment
,
moveBannerSequence
,
getStoreUserBasicPage
,
updateStoreMessage
,
getStoreDetail
,
getByDepartmentId
,
getDepartmentUser
,
getDepartmentUserNotPage
,
addDepartment
,
editDepartment
,
delDepartment
,
queryDepartmentTree
,
getStoreCustomerAndDepNamePage
,
delDepartmentUser
,
syncWorkWeChatDepartment
,
getSyncCount
editDepartment
,
delDepartment
,
queryDepartmentTree
,
getStoreCustomerAndDepNamePage
,
delDepartmentUser
,
syncWorkWeChatDepartment
,
getSyncCount
,
getCustomerAuditList
,
auditOperation
,
getCustomerAuditListCount
}
from
'@/data-source/store/request-apis'
;
}
from
'@/data-source/store/request-apis'
;
export
default
class
StoreService
{
export
default
class
StoreService
{
...
@@ -91,6 +91,20 @@ export default class StoreService {
...
@@ -91,6 +91,20 @@ export default class StoreService {
static
getStoreDetail
(
params
:
any
)
{
static
getStoreDetail
(
params
:
any
)
{
return
getStoreDetail
(
params
);
return
getStoreDetail
(
params
);
}
}
// 获取微信学员审核列表
static
getCustomerAuditList
(
params
:
any
){
return
getCustomerAuditList
(
params
)
}
// 获取微信学员审核列表数量
static
getCustomerAuditListCount
(
params
:
any
){
return
getCustomerAuditListCount
(
params
)
}
//微信学员审核操作
static
auditOperation
(
params
:
any
){
return
auditOperation
(
params
)
}
static
getByDepartmentId
(
params
:
any
){
static
getByDepartmentId
(
params
:
any
){
return
getByDepartmentId
(
params
);
return
getByDepartmentId
(
params
);
}
}
...
...
src/modules/college-manage/CollegeInfoPage.jsx
View file @
30007480
This diff is collapsed.
Click to expand it.
src/modules/college-manage/CollegeInfoPage.less
View file @
30007480
...
@@ -13,7 +13,14 @@
...
@@ -13,7 +13,14 @@
font-size:14px;
font-size:14px;
}
}
.college-info-page-form{
.college-info-page-form{
margin-left:29px;
margin-left:20px;
.title{
font-size: 16px;
color: #333;
font-weight: 500;
margin-left: -20px;
margin-bottom: 20px;
}
.logo-con{
.logo-con{
.logo-img-con{
.logo-img-con{
width: 258px;
width: 258px;
...
@@ -58,10 +65,29 @@
...
@@ -58,10 +65,29 @@
}
}
}
}
}
}
.switch-box{
display: flex;
align-items: center;
.switch-desc{
color: #999;
font-size: 14px;
margin: 0 8px;
}
.switch-prew-link{
color: #2966FF;
font-size: 14px;
}
}
}
}
.submit-btn{
.submit-btn{
margin-left:142px;
margin-left:132px;
margin-top: 20px;
}
}
}
}
.college-info-page-view-modal-box{
img{
width: 100%;
}
}
\ No newline at end of file
src/modules/college-manage/NewUsersManagePage.jsx
View file @
30007480
...
@@ -8,27 +8,78 @@
...
@@ -8,27 +8,78 @@
*/
*/
import
React
,
{
useEffect
,
useState
}
from
"react"
;
import
React
,
{
useEffect
,
useState
}
from
"react"
;
import
{
withRouter
}
from
"react-router-dom"
;
import
{
Route
,
withRouter
}
from
"react-router-dom"
;
import
StoreService
from
"@/domains/store-domain/storeService"
;
import
_
from
"underscore"
;
import
_
from
"underscore"
;
import
{
Tabs
,
Input
,
Tree
,
Button
}
from
"antd"
;
import
User
from
"@/common/js/user"
;
import
{
Tabs
,
Badge
}
from
"antd"
;
import
DepartMentTabCon
from
'./components/DepartMentTabCon'
;
import
DepartMentTabCon
from
'./components/DepartMentTabCon'
;
import
WechatUserAudit
from
'./WechatUserAudit/WechatUserAudit'
import
"./NewUsersManagePage.less"
;
import
"./NewUsersManagePage.less"
;
const
{
TabPane
}
=
Tabs
;
const
{
TabPane
}
=
Tabs
;
function
UserManagePage
()
{
function
UserManagePage
(
props
)
{
const
{
match
}
=
props
;
const
[
currentTab
,
setCurrentTab
]
=
useState
(
"departMentTab"
);
const
[
currentTab
,
setCurrentTab
]
=
useState
(
"departMentTab"
);
const
[
courseList
,
setCourseList
]
=
useState
([]);
const
[
auditSwitch
,
setAuditSwitch
]
=
useState
(
'No'
)
const
[
total
,
setTotal
]
=
useState
(
0
);
const
[
listCount
,
setListCount
]
=
useState
({
const
[
query
,
setQuery
]
=
useState
({
"allCnt"
:
0
,
current
:
0
,
"passedCnt"
:
0
,
size
:
10
,
"rejectedCnt"
:
0
,
"waitCnt"
:
0
});
});
useEffect
(()
=>
{
//列表获取
function
handleFetchAuditListCount
(
_query
)
{
const
params
=
{
storeId
:
User
.
getStoreId
(),
};
StoreService
.
getCustomerAuditListCount
(
params
).
then
((
res
)
=>
{
const
{
result
,
}
=
res
;
setListCount
(
result
)
});
}
handleFetchAuditListCount
();
},[])
useEffect
(()
=>
{
const
params
=
{
storeId
:
User
.
getStoreId
()
}
StoreService
.
getStoreDetail
(
params
).
then
((
res
)
=>
{
const
{
result
=
{
}
}
=
res
;
const
{
auditSwitch
}
=
result
;
setAuditSwitch
(
auditSwitch
)
})
},[])
return
(
return
(
<
div
className=
"page new-user-manage-page"
>
<
div
className=
"page new-user-manage-page"
>
<
div
className=
"content-header"
>
学员管理
</
div
>
<
div
className=
"content-header"
>
<
div
>
学员管理
</
div
>
<
If
condition=
{
auditSwitch
===
'OPEN'
}
>
<
div
className=
'wechat-audit'
onClick=
{
()
=>
{
window
.
RCHistory
.
push
({
pathname
:
`${match.url}/wechat-user-audit`
,
});
}
}
>
<
div
>
<
span
className=
'icon iconfont icon-font-weixin'
>

</
span
>
<
span
className=
'content-header-right'
>
学员审核列表
</
span
>
</
div
>
<
If
condition=
{
listCount
.
waitCnt
!==
'0'
}
>
<
Badge
status=
"error"
text=
""
offset=
{
[
6
,
-
6
]
}
/>
</
If
>
</
div
>
</
If
>
</
div
>
<
div
className=
"box"
>
<
div
className=
"box"
>
<
div
className=
"tab-box"
>
<
div
className=
"tab-box"
>
<
Tabs
<
Tabs
...
@@ -46,6 +97,12 @@ function UserManagePage() {
...
@@ -46,6 +97,12 @@ function UserManagePage() {
<
DepartMentTabCon
currentTab=
{
currentTab
}
/>
<
DepartMentTabCon
currentTab=
{
currentTab
}
/>
</
div
>
</
div
>
</
div
>
</
div
>
<
Route
path=
{
`${match.url}/wechat-user-audit`
}
render=
{
()
=>
{
return
<
WechatUserAudit
/>;
}
}
/>
</
div
>
</
div
>
);
);
}
}
...
...
src/modules/college-manage/NewUsersManagePage.less
View file @
30007480
...
@@ -2,4 +2,23 @@
...
@@ -2,4 +2,23 @@
.ant-tabs-tab + .ant-tabs-tab{
.ant-tabs-tab + .ant-tabs-tab{
margin:0;
margin:0;
}
}
.content-header{
display: flex;
justify-content: space-between;
.wechat-audit{
display: flex;
&:hover{
cursor: pointer;
}
}
.icon-font-weixin{
color: #5DD333;
margin-right:4px ;
}
.content-header-right{
font-size: 14px;
color: #2966FF;
}
}
}
}
\ No newline at end of file
src/modules/college-manage/UserManagePage.less
View file @
30007480
.user-manage-page {
.user-manage-page {
.content-header{
display: flex;
justify-content: space-between;
align-items: center;
.wechat-audit:hover{
cursor: pointer;
}
.icon-font-weixin{
color: #5DD333;
margin-right:4px ;
}
.content-header-right{
font-size: 14px;
color: #2966FF;
}
}
.box-header {
.box-header {
display: flex;
display: flex;
width: calc(100% - 80px);
width: calc(100% - 80px);
...
...
src/modules/college-manage/UserManagePage.tsx
View file @
30007480
...
@@ -8,13 +8,14 @@
...
@@ -8,13 +8,14 @@
*/
*/
import
React
,
{
useEffect
,
useState
}
from
"react"
;
import
React
,
{
useEffect
,
useState
}
from
"react"
;
import
{
withRouter
}
from
"react-router-dom"
;
import
{
Route
,
withRouter
}
from
'react-router-dom'
;
import
_
from
"underscore"
;
import
_
from
"underscore"
;
import
{
PageControl
}
from
"@/components"
;
import
{
PageControl
}
from
"@/components"
;
import
{
Input
,
DatePicker
,
Select
,
Button
,
message
}
from
"antd"
;
import
{
Input
,
DatePicker
,
Select
,
Button
,
message
}
from
"antd"
;
import
StoreService
from
"@/domains/store-domain/storeService"
;
import
StoreService
from
"@/domains/store-domain/storeService"
;
import
User
from
"@/common/js/user"
;
import
User
from
"@/common/js/user"
;
import
ChooseMembersModal
from
"./modal/ChooseMembersModal"
;
import
ChooseMembersModal
from
"./modal/ChooseMembersModal"
;
import
WechatUserAudit
from
'./WechatUserAudit/WechatUserAudit'
import
LimitTip
from
"./LimitTip"
import
LimitTip
from
"./LimitTip"
import
{
XMTable
}
from
'@/components'
;
import
{
XMTable
}
from
'@/components'
;
...
@@ -30,9 +31,11 @@ declare var window: any;
...
@@ -30,9 +31,11 @@ declare var window: any;
function
UserManagePage
()
{
function
UserManagePage
(
props
:
any
)
{
const
{
match
}
=
props
;
const
[
userList
,
setUserList
]
=
useState
([]);
const
[
userList
,
setUserList
]
=
useState
([]);
const
[
model
,
setModel
]
=
useState
<
React
.
ReactNode
>
(
null
);
const
[
model
,
setModel
]
=
useState
<
React
.
ReactNode
>
(
null
);
const
[
auditSwitch
,
setAuditSwitch
]
=
useState
(
'No'
)
const
[
query
,
setQuery
]
=
useState
({
const
[
query
,
setQuery
]
=
useState
({
current
:
0
,
current
:
0
,
size
:
10
,
size
:
10
,
...
@@ -62,9 +65,24 @@ function UserManagePage() {
...
@@ -62,9 +65,24 @@ function UserManagePage() {
StoreService
.
getUserList
(
_query
).
then
((
res
:
any
)
=>
{
StoreService
.
getUserList
(
_query
).
then
((
res
:
any
)
=>
{
setRealTotal
(
res
.
result
.
total
);
setRealTotal
(
res
.
result
.
total
);
});
});
const
params
=
{
storeId
:
User
.
getStoreId
()
}
StoreService
.
getStoreDetail
(
params
).
then
((
res
)
=>
{
const
{
result
=
{
}
}
=
res
;
const
{
auditSwitch
}
=
result
;
setAuditSwitch
(
auditSwitch
)
})
},
[])
},
[])
useEffect
(()
=>
{
},[])
useEffect
(()
=>
{
useEffect
(()
=>
{
getUserList
();
getUserList
();
},
[
query
]);
},
[
query
]);
...
@@ -137,7 +155,21 @@ function UserManagePage() {
...
@@ -137,7 +155,21 @@ function UserManagePage() {
return
(
return
(
<
div
className=
" page user-manage-page"
>
<
div
className=
" page user-manage-page"
>
<
div
className=
"content-header"
>
学员管理
</
div
>
<
div
className=
"content-header"
>
<
div
>
学员管理
</
div
>
<
If
condition=
{
auditSwitch
===
'OPEN'
}
>
<
div
className=
'wechat-audit'
onClick=
{
()
=>
{
window
.
RCHistory
.
push
({
pathname
:
`${match.url}/wechat-user-audit`
,
});
}
}
>
<
span
className=
'icon iconfont icon-font-weixin'
>

</
span
>
<
span
className=
'content-header-right'
>
学员审核列表
</
span
>
</
div
>
</
If
>
</
div
>
<
div
className=
"box"
>
<
div
className=
"box"
>
<
div
className=
"box-header"
>
<
div
className=
"box-header"
>
<
div
className=
"header-item"
>
<
div
className=
"header-item"
>
...
@@ -243,6 +275,12 @@ function UserManagePage() {
...
@@ -243,6 +275,12 @@ function UserManagePage() {
</
div
>
</
div
>
</
div
>
</
div
>
{
model
}
{
model
}
<
Route
path=
{
`${match.url}/wechat-user-audit`
}
render=
{
()
=>
{
return
<
WechatUserAudit
/>;
}
}
/>
</
div
>
</
div
>
);
);
}
}
...
...
src/modules/college-manage/WechatUserAudit/WechatUserAudit.jsx
0 → 100644
View file @
30007480
import
React
,
{
useState
,
useEffect
}
from
'react'
;
import
Breadcrumbs
from
'@/components/Breadcrumbs'
;
import
WechatUserAuditFilter
from
'./WechatUserAuditFilter'
;
import
WechatUserAuditOpt
from
'./WechatUserAuditOpt'
import
WechatUserAuditList
from
'./WechatUserAuditList'
;
import
StoreService
from
"@/domains/store-domain/storeService"
;
import
User
from
'@/common/js/user'
;
import
'./WechatUserAudit.less'
;
const
WechatUserAudit
=
function
()
{
const
[
listData
,
setListData
]
=
useState
([]);
const
[
totalCount
,
setTotalCount
]
=
useState
(
0
);
const
[
listCount
,
setListCount
]
=
useState
({
"allCnt"
:
0
,
"passedCnt"
:
0
,
"rejectedCnt"
:
0
,
"waitCnt"
:
0
});
const
[
query
,
setQuery
]
=
useState
({
current
:
1
,
size
:
10
,
applyStatus
:
'WAIT'
//PASSED, WAIT, REJECTED
});
useEffect
(()
=>
{
//列表获取
function
handleFetchAuditList
(
_query
)
{
const
params
=
{
...
query
,
...
_query
,
storeId
:
User
.
getStoreId
(),
};
StoreService
.
getCustomerAuditList
(
params
).
then
((
res
)
=>
{
const
{
result
:
{
records
=
[],
total
},
}
=
res
;
setListData
(
records
);
setTotalCount
(
total
);
});
}
//列表获取
function
handleFetchAuditListCount
(
_query
)
{
const
params
=
{
storeId
:
User
.
getStoreId
(),
};
StoreService
.
getCustomerAuditListCount
(
params
).
then
((
res
)
=>
{
const
{
result
,
}
=
res
;
setListCount
(
result
)
});
}
handleFetchAuditList
();
handleFetchAuditListCount
();
},
[
query
]);
//搜索条件改变
function
queryChange
(
_query
)
{
if
(
_query
.
realName
){
_query
.
nickName
=
_query
.
realName
}
const
params
=
{
...
query
,
...
_query
,
};
console
.
log
(
'params====>'
,
params
)
setQuery
(
params
);
}
return
(
<
div
className=
'page wechat-user-audit'
>
<
Breadcrumbs
navList=
'学员审核列表'
/>
<
div
className=
'box'
>
<
WechatUserAuditFilter
onChange=
{
queryChange
}
/>
<
WechatUserAuditOpt
onChange
=
{
queryChange
}
listCount=
{
listCount
}
defaultType=
{
query
.
applyStatus
}
/>
<
WechatUserAuditList
listData=
{
listData
}
query=
{
query
}
totalCount=
{
totalCount
}
onChange=
{
queryChange
}
/>
</
div
>
</
div
>
);
};
export
default
WechatUserAudit
;
src/modules/college-manage/WechatUserAudit/WechatUserAudit.less
0 → 100644
View file @
30007480
.wechat-user-audit{
}
\ No newline at end of file
src/modules/college-manage/WechatUserAudit/WechatUserAuditFilter.jsx
0 → 100644
View file @
30007480
/*
* @Author: 庞国铭
* @Description: 学员审核列表 筛选
*/
import
React
,
{
useState
}
from
'react'
;
import
{
Row
,
Input
,
Tooltip
}
from
'antd'
;
import
RangePicker
from
'@/modules/common/DateRangePicker'
;
import
moment
from
'moment'
;
import
'./WechatUserAuditFilter.less'
;
const
{
Search
}
=
Input
;
const
defaultQuery
=
{
realName
:
null
,
startDate
:
null
,
endDate
:
null
,
nickName
:
null
};
const
WechatUserAuditFilter
=
function
(
props
)
{
const
{
onChange
=
()
=>
{}
}
=
props
;
const
[
query
,
setQuery
]
=
useState
(
defaultQuery
);
// 改变搜索条件
function
handleChangeQuery
(
field
,
value
)
{
let
_query
=
{
...
query
,
[
field
]:
value
,
current
:
1
,
};
setQuery
(
_query
);
onChange
(
_query
);
}
//日期选择
function
handleChangeDates
(
dates
)
{
let
_query
=
{
...
query
,
current
:
1
,
};
if
(
_
.
isEmpty
(
dates
))
{
delete
_query
.
startDate
;
delete
_query
.
endDate
;
}
else
{
_query
.
startDate
=
dates
[
0
]?.
startOf
(
'day'
).
valueOf
();
_query
.
endDate
=
dates
[
1
]?.
endOf
(
'day'
).
valueOf
();
}
setQuery
(
_query
);
onChange
(
_query
);
}
//重置
function
handleReset
()
{
setQuery
({
...
defaultQuery
,
current
:
1
,
});
onChange
({
...
defaultQuery
,
current
:
1
,
});
}
return
(
<
div
className=
'wechat-user-audit-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=
{
query
.
realName
}
placeholder=
'搜索用户'
onChange=
{
(
e
)
=>
{
handleChangeQuery
(
'realName'
,
e
.
target
.
value
);
}
}
onSearch=
{
()
=>
{
onChange
(
query
.
current
);
}
}
style=
{
{
width
:
'calc(100% - 81px)'
}
}
className=
'search-input'
enterButton=
{
<
span
className=
'icon iconfont'
>

</
span
>
}
/>
</
div
>
<
div
className=
'search-condition__item'
>
<
span
className=
'search-date'
>
申请时间:
</
span
>
<
RangePicker
id=
'course_date_picker'
allowClear=
{
false
}
value=
{
query
.
startDate
?
[
moment
(
query
.
startDate
),
moment
(
query
.
endDate
)]
:
null
}
format=
{
'YYYY-MM-DD'
}
onChange=
{
(
dates
)
=>
{
handleChangeDates
(
dates
);
}
}
style=
{
{
width
:
'calc(100% - 81px)'
}
}
/>
</
div
>
</
div
>
<
div
className=
'reset-fold-area'
>
<
Tooltip
title=
'清空筛选'
>
<
span
className=
'resetBtn iconfont icon'
onClick=
{
handleReset
}
>

</
span
>
</
Tooltip
>
</
div
>
</
Row
>
</
div
>
);
};
export
default
WechatUserAuditFilter
;
src/modules/college-manage/WechatUserAudit/WechatUserAuditFilter.less
0 → 100644
View file @
30007480
.wechat-user-audit-filter{
position: relative;
.ant-input-search-button{
border-left:none;
}
.search-condition {
width: calc(100% - 80px);
display: flex;
align-items: center;
flex-wrap: wrap;
&__item {
width: 30%;
margin-right: 3%;
margin-bottom: 12px;
.search-name{
width: 81px;
vertical-align: middle;
display:inline-block;
height:32px;
line-height:32px;
}
}
}
.reset-fold-area {
position: absolute;
right: 12px;
}
.resetBtn {
color: #999999;
font-size: 18px;
margin-right: 8px;
}
.fold-btn {
font-size: 14px;
color: #666666;
line-height: 20px;
.fold-icon {
font-size: 12px;
margin-left:4px;
}
}
}
.data-icon {
cursor: pointer;
}
src/modules/college-manage/WechatUserAudit/WechatUserAuditList.jsx
0 → 100644
View file @
30007480
import
React
from
'react'
;
import
{
message
,
Badge
}
from
'antd'
;
import
{
PageControl
,
XMTable
}
from
'@/components'
;
import
WWOpenDataCom
from
'@/components/WWOpenDataCom'
;
import
'./WechatUserAuditList.less'
;
import
StoreService
from
'@/domains/store-domain/storeService'
;
import
User
from
'@/common/js/user'
;
function
WechatUserAuditList
(
props
)
{
const
{
listData
,
totalCount
,
query
,
onChange
=
()
=>
{}
}
=
props
;
function
parseColumns
()
{
const
columns
=
[
{
title
:
'微信名称'
,
key
:
'nickName'
,
dataIndex
:
'nickName'
,
width
:
'12%'
,
fixed
:
'left'
,
render
:
(
val
,
record
)
=>
{
return
<
div
className=
'wechat-user-audit-name'
>
{
val
}
</
div
>;
},
},
{
title
:
'真实姓名'
,
key
:
'realName'
,
dataIndex
:
'realName'
,
width
:
'12%'
,
render
:
(
val
)
=>
{
return
<
div
className=
'create-name'
>
{
val
}
</
div
>;
},
},
{
title
:
'申请时间'
,
width
:
'12.5%'
,
key
:
'applyDate'
,
dataIndex
:
'applyDate'
,
render
:
(
val
)
=>
{
return
<
span
style=
{
{
whiteSpace
:
'nowrap'
}
}
>
{
window
.
formatDate
(
'YYYY-MM-DD H:i'
,
val
)
}
</
span
>;
},
},
{
title
:
'审批状态'
,
width
:
'10%'
,
key
:
'applyStatus'
,
dataIndex
:
'applyStatus'
,
render
:
(
val
)
=>
{
return
(
<
div
className=
'valid-state-icon'
>
<
Choose
>
<
When
condition=
{
val
===
'PASSED'
}
>
<
Badge
color=
'#0ACCA4'
text=
'已通过'
/>
</
When
>
<
When
condition=
{
val
===
'REJECTED'
}
>
<
Badge
color=
'#EC4B35'
text=
'已拒绝'
/>
</
When
>
<
Otherwise
>
<
Badge
color=
'#FFB714'
text=
'待审核'
/>
</
Otherwise
>
</
Choose
>
</
div
>
);
},
},
{
title
:
'审核人'
,
width
:
'10%'
,
key
:
'reviewer'
,
dataIndex
:
'reviewer'
,
render
:
(
val
)
=>
{
return
<
div
>
<
WWOpenDataCom
type=
"userName"
openid=
{
val
}
/>
</
div
>;
},
},
{
title
:
'操作'
,
key
:
'operate'
,
dataIndex
:
'operate'
,
fixed
:
'right'
,
width
:
'14.5%'
,
render
:
(
val
,
record
)
=>
{
return
(
<
Choose
>
<
When
condition=
{
record
.
applyStatus
===
'WAIT'
}
>
<
div
className=
'operate'
>
<
div
className=
'operate__item'
onClick=
{
()
=>
audit
(
record
,
true
)
}
>
通过
</
div
>
<
span
className=
'operate__item split'
>
|
</
span
>
<
div
className=
'operate__item'
onClick=
{
()
=>
audit
(
record
,
false
)
}
>
拒绝
</
div
>
</
div
>
</
When
>
<
Otherwise
>
<
div
className=
'operate'
>
<
div
></
div
>
</
div
>
</
Otherwise
>
</
Choose
>
);
},
},
];
return
columns
;
}
function
audit
(
record
,
isTrue
)
{
const
{
id
}
=
record
;
const
params
=
{
applyCustomerId
:
id
,
audit
:
isTrue
,
operatorId
:
User
.
getStoreUserId
(),
storeId
:
User
.
getStoreId
(),
};
StoreService
.
auditOperation
(
params
).
then
((
res
)
=>
{
if
(
res
.
success
)
{
message
.
success
(
'操作成功'
);
onChange
(
query
)
}
});
}
function
onShowSizeChange
(
current
,
size
)
{
if
(
current
===
size
)
{
return
;
}
let
_query
=
query
;
_query
.
size
=
size
;
onChange
(
_query
);
}
return
(
<
div
className=
'wechat-user-audit-list'
>
<
XMTable
rowKey=
{
(
record
)
=>
record
.
id
}
showSorterTooltip=
{
false
}
dataSource=
{
listData
}
columns=
{
parseColumns
()
}
pagination=
{
false
}
bordered
size=
'middle'
scroll=
{
{
x
:
1400
}
}
className=
'wechat-user-audit-list-table'
renderEmpty=
{
{
description
:
<
span
style=
{
{
display
:
'block'
,
paddingBottom
:
24
}
}
>
暂无数据
</
span
>,
}
}
/>
<
div
className=
'box-footer'
>
<
PageControl
current=
{
query
.
current
-
1
}
pageSize=
{
query
.
size
}
total=
{
totalCount
}
toPage=
{
(
page
)
=>
{
const
_query
=
{
...
query
,
current
:
page
+
1
};
onChange
(
_query
);
}
}
onShowSizeChange=
{
onShowSizeChange
}
/>
</
div
>
</
div
>
);
}
export
default
WechatUserAuditList
;
src/modules/college-manage/WechatUserAudit/WechatUserAuditList.less
0 → 100644
View file @
30007480
.wechat-user-audit-list {
margin-top: 12px;
.course-number {
margin-right: 45px;
}
.wechat-user-audit-list-table {
thead.ant-table-thead {
tr {
th {
padding: 10px 12px;
}
}
}
tbody {
tr {
td.ant-table-cell {
padding: 16px 12px;
color: #333;
}
&:nth-child(even) {
background: transparent;
td {
background: #fff;
}
}
&:nth-child(odd) {
background: #fafafa;
td {
background: #fafafa;
}
}
&:hover {
td {
background: #f3f6fa;
}
}
}
}
}
.operate-text {
color: #2966ff;
cursor: pointer;
}
.operate {
display: flex;
&__item {
color: #2966ff;
cursor: pointer;
&.split {
margin: 0 8px;
color: #bfbfbf;
}
}
}
.join-number {
text-align: right;
margin-right: 12px;
}
.more-operate {
line-height: 20px;
}
.valid-state-icon{
display: flex;
align-items: center;
.ant-badge{
transform: translate(0,0) scale(1) !important;
}
}
}
\ No newline at end of file
src/modules/college-manage/WechatUserAudit/WechatUserAuditOpt.jsx
0 → 100644
View file @
30007480
import
React
from
'react'
;
import
{
Row
,
Radio
}
from
'antd'
;
const
WechatUserAuditOpt
=
function
(
props
)
{
const
{
onChange
=
()
=>
{},
listCount
=
{},
defaultType
=
''
}
=
props
;
const
{
allCnt
=
0
,
passedCnt
=
0
,
rejectedCnt
=
0
,
waitCnt
=
0
}
=
listCount
;
return
(
<
div
className=
'wechat-user-audit-filter'
>
<
Row
type=
'flex'
justify=
'end'
align=
'top'
>
<
Radio
.
Group
onChange=
{
(
e
)
=>
onChange
({
applyStatus
:
e
.
target
.
value
===
''
?
null
:
e
.
target
.
value
})
}
defaultValue=
{
defaultType
}
>
<
Radio
.
Button
value=
''
>
{
`全部(${allCnt})`
}
</
Radio
.
Button
>
<
Radio
.
Button
value=
'WAIT'
>
{
`待审核(${waitCnt})`
}
</
Radio
.
Button
>
<
Radio
.
Button
value=
'PASSED'
>
{
`已通过(${passedCnt})`
}
</
Radio
.
Button
>
<
Radio
.
Button
value=
'REJECTED'
>
{
`已拒绝(${rejectedCnt})`
}
</
Radio
.
Button
>
</
Radio
.
Group
>
</
Row
>
</
div
>
);
};
export
default
WechatUserAuditOpt
;
src/modules/college-manage/components/DepartMentTabCon.jsx
View file @
30007480
...
@@ -124,7 +124,7 @@ function DepartMentTabCon(props) {
...
@@ -124,7 +124,7 @@ function DepartMentTabCon(props) {
return
(
return
(
<
div
className=
"operate"
>
<
div
className=
"operate"
>
{
props
.
currentTab
===
'departMentTab'
?
{
props
.
currentTab
===
'departMentTab'
?
<
span
>
-
</
span
>
<
div
className=
"operate__item"
onClick=
{
()
=>
delUser
(
'single'
,
item
.
userId
)
}
>
删除
</
div
>
:
:
(
selectDep
.
depLevel
>
0
?
(
selectDep
.
depLevel
>
0
?
<
div
className=
"operate__item"
onClick=
{
()
=>
delUser
(
'single'
,
item
.
userId
)
}
>
移出
</
div
>
<
div
className=
"operate__item"
onClick=
{
()
=>
delUser
(
'single'
,
item
.
userId
)
}
>
移出
</
div
>
...
@@ -351,9 +351,9 @@ function DepartMentTabCon(props) {
...
@@ -351,9 +351,9 @@ function DepartMentTabCon(props) {
添加学员
添加学员
</
Button
>
</
Button
>
}
}
{
(
props
.
currentTab
===
"postGrouptab"
||
props
.
currentTab
===
"customGroupTab"
)
&&
<
Button
className=
"del-user-btn"
onClick=
{
()
=>
delUser
(
'multiple'
)
}
>
删除学员
</
Button
>
<
Button
className=
"del-user-btn"
onClick=
{
()
=>
delUser
(
'multiple'
)
}
>
删除学员
</
Button
>
}
{
selectDep
.
depId
!==
'10000'
?
{
selectDep
.
depId
!==
'10000'
?
<>
<>
<
Button
className=
"update-user-btn"
onClick=
{
()
=>
{
updateListData
()}
}
>
更新列表数据
</
Button
>
<
Button
className=
"update-user-btn"
onClick=
{
()
=>
{
updateListData
()}
}
>
更新列表数据
</
Button
>
...
...
src/modules/course-manage/components/GraphicsEditor.jsx
View file @
30007480
...
@@ -155,6 +155,7 @@ class GraphicsEditor extends React.Component {
...
@@ -155,6 +155,7 @@ class GraphicsEditor extends React.Component {
message
.
warning
(
`内容过长,不能超过
${
maxLimit
}
字`
);
message
.
warning
(
`内容过长,不能超过
${
maxLimit
}
字`
);
}
}
Bus
.
trigger
(
'editorLimit'
,
textLength
,
editorType
);
Bus
.
trigger
(
'editorLimit'
,
textLength
,
editorType
);
console
.
log
(
onChange
,
html
,
this
.
state
.
textLength
)
onChange
(
html
,
this
.
state
.
textLength
);
onChange
(
html
,
this
.
state
.
textLength
);
});
});
};
};
...
...
src/modules/root/CreateCollege.jsx
View file @
30007480
import
React
from
'react'
;
import
React
from
'react'
;
import
{
Input
,
Button
,
Modal
,
message
,
Form
}
from
'antd'
;
import
{
Input
,
Button
,
Switch
,
message
,
Form
,
Tooltip
}
from
'antd'
;
import
Upload
from
'@/core/upload'
;
import
Upload
from
'@/core/upload'
;
import
Service
from
"@/common/js/service"
;
import
Service
from
"@/common/js/service"
;
import
BaseService
from
"@/domains/basic-domain/baseService"
;
import
BaseService
from
"@/domains/basic-domain/baseService"
;
import
User
from
"@/common/js/user"
;
import
User
from
"@/common/js/user"
;
import
Breadcrumbs
from
"@/components/Breadcrumbs"
;
import
Breadcrumbs
from
"@/components/Breadcrumbs"
;
import
ImgClipModal
from
'@/components/ImgClipModal'
import
ImgClipModal
from
'@/components/ImgClipModal'
import
{
debounce
}
from
'underscore'
import
{
brandLogo
}
from
'@/domains/brand/constants'
import
{
brandLogo
}
from
'@/domains/brand/constants'
import
'./CreateCollege.less'
;
import
'./CreateCollege.less'
;
let
cutFlag
=
false
;
export
default
class
CreateCollege
extends
React
.
Component
{
export
default
class
CreateCollege
extends
React
.
Component
{
constructor
(
props
)
{
constructor
(
props
)
{
...
@@ -21,6 +19,7 @@ export default class CreateCollege extends React.Component {
...
@@ -21,6 +19,7 @@ export default class CreateCollege extends React.Component {
name
:
''
,
name
:
''
,
enterpriseId
:
User
.
getEnterpriseId
(),
enterpriseId
:
User
.
getEnterpriseId
(),
imageFile
:
null
,
// 需要被截取的图片
imageFile
:
null
,
// 需要被截取的图片
auditSwitch
:
'OPEN'
,
};
};
this
.
loginInputRef
=
React
.
createRef
()
this
.
loginInputRef
=
React
.
createRef
()
}
}
...
@@ -71,14 +70,14 @@ export default class CreateCollege extends React.Component {
...
@@ -71,14 +70,14 @@ export default class CreateCollege extends React.Component {
};
};
updateCover
=
()
=>
{
updateCover
=
()
=>
{
const
{
coverClicpPath
,
coverId
}
=
this
.
state
const
{
coverClicpPath
}
=
this
.
state
this
.
setState
({
this
.
setState
({
logo
:
coverClicpPath
logo
:
coverClicpPath
})
})
}
}
submit
=
()
=>
{
submit
=
()
=>
{
const
{
logo
,
collegeName
,
enterpriseId
}
=
this
.
state
;
const
{
logo
,
collegeName
,
enterpriseId
,
auditSwitch
}
=
this
.
state
;
if
(
!
collegeName
)
{
if
(
!
collegeName
)
{
this
.
setState
({
showError
:
true
})
this
.
setState
({
showError
:
true
})
}
else
{
}
else
{
...
@@ -87,6 +86,7 @@ export default class CreateCollege extends React.Component {
...
@@ -87,6 +86,7 @@ export default class CreateCollege extends React.Component {
userId
:
User
.
getUserId
(),
userId
:
User
.
getUserId
(),
logo
,
logo
,
storeName
:
collegeName
,
storeName
:
collegeName
,
auditSwitch
}
}
Service
.
Hades
(
'public/customerHades/createStore'
,
params
).
then
((
res
)
=>
{
Service
.
Hades
(
'public/customerHades/createStore'
,
params
).
then
((
res
)
=>
{
if
(
res
.
success
)
{
if
(
res
.
success
)
{
...
@@ -96,17 +96,21 @@ export default class CreateCollege extends React.Component {
...
@@ -96,17 +96,21 @@ export default class CreateCollege extends React.Component {
}
}
}
}
onChangeFiledValue
=
(
filed
,
value
)
=>
{
this
.
setState
({
[
filed
]:
value
,
});
};
render
()
{
render
()
{
const
{
const
{
avatar
,
name
,
collegeName
,
collegeName
,
logo
,
logo
,
visible
,
visible
,
hasImgReady
,
cutImageBlob
,
showError
,
showError
,
imageFile
imageFile
,
auditSwitch
}
=
this
.
state
;
}
=
this
.
state
;
return
(
return
(
<
div
className=
"college-manage-page"
>
<
div
className=
"college-manage-page"
>
...
@@ -125,7 +129,7 @@ export default class CreateCollege extends React.Component {
...
@@ -125,7 +129,7 @@ export default class CreateCollege extends React.Component {
</
div
>
</
div
>
<
div
className=
"create-box"
>
<
div
className=
"create-box"
>
<
div
className=
"image-box"
>
<
div
className=
"image-box"
>
<
img
className=
"image"
src=
{
logo
}
/>
<
img
className=
"image"
src=
{
logo
}
alt=
''
/>
<
div
className=
"image-mask"
>
<
div
className=
"image-mask"
>
<
span
<
span
className=
"icon iconfont"
className=
"icon iconfont"
...
@@ -155,11 +159,29 @@ export default class CreateCollege extends React.Component {
...
@@ -155,11 +159,29 @@ export default class CreateCollege extends React.Component {
}
}
}
}
></
Input
>
></
Input
>
</
Form
.
Item
>
</
Form
.
Item
>
<
Form
.
Item
label=
{
<
div
className=
'label-box'
>
学员审核
<
Tooltip
title=
'学院同时支持企微和微信用户加入学院学习。学员审核开启后,微信用户需要先提出申请,学院管理员审核通过后才能成为学院的学员,保证仅可信的微信用户才能加入学院。'
placement=
'top'
arrowPointAtCenter
>
<
span
className=
'icon iconfont icon-tip'
>

</
span
>
</
Tooltip
>
</
div
>
}
name=
'auditSwitch'
rules=
{
[{
required
:
true
}]
}
>
<
div
className=
'switch-box'
>
<
Switch
checked=
{
auditSwitch
===
'OPEN'
}
onChange=
{
(
e
)
=>
this
.
onChangeFiledValue
(
'auditSwitch'
,
e
?
'OPEN'
:
'CLOSE'
)
}
/>
<
Choose
>
<
When
condition=
{
auditSwitch
===
'OPEN'
}
>
<
div
className=
'switch-desc'
>
已开启,成为学院学员需要审核
</
div
>
</
When
>
<
Otherwise
>
<
div
className=
'switch-desc'
>
已关闭,成为学院学员不需要审核
</
div
>
</
Otherwise
>
</
Choose
>
</
div
>
</
Form
.
Item
>
</
Form
>
</
Form
>
<
Button
<
Button
className=
"button"
className=
"button"
type=
"primary"
type=
"primary"
onClick=
{
_
.
debounce
(()
=>
this
.
submit
(),
3000
,
{
onClick=
{
debounce
(()
=>
this
.
submit
(),
3000
,
{
leading
:
true
,
leading
:
true
,
trailing
:
false
trailing
:
false
})
}
})
}
...
...
src/modules/root/CreateCollege.less
View file @
30007480
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
.create-box {
.create-box {
padding-top: 108px;
padding-top: 108px;
margin: 0 auto;
margin: 0 auto;
width: 3
5
0px;
width: 3
8
0px;
.image-box {
.image-box {
position: relative;
position: relative;
display: block;
display: block;
...
@@ -45,6 +45,27 @@
...
@@ -45,6 +45,27 @@
}
}
}
}
}
}
.label-box{
display: flex;
align-content: center;
.icon{
color:#BFBFBF;
margin: 0 2px;
}
}
.switch-box{
display: flex;
align-items: center;
.switch-desc{
color: #999;
font-size: 14px;
margin: 0 8px;
}
.switch-prew-link{
color: #2966FF;
font-size: 14px;
}
}
.tip {
.tip {
display: block;
display: block;
color: #999999;
color: #999999;
...
@@ -52,10 +73,10 @@
...
@@ -52,10 +73,10 @@
margin-bottom: 24px;
margin-bottom: 24px;
}
}
.input {
.input {
width: 3
5
0px;
width: 3
8
0px;
}
}
.button {
.button {
width: 3
5
0px;
width: 3
8
0px;
margin-top: 36px;
margin-top: 36px;
height: 32px !important;
height: 32px !important;
}
}
...
...
src/modules/teach-tool/examination-manager/AddExam.tsx
View file @
30007480
import
React
,
{
useState
,
useRef
,
useEffect
,
useContext
}
from
'react'
import
React
,
{
useState
,
useRef
,
useEffect
}
from
'react'
import
Breadcrumbs
from
"@/components/Breadcrumbs"
;
import
Breadcrumbs
from
"@/components/Breadcrumbs"
;
import
{
Form
,
Alert
,
Input
,
Button
,
InputNumber
,
DatePicker
,
Switch
,
Radio
,
message
,
Modal
,
Tooltip
}
from
'antd'
;
import
{
Form
,
Input
,
Button
,
InputNumber
,
DatePicker
,
Switch
,
Radio
,
message
,
Modal
,
Tooltip
}
from
'antd'
;
import
{
Route
,
withRouter
}
from
'react-router-dom'
;
import
{
withRouter
}
from
'react-router-dom'
;
import
User
from
"@/common/js/user"
;
import
User
from
"@/common/js/user"
;
import
moment
from
'moment'
import
moment
from
'moment'
import
Service
from
"@/common/js/service"
;
import
Service
from
"@/common/js/service"
;
...
...
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