From a3099f6952f3d06304f8246b8460df04a090c7c8 Mon Sep 17 00:00:00 2001 From: Script Generator Date: Mon, 15 Jun 2026 18:29:58 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BA=A7=E5=93=81=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E5=8E=BB=E6=8E=89=E8=A7=84=E5=88=92=E4=B8=AD=20+=20=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E5=90=8D=E5=92=8C=E7=89=88=E6=9C=AC=E5=8F=AF=E7=82=B9?= =?UTF-8?q?=E5=87=BB=E8=B7=B3=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 移除"规划中"状态: - 去掉顶部图例的"规划中" - activeVersions 过滤改为只显示 status === 'developing' - 项目展开列表中的 projActive 同步只取 developing 2. 项目名可点击跳转: - 项目名改为按钮样式,点击跳转 /projects/{id} - hover 显示蓝色下划线 3. 版本胶囊可点击跳转: - VersionChip 包裹按钮,点击跳转 /versions/{id} - hover 半透明效果 4. 数据联动: - 不再展示规划中的版本(视觉简洁) - 点击直达对应详情页,方便快速访问 Co-Authored-By: Claude Opus 4.7 (1M context) --- apps/web/app/products/page.tsx | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) 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} /> ))}