diff --git a/frontend/src/pages/Watchlist.tsx b/frontend/src/pages/Watchlist.tsx index 213a185..e46d06c 100644 --- a/frontend/src/pages/Watchlist.tsx +++ b/frontend/src/pages/Watchlist.tsx @@ -1,7 +1,7 @@ import React, { useState, useCallback, useRef, useEffect, useMemo } from 'react' import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' import { motion, AnimatePresence } from 'framer-motion' -import { Trash2, RefreshCw, Star, X, Search, LayoutGrid, List, Settings2, Plus, Check, Filter, Eye, EyeOff, Minus, ChevronsUp, Clock } from 'lucide-react' +import { Trash2, RefreshCw, Star, X, Search, LayoutGrid, List, Settings2, Plus, Check, Filter, Eye, EyeOff, Minus, ChevronsUp, Clock, RotateCcw } from 'lucide-react' import { api, type KlineRow, type MinuteKlineRow } from '@/lib/api' import { QK } from '@/lib/queryKeys' import { storage } from '@/lib/storage' @@ -754,7 +754,10 @@ export function Watchlist() { }) }, []) - const clearFilters = useCallback(() => setFilters({}), []) + const resetAllFilters = useCallback(() => { + setFilters({}) + persistBoardFilter(new Set(BOARDS)) + }, [persistBoardFilter]) // 可筛选的内置列 const filterableBuiltinCols = useMemo( @@ -808,6 +811,8 @@ export function Watchlist() { }, [rows, filters, columns, boardFilter]) const activeFilterCount = Object.values(filters).filter(v => v.min || v.max || v.text).length + const hasBoardFilter = boardFilter.size > 0 && boardFilter.size < BOARDS.length + const hasActiveFilters = activeFilterCount > 0 || hasBoardFilter // 排序(复用共享三态排序 hook) const { sort, toggle: handleSortToggle, sortRows } = useTableSort() @@ -872,11 +877,11 @@ export function Watchlist() { } right={