/** * 用户管理页 — 查看所有企业用户、搜索、启用/禁用 */ import { useEffect, useState } from 'react' import { Search, Ban, CheckCircle } from 'lucide-react' import { toast } from 'sonner' import { platformApi } from '../../lib/api-services' import { Input, Select } from '../../components/ui/Input' import Button from '../../components/ui/Button' interface UserItem { id: string; name: string; phone: string; role: string disabled: boolean; lastLoginAt: string | null; createdAt: string orgName: string | null } const ROLE_LABELS: Record = { SUPER_ADMIN: '超级管理员', ADMIN: '管理员', HR: 'HR', VIEWER: '只读', } const ROLE_COLORS: Record = { SUPER_ADMIN: 'bg-amber-100 text-amber-800', ADMIN: 'bg-blue-50 text-blue-700', HR: 'bg-emerald-50 text-emerald-700', VIEWER: 'bg-gray-100 text-gray-600', } export default function PlatformUsers() { const [users, setUsers] = useState([]) const [total, setTotal] = useState(0) const [page, setPage] = useState(1) const [pageSize] = useState(20) const [search, setSearch] = useState('') const [orgFilter, setOrgFilter] = useState('') const [loading, setLoading] = useState(true) const [orgs, setOrgs] = useState<{ id: string; name: string }[]>([]) const fetchUsers = async () => { setLoading(true) try { const params: any = { page, pageSize } if (search) params.search = search if (orgFilter) params.orgId = orgFilter const res = await platformApi.users(params) as any setUsers(res.list) setTotal(res.total) } finally { setLoading(false) } } useEffect(() => { platformApi.orgs({ pageSize: 200 }).then((res: any) => { setOrgs(res.list.map((o: any) => ({ id: o.id, name: o.name }))) }) }, []) useEffect(() => { fetchUsers() }, [page, orgFilter]) useEffect(() => { setPage(1) }, [search, orgFilter]) const handleToggle = async (user: UserItem) => { try { await platformApi.toggleUser(user.id) fetchUsers() } catch (err: any) { toast.error(err.response?.data?.error?.message || '操作失败') } } const totalPages = Math.ceil(total / pageSize) return (

用户管理

共 {total} 个用户

{/* 搜索栏 */}
setSearch(e.target.value)} onKeyDown={(e) => e.key === 'Enter' && fetchUsers()} />
{/* 表格 */}
{loading ? ( ) : users.length === 0 ? ( ) : users.map((user) => ( ))}
姓名 手机号 角色 所属企业 状态 最后登录 操作
加载中...
暂无数据
{user.name} {user.phone} {ROLE_LABELS[user.role] || user.role} {user.orgName || '-'} {user.disabled ? 已禁用 : 正常} {user.lastLoginAt ? new Date(user.lastLoginAt).toLocaleString('zh-CN') : '从未登录'}
{totalPages > 1 && (
第 {page} / {totalPages} 页,共 {total} 条
)}
) }