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
c80863f2
Commit
c80863f2
authored
Sep 03, 2021
by
wufan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix:修复角色管理样式问题
parent
963e3708
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
200 additions
and
234 deletions
+200
-234
src/modules/college-manage/EmployeeManage.tsx
+200
-234
No files found.
src/modules/college-manage/EmployeeManage.tsx
View file @
c80863f2
...
...
@@ -5,21 +5,21 @@
* @Last Modified time: 2021-04-10 14:36:43
* 学院管理-员工管理
*/
import
React
,
{
useEffect
,
useState
}
from
'react'
;
import
{
withRouter
}
from
'react-router-dom'
;
import
_
from
'underscore'
;
import
{
CheckBox
,
PageControl
}
from
'@/components'
;
import
{
Button
,
Table
,
Modal
,
message
,
Input
,
Tooltip
}
from
'antd'
;
import
React
,
{
useEffect
,
useState
}
from
"react"
;
import
{
withRouter
}
from
"react-router-dom"
;
import
_
from
"underscore"
;
import
{
CheckBox
,
PageControl
}
from
"@/components"
;
import
{
Button
,
Table
,
Modal
,
message
,
Input
,
Tooltip
}
from
"antd"
;
import
{
XMTable
}
from
'@/components'
;
import
college
from
'@/common/lottie/college.json'
;
import
StoreService
from
'@/domains/store-domain/storeService'
;
import
EmployeeAddOrEditModal
from
'../store-manage/EmployeeAddOrEditModal'
;
import
User
from
'@/common/js/user'
;
import
LimitTip
from
'./LimitTip'
;
import
StoreService
from
"@/domains/store-domain/storeService"
;
import
EmployeeAddOrEditModal
from
"../store-manage/EmployeeAddOrEditModal"
;
import
User
from
"@/common/js/user"
;
import
LimitTip
from
"./LimitTip"
;
import
WWOpenDataCom
from
'@/components/WWOpenDataCom'
;
import
'./EmployeeManage.less'
;
import
NewChooseMembersModal
from
'./modal/NewChooseMembersModal'
;
import
"./EmployeeManage.less"
;
import
NewChooseMembersModal
from
"./modal/NewChooseMembersModal"
;
const
{
confirm
}
=
Modal
;
const
{
Search
}
=
Input
;
...
...
@@ -33,7 +33,7 @@ interface RecordTypes {
phone
:
string
;
avatar
?:
string
;
weChatAccount
?:
string
;
depNameList
:
any
;
depNameList
:
any
}
interface
RoleItemType
{
...
...
@@ -58,7 +58,7 @@ interface ChoosedItemType {
avatar
?:
string
;
storeUserId
?:
string
;
weChatAccount
?:
string
;
depNameList
?:
any
;
depNameList
?:
any
;
}
function
EmployeeManage
()
{
...
...
@@ -66,25 +66,25 @@ function EmployeeManage() {
const
[
query
,
setQuery
]
=
useState
<
QueryType
>
({
current
:
0
,
size
:
10
,
nickName
:
''
,
phone
:
''
,
nickName
:
""
,
phone
:
""
,
roleCodes
:
[],
});
const
[
total
,
setTotal
]
=
useState
(
0
);
const
[
realTotal
,
setRealTotal
]
=
useState
(
0
)
;
const
[
realTotal
,
setRealTotal
]
=
useState
(
0
)
const
[
model
,
setModel
]
=
useState
<
React
.
ReactNode
>
(
null
);
const
[
employeeModal
,
setEmployeeModal
]
=
useState
(
false
);
const
[
choosedItem
,
setChooseItem
]
=
useState
<
ChoosedItemType
>
({
nickName
:
''
,
phone
:
''
,
nickName
:
""
,
phone
:
""
,
role
:
[],
avatar
:
''
,
avatar
:
""
,
});
const
[
roleIds
,
setRoleIds
]
=
useState
<
Array
<
RoleItemType
>>
([]);
const
storeId
=
User
.
getStoreId
();
const
StoreType
=
User
.
getStoreType
();
const
isWorkWechat
=
!!
(
StoreType
===
'WE_CHAT_STORE'
);
const
isWorkWechat
=
!!
(
StoreType
===
"WE_CHAT_STORE"
);
useEffect
(()
=>
{
if
(
!
User
.
getEnterpriseId
())
{
...
...
@@ -94,14 +94,14 @@ function EmployeeManage() {
const
_query
=
{
current
:
0
,
size
:
10
,
nickName
:
''
,
phone
:
''
,
nickName
:
""
,
phone
:
""
,
roleCodes
:
[],
}
;
}
StoreService
.
getEmployeeList
(
_query
).
then
((
res
:
any
)
=>
{
setRealTotal
(
res
.
result
.
total
);
});
},
[])
;
},
[])
useEffect
(()
=>
{
getEmployeeList
();
...
...
@@ -130,7 +130,7 @@ function EmployeeManage() {
const
_query
=
{
...
query
};
let
_data
=
_
.
filter
(
data
,
(
_item
)
=>
{
return
_item
.
roleCode
!==
'StoreManager'
;
return
_item
.
roleCode
!==
"StoreManager"
;
});
setRoleIds
(
_data
);
...
...
@@ -145,21 +145,29 @@ function EmployeeManage() {
fixed
:
'left'
,
render
:
(
val
:
string
,
record
:
RecordTypes
)
=>
{
return
(
<
div
className=
'employee-info'
>
{
isWorkWechat
&&
<
img
src=
{
record
.
avatar
||
'https://image.xiaomaiketang.com/xm/rJeQaZxtc7.png'
}
alt=
''
/>
}
<
div
className=
"employee-info"
>
{
isWorkWechat
&&
(
<
img
src=
{
record
.
avatar
||
"https://image.xiaomaiketang.com/xm/rJeQaZxtc7.png"
}
alt=
""
/>
)
}
{
/* <span className="title">{val}</span> */
}
<
span
className=
'title'
>
<
WWOpenDataCom
type=
'userName'
openid=
{
val
}
/>
<
span
className=
"title"
>
<
WWOpenDataCom
type=
"userName"
openid=
{
val
}
/>
</
span
>
</
div
>
);
},
},
{
title
:
'手机号'
,
dataIndex
:
'phone'
,
key
:
'phone'
,
title
:
"手机号"
,
dataIndex
:
"phone"
,
key
:
"phone"
,
render
:
(
val
:
string
)
=>
{
return
<
div
>
{
val
||
'-'
}
</
div
>;
},
...
...
@@ -172,8 +180,8 @@ function EmployeeManage() {
if
(
!
record
.
depNameList
){
return
<
span
>
-
</
span
>
}
if
(
record
.
depNameList
.
length
===
0
)
{
return
<
span
>
-
</
span
>
;
if
(
record
.
depNameList
.
length
===
0
)
{
return
<
span
>
-
</
span
>
}
return
<
Tooltip
title=
{
<
div
>
{
handleDepName
(
record
.
depNameList
)
}
</
div
>
}
placement=
'top'
arrowPointAtCenter
><
div
className=
"post-name"
>
{
record
.
depNameList
.
map
((
item
:
any
,
index
:
any
)
=>
{
return
<
span
><
WWOpenDataCom
type=
"departmentName"
openid=
{
item
}
/>
{
index
<
(
record
.
depNameList
.
length
-
1
)?
';'
:
''
}
</
span
>
...
...
@@ -187,7 +195,7 @@ function EmployeeManage() {
dataIndex
:
"role"
,
key
:
"role"
,
render
:
(
val
:
string
)
=>
{
return
<
div
>
{
val
.
split
(
','
).
join
(
'、'
)
}
</
div
>;
return
<
div
>
{
val
.
split
(
","
).
join
(
"、"
)
}
</
div
>;
},
},
{
...
...
@@ -195,19 +203,34 @@ function EmployeeManage() {
dataIndex
:
"operation"
,
fixed
:
'right'
,
render
:
(
val
:
string
,
record
:
RecordTypes
)
=>
{
return
record
.
role
===
'学院管理员'
||
record
.
userId
===
User
.
getUserId
()
?
(
<
div
className=
'no-operate'
>
-
</
div
>
return
record
.
role
===
"学院管理员"
||
record
.
userId
===
User
.
getUserId
()
?
(
<
div
className=
"no-operate"
>
-
</
div
>
)
:
(
<
div
className=
'operation'
>
<
span
className=
'edit'
onClick=
{
()
=>
handleEditEmployee
(
record
)
}
>
编辑
</
span
>
<
span
className=
'divider-line'
>
{
' | '
}
</
span
>
<
div
className=
"operation"
>
{
!
record
.
depNameList
&&
<
span
className=
"edit edit-disable"
>
编辑
</
span
>
}
{
record
.
depNameList
&&
(
record
.
depNameList
.
length
>
0
?
<
span
className=
"edit"
onClick=
{
()
=>
handleEditEmployee
(
record
)
}
>
编辑
</
span
>
:
<
span
className=
"edit edit-disable"
>
编辑
</
span
>
)
}
<
span
className=
"divider-line"
>
{
" | "
}
</
span
>
<
span
className=
'delete'
onClick=
{
()
=>
{
handleDeleteWorkWechatEmployeeConfirm
(
record
);
}
}
>
className=
"delete"
onClick=
{
()
=>
{
handleDeleteWorkWechatEmployeeConfirm
(
record
)
}
}
>
删除
</
span
>
</
div
>
...
...
@@ -218,9 +241,9 @@ function EmployeeManage() {
if
(
isWorkWechat
&&
columns
)
{
const
item
=
{
title
:
'企业微信账号'
,
dataIndex
:
'weChatAccount'
,
key
:
'weChatAccount'
,
title
:
"企业微信账号"
,
dataIndex
:
"weChatAccount"
,
key
:
"weChatAccount"
,
render
:
(
val
:
string
)
=>
{
return
<
div
>
{
val
}
</
div
>;
},
...
...
@@ -230,19 +253,15 @@ function EmployeeManage() {
return
columns
;
}
function
handleDepName
(
depArray
:
any
):
any
{
const
depArrayDom
=
depArray
.
map
((
item
:
any
,
index
:
any
)
=>
{
return
(
<
span
>
<
WWOpenDataCom
type=
'departmentName'
openid=
{
item
}
/>
;
</
span
>
);
function
handleDepName
(
depArray
:
any
):
any
{
const
depArrayDom
=
depArray
.
map
((
item
:
any
,
index
:
any
)
=>
{
return
<
span
><
WWOpenDataCom
type=
"departmentName"
openid=
{
item
}
/>
;
</
span
>
});
return
depArrayDom
;
}
}
;
function
handleEditEmployee
(
record
:
RecordTypes
)
{
const
{
nickName
,
phone
,
roleCodes
,
avatar
,
id
,
weChatAccount
,
depNameList
}
=
record
;
const
{
nickName
,
phone
,
roleCodes
,
avatar
,
id
,
weChatAccount
,
depNameList
}
=
record
;
const
_choosesItem
=
{
nickName
:
nickName
,
phone
:
phone
,
...
...
@@ -250,7 +269,7 @@ function EmployeeManage() {
avatar
:
avatar
,
storeUserId
:
id
,
weChatAccount
,
depNameList
:
depNameList
,
depNameList
:
depNameList
};
setChooseItem
(
_choosesItem
);
const
model
:
React
.
ReactNode
=
(
...
...
@@ -260,13 +279,13 @@ function EmployeeManage() {
setModel
(
null
);
getEmployeeList
();
setChooseItem
({
nickName
:
''
,
phone
:
''
,
nickName
:
""
,
phone
:
""
,
role
:
[],
avatar
:
''
,
storeUserId
:
''
,
weChatAccount
:
''
,
depNameList
:
[],
avatar
:
""
,
storeUserId
:
""
,
weChatAccount
:
""
,
depNameList
:
[]
});
}
}
isWorkWechat=
{
isWorkWechat
}
...
...
@@ -277,12 +296,14 @@ function EmployeeManage() {
function
handleDeleteWorkWechatEmployeeConfirm
(
record
:
RecordTypes
)
{
return
confirm
({
title
:
'你确定要删除此员工吗?'
,
content
:
'删除后数据无法恢复'
,
icon
:
<
span
className=
'icon iconfont default-confirm-icon'
>

</
span
>,
okText
:
'删除'
,
okType
:
'danger'
,
cancelText
:
'取消'
,
title
:
"你确定要删除此员工吗?"
,
content
:
"删除后数据无法恢复"
,
icon
:
(
<
span
className=
"icon iconfont default-confirm-icon"
>

</
span
>
),
okText
:
"删除"
,
okType
:
"danger"
,
cancelText
:
"取消"
,
onOk
:
()
=>
{
handleDeleteEmployee
(
record
.
id
);
},
...
...
@@ -295,21 +316,21 @@ function EmployeeManage() {
function
handleDeleteEmployee
(
storeUserId
:
string
)
{
StoreService
.
deleteEmployee
({
storeUserId
}).
then
((
res
:
any
)
=>
{
const
msg
=
isWorkWechat
?
'员工已删除'
:
'讲师已删除'
;
const
msg
=
isWorkWechat
?
"员工已删除"
:
"讲师已删除"
;
message
.
success
(
msg
);
getEmployeeList
();
});
}
function
updateListData
()
{
let
num
:
any
;
function
updateListData
(){
let
num
:
any
;
const
params
=
{
enterpriseId
:
User
.
getEnterpriseId
(),
storeId
:
User
.
getStoreId
(),
userType
:
'USER'
,
}
;
enterpriseId
:
User
.
getEnterpriseId
(),
storeId
:
User
.
getStoreId
(),
userType
:
'USER'
}
StoreService
.
getSyncCount
(
params
).
then
((
res
)
=>
{
num
=
res
.
result
;
if
(
num
<
3
)
{
if
(
num
<
3
)
{
return
confirm
({
title
:
"确定更新列表数据吗?"
,
content
:
<
span
>
员工数据来源企微通讯录,一天只能更新3次,今日还能更新
<
span
style=
{
{
color
:
'#2966FF'
}
}
>
{
3
-
num
}
</
span
>
次。
</
span
>,
...
...
@@ -319,10 +340,10 @@ function EmployeeManage() {
okText
:
"确定"
,
cancelText
:
"取消"
,
onOk
:
()
=>
{
confirmUpdateListData
()
;
confirmUpdateListData
()
},
});
}
else
{
}
else
{
Modal
.
warning
({
title
:
'提示'
,
okText
:
'我知道了'
,
...
...
@@ -335,104 +356,112 @@ function EmployeeManage() {
});
}
});
}
function
confirmUpdateListData
()
{
function
confirmUpdateListData
(){
const
params
=
{
enterpriseId
:
User
.
getEnterpriseId
(),
storeId
:
User
.
getStoreId
(),
userType
:
'USER'
,
}
;
enterpriseId
:
User
.
getEnterpriseId
(),
storeId
:
User
.
getStoreId
(),
userType
:
'USER'
}
StoreService
.
syncWorkWeChatDepartment
(
params
).
then
((
res
)
=>
{
getEmployeeList
();
message
.
success
(
'已更新'
);
});
}
return
(
<
div
className=
'page employee-manage-page'
>
<
div
className=
'content-header'
>
角色管理
</
div
>
<
div
className=
'box'
>
<
div
className=
'box-header'
>
<
div
style=
{
{
display
:
'flex'
,
alignItems
:
'center'
,
justifyContent
:
'flex-start'
,
padding
:
'0px 0 4px'
,
}
}
>
<
div
>
<
div
className=
"page employee-manage-page"
>
<
div
className=
"content-header"
>
角色管理
</
div
>
<
div
className=
"box"
>
<
div
className=
"box-header"
>
<
div
style=
{
{
display
:
"flex"
,
alignItems
:
"center"
,
justifyContent
:
"flex-start"
,
padding
:
"0px 0 4px"
,
}
}
>
<
div
>
搜索员工:
<
Search
style=
{
{
width
:
300
,
marginRight
:
40
,
}
}
placeholder=
{
isWorkWechat
?
'请输入员工昵称'
:
'搜索员工昵称/手机号'
}
onSearch=
{
(
value
)
=>
{
const
_query
=
{
...
query
};
// 企业微信用户只能搜索员工昵称
if
(
isWorkWechat
)
{
_query
.
nickName
=
value
;
_query
.
current
=
0
;
setQuery
(
_query
);
return
;
}
if
(
value
)
{
const
isPhone
=
(
value
||
''
).
match
(
/^
\d
+$/
);
const
name
=
isPhone
?
'phone'
:
'nickName'
;
const
otherName
=
isPhone
?
'nickName'
:
'phone'
;
_query
[
name
]
=
value
;
_query
[
otherName
]
=
''
;
_query
.
current
=
0
;
}
else
{
_query
.
nickName
=
''
;
_query
.
phone
=
''
;
_query
.
current
=
0
;
<
Search
style=
{
{
width
:
300
,
marginRight
:
40
,
}
}
placeholder=
{
isWorkWechat
?
"请输入员工昵称"
:
"搜索员工昵称/手机号"
}
setQuery
(
_query
);
}
}
enterButton=
{
<
span
className=
'icon iconfont'
>

</
span
>
}
/>
</
div
>
onSearch=
{
(
value
)
=>
{
const
_query
=
{
...
query
};
// 企业微信用户只能搜索员工昵称
if
(
isWorkWechat
)
{
_query
.
nickName
=
value
;
_query
.
current
=
0
;
setQuery
(
_query
);
return
;
}
<
div
>
角色:
{
_
.
map
(
roleIds
,
(
item
:
any
)
=>
{
return
(
<
CheckBox
key=
{
item
.
roleCode
}
text=
{
item
.
name
}
name=
{
item
.
roleCode
}
onChange=
{
(
e
:
any
)
=>
{
const
{
checked
,
name
}
=
e
.
target
;
const
_query
=
{
...
query
};
_query
.
roleCodes
=
[];
if
(
value
)
{
const
isPhone
=
(
value
||
""
).
match
(
/^
\d
+$/
);
const
name
=
isPhone
?
"phone"
:
"nickName"
;
const
otherName
=
isPhone
?
"nickName"
:
"phone"
;
_query
[
name
]
=
value
;
_query
[
otherName
]
=
""
;
_query
.
current
=
0
;
const
_roleIds
:
Array
<
RoleItemType
>
=
roleIds
.
map
((
_item
:
RoleItemType
)
=>
{
if
(
name
===
_item
.
roleCode
)
{
if
(
checked
)
{
_item
.
isChecked
=
true
;
}
else
{
_item
.
isChecked
=
false
;
}
else
{
_query
.
nickName
=
""
;
_query
.
phone
=
""
;
_query
.
current
=
0
;
}
setQuery
(
_query
);
}
}
enterButton=
{
<
span
className=
"icon iconfont"
>

</
span
>
}
/>
</
div
>
<
div
>
角色:
{
_
.
map
(
roleIds
,
(
item
:
any
)
=>
{
return
(
<
CheckBox
key=
{
item
.
roleCode
}
text=
{
item
.
name
}
name=
{
item
.
roleCode
}
onChange=
{
(
e
:
any
)
=>
{
const
{
checked
,
name
}
=
e
.
target
;
const
_query
=
{
...
query
};
_query
.
roleCodes
=
[];
_query
.
current
=
0
;
const
_roleIds
:
Array
<
RoleItemType
>
=
roleIds
.
map
(
(
_item
:
RoleItemType
)
=>
{
if
(
name
===
_item
.
roleCode
)
{
if
(
checked
)
{
_item
.
isChecked
=
true
;
}
else
{
_item
.
isChecked
=
false
;
}
}
if
(
_item
.
isChecked
)
{
_query
.
roleCodes
.
push
(
_item
.
roleCode
);
}
return
_item
;
}
}
if
(
_item
.
isChecked
)
{
_query
.
roleCodes
.
push
(
_item
.
roleCode
);
}
return
_item
;
});
);
setRoleIds
(
_roleIds
);
setQuery
(
_query
);
}
}
defaultChecked=
{
item
.
isChecked
}
/>
);
})
}
setRoleIds
(
_roleIds
);
setQuery
(
_query
);
}
}
defaultChecked=
{
item
.
isChecked
}
/>
);
})
}
</
div
>
</
div
>
{
(
User
.
getUserRole
()
===
'CloudManager'
||
User
.
getUserRole
()
===
'StoreManager'
)
&&
<
div
>
<>
<
Button
onClick=
{
()
=>
{
handleToAddEmployee
();
...
...
@@ -450,7 +479,7 @@ function EmployeeManage() {
>
<
span
className=
"view-text"
>
查看说明
</
span
>
</
a
>
</
div
>
</>
}
</
div
>
<
LimitTip
type=
"员工"
total=
{
realTotal
}
tip=
{
()
=>
{
return
(<
div
>
数据为当前学院的员工数,若员工存在多个学院,企业人数只统计为1人
</
div
>)}
}
/>
...
...
@@ -481,84 +510,21 @@ function EmployeeManage() {
}
}
/>
</
div
>
{
(
User
.
getUserRole
()
===
'CloudManager'
||
User
.
getUserRole
()
===
'StoreManager'
)
&&
(
<>
<
Button
onClick=
{
()
=>
{
handleToAddEmployee
();
}
}
type=
'primary'
className=
'add-show-btn'
>
添加员工
</
Button
>
<
Button
className=
'update-user-btn'
onClick=
{
()
=>
{
updateListData
();
}
}
>
更新列表数据
</
Button
>
<
span
className=
'origin-text'
>
数据来源企业微信通讯录
</
span
>
<
a
href=
'https://www.yuque.com/wangzhong-zkqw0/qixue'
target=
'_blank'
>
<
span
className=
'view-text'
>
查看数据更新说明
</
span
>
</
a
>
</>
)
}
</
div
>
<
LimitTip
type=
'员工'
total=
{
realTotal
}
tip=
{
()
=>
{
return
<
div
>
数据为当前学院的员工数,若员工存在多个学院,企业人数只统计为1人
</
div
>;
}
}
/>
<
div
className=
'box-body'
>
<
XMTable
renderEmpty=
{
{
image
:
college
,
description
:
'暂无数据'
,
}
}
size=
{
'middle'
}
pagination=
{
false
}
dataSource=
{
employeeList
}
columns=
{
parseColumn
()
}
rowKey=
{
(
item
:
any
)
=>
item
.
id
}
bordered
/>
</
div
>
{
model
}
{
employeeModal
&&
(
<
NewChooseMembersModal
treeDepType=
'DEP_CHAT'
visible=
{
employeeModal
}
type=
'USER'
close=
{
()
=>
{
setEmployeeModal
(
false
);
}
}
onConfirm=
{
()
=>
{
setEmployeeModal
(
false
);
message
.
success
(
'添加成功'
);
getEmployeeList
();
}
}
/>
)
}
{
model
}
{
employeeModal
&&
(
{
employeeModal
&&
<
NewChooseMembersModal
treeDepType=
'DEP_CHAT'
treeDepType=
"DEP_CHAT"
visible=
{
employeeModal
}
type=
'USER'
close=
{
()
=>
{
setEmployeeModal
(
false
);
}
}
type=
"USER"
close=
{
()
=>
{
setEmployeeModal
(
false
)}
}
onConfirm=
{
()
=>
{
setEmployeeModal
(
false
)
;
message
.
success
(
'添加成功'
)
;
setEmployeeModal
(
false
)
message
.
success
(
'添加成功'
)
getEmployeeList
();
}
}
}
}
/>
)
}
</
div
>
}
</
div
>
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment