diff --git a/src/frontend/src/components/EdictBoard.tsx b/src/frontend/src/components/EdictBoard.tsx index f825484..08d5616 100644 --- a/src/frontend/src/components/EdictBoard.tsx +++ b/src/frontend/src/components/EdictBoard.tsx @@ -645,23 +645,25 @@ function NewProjectDialog({ onSubmit, onClose }: { onSubmit: (id: string, name: string) => void; onClose: () => void; }) { - const [id, setId] = useState(''); const [name, setName] = useState(''); + const handleSubmit = () => { + if (!name.trim()) return; + // ID 自动生成:project-{yyyyMMddHHmmss} + const now = new Date(); + const id = `project-${now.getFullYear()}${String(now.getMonth()+1).padStart(2,'0')}${String(now.getDate()).padStart(2,'0')}${String(now.getHours()).padStart(2,'0')}${String(now.getMinutes()).padStart(2,'0')}${String(now.getSeconds()).padStart(2,'0')}`; + onSubmit(id, name.trim()); + }; return (
e.stopPropagation()}>
➕ 新建项目
-
- - setId(e.target.value.replace(/[^a-zA-Z0-9_-]/g, ''))} placeholder="my-project" style={{ width: '100%', padding: '6px 10px', borderRadius: 6, border: '1px solid var(--line)', background: 'var(--panel)', color: 'var(--fg)', fontSize: 12, boxSizing: 'border-box' }} /> -
- setName(e.target.value)} placeholder="我的项目" style={{ width: '100%', padding: '6px 10px', borderRadius: 6, border: '1px solid var(--line)', background: 'var(--panel)', color: 'var(--fg)', fontSize: 12, boxSizing: 'border-box' }} /> + setName(e.target.value)} placeholder="输入项目名称" style={{ width: '100%', padding: '6px 10px', borderRadius: 6, border: '1px solid var(--line)', background: 'var(--panel)', color: 'var(--fg)', fontSize: 12, boxSizing: 'border-box' }} />
- +
diff --git a/src/frontend/src/components/TaskModal.tsx b/src/frontend/src/components/TaskModal.tsx index e5f248e..2b4f88f 100644 --- a/src/frontend/src/components/TaskModal.tsx +++ b/src/frontend/src/components/TaskModal.tsx @@ -197,7 +197,7 @@ function SubtaskPanel({ taskId, stagesJson }: { taskId: string; stagesJson?: str return () => { mounted = false; }; }, [taskId]); - if (subtasks.length === 0 && !progress) return null; + if (subtasks.length === 0 && !progress?.total_subtasks) return null; const stages = progress?.stages || []; const total = progress?.total_subtasks || subtasks.length;