From 0f525effb8f860469970c0e0d02e5205b95392d8 Mon Sep 17 00:00:00 2001 From: Zhi Date: Thu, 12 Mar 2026 21:54:23 +0000 Subject: [PATCH] feat: add task fields UI support --- src/pages/MilestoneDetailPage.tsx | 51 +++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/src/pages/MilestoneDetailPage.tsx b/src/pages/MilestoneDetailPage.tsx index 301fd04..fe49c47 100644 --- a/src/pages/MilestoneDetailPage.tsx +++ b/src/pages/MilestoneDetailPage.tsx @@ -16,6 +16,8 @@ export default function MilestoneDetailPage() { const [showCreateMeeting, setShowCreateMeeting] = useState(false) const [newTitle, setNewTitle] = useState('') const [newDesc, setNewDesc] = useState('') + const [newEffort, setNewEffort] = useState(5) + const [newTime, setNewTime] = useState('09:00') useEffect(() => { api.get(`/milestones/${id}`).then(({ data }) => setMilestone(data)) @@ -25,18 +27,22 @@ export default function MilestoneDetailPage() { const createItem = async (type: 'tasks' | 'supports' | 'meetings') => { if (!newTitle.trim()) return - await api.post(`/milestones/${id}/${type}`, { + const payload: any = { title: newTitle, description: newDesc || null, status: 'open', priority: 'medium' - }) + } + if (type === 'tasks') { + payload.estimated_effort = newEffort + payload.estimated_working_time = newTime + } + await api.post(`/milestones/${id}/${type}`, payload) setNewTitle('') setNewDesc('') setShowCreateTask(false) setShowCreateSupport(false) setShowCreateMeeting(false) - // Refresh items api.get(`/milestones/${id}/items`).then(({ data }) => setItems(data)) } @@ -48,6 +54,16 @@ export default function MilestoneDetailPage() { const supports = items?.supports || [] const meetings = items?.meetings || [] + const renderTaskRow = (t: any) => ( + navigate(`/issues/${t.id}`)}> + {t.task_code || t.id} + {t.title} + {t.task_status || t.status} + {t.estimated_effort || '-'} + {t.estimated_working_time || '-'} + + ) + return (
@@ -55,7 +71,7 @@ export default function MilestoneDetailPage() {

🏁 {milestone.title}

- {milestone.status} + {milestone.status} {milestone.due_date && Due {dayjs(milestone.due_date).format('YYYY-MM-DD')}} {milestone.planned_release_date && Planned Release: {dayjs(milestone.planned_release_date).format('YYYY-MM-DD')}}
@@ -115,6 +131,16 @@ export default function MilestoneDetailPage() { onChange={(e) => setNewDesc(e.target.value)} style={{ marginBottom: 8, width: '100%' }} /> + {showCreateTask && ( +
+ + +
+ )}
@@ -137,17 +163,10 @@ export default function MilestoneDetailPage() {
{activeTab === 'tasks' && ( - + - {tasks.map((i) => ( - navigate(`/issues/${i.id}`)}> - - - - - - ))} - {tasks.length === 0 && } + {tasks.map(renderTaskRow)} + {tasks.length === 0 && }
#TitleStatusPriority
Task CodeTitleStatusEffortEst. Time
{i.id}{i.title}{i.status}{i.priority}
No tasks
No tasks
)} @@ -156,7 +175,7 @@ export default function MilestoneDetailPage() { - {supports.map((i) => ( + {supports.map((i: any) => ( navigate(`/issues/${i.id}`)}> @@ -173,7 +192,7 @@ export default function MilestoneDetailPage() {
#TitleStatusPriority
{i.id} {i.title}
- {meetings.map((i) => ( + {meetings.map((i: any) => ( navigate(`/issues/${i.id}`)}>
#TitleStatusPriority
{i.id} {i.title}