'use client'; import { useState } from 'react'; import { Plus, Trash2 } from 'lucide-react'; import { useTaskWorklogStore } from '@/stores/useTaskWorklogStore'; import { useDevTaskStore } from '@/stores/useDevTaskStore'; import { useAuthStore } from '@/stores/useAuthStore'; import { getTaskWorklogs } from '@/lib/task-worklog'; interface Props { taskId: string; } export function WorklogPanel({ taskId }: Props) { const { worklogs, addWorklog, deleteWorklog } = useTaskWorklogStore(); const { syncActualHours } = useDevTaskStore(); const user = useAuthStore((s) => s.user); const taskLogs = getTaskWorklogs(worklogs, taskId); const totalHours = taskLogs.reduce((sum, w) => sum + w.hours, 0); const today = new Date().toISOString().slice(0, 10); const [date, setDate] = useState(today); const [hours, setHours] = useState(1); const [workContent, setWorkContent] = useState(''); const [adding, setAdding] = useState(false); const handleAdd = () => { if (!workContent.trim() || hours <= 0) return; addWorklog({ taskId, userId: user?.name || '', date, hours, workContent: workContent.trim() }); const newTotal = totalHours + hours; syncActualHours(taskId, newTotal); setWorkContent(''); setHours(1); setAdding(false); }; const handleDelete = (id: string, logHours: number) => { deleteWorklog(id); syncActualHours(taskId, Math.max(0, totalHours - logHours)); }; return (
工时记录(累计 {totalHours}h) {!adding && ( )}
{adding && (
setDate(e.target.value)} className="h-8 rounded-md border border-[var(--line)] px-2 text-[12px] focus:border-[var(--accent)] focus:outline-none" /> setHours(parseFloat(e.target.value) || 0)} placeholder="小时" className="h-8 rounded-md border border-[var(--line)] px-2 text-[12px] focus:border-[var(--accent)] focus:outline-none" />
setWorkContent(e.target.value)} onKeyDown={(e) => { if (e.key === 'Enter') handleAdd(); }} placeholder="工作内容(必填)" className="h-8 w-full rounded-md border border-[var(--line)] px-2 text-[12px] focus:border-[var(--accent)] focus:outline-none" />
)} {taskLogs.length === 0 && !adding && (

暂无工时记录

)} {taskLogs.map((log) => (

{log.workContent}

{log.date} · {log.hours}h · {log.userId}

))}
); }