forgeplus-react/src/forge/Team/Setting/enterprise.jsx

181 lines
6.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import React, { useEffect, useState } from 'react';
import { WhiteBack , FlexAJ } from '../../Component/layout';
import { Table , Pagination , Popconfirm, Button, message, Tooltip, Select, Spin } 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';
import './teamSetting.scss';
import { createEnterpriseByGitlinkOrgId, getRoleList, getUserList, checkOpenedEnterprise } from '../../Information/api';
const Img = styled.img`{
width:30px;
height:30px;
border-radius:50%;
}`
const limit = 15;
export default (({organizeDetail,history,match, current_user})=>{
const OIdentifier = match.params.OIdentifier;
const {login} = current_user
const [ page , setPage ] = useState(1);
const [ total , setTotal ] = useState(0);
const [ data , setData ] = useState(undefined);
const [ roleList, setRoleList] = useState([]);
const [loading, setLoading] = useState(false);
// 定时器
let intervalId = null;
useEffect(()=>{
getRoleList().then(res=>{
const {code, rows} = res && res.data
if(code === 200){
setRoleList(rows);
}
})
}, [])
useEffect(()=>{
if(organizeDetail){
const {nickname} = organizeDetail;
document.title = `开通组织工作台-${nickname}`;
pollData()
}
}, [organizeDetail])
useEffect(()=>{
if(organizeDetail && organizeDetail.id){
getData(organizeDetail.id);
}
},[organizeDetail,page])
// 轮询函数
const pollData = () => {
checkOpenedEnterprise(organizeDetail.id).then(res=>{
if(res && res.data.code === 200){
const {data} = res.data;
if(data.isOpen && !data.url){
setLoading(true)
}else if(data.isOpen){
clearInterval(intervalId);
window.location = data.url
}
}
})
};
function getData(id){
getUserList(id).then(res=>{
const {code, rows, total} = res && res.data
if(code === 200){
setData(rows);
setTotal(total);
}
})
}
// 切换分页
function ChangePage(page){
setPage(page);
}
const columns = [
{
title: '头像',
dataIndex: 'imageUrl',
render:(value)=>{
return(
<Img src={value}></Img>
)
}
},
{
title: '用户名',
dataIndex: 'nickname',
},
{
title: '邮箱',
dataIndex: 'email',
},
{
title: '所属团队',
dataIndex: ['role', 'roleKey'],
width:"20%",
render:(value,record)=>{
return <Select value={value} onChange={(value)=>{
const users = [...data];
users.map(item=>item.username === record.username && (item.role.roleKey = value))
setData(users);
}}>
{roleList && roleList.map(item=>{return <Select.Option key={item.roleKey}>{item.roleName}</Select.Option>})}
</Select>
}
},
{
title: '操作',
dataIndex: 'username',
key: "action",
render:(value)=>{
return (
<Button type='danger' size='small' disabled={value === login} onClick={()=>{
const users = data.filter(item=>{return item.username !== value});
setData(users);
}}><i className='iconfont icon-fuzhi-shanchu font-14'></i></Button>
)
}
}
]
function createEnterprise(){
const users = data.map(item=>{return {userId: item.userId, roleKey: item.role.roleKey}})
createEnterpriseByGitlinkOrgId(organizeDetail.id, users).then(res=>{
if(res && res.data.code === 200){
message.success('开通成功');
intervalId = setInterval(pollData, 1000);
}else{
message.error(res && res.data.msg)
}
})
}
return(
<Spin spinning={loading}>
<WhiteBack style={{border:"1px solid #eee"}} className='exterpriseBox'>
<div className='padding30'>
首次创建组织工作台时系统将根据组织团队用户在组织工作台中根据不同团队初始化成不同角色请您知悉以下角色权限再次确认组织成员的角色分配<br/>
<span className='font-bd'>组织管理员</span>原owner团队成员对组织内所有代码库均具有管理员权限在组织工作台中拥有最高管理权限<br/>
<span className='font-bd'>项目管理员</span>原管理员团队成员,对组织内所有代码库均具有管理员权限,在组织工作台中拥有项目管理权限<br/>
<span className='font-bd'>普通成员</span>使
</div>
<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>
<div className='edu-txt-right pl30 pr30 pb30'>
<Button type='primary' ghost className='mr20' onClick={()=>{history.push(`/${OIdentifier}`)}}>暂不开通</Button>
<Button type='primary' onClick={createEnterprise}>确认并开通工作台</Button>
</div>
</WhiteBack>
</Spin>
)
})