'use client'; import { memo } from 'react'; import { BugStatusBadge } from './BugStatusBadge'; import { BUG_SEVERITY_LABEL, BUG_SEVERITY_COLOR, getBugActualHours } from '@/lib/bug'; import { formatWorkHours } from '@/lib/work-hours'; import { formatDateTimeShort } from '@/lib/format'; import { resolveMemberDisplayName } from '@/lib/member-system'; import { useMemberStore } from '@/stores/useMemberStore'; import type { Bug } from '@/lib/bug'; interface Props { bug: Bug; testCaseNo?: string; onClick?: () => void; } const PRIORITY_DOT: Record = { P0: 'bg-red-500', P1: 'bg-orange-400', P2: 'bg-blue-400', P3: 'bg-zinc-300', }; function BugRowImpl({ bug, testCaseNo, onClick }: Props) { const actualHours = getBugActualHours(bug); const members = useMemberStore((s) => s.members); const assigneeName = resolveMemberDisplayName(bug.assigneeId, members); return (
{bug.bugNo}
{bug.title} {bug.plannedFixAt ? formatDateTimeShort(bug.plannedFixAt) : '待排期'} {actualHours > 0 && ( 实际 {formatWorkHours(actualHours)} )}
{BUG_SEVERITY_LABEL[bug.severity]} {assigneeName} {testCaseNo && {testCaseNo}}
); } export const BugRow = memo(BugRowImpl);