import { ArrowDown, ArrowUp, Pencil, Plus, Trash2 } from "lucide-react"; import type { HomeExperience, HomeTeamBuilding, HomeWildArchive } from "@/api"; import { Button } from "@/components/ui/button"; export type HomeContentSection = "experiences" | "teamBuildings" | "wildArchives"; export type HomeContentItem = HomeExperience | HomeTeamBuilding | HomeWildArchive; const sectionMeta: Record = { experiences: { label: "体验推荐", description: "维护首页体验卡片和需求入口。", addLabel: "新增体验" }, teamBuildings: { label: "团队共创", description: "维护首页团建卡片和需求入口。", addLabel: "新增团建" }, wildArchives: { label: "极境视界", description: "维护首页案例卡片和需求入口。", addLabel: "新增案例" }, }; export function homeContentSectionMeta(section: HomeContentSection) { return sectionMeta[section]; } export function HomeContentSectionRail({ section, items, onSelect, }: { section: HomeContentSection; items: Record; onSelect: (section: HomeContentSection) => void; }) { return (

首页内容

{(Object.keys(sectionMeta) as HomeContentSection[]).map((itemSection, index) => { const meta = sectionMeta[itemSection]; const active = itemSection === section; return ( ); })}
); } export function HomeContentCardRail({ section, items, onCreate, onEdit, onDelete, onMove, moving, }: { section: HomeContentSection; items: HomeContentItem[]; onCreate: () => void; onEdit: (item: HomeContentItem) => void; onDelete: (item: HomeContentItem) => void; onMove: (itemId: string, direction: -1 | 1) => void; moving?: boolean; }) { const meta = sectionMeta[section]; return (

{meta.label}

{meta.description}

{items.map((item, index) => (
{item.image ? : } {item.title} {"badge" in item ? `${item.category} · ${item.englishTitle}` : "tag" in item ? `${item.tag} · ${item.detailParagraphs?.length ?? 0} 段正文` : `${item.images?.length ?? 0} 张照片 · ${item.demandKeyword}`}
{item.isActive ? "已启用" : "已停用"}
))} {!items.length ? (

暂无{meta.label}内容

点击右上角开始新增首页卡片。

) : null}
); }