import { useState, useEffect } from 'react';
import UserCard from 'ui-component/cards/UserCard';
import {
Card,
Button,
InputLabel,
FormControl,
OutlinedInput,
Stack,
Alert,
Divider,
Chip,
Typography,
SvgIcon,
useMediaQuery
} from '@mui/material';
import Grid from '@mui/material/Unstable_Grid2';
import SubCard from 'ui-component/cards/SubCard';
import { IconBrandWechat, IconBrandGithub, IconMail, IconBrandTelegram } from '@tabler/icons-react';
import Label from 'ui-component/Label';
import { API } from 'utils/api';
import { showError, showSuccess, onGitHubOAuthClicked, copy, trims, onLarkOAuthClicked } from 'utils/common';
import * as Yup from 'yup';
import WechatModal from 'views/Authentication/AuthForms/WechatModal';
import { useSelector } from 'react-redux';
import EmailModal from './component/EmailModal';
import Turnstile from 'react-turnstile';
import { ReactComponent as Lark } from 'assets/images/icons/lark.svg';
import { useTheme } from '@mui/material/styles';
const validationSchema = Yup.object().shape({
username: Yup.string().required('用户名 不能为空').min(3, '用户名 不能小于 3 个字符'),
display_name: Yup.string(),
password: Yup.string().test('password', '密码不能小于 8 个字符', (val) => {
return !val || val.length >= 8;
})
});
export default function Profile() {
const [inputs, setInputs] = useState([]);
const [turnstileEnabled, setTurnstileEnabled] = useState(false);
const [turnstileSiteKey, setTurnstileSiteKey] = useState('');
const [turnstileToken, setTurnstileToken] = useState('');
const [openWechat, setOpenWechat] = useState(false);
const [openEmail, setOpenEmail] = useState(false);
const status = useSelector((state) => state.siteInfo);
const theme = useTheme();
const matchDownSM = useMediaQuery(theme.breakpoints.down('md'));
const handleWechatOpen = () => {
setOpenWechat(true);
};
const handleWechatClose = () => {
setOpenWechat(false);
};
const handleInputChange = (event) => {
let { name, value } = event.target;
setInputs((inputs) => ({ ...inputs, [name]: value }));
};
const loadUser = async () => {
try {
let res = await API.get(`/api/user/self`);
const { success, message, data } = res.data;
if (success) {
setInputs(data);
} else {
showError(message);
}
} catch (error) {
return;
}
};
const bindWeChat = async (code) => {
if (code === '') return;
try {
const res = await API.get(`/api/oauth/wechat/bind?code=${code}`);
const { success, message } = res.data;
if (success) {
showSuccess('微信账户绑定成功!');
}
return { success, message };
} catch (err) {
// 请求失败,设置错误信息
return { success: false, message: '' };
}
};
const generateAccessToken = async () => {
try {
const res = await API.get('/api/user/token');
const { success, message, data } = res.data;
if (success) {
setInputs((inputs) => ({ ...inputs, access_token: data }));
copy(data, '令牌');
} else {
showError(message);
}
} catch (error) {
return;
}
};
const submit = async () => {
try {
let inputValue = inputs;
// inputValue.username = trims(inputValue.username);
inputValue.display_name = trims(inputValue.display_name);
await validationSchema.validate(inputValue);
const res = await API.put(`/api/user/self`, inputValue);
const { success, message } = res.data;
if (success) {
showSuccess('用户信息更新成功!');
} else {
showError(message);
}
} catch (err) {
showError(err.message);
}
};
useEffect(() => {
if (status) {
if (status.turnstile_check) {
setTurnstileEnabled(true);
setTurnstileSiteKey(status.turnstile_site_key);
}
}
loadUser().then();
}, [status]);
return (
<>
用户名
密码
显示名称
{status.wechat_login && !inputs.wechat_id && (
)}
{status.github_oauth && !inputs.github_id && (
)}
{status.lark_client_id && !inputs.lark_id && (
)}
{turnstileEnabled ? (
{
setTurnstileToken(token);
}}
/>
) : (
<>>
)}
{status.telegram_bot && ( //&& !inputs.telegram_id
Telegram 机器人
1. 点击下方按钮,将会在 Telegram 中打开 机器人,点击 /start 开始。
}
label={'@' + status.telegram_bot}
color="primary"
variant="outlined"
size="small"
onClick={() => window.open('https://t.me/' + status.telegram_bot, '_blank')}
/>
2. 向机器人发送/bind命令后,输入下方的访问令牌即可绑定。(如果没有生成,请点击下方按钮生成)
{/* */}
)}
注意,此处生成的令牌用于系统管理,而非用于请求 OpenAI 相关的服务,请知悉。
{inputs.access_token && (
你的访问令牌是: {inputs.access_token}
请妥善保管。如有泄漏,请立即重置。
)}
{
setOpenEmail(false);
}}
/>
>
);
}