/** * [INPUT]: 依赖 lucide-react 的图标组件 * [OUTPUT]: 对外提供 SITE_ICON_OPTIONS(后台下拉选项)、getSiteIcon(name)(名→组件,带兜底) * [POS]: lib 层首页内容图标注册表(单一真相源)——被 course/scenes 的 WorksScene/HonorsScene 与 admin/SiteContentPanel 共用;DB 存图标名(字符串),渲染期映射为组件,避开「组件无法入库」 * [PROTOCOL]: 变更时更新此头部,然后检查 CLAUDE.md */ import { BookMarked, Network, Bot, RefreshCw, Briefcase, FolderTree, Link2, Boxes, Wand2, BrainCircuit, ShieldCheck, Sparkles, Rocket, Layers, Database, Award, Trophy, Medal, Star, BadgeCheck, } from 'lucide-react' // 名→组件映射(DB 的 data.icon 存这些键之一)。新增图标在此登记即可。 const SITE_ICONS = { bookmark: BookMarked, network: Network, bot: Bot, refresh: RefreshCw, briefcase: Briefcase, folder: FolderTree, link: Link2, boxes: Boxes, wand: Wand2, brain: BrainCircuit, shield: ShieldCheck, sparkles: Sparkles, rocket: Rocket, layers: Layers, database: Database, award: Award, trophy: Trophy, medal: Medal, star: Star, badge: BadgeCheck, } // 后台下拉选项(值=SITE_ICONS 的键)。 export const SITE_ICON_OPTIONS = [ { v: 'bookmark', l: '书签' }, { v: 'network', l: '网络' }, { v: 'bot', l: '机器人' }, { v: 'refresh', l: '同步' }, { v: 'briefcase', l: '公文包' }, { v: 'folder', l: '目录树' }, { v: 'link', l: '链接' }, { v: 'boxes', l: '盒子' }, { v: 'wand', l: '魔法棒' }, { v: 'brain', l: '大脑' }, { v: 'shield', l: '盾牌' }, { v: 'sparkles', l: '闪光' }, { v: 'rocket', l: '火箭' }, { v: 'layers', l: '层叠' }, { v: 'database', l: '数据库' }, { v: 'award', l: '奖章' }, { v: 'trophy', l: '奖杯' }, { v: 'medal', l: '勋章' }, { v: 'star', l: '星标' }, { v: 'badge', l: '认证' }, ] /** 图标名 → lucide 组件;未知名兜底 Sparkles,绝不抛错。 */ export function getSiteIcon(name) { return SITE_ICONS[name] ?? Sparkles }