fix(admin): 普通用户页面显示 C 端真实用户列表
All checks were successful
Deploy Admin Frontend / build-and-deploy (push) Successful in 10s
All checks were successful
Deploy Admin Frontend / build-and-deploy (push) Successful in 10s
- /users/members 路由改为使用 MemberManagement 组件 - 新增"用户列表"Tab:调用 /admin-api/users 展示所有 C 端用户 - 显示邮箱、昵称、角色、状态、最后登录、注册时间 - 保留原有会员管理和注销审核 Tab Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
60a9438176
commit
6bcda17894
@ -13,6 +13,7 @@ export default function MemberManagement() {
|
||||
const [addOpen, setAddOpen] = useState(false)
|
||||
const [form] = Form.useForm()
|
||||
|
||||
const { data: usersData } = useQuery({ queryKey: ['users', 'list'], queryFn: (): Promise<any> => api.get('/admin-api/users') })
|
||||
const { data: memberships } = useQuery({ queryKey: ['users', 'memberships'], queryFn: (): Promise<any> => api.get('/admin-api/users/memberships') })
|
||||
const { data: deletions } = useQuery({ queryKey: ['users', 'deletions'], queryFn: (): Promise<any> => api.get('/admin-api/users/deletion-requests') })
|
||||
|
||||
@ -34,6 +35,15 @@ export default function MemberManagement() {
|
||||
})
|
||||
}
|
||||
|
||||
const userCols = [
|
||||
{ title: '邮箱', dataIndex: 'email', width: 200, ellipsis: true, render: (v: string) => v || '-' },
|
||||
{ title: '昵称', dataIndex: 'nickname', width: 120, render: (v: string) => v || '-' },
|
||||
{ title: '角色', dataIndex: 'role', width: 80, render: (v: string) => <Tag>{v}</Tag> },
|
||||
{ title: '状态', dataIndex: 'status', width: 80, render: (v: string) => v === 'active' ? <Tag color="green">正常</Tag> : <Tag color="red">{v}</Tag> },
|
||||
{ title: '最后登录', dataIndex: 'lastLoginAt', width: 140, render: (d: string) => d ? dayjs(d).format('MM-DD HH:mm') : '-' },
|
||||
{ title: '注册时间', dataIndex: 'createdAt', width: 140, render: (d: string) => dayjs(d).format('MM-DD HH:mm') },
|
||||
]
|
||||
|
||||
const membershipCols = [
|
||||
{ title: '用户ID', dataIndex: 'userId', width: 160, ellipsis: true },
|
||||
{ title: '计划', dataIndex: ['plan', 'name'], width: 120, render: (_: any, r: any) => r.plan?.name || '-' },
|
||||
@ -66,6 +76,10 @@ export default function MemberManagement() {
|
||||
</div>
|
||||
|
||||
<Tabs items={[
|
||||
{
|
||||
key: 'users', label: `用户列表 (${usersData?.total ?? 0})`,
|
||||
children: <Table dataSource={usersData?.items || []} columns={userCols} rowKey="id" pagination={{ pageSize: 20 }} size="small" />,
|
||||
},
|
||||
{
|
||||
key: 'membership', label: '会员管理',
|
||||
children: <Table dataSource={memberships || []} columns={membershipCols} rowKey="id" pagination={{ pageSize: 20 }} size="small" />,
|
||||
|
||||
@ -4,6 +4,7 @@ import type { AdminRole } from '@/types/admin'
|
||||
const Dashboard = lazy(() => import('@/pages/Dashboard'))
|
||||
const TaskAssistant = lazy(() => import('@/pages/TaskAssistant'))
|
||||
const UserManagement = lazy(() => import('@/pages/UserManagement'))
|
||||
const MemberManagement = lazy(() => import('@/pages/MemberManagement'))
|
||||
|
||||
export interface RouteConfig {
|
||||
path: string
|
||||
@ -17,7 +18,7 @@ export const routeConfig: RouteConfig[] = [
|
||||
{ path: '/assistant', title: '任务助理', element: TaskAssistant },
|
||||
{ path: '/users', title: '用户管理', element: UserManagement, requiredRole: 'ADMIN' },
|
||||
{ path: '/users/admins', title: '管理员', element: UserManagement, requiredRole: 'SUPER_ADMIN' },
|
||||
{ path: '/users/members', title: '普通用户', element: UserManagement },
|
||||
{ path: '/users/members', title: '普通用户', element: MemberManagement },
|
||||
{ path: '/membership', title: '会员与额度', element: UserManagement, requiredRole: 'ADMIN' },
|
||||
{ path: '/knowledge/bases', title: '知识库列表', element: UserManagement },
|
||||
{ path: '/knowledge/sources', title: '知识源列表', element: UserManagement },
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user