'use client' import { useEffect, useMemo, useState } from 'react' import { Slider } from '@/components/ui/slider' import { Checkbox } from '@/components/ui/checkbox' import { Button } from '@/components/ui/button' import UserList from './user-list' import useDebounce from '@/hooks/use-debounce' type UserStatus = '活跃' | '沉睡' | '流失风险' export default function UserSearch({ query }: { query: string }) { const [status, setStatus] = useState([]) const [rfm, setRfm] = useState<[number, number]>([0, 100]) const debouncedQ = useDebounce(query, 300) const qs = useMemo(() => { const p = new URLSearchParams() if (debouncedQ.trim()) p.set('q', debouncedQ.trim()) if (status.length) p.set('status', status.join(',')) if (rfm[0] !== 0) p.set('rfmMin', String(rfm[0])) if (rfm[1] !== 100) p.set('rfmMax', String(rfm[1])) p.set('page', '1') p.set('pageSize', '20') return p.toString() }, [debouncedQ, status, rfm]) return (
{/* 过滤区 */}
状态
{(['活跃', '沉睡', '流失风险'] as UserStatus[]).map((s) => { const checked = status.includes(s) return ( ) })}
RFM 区间
setRfm([v[0], v[1]] as any)} />
{rfm[0]} - {rfm[1]}
{/* 列表区 */}
) }