forgeplus-react/src/forge/Settings/CollaboratorMemberByLink.jsx

92 lines
3.5 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, useImperativeHandle, forwardRef } from 'react';
import { Select, Checkbox, Button, Input, Spin, Table, Tooltip, Pagination, Popconfirm } from "antd";
import axios from 'axios';
import { Base64 } from 'js-base64';
import NoneData from "../Nodata";
import { Link } from "react-router-dom";
import { getImageUrl } from "educoder";
const { Search } = Input;
const LIMIT = 15;
const optionList = [
{ value: "manager", name: "管理员 - 拥有仓库设置功能、代码库读、写操作权限" },
{ value: "developer", name: "开发人员 - 拥有代码库读、写操作权限" },
{ value: "reporter", name: "报告者 - 拥有代码库读操作权限" }
];
function CollaboratorMemberByLink({ projectsId, owner, project_id, author, showNotification, newId, flag }) {
const [role, setRole] = useState('developer');
const [is_apply, setIs_apply] = useState(true);
const [inviteUrl, setinviteUrl] = useState('');
const [copy, setCopy] = useState(false);
useEffect(() => {
const url = `/${owner}/${projectsId}/project_invite_links/current_link.json`;
axios.get(url, {
params: {
role,
is_apply
}
}).then(res => {
if (res && res.data) {
let params = {
projectName: res.data.project.name,
projectId: res.data.project.identifier,
// role: res.data.role,
ownerLogin: res.data.project.owner.login,
ownerName: res.data.project.owner.name,
// userName: res.data.user.name,
// userLogin: res.data.user.login,
sign:res.data.sign,
};
let urlParams = JSON.stringify(params);
let content = Base64.encode(urlParams);
setinviteUrl(`${window.location.origin}/${owner}/${projectsId}/invite?invite=${content}`);
setCopy(false);
}
}).catch(error => { })
}, [role, is_apply]);
function inviteClick() {
const copyEle = document.querySelector('#inviteUrl'); // 获取要复制的节点
if (!copyEle) {
console.error("您的CopyTool未设置正确的inputId");
return;
}
copyEle.select(); // 执行选中元素
if (document.execCommand('copy')) {
document.execCommand('copy');
setCopy(true);
}
}
return (
<div className='addMemByLinkBox'>
<div className='font-16 mt20 mb10'>请选择邀请用户权限</div>
<Select className='selectBox' defaultValue="developer" onChange={(v) => { setRole(v) }}>
{optionList.map(item => {
return <Select.Option value={item.value} key={item.value}>{item.name}</Select.Option>
})}
</Select>
<Checkbox checked={is_apply} className='font-15 checkBox' onChange={e => { setIs_apply(e.target.checked) }}>需要管理员审核</Checkbox>
<div className='font-16 mt25 mb10'>邀请链接</div>
<Input
id="inviteUrl"
value={inviteUrl}
readOnly
addonAfter={<Button type='primary' onClick={inviteClick}>{copy ? '复制成功' : '复制链接'}</Button>} className='linkBox'
/>
<div className='tipBox mt25'>
<div>: </div>
<div className='ml5'>
1管理员可通过分享邀请链接的方式邀请其他成员加入项目<br />
2若已勾选管理员审核选项用户接收邀请后管理员可在个人主页中待办事项窗口审核成员审核信息若不需要管理员审核成员接收邀请后将直接加入项目
</div>
</div>
</div>
)
}
export default forwardRef(CollaboratorMemberByLink);