import React, { useState, useCallback } from 'react'; import { View, Text } from '@tarojs/components'; import Taro from '@tarojs/taro'; import { usePageData } from '@/hooks/usePageData'; import { listTasks, FollowUpTask } from '../../../services/followup'; import EmptyState from '../../../components/EmptyState'; import ErrorState from '../../../components/ErrorState'; import Loading from '../../../components/Loading'; import { useElderClass } from '../../../hooks/useElderClass'; import PageShell from '@/components/ui/PageShell'; import './index.scss'; const TABS = [ { key: 'pending', label: '待完成' }, { key: 'completed', label: '已完成' }, { key: 'overdue', label: '已过期' }, ]; export default function MyFollowUps() { const modeClass = useElderClass(); const [activeTab, setActiveTab] = useState('pending'); const [tasks, setTasks] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(false); const fetchTasks = useCallback(async (status: string) => { setLoading(true); setError(false); try { const res = await listTasks(status); setTasks(res.data || []); } catch { setError(true); Taro.showToast({ title: '加载失败', icon: 'none' }); } finally { setLoading(false); } }, []); usePageData(async () => { await fetchTasks(activeTab); }, { throttleMs: 10000 }); const handleTabChange = (key: string) => { setActiveTab(key); fetchTasks(key); }; const goToDetail = (id: string) => { Taro.navigateTo({ url: `/pages/pkg-profile/followups/detail/index?id=${id}` }); }; const getStatusClass = (status: string) => { if (status === 'completed') return 'completed'; if (status === 'overdue') return 'overdue'; return 'pending'; }; const getStatusLabel = (status: string) => { if (status === 'completed') return '已完成'; if (status === 'overdue') return '已过期'; return '待完成'; }; return ( {TABS.map((tab) => ( handleTabChange(tab.key)} > {tab.label} {activeTab === tab.key && } ))} {error ? ( fetchTasks(activeTab)} /> ) : ( <> {tasks.map((t) => ( goToDetail(t.id)} > {t.follow_up_type} {getStatusLabel(t.status)} {t.content_template} 截止: {t.planned_date} ))} {tasks.length === 0 && !loading && ( { const tab = TABS.find((t) => t.key === activeTab); return tab ? tab.label : ''; })()}任务`} /> )} {loading && ( )} )} ); }