import React from 'react'; import { ModelStatus, Gender, ModelSortBy, SortOrder } from '../types/model'; import { MagnifyingGlassIcon, FunnelIcon, ArrowUpIcon, ArrowDownIcon } from '@heroicons/react/24/outline'; import { CustomSelect } from './CustomSelect' interface ModelSearchProps { searchQuery: string; onSearchChange: (query: string) => void; statusFilter: ModelStatus | 'all'; onStatusFilterChange: (status: ModelStatus | 'all') => void; genderFilter: Gender | 'all'; onGenderFilterChange: (gender: Gender | 'all') => void; sortBy: ModelSortBy; onSortByChange: (sortBy: ModelSortBy) => void; sortOrder: SortOrder; onSortOrderChange: (order: SortOrder) => void; } const ModelSearch: React.FC = ({ searchQuery, onSearchChange, statusFilter, onStatusFilterChange, genderFilter, onGenderFilterChange, sortBy, onSortByChange, sortOrder, onSortOrderChange }) => { const getStatusText = (status: ModelStatus | 'all') => { switch (status) { case 'all': return '全部状态'; case ModelStatus.Active: return '活跃'; case ModelStatus.Inactive: return '不活跃'; case ModelStatus.Retired: return '退役'; case ModelStatus.Suspended: return '暂停'; default: return '未知'; } }; const getGenderText = (gender: Gender | 'all') => { switch (gender) { case 'all': return '全部性别'; case Gender.Male: return '男'; case Gender.Female: return '女'; case Gender.Other: return '其他'; default: return '未知'; } }; const getSortByText = (sortBy: ModelSortBy) => { switch (sortBy) { case ModelSortBy.Name: return '姓名'; case ModelSortBy.CreatedAt: return '创建时间'; case ModelSortBy.UpdatedAt: return '更新时间'; case ModelSortBy.Rating: return '评分'; case ModelSortBy.Age: return '年龄'; case ModelSortBy.Height: return '身高'; default: return '创建时间'; } }; return (
{/* 搜索框 */}
onSearchChange(e.target.value)} className="w-full pl-10 pr-3 py-2 border border-gray-200 rounded-lg bg-white focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent transition-all duration-200 placeholder-gray-400 text-sm text-gray-900 hover:border-gray-300" />
{/* 过滤器 */}
{/* 状态过滤 */}
状态
onStatusFilterChange(value as ModelStatus | 'all')} options={[ { value: 'all', label: '全部状态' }, { value: ModelStatus.Active, label: '活跃' }, { value: ModelStatus.Inactive, label: '不活跃' }, { value: ModelStatus.Retired, label: '退役' }, { value: ModelStatus.Suspended, label: '暂停' } ]} className="min-w-[100px]" />
{/* 性别过滤 */}
性别
onGenderFilterChange(value as Gender | 'all')} options={[ { value: 'all', label: '全部性别' }, { value: Gender.Male, label: '男' }, { value: Gender.Female, label: '女' }, { value: Gender.Other, label: '其他' } ]} className="min-w-[80px]" />
{/* 排序选择 */}
排序
onSortByChange(value as ModelSortBy)} options={[ { value: ModelSortBy.CreatedAt, label: '创建时间' }, { value: ModelSortBy.UpdatedAt, label: '更新时间' }, { value: ModelSortBy.Name, label: '姓名' }, { value: ModelSortBy.Rating, label: '评分' }, { value: ModelSortBy.Age, label: '年龄' }, { value: ModelSortBy.Height, label: '身高' } ]} className="min-w-[100px]" /> {/* 排序方向 */}
{/* 活动过滤器显示 */} {(searchQuery || statusFilter !== 'all' || genderFilter !== 'all') && (
当前筛选: {searchQuery && ( 搜索: {searchQuery} )} {statusFilter !== 'all' && ( 状态: {getStatusText(statusFilter)} )} {genderFilter !== 'all' && ( 性别: {getGenderText(genderFilter)} )} {/* 清除所有过滤器 */}
)} {/* 排序信息显示 */}
排序方式: {getSortByText(sortBy)} {sortOrder === SortOrder.Asc ? '升序' : '降序'}
); }; export default ModelSearch;