'use client'; import { useEffect, useState } from 'react'; import { useRouter } from 'next/navigation'; import { Plus, Search } from 'lucide-react'; import { useProductStore } from '@/stores/useProductStore'; import { ProductCard } from '@/components/product/ProductCard'; import { ProductForm } from '@/components/product/ProductForm'; export default function ProductsPage() { const router = useRouter(); const { products, loading, fetchProducts, createProduct } = useProductStore(); const [showForm, setShowForm] = useState(false); const [search, setSearch] = useState(''); useEffect(() => { fetchProducts(); }, [fetchProducts]); const filtered = products.filter((p) => p.name.toLowerCase().includes(search.toLowerCase()), ); const handleCreate = async (data: { name: string; description: string }) => { await createProduct(data); setShowForm(false); }; return (

── 02 / Products

产品目录

组织内所有产品的索引。每个产品聚合需求池、发布版本与归属项目。

setSearch(e.target.value)} placeholder="搜索产品" className="w-56 rounded-md border border-[var(--line)] bg-[var(--bg-elevated)] py-2 pl-9 pr-3 text-[13px] text-[var(--ink)] placeholder:text-[var(--ink-muted)] focus:border-[var(--ink)] focus:outline-none" />

Showing

{String(filtered.length).padStart(2, '0')}

/ {String(products.length).padStart(2, '0')} 个产品
{showForm && (

── 新建产品

setShowForm(false)} />
)} {loading ? (

Loading...

) : filtered.length === 0 ? (

{search ? '没有匹配的产品' : '尚未创建任何产品'}

{search ? '试试其他关键字' : '点击右上角按钮,创建第一个产品'}

) : (
{filtered.map((product, idx) => ( router.push(`/products/${id}`)} /> ))}
)}
); }