import { useState, useEffect } from 'react' import { useNavigate } from 'react-router-dom' import api from '@/services/api' import type { Milestone, Project } from '@/types' import dayjs from 'dayjs' export default function MilestonesPage() { const [milestones, setMilestones] = useState([]) const [projects, setProjects] = useState([]) const [projectFilter, setProjectFilter] = useState('') const [showCreate, setShowCreate] = useState(false) const [form, setForm] = useState({ title: '', description: '', project_id: 0, due_date: '' }) const navigate = useNavigate() const fetchMilestones = () => { const params = projectFilter ? `?project_id=${projectFilter}` : '' api.get(`/milestones${params}`).then(({ data }) => setMilestones(data)) } useEffect(() => { api.get('/projects').then(({ data }) => { setProjects(data) if (data.length) setForm((f) => ({ ...f, project_id: data[0].id })) }) }, []) useEffect(() => { fetchMilestones() }, [projectFilter]) const createMilestone = async (e: React.FormEvent) => { e.preventDefault() const payload: Record = { ...form } if (!form.due_date) delete payload.due_date await api.post('/milestones', payload) setShowCreate(false) fetchMilestones() } return (

🏁 里程碑 ({milestones.length})

{showCreate && (
setForm({ ...form, title: e.target.value })} /> setForm({ ...form, description: e.target.value })} /> setForm({ ...form, due_date: e.target.value })} />
)}
{milestones.map((ms) => (
navigate(`/milestones/${ms.id}`)}>
{ms.status}

{ms.title}

{ms.description || '暂无描述'}

{ms.due_date && 截止 {dayjs(ms.due_date).format('YYYY-MM-DD')}} 创建于 {dayjs(ms.created_at).format('YYYY-MM-DD')}
))} {milestones.length === 0 &&

暂无里程碑

}
) }