import { useEffect, useState } from 'react'; import { Button, Drawer, Form, Input, Modal, Radio, Select, Space, Table, Tag, Typography, message, } from 'antd'; import type { ColumnsType } from 'antd/es/table'; import { request, type HqProfile } from '../lib/api'; import { ACCOUNT_STATUS_LABELS, fmtTime } from '../lib/constants'; import { useAdminList } from '../lib/useAdminList'; type Row = { id: string; phone: string; loginName: string | null; hasPassword: boolean; name: string; adminRole: string; status: string; lastLoginAt: string | null; createdAt: string; }; const ROLE_LABELS: Record = { SUPER_ADMIN: '超级管理员', OPS: '运营', FINANCE: '财务', CUSTOMER_SERVICE: '客服', }; export default function HqAccountsPage() { const [profile, setProfile] = useState(null); const [form] = Form.useForm(); const [editForm] = Form.useForm(); const [createForm] = Form.useForm(); const [filters, setFilters] = useState>({}); const { data, loading, page, pageSize, setPage, setPageSize, reload } = useAdminList( '/admin/hq-accounts', () => { const qs = new URLSearchParams(); if (filters.phone) qs.set('phone', filters.phone); if (filters.adminRole) qs.set('adminRole', filters.adminRole); if (filters.status) qs.set('status', filters.status); return qs; }, [filters], ); const [detail, setDetail] = useState(null); const [drawerOpen, setDrawerOpen] = useState(false); const [createOpen, setCreateOpen] = useState(false); const credentialType = Form.useWatch('credentialType', createForm) ?? 'phone'; const isSuperAdmin = profile?.adminRole === 'SUPER_ADMIN'; useEffect(() => { request('/admin/auth/me').then(setProfile).catch(() => {}); }, []); const columns: ColumnsType = [ { title: '姓名', dataIndex: 'name' }, { title: '用户名', dataIndex: 'loginName', width: 120, render: (v) => v || '—' }, { title: '手机', dataIndex: 'phone', width: 130 }, { title: '登录方式', width: 110, render: (_, r) => ( {r.hasPassword ? 密码 : null} 短信 ), }, { title: '角色', dataIndex: 'adminRole', width: 110, render: (r) => ROLE_LABELS[r] || r }, { title: '状态', dataIndex: 'status', width: 90, render: (s) => {ACCOUNT_STATUS_LABELS[s] || s} }, { title: '最后登录', dataIndex: 'lastLoginAt', width: 160, render: fmtTime }, { title: '操作', width: 80, render: (_, row) => ( ), }, ]; return (
HQ 账户 {isSuperAdmin && ( )}
{ setFilters(v); setPage(1); }}> ({ value, label }))} />
setCreateOpen(false)} onOk={async () => { const v = await createForm.validateFields(); await request('/admin/hq-accounts', { method: 'POST', body: JSON.stringify(v) }); message.success('已创建'); setCreateOpen(false); createForm.resetFields(); void reload(); }} >
手机号账户(短信登录) 用户名密码账户 ) : ( <> )}
); }