From ff9ed2af969c79df212e171712bd44d47117f5ae Mon Sep 17 00:00:00 2001 From: Seefs Date: Sat, 28 Feb 2026 01:03:24 +0800 Subject: [PATCH] fix: show built-in user bindings from user detail API in admin modal --- .../modals/UserBindingManagementModal.jsx | 39 +++++++++++++++---- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/web/src/components/table/users/modals/UserBindingManagementModal.jsx b/web/src/components/table/users/modals/UserBindingManagementModal.jsx index c5b2a3a15..e01ecca94 100644 --- a/web/src/components/table/users/modals/UserBindingManagementModal.jsx +++ b/web/src/components/table/users/modals/UserBindingManagementModal.jsx @@ -56,6 +56,7 @@ const UserBindingManagementModal = ({ const [showBoundOnly, setShowBoundOnly] = React.useState(true); const [statusInfo, setStatusInfo] = React.useState({}); const [customOAuthBindings, setCustomOAuthBindings] = React.useState([]); + const [builtInBindings, setBuiltInBindings] = React.useState({}); const [bindingActionLoading, setBindingActionLoading] = React.useState({}); const loadBindingData = React.useCallback(async () => { @@ -63,9 +64,10 @@ const UserBindingManagementModal = ({ setBindingLoading(true); try { - const [statusRes, customBindingRes] = await Promise.all([ + const [statusRes, customBindingRes, userRes] = await Promise.all([ API.get('/api/status'), API.get(`/api/user/${userId}/oauth/bindings`), + API.get(`/api/user/${userId}`), ]); if (statusRes.data?.success) { @@ -79,6 +81,21 @@ const UserBindingManagementModal = ({ } else { 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) { showError( error.response?.data?.message || error.message || t('操作失败'), @@ -118,6 +135,10 @@ const UserBindingManagementModal = ({ showError(res.data?.message || t('操作失败')); return; } + setBuiltInBindings((prev) => ({ + ...prev, + [bindingItem.field]: '', + })); formApiRef.current?.setValue(bindingItem.field, ''); showSuccess(t('解绑成功')); } catch (error) { @@ -168,6 +189,8 @@ const UserBindingManagementModal = ({ }; const currentValues = formApiRef.current?.getValues?.() || {}; + const getBuiltInBindingValue = (field) => + builtInBindings[field] || currentValues[field] || ''; const builtInBindingItems = [ { @@ -175,7 +198,7 @@ const UserBindingManagementModal = ({ field: 'email', name: t('邮箱'), enabled: true, - value: currentValues.email, + value: getBuiltInBindingValue('email'), icon: ( ), @@ -211,7 +234,7 @@ const UserBindingManagementModal = ({ field: 'oidc_id', name: 'OIDC', enabled: Boolean(statusInfo.oidc_enabled), - value: currentValues.oidc_id, + value: getBuiltInBindingValue('oidc_id'), icon: ( ), @@ -234,7 +257,7 @@ const UserBindingManagementModal = ({ field: 'telegram_id', name: 'Telegram', enabled: Boolean(statusInfo.telegram_oauth), - value: currentValues.telegram_id, + value: getBuiltInBindingValue('telegram_id'), icon: ( ), @@ -244,7 +267,7 @@ const UserBindingManagementModal = ({ field: 'linux_do_id', name: 'LinuxDO', enabled: Boolean(statusInfo.linuxdo_oauth), - value: currentValues.linux_do_id, + value: getBuiltInBindingValue('linux_do_id'), icon: ( ),