forked from Gitlink/forgeplus-react
157 lines
4.5 KiB
JavaScript
157 lines
4.5 KiB
JavaScript
import React, { useEffect, useState } from 'react';
|
|
import { WhiteBack , FlexAJ } from '../../Component/layout';
|
|
import { Table , Pagination , Popconfirm } from 'antd';
|
|
import Title from '../../Component/Title';
|
|
import Search from '../../Component/Search';
|
|
import styled from 'styled-components';
|
|
import { getImageUrl } from 'educoder';
|
|
import axios from 'axios';
|
|
import { Link } from 'react-router-dom';
|
|
|
|
const Img = styled.img`{
|
|
width:30px;
|
|
height:30px;
|
|
border-radius:50%;
|
|
}`
|
|
|
|
const demoData = [
|
|
{
|
|
img:"images/avatars/User/g",
|
|
name:"蔡世",
|
|
email:"1149225589@qq.com",
|
|
team:"caicaizi",
|
|
role:"管理者",
|
|
operation:"移除成员",
|
|
}
|
|
]
|
|
export default (({organizeDetail})=>{
|
|
const [ choiceId , serChoiceId ] = useState(undefined);
|
|
const [ page , setPage ] = useState(1);
|
|
const [ limit , setLimit ] = useState(15);
|
|
const [ total , setTotal ] = useState(0);
|
|
const [ search , setSearch ] = useState(undefined);
|
|
const [ data , setData ] = useState(demoData);
|
|
|
|
useEffect(()=>{
|
|
if(organizeDetail && organizeDetail.id){
|
|
getData(search);
|
|
}
|
|
},[organizeDetail,search])
|
|
|
|
function getData(search){
|
|
const url = `/organizations/${organizeDetail.id}/organization_users.json`;
|
|
axios.get(url,{
|
|
params:{
|
|
page,limit, search
|
|
}
|
|
}).then(result=>{
|
|
if(result && result.data){
|
|
setData(result.data.organization_users);
|
|
setTotal(result.data.total_count);
|
|
}
|
|
}).catch(error=>{})
|
|
}
|
|
|
|
// 切换分页
|
|
function ChangePage(page){
|
|
setPage(page);
|
|
}
|
|
|
|
const columns = [
|
|
{
|
|
title: '头像',
|
|
dataIndex: 'user',
|
|
width:"5%",
|
|
render:(value)=>{
|
|
return(
|
|
value && <Link to={`/users/${value && value.login}`}><Img src={getImageUrl('/'+value.image_url)}></Img> </Link>
|
|
)
|
|
}
|
|
},
|
|
{
|
|
title: '用户名',
|
|
dataIndex: 'user',
|
|
width:"15%",
|
|
render:(value,item)=>{
|
|
return <Link to={`/users/${value && value.login}`}>{value && value.name}</Link>
|
|
}
|
|
},
|
|
{
|
|
title: '邮箱',
|
|
dataIndex: 'user',
|
|
width:"25%",
|
|
align:"left",
|
|
render:(value)=>{
|
|
return value && value.mail
|
|
}
|
|
},
|
|
{
|
|
title: '所属团队',
|
|
dataIndex: 'team_names',
|
|
width:"20%",
|
|
render:(value)=>{
|
|
let array = value && value.length > 0 && value.map((i,k)=>{
|
|
return (i+",")
|
|
})
|
|
console.log(array && array[0]);
|
|
return array && array[0].substring(0,array[0].length-1);
|
|
}
|
|
},
|
|
{
|
|
title: '操作',
|
|
dataIndex: 'operation',
|
|
width:"15%",
|
|
render:(value,item)=>{
|
|
let c_isAdmin = organizeDetail && organizeDetail.is_admin;
|
|
let last = (data && data.length === 1) && (item.team_names && item.team_names.length === 1 && item.team_names[0]==="Owners");
|
|
return (
|
|
c_isAdmin && !last && <Popconfirm title="是否将此成员移出组织?" okText={"是"} cancelText={"否"} onConfirm={()=>deleteMember(item.user && item.user.login)}><a className="color-red">移除成员</a></Popconfirm>
|
|
)
|
|
}
|
|
}
|
|
]
|
|
|
|
function deleteMember(login){
|
|
const url = `/organizations/${organizeDetail && organizeDetail.id}/organization_users/${login}.json`;
|
|
axios.delete(url).then(result=>{
|
|
if(result && result.data){
|
|
getData();
|
|
}
|
|
}).catch(error=>{})
|
|
}
|
|
return(
|
|
<WhiteBack>
|
|
<Title>
|
|
<span>组织成员管理</span>
|
|
{/* <AlignCenter>
|
|
<SearchUser getUser={getUser}/>
|
|
<Blueline className="ml30">+ 添加用户</Blueline>
|
|
</AlignCenter> */}
|
|
</Title>
|
|
<FlexAJ className="padding20-30">
|
|
<div style={{width:"580px"}}>
|
|
<Search placeholder="输入用户名或邮箱、团队名搜索" onSearch={(value)=>{setSearch(value)}}/>
|
|
</div>
|
|
{/* <Sort menu={menu}>
|
|
<a className="color-blue">角色筛选<i className="iconfont icon-sanjiaoxing-down ml3 font-14"></i></a>
|
|
</Sort> */}
|
|
</FlexAJ>
|
|
<div className="pl30 pr30 pb30" style={{minHeight:"400px"}}>
|
|
<Table
|
|
size="small"
|
|
columns={columns}
|
|
dataSource={data}
|
|
pagination={false}
|
|
className="teamMemberTable"
|
|
></Table>
|
|
{
|
|
total > limit ?
|
|
<div className="edu-txt-center mt30 mb20">
|
|
<Pagination simple current={page} total={total} pageSize={limit} onChange={ChangePage}></Pagination>
|
|
</div>
|
|
:""
|
|
}
|
|
</div>
|
|
</WhiteBack>
|
|
)
|
|
}) |