'use client'; import { Display } from '@/components/display'; import { ProTable, ProTableActions } from '@/components/pro-table'; import { getSubscribeList } from '@/services/admin/subscribe'; import { createUser, deleteUser, getUserList, updateUserBasicInfo } from '@/services/admin/user'; import { useQuery } from '@tanstack/react-query'; import { Badge } from '@workspace/ui/components/badge'; import { Button } from '@workspace/ui/components/button'; import { Switch } from '@workspace/ui/components/switch'; import { ConfirmButton } from '@workspace/ui/custom-components/confirm-button'; import { formatDate } from '@workspace/ui/utils'; import { useTranslations } from 'next-intl'; import Link from 'next/link'; import { useRef, useState } from 'react'; import { toast } from 'sonner'; import { UserDetail } from './user-detail'; import UserForm from './user-form'; export default function Page() { const t = useTranslations('user'); const [loading, setLoading] = useState(false); const ref = useRef(null); const { data: subscribeList } = useQuery({ queryKey: ['getSubscribeList', 'all'], queryFn: async () => { const { data } = await getSubscribeList({ page: 1, size: 9999, }); return data.data?.list as API.SubscribeGroup[]; }, }); return ( action={ref} header={{ title: t('userList'), toolbar: ( key='create' trigger={t('create')} title={t('createUser')} loading={loading} onSubmit={async (values) => { setLoading(true); try { await createUser(values); toast.success(t('createSuccess')); ref.current?.refresh(); setLoading(false); return true; } catch (error) { setLoading(false); return false; } }} /> ), }} columns={[ { accessorKey: 'enable', header: t('enable'), cell: ({ row }) => { return ( { const { auth_methods, user_devices, enable_balance_notify, enable_login_notify, enable_subscribe_notify, enable_trade_notify, updated_at, created_at, id, ...rest } = row.original; await updateUserBasicInfo({ user_id: id, ...rest, enable: checked, } as unknown as API.UpdateUserBasiceInfoRequest); toast.success(t('updateSuccess')); ref.current?.refresh(); }} /> ); }, }, { accessorKey: 'id', header: 'ID', }, { accessorKey: 'auth_methods', header: t('userName'), cell: ({ row }) => { const method = row.original.auth_methods?.[0]; return (
{method?.auth_type} {method?.auth_identifier}
); }, }, { accessorKey: 'balance', header: t('balance'), cell: ({ row }) => , }, { accessorKey: 'gift_amount', header: t('giftAmount'), cell: ({ row }) => , }, { accessorKey: 'commission', header: t('commission'), cell: ({ row }) => , }, { accessorKey: 'refer_code', header: t('inviteCode'), cell: ({ row }) => row.getValue('refer_code') || '--', }, { accessorKey: 'referer_id', header: t('referer'), cell: ({ row }) => , }, { accessorKey: 'created_at', header: t('createdAt'), cell: ({ row }) => formatDate(row.getValue('created_at')), }, ]} request={async (pagination, filter) => { const { data } = await getUserList({ ...pagination, ...filter, }); return { list: data.data?.list || [], total: data.data?.total || 0, }; }} params={[ { key: 'subscribe_id', placeholder: t('subscription'), options: subscribeList?.map((item) => ({ label: item.name, value: String(item.id), })), }, { key: 'search', placeholder: 'Search', }, { key: 'user_id', placeholder: t('userId'), }, { key: 'user_subscribe_id', placeholder: t('subscriptionId'), }, ]} actions={{ render: (row) => { return [ , {t('delete')}} title={t('confirmDelete')} description={t('deleteDescription')} onConfirm={async () => { await deleteUser({ id: row.id }); toast.success(t('deleteSuccess')); ref.current?.refresh(); }} cancelText={t('cancel')} confirmText={t('confirm')} />, ]; }, }} /> ); }