"use client" import { PlusCircle, Pencil, Trash2, Tag } from "lucide-react" import { useTranslations } from "next-intl" import type { KnowledgePoint } from "../types" import { cn } from "@/shared/lib/utils" import { ScrollArea } from "@/shared/components/ui/scroll-area" import { Badge } from "@/shared/components/ui/badge" import { Button } from "@/shared/components/ui/button" import { EmptyState } from "@/shared/components/ui/empty-state" interface KnowledgePointListProps { knowledgePoints: KnowledgePoint[] canEdit: boolean /** 是否有创建题目权限(控制"创建相关题目"按钮可见性) */ canCreateQuestion?: boolean highlightedKpId: string | null onHighlight: (id: string) => void onEdit: (kp: KnowledgePoint) => void onDelete: (kpId: string, e: React.MouseEvent) => void onCreateQuestion: (kp: KnowledgePoint) => void } export function KnowledgePointList({ knowledgePoints, canEdit, canCreateQuestion = false, highlightedKpId, onHighlight, onEdit, onDelete, onCreateQuestion, }: KnowledgePointListProps) { const t = useTranslations("textbooks") if (knowledgePoints.length === 0) { return ( ) } return ( {knowledgePoints.map((kp) => ( onHighlight(kp.id)} > {kp.name} {/* 任意值 text-[10px]:紧凑徽章,text-xs(12px) 在列表项中过大 */} {t("panel.level")} {kp.level} {canEdit && ( {canCreateQuestion && ( { e.stopPropagation() onCreateQuestion(kp) }} title={t("dialog.knowledge.createQuestion")} aria-label={t("dialog.knowledge.createQuestion")} > )} { e.stopPropagation() onEdit(kp) }} title={t("dialog.knowledge.editKp")} aria-label={t("dialog.knowledge.editKp")} > onDelete(kp.id, e)} title={t("dialog.knowledge.deleteKp")} aria-label={t("dialog.knowledge.deleteKp")} > )} {kp.description && ( {kp.description} )} ))} ) }
{kp.description}