diff --git a/frontend/src/components/GlobalConfig.jsx b/frontend/src/components/GlobalConfig.jsx index 21267a3..d825362 100644 --- a/frontend/src/components/GlobalConfig.jsx +++ b/frontend/src/components/GlobalConfig.jsx @@ -195,6 +195,10 @@ const GlobalConfig = () => { const [showUserForm, setShowUserForm] = useState(false) const [newUser, setNewUser] = useState({ username: '', password: '', role: 'user', status: 'active' }) const [editingUserId, setEditingUserId] = useState(null) + const [usersDetailed, setUsersDetailed] = useState([]) + const [accountsAdmin, setAccountsAdmin] = useState([]) + const [linkRole, setLinkRole] = useState('viewer') + const [linkAccountMap, setLinkAccountMap] = useState({}) // 系统控制相关 const [systemStatus, setSystemStatus] = useState(null) @@ -1125,6 +1129,58 @@ const GlobalConfig = () => { }, ] + const loadUsersAndAccounts = async () => { + if (!isAdmin) return + try { + setBusy(true) + const [users, accounts] = await Promise.all([ + api.getUsersDetailed ? api.getUsersDetailed() : api.get('/admin/users/detailed').then(r => r.data), + api.getAccounts(), + ]) + setUsersDetailed(Array.isArray(users) ? users : []) + setAccountsAdmin(Array.isArray(accounts) ? accounts : []) + const initMap = {} + ;(Array.isArray(users) ? users : []).forEach(u => { + initMap[u.id] = '' + }) + setLinkAccountMap(initMap) + } catch (e) { + setMessage(e?.message || '加载失败') + } finally { + setBusy(false) + } + } + useEffect(() => { + if (isAdmin) loadUsersAndAccounts() + }, [isAdmin]) + + const handleGrant = async (userId) => { + const aid = parseInt(String(linkAccountMap[userId] || ''), 10) + if (!Number.isFinite(aid) || aid <= 0) return + try { + setBusy(true) + await api.grantUserAccount(userId, aid, linkRole) + setMessage('已关联账号') + await loadUsersAndAccounts() + } catch (e) { + setMessage(e?.message || '关联失败') + } finally { + setBusy(false) + } + } + const handleRevoke = async (userId, accountId) => { + try { + setBusy(true) + await api.revokeUserAccount(userId, accountId) + setMessage('已取消关联') + await loadUsersAndAccounts() + } catch (e) { + setMessage(e?.message || '取消失败') + } finally { + setBusy(false) + } + } + return (
+ 管理用户与其关联的交易账号;用户登录后仅能看到已授权的账号,并可在顶部下拉切换 +
+| 用户 | +角色 | +状态 | +已关联账号 | +关联新账号 | +
|---|---|---|---|---|
| {u.username} | +{u.role} | +{u.status === 'active' ? '启用' : '禁用'} | +
+ {userAccs.length === 0 ? (
+ 暂无
+ ) : (
+
+ {userAccs.map(a => (
+
+ )}
+
+ #{a.id} {a.name}
+ {a.status === 'active' ? '启用' : '禁用'}
+
+
+ ))}
+ |
+
+
+
+
+
+
+ |
+