import { useCallback, useEffect, useState } from 'react'; import { useNavigate, useSearchParams } from 'react-router-dom'; import { listFeedbackBoard } from '../api/client'; import type { FeedbackSubmission, PortalUser } from '../types'; import { FEEDBACK_STATUS_LABELS, FEEDBACK_TYPE_LABELS, formatFeedbackTime, } from '../utils/feedbackLabels'; import { FeedbackPageHeader } from './FeedbackPageHeader'; const PAGE_SIZE = 10; function FeedbackBoardItem({ item, currentUserId, onOpen, }: { item: FeedbackSubmission; currentUserId?: string; onOpen: (id: string) => void; }) { const isMine = item.userId === currentUserId; return (
  • ); } export function FeedbackBoardView({ user, onLogout, }: { user?: PortalUser | null; onLogout?: () => void; }) { const navigate = useNavigate(); const [searchParams, setSearchParams] = useSearchParams(); const page = Math.max(Number(searchParams.get('page')) || 1, 1); const [items, setItems] = useState([]); const [totalPages, setTotalPages] = useState(0); const [total, setTotal] = useState(0); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const loadPage = useCallback(async (targetPage: number) => { setLoading(true); setError(null); try { const result = await listFeedbackBoard(targetPage, PAGE_SIZE); setItems(result.items); setTotalPages(result.totalPages); setTotal(result.total); if (result.totalPages > 0 && targetPage > result.totalPages) { setSearchParams({ page: String(result.totalPages) }, { replace: true }); } } catch (err) { setError(err instanceof Error ? err.message : '反馈列表加载失败'); setItems([]); } finally { setLoading(false); } }, [setSearchParams]); useEffect(() => { void loadPage(page); }, [loadPage, page]); const goToPage = (nextPage: number) => { if (nextPage < 1 || (totalPages > 0 && nextPage > totalPages) || nextPage === page) return; setSearchParams({ page: String(nextPage) }); }; return (
    navigate('/feedback')} onLogout={onLogout} />

    Bug List

    全部用户反馈

    共 {total} 条 · 每页 {PAGE_SIZE} 条

    {!loading && total > 0 ? (

    第 {page} / {totalPages || 1} 页

    ) : null}
    {loading ?

    加载中…

    : null} {error ?

    {error}

    : null} {!loading && !error && items.length === 0 ? (

    还没有任何用户反馈。

    ) : null} {!loading && items.length > 0 ? (
      {items.map((item) => ( navigate(`/feedback/${id}`)} /> ))}
    ) : null}
    {totalPages > 1 ? ( ) : null}
    ); }