import React, { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { API, isMobile, showError, showSuccess } from '../../helpers'; import { renderQuota, renderQuotaWithPrompt } from '../../helpers/render'; import Title from '@douyinfe/semi-ui/lib/es/typography/title'; import { Button, Divider, Input, Modal, Select, SideSheet, Space, Spin, Typography, } from '@douyinfe/semi-ui'; const EditUser = (props) => { const userId = props.editingUser.id; const [loading, setLoading] = useState(true); const [addQuotaModalOpen, setIsModalOpen] = useState(false); const [addQuotaLocal, setAddQuotaLocal] = useState(''); const [inputs, setInputs] = useState({ username: '', display_name: '', password: '', github_id: '', linuxdo_id: '', linuxdo_level: 0, wechat_id: '', telegram_id: '', email: '', quota: 0, group: 'default', }); const [groupOptions, setGroupOptions] = useState([]); const { username, display_name, password, github_id, linuxdo_id, linuxdo_level, wechat_id, telegram_id, email, quota, group, } = inputs; const handleInputChange = (name, value) => { setInputs((inputs) => ({ ...inputs, [name]: value })); }; const fetchGroups = async () => { try { let res = await API.get(`/api/group/`); setGroupOptions( res.data.data.map((group) => ({ label: group, value: group, })), ); } catch (error) { showError(error.message); } }; const navigate = useNavigate(); const handleCancel = () => { props.handleClose(); }; const loadUser = async () => { setLoading(true); let res = undefined; if (userId) { res = await API.get(`/api/user/${userId}`); } else { res = await API.get(`/api/user/self`); } const { success, message, data } = res.data; if (success) { data.password = ''; setInputs(data); } else { showError(message); } setLoading(false); }; useEffect(() => { loadUser().then(); if (userId) { fetchGroups().then(); } }, [props.editingUser.id]); const submit = async () => { setLoading(true); let res = undefined; if (userId) { let data = { ...inputs, id: parseInt(userId) }; if (typeof data.quota === 'string') { data.quota = parseInt(data.quota); } res = await API.put(`/api/user/`, data); } else { res = await API.put(`/api/user/self`, inputs); } const { success, message } = res.data; if (success) { showSuccess('用户信息更新成功!'); props.refresh(); props.handleClose(); } else { showError(message); } setLoading(false); }; const addLocalQuota = () => { let newQuota = parseInt(quota) + parseInt(addQuotaLocal); setInputs((inputs) => ({ ...inputs, quota: newQuota })); }; const openAddQuotaModal = () => { setAddQuotaLocal('0'); setIsModalOpen(true); }; return ( <> {'编辑用户'}} headerStyle={{ borderBottom: '1px solid var(--semi-color-border)' }} bodyStyle={{ borderBottom: '1px solid var(--semi-color-border)' }} visible={props.visible} footer={
} closeIcon={null} onCancel={() => handleCancel()} width={isMobile() ? '100%' : 600} >
用户名
handleInputChange('username', value)} value={username} autoComplete='new-password' />
密码
handleInputChange('password', value)} value={password} autoComplete='new-password' />
显示名称
handleInputChange('display_name', value)} value={display_name} autoComplete='new-password' /> {userId && ( <>
分组
handleInputChange('quota', value)} value={quota} type={'number'} autoComplete='new-password' /> )} 以下信息不可修改
已绑定的 GitHub 账户
已绑定的 LINUX DO 账户
已绑定的微信账户
已绑定的 Telegram 账户
已绑定的邮箱账户
{ addLocalQuota(); setIsModalOpen(false); }} onCancel={() => setIsModalOpen(false)} closable={null} >
{`新额度${renderQuota(quota)} + ${renderQuota(addQuotaLocal)} = ${renderQuota(quota + parseInt(addQuotaLocal))}`}
{ setAddQuotaLocal(value); }} value={addQuotaLocal} type={'number'} autoComplete='new-password' />
); }; export default EditUser;