diff --git a/apps/web/app/products/page.tsx b/apps/web/app/products/page.tsx index 0ced1e2..d2bcc0c 100644 --- a/apps/web/app/products/page.tsx +++ b/apps/web/app/products/page.tsx @@ -1,6 +1,7 @@ 'use client'; import { useState, useEffect, useMemo } from 'react'; +import { useRouter } from 'next/navigation'; import { Plus, Search, @@ -55,12 +56,14 @@ function SortableProductRow({ onToggle, onEdit, onDelete, + router, }: { product: ProductOverview; expanded: boolean; onToggle: () => void; onEdit: () => void; onDelete: () => void; + router: ReturnType; }) { const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id: product.id }); @@ -72,7 +75,7 @@ function SortableProductRow({ }; const activeVersions = product.versions.filter( - (v) => v.status === 'developing' || v.status === 'planned' + (v) => v.status === 'developing' ); const releasedCount = product.versions.filter((v) => v.status === 'released').length; @@ -148,7 +151,7 @@ function SortableProductRow({ v.name.toLowerCase().startsWith(proj.name.toLowerCase()) ); const projActive = projVersions.filter( - (v) => v.status === 'developing' || v.status === 'planned' + (v) => v.status === 'developing' ); const projReleased = projVersions.filter((v) => v.status === 'released').length; return ( @@ -156,9 +159,12 @@ function SortableProductRow({ key={proj.id} className="flex items-center gap-3 py-2 border-b border-[var(--line-soft)] last:border-b-0" > - + {proj.description && ( {proj.description} @@ -166,11 +172,16 @@ function SortableProductRow({ )}
{projActive.map((v) => ( - + onClick={() => router.push(`/versions/${v.id}`)} + className="hover:opacity-80 transition-opacity" + > + + ))} {projReleased > 0 && ( @@ -320,6 +331,7 @@ function MigrateDialog({ /* ─── Main Page ─── */ export default function ProductsPage() { + const router = useRouter(); const { overview, loading, @@ -432,9 +444,6 @@ export default function ProductsPage() { 开发中 - - 规划中 - 已发布 @@ -493,6 +502,7 @@ export default function ProductsPage() { onToggle={() => toggleExpand(product.id)} onEdit={() => setEditing(product)} onDelete={() => handleDelete(product)} + router={router} /> ))}