'use client' import {useEffect, useState} from 'react' import {useStatus} from '@/lib/states' import {PageRecord} from '@/lib/api' import {Channel} from '@/lib/models' import Page from '@/components/page' import DataTable from '@/components/data-table' import {toast} from 'sonner' import {listChannels} from '@/actions/channel' 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 {Select, SelectContent, SelectItem, SelectTrigger, SelectValue} from '@/components/ui/select' export type ChannelsPageProps = {} export default function ChannelsPage(props: ChannelsPageProps) { // ====================== // data // ====================== const [status, setStatus] = useStatus() const [data, setData] = useState>({ page: 1, size: 10, total: 0, list: [], }) const refresh = async (page: number, size: number) => { try { setStatus('load') // 筛选条件 const filter = filterForm.getValues() const auth_type = filter.auth_type ? parseInt(filter.auth_type) : undefined // 请求数据 console.log({ page, size, ...filter, auth_type, }) const resp = await listChannels({ page, size, ...filter, auth_type, }) if (!resp.success) { throw new Error(resp.message) } // 更新数据 setData(resp.data) setStatus('done') } catch (e) { setStatus('fail') console.error(e) toast.error('获取提取结果失败', { description: (e as Error).message, }) } } useEffect(() => { refresh(data.page, data.size).then() }, []) // ====================== // filter // ====================== const filterSchema = z.object({ auth_type: z.enum(['0', '1', '2']), expire_after: z.date().optional(), expire_before: z.date().optional(), }) type FilterSchema = z.infer const filterForm = useForm({ resolver: zodResolver(filterSchema), defaultValues: { auth_type: '0', expire_after: undefined, expire_before: undefined, }, }) const filterHandler = filterForm.handleSubmit(async (value) => { await refresh(data.page, data.size) }) // ====================== // render // ====================== return (
name="auth_type" label={认证方式}> {({field}) => ( )}
过期时间
name="expire_after"> {({field}) => ( )} - name="expire_before"> {({field}) => ( )}
refresh(page, data.size), onSizeChange: size => refresh(1, size), }} columns={[ { header: '代理地址', cell: ({row}) => `${row.original.proxy_host}:${row.original.proxy_port}`, }, { header: '认证方式', cell: ({row}) => { return (
{row.original.auth_ip && ( <> IP 白名单 {row.original.whitelists.replaceAll(',', ', ')} )} {row.original.auth_pass && ( <> 账号密码 {row.original.username} : {row.original.password} )}
) }, }, { header: '过期时间', cell: ({row}) => format(row.original.expiration, 'yyyy-MM-dd HH:mm:ss'), }, { header: '操作', cell: ({row}) => -, }, ]} />
) }