'use client' import {useCallback, useEffect, useState} from 'react' import {useStatus} from '@/lib/states' import {PageRecord} from '@/lib/api' import Page from '@/components/page' import DataTable from '@/components/data-table' import {toast} from 'sonner' import {Batch} from '@/lib/models/batch' import {format} from 'date-fns' import {Form, FormField} from '@/components/ui/form' import {z} from 'zod' import {useForm} from 'react-hook-form' import {zodResolver} from '@hookform/resolvers/zod' import DatePicker from '@/components/date-picker' import {Button} from '@/components/ui/button' import {EraserIcon, SearchIcon} from 'lucide-react' import {pageBatch} from '@/actions/batch' export type RecordPageProps = {} export default function RecordPage(props: RecordPageProps) { const [status, setStatus] = useStatus() const [data, setData] = useState>({ page: 1, size: 10, total: 0, list: [], }) // ====================== // filter // ====================== const filterSchema = z.object({ time_start: z.date().optional(), time_end: z.date().optional(), }) type FilterSchema = z.infer const filterForm = useForm({ resolver: zodResolver(filterSchema), defaultValues: { time_start: undefined, time_end: undefined, }, }) const fetchRecords = useCallback(async (page: number, size: number) => { try { setStatus('load') // 获取筛选条件 const filter = filterForm.getValues() const result = await pageBatch({ page, size, ...filter, }) if (result.success && result.data) { setData(result.data) } else { throw new Error('获取数据失败') } setStatus('done') } catch (error) { setStatus('fail') console.error(error) toast.error('获取提取结果失败', { description: (error as Error).message, }) } }, [filterForm, setStatus]) const filterHandler = filterForm.handleSubmit(async () => { // 重置到第一页进行筛选 await fetchRecords(1, data.size) }) useEffect(() => { fetchRecords(data.page, data.size).then() }, [data.page, data.size, fetchRecords]) return ( {/* 筛选表单 */}
提取时间
name="time_start"> {({field}) => ( )} - name="time_end"> {({field}) => ( )}
fetchRecords(page, data.size), onSizeChange: size => fetchRecords(1, size), }} columns={[ { header: '批次号', cell: ({row}) =>
{row.original.batch_no}
, accessorKey: 'batch_no', }, { header: 'IP地址', cell: ({row}) =>
{row.original.ip}
, accessorKey: 'ip', }, { header: '运营商', cell: ({row}) =>
{row.original.isp}
, accessorKey: 'isp', }, { header: '地区', cell: ({row}) =>
{row.original.prov}
, accessorKey: 'prov', }, { header: '城市', cell: ({row}) =>
{row.original.city}
, accessorKey: 'city', }, { header: '提取数量', cell: ({row}) =>
{row.original.count}
, accessorKey: 'count', }, // { // header: '资源数量', // cell: ({row}) =>
{row.original.resource_id}
, // accessorKey: 'resource_id', // }, { header: '提取时间', cell: ({row}) => { return
{format(new Date(row.original.time), 'yyyy-MM-dd HH:mm:ss')}
}, accessorKey: 'time', }, ]} />
) }