fix: show built-in user bindings from user detail API in admin modal

This commit is contained in:
Seefs
2026-02-28 01:03:24 +08:00
parent a58c98c4f6
commit 9fd53d804e
@@ -56,6 +56,7 @@ const UserBindingManagementModal = ({
const [showBoundOnly, setShowBoundOnly] = React.useState(true); const [showBoundOnly, setShowBoundOnly] = React.useState(true);
const [statusInfo, setStatusInfo] = React.useState({}); const [statusInfo, setStatusInfo] = React.useState({});
const [customOAuthBindings, setCustomOAuthBindings] = React.useState([]); const [customOAuthBindings, setCustomOAuthBindings] = React.useState([]);
const [builtInBindings, setBuiltInBindings] = React.useState({});
const [bindingActionLoading, setBindingActionLoading] = React.useState({}); const [bindingActionLoading, setBindingActionLoading] = React.useState({});
const loadBindingData = React.useCallback(async () => { const loadBindingData = React.useCallback(async () => {
@@ -63,9 +64,10 @@ const UserBindingManagementModal = ({
setBindingLoading(true); setBindingLoading(true);
try { try {
const [statusRes, customBindingRes] = await Promise.all([ const [statusRes, customBindingRes, userRes] = await Promise.all([
API.get('/api/status'), API.get('/api/status'),
API.get(`/api/user/${userId}/oauth/bindings`), API.get(`/api/user/${userId}/oauth/bindings`),
API.get(`/api/user/${userId}`),
]); ]);
if (statusRes.data?.success) { if (statusRes.data?.success) {
@@ -79,6 +81,21 @@ const UserBindingManagementModal = ({
} else { } else {
showError(customBindingRes.data?.message || t('操作失败')); showError(customBindingRes.data?.message || t('操作失败'));
} }
if (userRes.data?.success) {
const userData = userRes.data.data || {};
setBuiltInBindings({
email: userData.email || '',
github_id: userData.github_id || '',
discord_id: userData.discord_id || '',
oidc_id: userData.oidc_id || '',
wechat_id: userData.wechat_id || '',
telegram_id: userData.telegram_id || '',
linux_do_id: userData.linux_do_id || '',
});
} else {
showError(userRes.data?.message || t('操作失败'));
}
} catch (error) { } catch (error) {
showError( showError(
error.response?.data?.message || error.message || t('操作失败'), error.response?.data?.message || error.message || t('操作失败'),
@@ -118,6 +135,10 @@ const UserBindingManagementModal = ({
showError(res.data?.message || t('操作失败')); showError(res.data?.message || t('操作失败'));
return; return;
} }
setBuiltInBindings((prev) => ({
...prev,
[bindingItem.field]: '',
}));
formApiRef.current?.setValue(bindingItem.field, ''); formApiRef.current?.setValue(bindingItem.field, '');
showSuccess(t('解绑成功')); showSuccess(t('解绑成功'));
} catch (error) { } catch (error) {
@@ -168,6 +189,8 @@ const UserBindingManagementModal = ({
}; };
const currentValues = formApiRef.current?.getValues?.() || {}; const currentValues = formApiRef.current?.getValues?.() || {};
const getBuiltInBindingValue = (field) =>
builtInBindings[field] || currentValues[field] || '';
const builtInBindingItems = [ const builtInBindingItems = [
{ {
@@ -175,7 +198,7 @@ const UserBindingManagementModal = ({
field: 'email', field: 'email',
name: t('邮箱'), name: t('邮箱'),
enabled: true, enabled: true,
value: currentValues.email, value: getBuiltInBindingValue('email'),
icon: ( icon: (
<IconMail <IconMail
size='default' size='default'
@@ -188,7 +211,7 @@ const UserBindingManagementModal = ({
field: 'github_id', field: 'github_id',
name: 'GitHub', name: 'GitHub',
enabled: Boolean(statusInfo.github_oauth), enabled: Boolean(statusInfo.github_oauth),
value: currentValues.github_id, value: getBuiltInBindingValue('github_id'),
icon: ( icon: (
<IconGithubLogo <IconGithubLogo
size='default' size='default'
@@ -201,7 +224,7 @@ const UserBindingManagementModal = ({
field: 'discord_id', field: 'discord_id',
name: 'Discord', name: 'Discord',
enabled: Boolean(statusInfo.discord_oauth), enabled: Boolean(statusInfo.discord_oauth),
value: currentValues.discord_id, value: getBuiltInBindingValue('discord_id'),
icon: ( icon: (
<SiDiscord size={20} className='text-slate-600 dark:text-slate-300' /> <SiDiscord size={20} className='text-slate-600 dark:text-slate-300' />
), ),
@@ -211,7 +234,7 @@ const UserBindingManagementModal = ({
field: 'oidc_id', field: 'oidc_id',
name: 'OIDC', name: 'OIDC',
enabled: Boolean(statusInfo.oidc_enabled), enabled: Boolean(statusInfo.oidc_enabled),
value: currentValues.oidc_id, value: getBuiltInBindingValue('oidc_id'),
icon: ( icon: (
<IconLink <IconLink
size='default' size='default'
@@ -224,7 +247,7 @@ const UserBindingManagementModal = ({
field: 'wechat_id', field: 'wechat_id',
name: t('微信'), name: t('微信'),
enabled: Boolean(statusInfo.wechat_login), enabled: Boolean(statusInfo.wechat_login),
value: currentValues.wechat_id, value: getBuiltInBindingValue('wechat_id'),
icon: ( icon: (
<SiWechat size={20} className='text-slate-600 dark:text-slate-300' /> <SiWechat size={20} className='text-slate-600 dark:text-slate-300' />
), ),
@@ -234,7 +257,7 @@ const UserBindingManagementModal = ({
field: 'telegram_id', field: 'telegram_id',
name: 'Telegram', name: 'Telegram',
enabled: Boolean(statusInfo.telegram_oauth), enabled: Boolean(statusInfo.telegram_oauth),
value: currentValues.telegram_id, value: getBuiltInBindingValue('telegram_id'),
icon: ( icon: (
<SiTelegram size={20} className='text-slate-600 dark:text-slate-300' /> <SiTelegram size={20} className='text-slate-600 dark:text-slate-300' />
), ),
@@ -244,7 +267,7 @@ const UserBindingManagementModal = ({
field: 'linux_do_id', field: 'linux_do_id',
name: 'LinuxDO', name: 'LinuxDO',
enabled: Boolean(statusInfo.linuxdo_oauth), enabled: Boolean(statusInfo.linuxdo_oauth),
value: currentValues.linux_do_id, value: getBuiltInBindingValue('linux_do_id'),
icon: ( icon: (
<SiLinux size={20} className='text-slate-600 dark:text-slate-300' /> <SiLinux size={20} className='text-slate-600 dark:text-slate-300' />
), ),