# KnowHub 前端精细化设计文档(完整版) 本文档基于 `reference.html` 的视觉风格和交互范式,以及 `knowhub_db/README.md` 中以 **"原子能力 (Atomic Capability)"** 为核心的全新数据库架构,提供**字段级、像素级**的前端设计规范。每一个卡片槽位、每一个 SideDrawer 区段、每一个徽章都可精确追溯至数据库的具体列与格式化规则。 --- ## 核心设计理念 1. **高密度信息展示**:采用紧凑布局、合理字号(12px-18px 主体内容)、多列网格,在有限空间内展示最大化的关联信息。 2. **连贯的钻取阅读模式 (SideDrawer)**:摒弃传统的多页面跳转,统一使用右侧滑出式的 `SideDrawer`(宽度 650px)呈现任何实体的完整详情和所有关联关系。 3. **数据驱动的四象限透视**:以 `需求 - 能力 - 工具 - 知识` 四个维度构建标签页,相互通过软关联(JSONB ID 数组)穿透数据孤岛。 4. **全关联可视化**:所有 JSONB 关联字段(implements、source_nodes、三类knowledge等)都在界面中完整展示,支持点击跳转。 5. **字段级映射**:每个 UI 元素都精确映射到数据库表的具体字段,包括数据类型、格式化规则、交互行为。 --- ## 全局字体颜色系统 ### 文本颜色规范 | 用途 | Tailwind Class | 十六进制 | 使用场景 | |------|---------------|---------|----------| | **主标题** | `text-slate-900` | `#0f172a` | 页面标题、卡片主标题、实体名称 | | **次标题** | `text-slate-700` | `#334155` | 副标题、区段标题 | | **正文** | `text-slate-600` | `#475569` | 描述文本、详情内容、长文本 | | **辅助文本** | `text-slate-500` | `#64748b` | 说明文字、提示信息 | | **次要信息** | `text-slate-400` | `#94a3b8` | 元数据、时间戳、统计数字 | | **占位符/禁用** | `text-slate-300` | `#cbd5e1` | 占位符、禁用状态、分隔文字 | | **主题色链接** | `text-indigo-600` | `#4f46e5` | 可点击链接、主操作按钮文字 | | **主题色悬停** | `text-indigo-700` | `#4338ca` | 链接悬停状态 | | **成功/已满足** | `text-emerald-600` | `#059669` | 成功状态、已满足需求、可用工具 | | **警告/部分** | `text-amber-600` | `#d97706` | 警告状态、部分满足、测试中 | | **错误/未满足** | `text-rose-600` | `#dc2626` | 错误状态、未满足需求、异常工具 | | **评分/高亮** | `text-amber-500` | `#f59e0b` | 星级评分、重要指标 | ### 字号规范 | 用途 | Tailwind Class | 像素值 | 使用场景 | |------|---------------|--------|----------| | **页面主标题** | `text-xl` | `20px` | 页面顶部标题 | | **卡片标题** | `text-lg` | `18px` | 卡片主标题、实体名称 | | **正文** | `text-base` | `16px` | 描述文本、详情内容 | | **次要文本** | `text-sm` | `14px` | 辅助信息、标签文字 | | **小标签** | `text-xs` | `12px` | 徽章、状态标签、元数据 | | **微型文字** | `text-[10px]` | `10px` | 图标标注、极小标签 | | **SideDrawer标题** | `text-2xl` | `24px` | 详情页主标题 | | **统计数字** | `text-3xl` | `30px` | StatCard 数值 | ### 字重规范 | 用途 | Tailwind Class | 字重值 | 使用场景 | |------|---------------|--------|----------| | **超黑体** | `font-black` | `900` | 页面标题、重要数字、强调标题 | | **粗体** | `font-bold` | `700` | 卡片标题、按钮文字、标签 | | **中等** | `font-semibold` | `600` | 次要标题、强调文本 | | **常规** | `font-medium` | `500` | 正文、描述文本 | | **细体** | `font-normal` | `400` | 辅助文本、长文本阅读 | --- ## 全局导航栏 (Navbar) ### 布局规格 ``` ┌──────────────────────────────────────────────────────────────────────────────┐ │ [LOGO 🗄️ K-OS] [Dashboard] [需求库] [能力库] [工具库] [知识库] 🔍 ⚙ │ │ ▲indigo-600 ▲ 激活态底部 indigo bar 2px Search │ │ rounded-xl w-64 │ │ shadow-lg shadow-indigo-100 │ └──────────────────────────────────────────────────────────────────────────────┘ 高度: 60px | 背景: bg-white/95 backdrop-blur-md | 边框: border-b border-slate-100 定位: sticky top-0 z-[100] ``` - **Logo 区**:`w-9 h-9` 的 `bg-indigo-600 rounded-xl` 图标容器 + "K-OS" 字样 (`font-black text-lg tracking-tight text-slate-900`) - **Tab 列表**:Dashboard / 需求库 / 能力库 / 工具库 / 知识库,各自带图标 - 激活态:`text-indigo-600 font-bold`,底部有 `h-1 bg-indigo-600 rounded-t-full` 指示条 - 非激活态:`text-slate-500 hover:text-slate-700 font-medium` - 图标尺寸:`size={16}` - 文字尺寸:`text-sm` - **搜索框**:`bg-slate-50 rounded-xl py-2 pl-10 pr-4 w-64 text-sm`,聚焦时 `focus:ring-2 ring-indigo-500/20 focus:bg-white` - **设置按钮**:`h-8 w-8 rounded-xl bg-slate-50 border border-slate-100 text-slate-400 hover:text-indigo-600` --- ## 通用组件设计 ### StatCard(统计卡片)— 紧凑版 ``` ╭───────────────────────────────╮ │ LABEL (10px 加粗灰色大写) [i]│ ← 图标 p-2.5 rounded-xl │ VALUE (3xl 超黑体) │ │ subtext (xs 浅灰色) │ ╰───────────────────────────────╯ 背景: bg-white | 内距: p-5 | 圆角: rounded-2xl 边框: border border-slate-100 阴影: shadow-sm 悬停: hover:shadow-md ``` - `label`:`text-[10px] font-bold text-slate-400 uppercase tracking-[0.08em]` - `value`:`text-3xl font-black tracking-tight`,颜色可自定义 - `subtext`:`text-xs text-slate-400 font-medium` - 右侧图标:`p-2.5 rounded-xl`,icon `size={18} strokeWidth={2}` ### SideDrawer(侧边抽屉)— 宽版高密度 ``` ╭════════════════════════════════════════════════ ✖ ══╮ │ {category_label} (text-[10px] text-slate-300) │ ← Header 区 │ {title} (text-xl font-black text-slate-900) │ px-6 py-4 │ │ border-b │ ────────────────────────────────────────────────── │ │ │ │ {children — 可滚动区域} │ ← Body 区 │ bg-[#FAFBFC] │ px-6 py-5 │ overflow-y-auto │ flex-1 │ space-y-5 (区段间距紧凑) │ │ │ │ ────────────────────────────────────────────────── │ │ [关闭面板] [编辑条目] │ ← Footer 区 │ bg-slate-50 text-sm bg-indigo-600 │ px-6 py-3 │ rounded-xl rounded-xl │ border-t ╰════════════════════════════════════════════════════╯ 宽度: 650px | 定位: fixed inset-y-0 right-0 z-[500] 背景: bg-white shadow-2xl 入场动画: translate-x-full → translate-x-0, 400ms cubic-bezier(0.23,1,0.32,1) 遮罩: bg-slate-900/30 backdrop-blur-sm z-[499], 点击可关闭 ``` ### SideDrawer 内区段标题规范 每个信息区段使用统一的区段标题样式: ``` ─── {SECTION_TITLE} ─────────────────────── text-[10px] font-black text-slate-300 uppercase tracking-[0.15em] 前置 w-6 h-px bg-slate-200 行内装饰线 margin-bottom: 8px ``` ### 实体穿透交互规则 所有 SideDrawer 内和卡片内的关联实体标签均为**可点击**元素: - 点击后关闭当前 SideDrawer,打开对应类型的新 SideDrawer - 实现跨实体的无缝钻取浏览 - 视觉样式:`cursor-pointer text-indigo-600 hover:text-indigo-700 hover:underline decoration-indigo-300 decoration-1 underline-offset-2` - 所有可点击实体右侧带 `ChevronRight size={12} text-slate-300` 暗示可跳转 ### 关联实体标签(EntityTag)统一样式 用于在卡片和 SideDrawer 中展示关联实体引用,统一复用: ``` [🧠 文生图] [🔧 Midjourney] [⚡ 需求名] [📄 知识名] 样式: inline-flex items-center gap-1 px-2.5 py-1 rounded-lg text-xs font-semibold cursor-pointer border transition-colors 配色按实体类型: 能力(cap): bg-amber-50 text-amber-700 border-amber-100 hover:bg-amber-100 工具(tool): bg-emerald-50 text-emerald-700 border-emerald-100 hover:bg-emerald-100 需求(req): bg-indigo-50 text-indigo-700 border-indigo-100 hover:bg-indigo-100 知识(know): bg-violet-50 text-violet-700 border-violet-100 hover:bg-violet-100 ``` --- ## 1. Dashboard(全局观测板) ### 设计目标 宏观了解系统中能力的沉淀和覆盖情况,同时以**内容拓扑树**为核心,展示每个节点关联的需求、能力、工具、知识的完整链路。 ### 页面布局 ``` ┌───────────────────────────────────────────────────────────────────┐ │ 知识图谱全景观测 (text-xl font-black text-slate-900) │ │ 从内容原子节点到工具执行端的全链路覆盖深度分析。(text-sm slate-500)│ ├─────────┬─────────┬─────────┬─────────┐ │ │StatCard │StatCard │StatCard │StatCard │ ← 4列 gap-4 mb-6 │ │原子节点 │需求覆盖 │能力覆盖 │工具覆盖 │ │ └─────────┴─────────┴─────────┴─────────┘ │ ┌───────────────────────────────────────────────────────────────────┐ │ │ │ 需求内容拓扑树 (Content Topology) │ │ bg-white rounded-2xl border shadow-sm p-8 min-h-[500px] │ │ │ │ [理念] ──┬── [商业事件] ──┬── [行业峰会 | 15,541] │ │ │ └── [融资事件 | 8,539] │ │ │ │ │ [现象] ──── [生活状态 | 14,895] │ │ │ │ 每个节点点击后展开下方关联面板 ↓ │ │ ╭──────────────────────────────────────────╮ │ │ │ ⚡ 关联需求: [生成二次元角色封面] [✅已满足]│ │ │ │ 🧠 关联能力: [AI高精视觉生成] [创意文本] │ │ │ │ 🔧 关联工具: [Midjourney] [SDXL] [GPT4o] │ │ │ │ 📄 关联知识: [角色一致性方案] [脚本拆解] │ │ │ ╰──────────────────────────────────────────╯ │ │ │ └───────────────────────────────────────────────────────────────────┘ ``` ### StatCard 数据来源 | 卡片 | label | value | subtext | icon | 数据来源 | |------|-------|-------|---------|------|----------| | 原子节点 | "原子节点" | 动态统计 | "活跃叶子节点数" | `Layers` (blue-500) | 前端从 `source_nodes` 树递归计算叶子节点总数 | | 需求覆盖率 | "需求覆盖率" | `(已满足/总数×100)%` | `"需求数: {total}"` | `Hammer` (indigo-600) | `requirement_table` 全量查询,按 `status="已满足"` 过滤 | | 能力覆盖率 | "能力覆盖率" | `(Ready/总数×100)%` | `"能力数: {total}"` | `Target` (amber-500) | 判断每个能力的 `tools[]` 关联工具是否全部 `status="可用"` | | 工具覆盖率 | "工具覆盖率" | `(可用/总数×100)%` | `"已接入: {count}"` | `Wrench` (emerald-500) | `tool_table` 全量查询,按 `status="可用"` 过滤 | ### 内容拓扑树节点 - **数据来源**:`requirement_table.source_nodes` (JSONB 对象数组) - **构建逻辑**:遍历所有 requirement 的 `source_nodes[]`,提取 `node_name`,按层级关系(可用 `/` 分隔或父子关系)构建树状结构 #### 节点视觉规格 ``` ╭───────────────────────────────────────╮ │ {node_name} {posts_count} 权重 │ │ text-sm font-bold text-white │ │ text-[10px] opacity-70 │ ╰───────────────────────────────────────╯ 背景: bg-{statusColor}-500 (权重>15000 → opacity-100, 否则 opacity-80) 内距: px-4 py-2.5 rounded-xl 悬停: hover:scale-105 hover:ring-2 ring-{color}-500/30 连线: w-8 h-px bg-slate-200 水平 | w-px bg-slate-200 垂直 ``` #### 节点展开面板(关键新增设计) 点击任意节点后,在节点下方/右侧展开一个**关联信息面板**,展示该节点辐射到的所有四类实体: ``` ╭──────────────────────────────────────────────────────────────────╮ │ 📍 {node_name} 关联实体总览 │ │ bg-white rounded-xl border border-slate-100 shadow-md p-4 │ │ │ │ ⚡ 关联需求 ({N}条): │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ {req.description} [✅已满足/🔴未满足] 14,895权重 │→ │ │ │ text-sm text-slate-700 status徽章 text-xs text-slate-400│ │ │ ├─────────────────────────────────────────────────────────┤ │ │ │ {req.description} [状态徽章] 8,200权重 │→ │ │ └─────────────────────────────────────────────────────────┘ │ │ 数据: 筛选 requirement_table where source_nodes[].node_name匹配 │ │ 每行可点击 → 打开需求 SideDrawer │ │ │ │ 🧠 关联能力 ({N}个): │ │ [AI高精视觉生成] [创意文本自动化] [多模态实时交互] │ │ 数据: 上面需求的 atomics[] → 去重 → 查 atomic_capability.name │ │ 每个为 EntityTag(cap) 可点击 → 打开能力 SideDrawer │ │ │ │ 🔧 关联工具 ({N}个): │ │ [Midjourney v6.0 🟢] [SDXL 1.0 🔴] [GPT-4o 🟢] [ElevenLabs] │ │ 数据: 上面能力的 tools[] → 去重 → 查 tool_table.name+status │ │ 每个为 EntityTag(tool) 可点击 → 打开工具 SideDrawer │ │ 带 status 色点: 可用→emerald, 异常→rose, 未接入→slate │ │ │ │ 📄 关联知识 ({N}条): │ │ [角色一致性控制方案 #用例] [5分钟爆款脚本拆解 #工序] │ │ 数据: 上面能力的 source_knowledge[] → 去重 → 查 knowledge.task │ │ 每个为 EntityTag(know) 可点击 → 打开知识 SideDrawer │ │ │ ╰──────────────────────────────────────────────────────────────────╯ ``` **关联链路推导路径**: ``` node_name → requirement_table (筛选 source_nodes[].node_name) → requirement.atomics[] → atomic_capability → capability.tools[] → tool_table → capability.source_knowledge[] → knowledge ``` ### 节点 SideDrawer 详情(drawerType='node') ``` ╭════════════════════════════════════════════════ ✖ ══╮ │ 节点观测报告 │ │ {node_name} (text-xl font-black text-slate-900) │ ├─────────────────────────────────────────────────────┤ │ │ │ ① 权重统计暗色卡片 │ │ ╭───────────────────────────────────────────╮ │ │ │ bg-slate-900 rounded-2xl p-6 text-white │ │ │ │ │ │ │ │ TOTAL NODE WEIGHT │ │ │ │ {posts_count} (text-4xl font-black白色) │ │ │ │ 来源帖子数 (text-xs opacity-50) │ │ │ │ 数据: source_nodes[].posts.length │ │ │ ╰───────────────────────────────────────────╯ │ │ │ │ ② 关联需求列表 (完整版) │ │ ─── COVERAGE REQUIREMENTS ({N}条) ──── │ │ │ │ 遍历 requirement_table,筛选: │ │ source_nodes[].node_name == 当前节点名 │ │ │ │ ╭───────────────────────────────────────────╮ │ │ │ {req.description} →│ │ │ │ text-sm font-bold text-slate-700 │ │ │ │ │ │ │ │ [{status}] 徽章 热度:{posts数} │ │ │ │ text-xs │ │ │ │ │ │ │ │ 关联能力: [🧠cap1] [🧠cap2] │ │ │ │ 数据: req.atomics[] → 查cap.name │ │ │ │ EntityTag(cap) 可点击 │ │ │ ╰───────────────────────────────────────────╯ │ │ bg-white p-4 rounded-xl border border-slate-100 │ │ hover:border-indigo-200 cursor-pointer │ │ 点击行 → 打开需求 SideDrawer │ │ space-y-3 间距 │ │ │ │ ③ 汇总关联能力 │ │ ─── AGGREGATED CAPABILITIES ({N}个) ──── │ │ [🧠 AI高精视觉生成] [🧠 创意文本自动化] ... │ │ EntityTag(cap) 横排 flex-wrap gap-2 │ │ │ │ ④ 汇总关联工具 │ │ ─── AGGREGATED TOOLS ({N}个) ──── │ │ [🔧 Midjourney 🟢] [🔧 SDXL 🔴] ... │ │ EntityTag(tool) 横排 flex-wrap gap-2 │ │ │ ╰═════════════════════════════════════════════════════╯ ``` --- ## 2. 需求库 (Requirement Library) ### 设计目标 展现前端业务需求(`requirement_table`)的落地情况,每条需求直接展示关联的能力、来源节点和满足状态。 ### 页面布局 ``` ┌───────────────────────────────────────────────────────────────────┐ │ 制作需求完备性分析 (text-xl font-black text-slate-900) │ │ 汇总原子能力 Pattern 对应的需求,按权重或满足度排序。(text-sm) │ ├────────┬────────┬────────┬────────┐ │ │StatCard│StatCard│StatCard│StatCard│ ← 4列 gap-4 mb-6 │ │需求总数│满足率 │使用能力│能力覆盖│ │ └────────┴────────┴────────┴────────┘ │ ┌───────────────────────────────────────────────────────────────────┐ │ Requirement Matrix (text-lg font-black text-slate-900 italic) │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ [WEIGHT SORT ↕] [STATUS SORT ↕] │ │ │ ├─────────────────────────────────────────────────────────┤ │ │ │ 需求行 1 (含关联能力标签和来源节点) │ │ │ │ 需求行 2 │ │ │ │ ... │ │ │ └─────────────────────────────────────────────────────────┘ │ └───────────────────────────────────────────────────────────────────┘ 容器: bg-white rounded-2xl border border-slate-100 shadow-sm ``` ### StatCard 数据来源 | 卡片 | label | value | subtext | icon | 数据来源 | |------|-------|-------|---------|------|----------| | 需求总数 | "需求总数" | `count()` | "活跃制作需求" | `Hammer` (indigo) | `GET /api/requirements` → `.length` | | 需求满足率 | "需求满足率" | `(status='已满足'/总数×100)%` | "已闭环占比" | `CheckCircle2` (indigo) | 按 `status` 过滤计算 | | 使用能力数 | "使用能力数" | 去重 `atomics[]` 总数 | "被激活原子能力" | `Target` (amber) | `new Set(flatMap(r=>r.atomics)).size` | | 能力覆盖率 | "能力覆盖率" | `(被引用/总数×100)%` | "能力库利用率" | `Activity` (amber) | 被引用能力数 / `atomic_capability.count()` | ### 需求列表行(Requirement Row)— 高密度版 ``` ╭──────────────────────────────────────────────────────────────────────╮ │ ● {description} [{status}] → │ │ text-sm font-bold text-slate-900 状态徽章 │ │ │ │ 🎯 关联能力: [🧠 AI高精视觉生成] [🧠 创意文本自动化] │ │ EntityTag(cap) 横排 可点击 │ │ 数据: atomics[] → 查 atomic_capability.name │ │ │ │ 📍 来源节点: [行业峰会 15,541] [生活状态 14,895] │ │ 节点标签 横排 bg-slate-50 text-slate-600 text-xs rounded-lg │ │ 数据: source_nodes[] → node_name + posts.length │ │ │ │ 📊 热度总权重: 15,541 🧠 关联能力: 2个 │ │ text-xs text-slate-400 font-medium │ ╰──────────────────────────────────────────────────────────────────────╯ 行内距: px-6 py-4 | 悬停: hover:bg-indigo-50/30 | 分隔: divide-y divide-slate-50 ``` #### 字段精确映射 | UI 位置 | 数据字段 | 类型 | 格式化规则 | |---------|----------|------|-----------| | **状态圆点** | `requirement_table.status` | VARCHAR | `"已满足"` → `bg-emerald-500`; `"未满足"` → `bg-rose-500`; `w-3 h-3 rounded-full` | | **主标题** | `requirement_table.description` | TEXT | `text-sm font-bold text-slate-900` | | **关联能力标签** | `requirement_table.atomics` | JSONB[] | 遍历 → 查 `atomic_capability.name`,展示为 EntityTag(cap),可点击跳转 | | **来源节点** | `requirement_table.source_nodes` | JSONB[] | 遍历每项 `{node_name, posts[]}`,展示为 `"{node_name} {posts.length}"` 标签 | | **热度权重** | `source_nodes` 衍生 | — | 遍历累加每项 `posts.length`,格式 `toLocaleString()` | | **状态徽章** | `requirement_table.status` | VARCHAR | `"已满足"` → `bg-emerald-50 text-emerald-600 border-emerald-100`; `"未满足"` → `bg-rose-50 text-rose-600 border-rose-100`; `px-3 py-1 rounded-lg text-xs font-bold` | #### 排序逻辑 - **WEIGHT SORT**:按 `source_nodes[]` 各项 `posts.length` 总和升/降序 - **STATUS SORT**:`"已满足"` = 1, `"未满足"` = 0 - 排序按钮:`px-4 py-2 bg-slate-50 text-xs font-bold text-slate-600 rounded-xl hover:bg-indigo-600 hover:text-white` ### 需求 SideDrawer 详情(drawerType='req') ``` ╭════════════════════════════════════════════════ ✖ ══╮ │ 制作需求分析 │ │ {description} (text-xl font-black text-slate-900) │ ├─────────────────────────────────────────────────────┤ │ │ │ ① 状态展示区 │ │ ╭───────────────────────────────────────────╮ │ │ │ bg-{statusColor}-50 border-{color}-100 │ │ │ │ rounded-xl p-5 │ │ │ │ │ │ │ │ REQUIREMENT STATUS │ │ │ │ text-[10px] font-bold text-{color}-600 │ │ │ │ uppercase tracking-[0.1em] │ │ │ │ │ │ │ │ {status} (text-2xl font-black) │ │ │ │ 字段: requirement_table.status │ │ │ │ "已满足" → emerald色系 │ │ │ │ "未满足" → rose色系 │ │ │ ╰───────────────────────────────────────────╯ │ │ │ │ ② 匹配分析结果 (Match Analysis) │ │ ─── MATCH ANALYSIS & ACTION PLAN ──── │ │ ╭───────────────────────────────────────────╮ │ │ │ bg-white rounded-xl border p-5 │ │ │ │ border-slate-100 shadow-sm │ │ │ │ │ │ │ │ [⚠ AlertCircle] 左上角图标 │ │ │ │ bg-amber-500 text-white p-2 rounded-lg │ │ │ │ │ │ │ │ "{match_result}" │ │ │ │ 字段: requirement_table.match_result │ │ │ │ 样式: text-sm text-slate-600 │ │ │ │ leading-relaxed │ │ │ │ font-serif italic │ │ │ │ 用引号包裹的引用格式 │ │ │ │ │ │ │ │ 示例: "通过 Midjourney + ComfyUI 组合 │ │ │ │ 可满足,但中文提示词支持不足,需调研 │ │ │ │ 替代方案" │ │ │ ╰───────────────────────────────────────────╯ │ │ │ │ ③ 关联的原子能力 (Associated Atomics) │ │ ─── ASSOCIATED ATOMICS ({N}个) ──── │ │ │ │ 数据: requirement_table.atomics (JSONB[]) │ │ 每个 ID → 查 atomic_capability 获取完整信息 │ │ │ │ 每条展示为信息丰富的小卡片(而非仅标签): │ │ ╭───────────────────────────────────────────╮ │ │ │ 🧠 {cap.name} [{Ready?}] →│ │ │ │ text-sm font-bold text-slate-900 │ │ │ │ │ │ │ │ {cap.description} │ │ │ │ text-xs text-slate-500 line-clamp-1 │ │ │ │ │ │ │ │ 评估标准: "{cap.criterion}" │ │ │ │ text-xs text-amber-600 italic │ │ │ │ │ │ │ │ 实现工具: [🔧 Midjourney] [🔧 SDXL] │ │ │ │ 数据: cap.tools[] → 查 tool_table.name │ │ │ │ EntityTag(tool) 横排可点击 │ │ │ │ │ │ │ │ 知识支撑: {cap.source_knowledge.length}条 │ │ │ │ text-xs text-slate-400 │ │ │ ╰───────────────────────────────────────────╯ │ │ bg-white p-4 rounded-xl border border-slate-100 │ │ hover:border-indigo-200 hover:shadow-sm │ │ cursor-pointer space-y-3 间距 │ │ 点击卡片整体 → 打开能力 SideDrawer │ │ │ │ ④ 数据来源节点 (Source Nodes) │ │ ─── SOURCE NODES ({N}个) ──── │ │ │ │ 数据: requirement_table.source_nodes (JSONB[]) │ │ 结构: [{node_name: string, posts: string[]}] │ │ │ │ 每项展示为: │ │ ╭───────────────────────────────────────────╮ │ │ │ 📍 {node_name} │ │ │ │ text-sm font-bold text-slate-700 │ │ │ │ │ │ │ │ 热度权重: {posts.length} 篇关联帖子 │ │ │ │ text-xs text-slate-500 │ │ │ │ │ │ │ │ 帖子 ID 列表 (折叠/展开): │ │ │ │ [post-001] [post-002] [post-003] ... │ │ │ │ text-[10px] text-slate-400 font-mono │ │ │ │ 默认折叠,点击"展开全部"显示完整列表 │ │ │ ╰───────────────────────────────────────────╯ │ │ bg-slate-50 p-4 rounded-xl border border-slate-100│ │ space-y-3 间距 │ │ │ │ ⑤ 操作按钮区 │ │ [🎯 Align Capabilities (flex-1 bg-indigo-600)] │ │ [🔗 Share (w-10 h-10 bg-white)] │ │ text-sm font-bold rounded-xl │ │ │ ╰═════════════════════════════════════════════════════╯ ``` --- ## 3. 能力库 (Capability Library) — 系统核心 ### 设计目标 原子能力表(`atomic_capability`)的展现和操作大盘。 ### 页面布局 ``` ┌─────────────────────────────────────────────────────────────────────┐ │ 制作能力分布分析 │ │ 能力实现率:当某一能力关联的所有工具都已接入并可用时, │ │ 该能力定义为"Ready"。 │ ├─────────────────────────┬─────────────────────────┐ │ │ StatCard │ StatCard │ ← 2列网格 │ │ 原子能力总数 │ 能力实现率 │ │ └─────────────────────────┴─────────────────────────┘ │ ┌──────────────────────────────┬──────────────────────────────┐ │ │ 能力卡片 1 │ 能力卡片 2 │ │ │ │ │ │ ├──────────────────────────────┼──────────────────────────────┤ │ │ 能力卡片 3 │ 能力卡片 4 │ │ │ │ │ │ └──────────────────────────────┴──────────────────────────────┘ │ 网格: grid-cols-1 lg:grid-cols-2 gap-10 ``` ### StatCard 数据来源(能力库页头) | 卡片 | label | value | subtext | icon | 数据来源 | |------|-------|-------|---------|------|----------| | 原子能力总数 | "原子能力总数" | `atomic_capability.count()` | "已定义核心能力" | `Target` (amber) | `GET /api/atomic_capabilities` → `.length` | | 能力实现率 | "能力实现率" | `(Ready数/总数*100)%` | "工具链闭环的能力占比" | `ShieldCheck` (emerald) | 判断逻辑:遍历每个能力的 `tools[]`,查找对应 `tool_table` 记录,若所有关联工具 `status="可用"` 则 Ready | ### 能力网格卡片 (Capability Card) ``` ╭────────────────────────────────────────────────────────────╮ │ │ │ [🧠 Cpu图标] [状态徽章] │ │ bg-slate-50 p-4 px-5 py-2 rounded-2xl │ │ rounded-3xl text-[10px] font-black │ │ hover → bg-indigo-600 uppercase tracking-[0.2em]│ │ hover → text-white │ │ │ │ {name} │ │ 字段: atomic_capability.name (VARCHAR) │ │ 样式: text-3xl font-black text-slate-800 │ │ hover → text-indigo-600 │ │ │ │ {description} │ │ 字段: atomic_capability.description (TEXT) │ │ 样式: text-base text-slate-400 leading-relaxed line-clamp-2│ │ 最多显示2行,超出省略 │ │ │ │ ─────────────── (mt-auto pt-8 border-t) ─────────────── │ │ │ │ [工具头像组] [📚 N Knowledge Links] │ │ 取自 tools[] 关联的 source_knowledge.length │ │ tool_table.name 首字母 bg-slate-50 px-5 py-2 │ │ 最多展示3个,多余+N More rounded-2xl text-[10px] │ │ │ ╰────────────────────────────────────────────────────────────╯ 容器: bg-white p-12 rounded-[3.5rem] border border-slate-100 悬停: hover:shadow-2xl 高度: min-h-[350px] flex flex-col 右侧状态条: absolute top-0 right-0 w-6 h-full bg-{color}-500 opacity-20 ``` #### 字段精确映射 | UI 位置 | 数据字段 | 类型 | 格式化规则 | |---------|----------|------|-----------| | **图标** | 固定 | — | `Cpu` 图标,`size={32}` | | **状态徽章** | 动态计算 | — | 判断逻辑:`tools[]` 关联的所有 `tool_table.status` 是否全部为 `"可用"`。全满足 → `"Capability Fully Ready"` (emerald); 否则 → `"Development In Progress"` (slate) | | **能力名称** | `atomic_capability.name` | VARCHAR | `text-3xl font-black` | | **能力描述** | `atomic_capability.description` | TEXT | `text-base text-slate-400 line-clamp-2`,最多2行 | | **工具头像组** | `atomic_capability.tools` | JSONB[] | 遍历 `tools[]`,查询 `tool_table.name` 取首字母显示为头像。每个头像 `w-12 h-12 rounded-2xl bg-white border-4 border-slate-50 shadow-lg`。最多3个,超出 `+{N} More` | | **知识链接数** | `atomic_capability.source_knowledge` | JSONB[] | 取 `.length`,展示为 `"{N} Knowledge Links"` | | **右侧状态条** | 动态计算 | — | Ready → `bg-emerald-500 opacity-20`; 否则 → `bg-slate-500 opacity-20` | ### 能力 SideDrawer 详情(drawerType='cap') ``` ╭═══════════════════════════════════════════════════ ✖ ═══╮ │ │ │ Observation & Analytics │ │ 原子能力蓝图 Capability │ │ │ │ ────────────────────────────────────────────────────── │ │ │ │ ① 能力标题区 │ │ ───────────── │ │ [ATOMIC CAPABILITY] (浅色小字 10px uppercase) │ │ {name} │ │ 字段: atomic_capability.name (VARCHAR) │ │ 样式: text-5xl font-black text-slate-800 tracking-tighter│ │ │ │ ② 能力描述 │ │ ───────── │ │ {description} │ │ 字段: atomic_capability.description (TEXT) │ │ 样式: text-lg text-slate-500 leading-relaxed │ │ │ │ ③ 核心评估标准 (Criterion) │ │ ╭──────────────────────────────────────────────╮ │ │ │ bg-amber-50 border border-amber-100 p-8 │ │ │ │ rounded-[2.5rem] shadow-sm │ │ │ │ │ │ │ │ 🎯 CORE CRITERION │ │ │ │ (text-[10px] font-black text-amber-600 │ │ │ │ uppercase tracking-[0.2em]) │ │ │ │ │ │ │ │ "{criterion}" │ │ │ │ 字段: atomic_capability.criterion (TEXT) │ │ │ │ 样式: text-lg font-black text-amber-800 │ │ │ │ leading-relaxed │ │ │ │ 示例: "构图准确度 > 90%, 角色特征保持率 > │ │ │ │ 85%, 出图无变形" │ │ │ ╰──────────────────────────────────────────────╯ │ │ │ │ ④ 下发工具执行链 (Implements Detail) │ │ ─── Implements Detail ─── │ │ │ │ 数据源: atomic_capability.implements (JSONB{}) │ │ 结构: { tool_name: description_string, ... } │ │ │ │ 遍历 implements 对象的每个 key-value: │ │ │ │ ╭────────────────────────────────────────────╮ │ │ │ ⚙️ {key} (即 tool_table.name) │ │ │ │ 样式: text-xl font-black text-slate-800 │ │ │ │ 可点击 → 打开工具 SideDrawer │ │ │ │ │ │ │ │ > {value} (即实现描述) │ │ │ │ 样式: text-base text-slate-500 │ │ │ │ leading-relaxed pl-6 │ │ │ │ border-l-4 border-indigo-200 │ │ │ │ │ │ │ │ 示例: │ │ │ │ ⚙️ Midjourney │ │ │ │ > 通过 /imagine 命令生成图像,效果优秀 │ │ │ │ 但不支持中文提示词。 │ │ │ │ │ │ │ │ ⚙️ Stable Diffusion XL │ │ │ │ > 开源生态最丰富的图像生成引擎,支持 │ │ │ │ 本地部署,显卡显存需>16G。 │ │ │ ╰────────────────────────────────────────────╯ │ │ 容器: bg-white p-10 rounded-[3rem] │ │ border border-slate-100 shadow-sm │ │ 每个工具项之间: 16px 间距 (space-y-4) │ │ │ │ ⑤ 辐射的需求矩阵 (Requirements) │ │ ─── Requirements ─── │ │ │ │ 数据源: atomic_capability.requirements (JSONB[]) │ │ 对每个 ID 查询 requirement_table 获取完整信息 │ │ │ │ 每条展示为可点击条目: │ │ ╭────────────────────────────────────────────╮ │ │ │ ⚡ [需求] {req.description} │→ │ │ │ [{req.status}] 徽章 │ │ │ │ bg-white p-6 rounded-[2rem] border │ │ │ │ border-slate-100 hover:border-indigo-200 │ │ │ │ hover:shadow-lg cursor-pointer │ │ │ ╰────────────────────────────────────────────╯ │ │ 点击 → 打开需求 SideDrawer (drawerType='req') │ │ │ │ ⑥ 支撑该能力的知识沉淀 (Source Knowledge) │ │ ─── Source Knowledge ─── │ │ │ │ 数据源: atomic_capability.source_knowledge (JSONB[]) │ │ 对每个 ID 查询 knowledge 表获取 task 和 types │ │ │ │ 每条展示为: │ │ ╭────────────────────────────────────────────╮ │ │ │ 🔗 [{types 首项}] {knowledge.task} │ │ │ │ (#{knowledge.id 尾部片段}) │ │ │ │ │ │ │ │ bg-slate-50 p-5 rounded-2xl border │ │ │ │ border-slate-100 │ │ │ │ hover:bg-indigo-50 cursor-pointer │ │ │ │ │ │ │ │ types 用 tag 呈现: │ │ │ │ knowledge.types[] → 多色独立小标签 │ │ │ │ 工序→blue 用例→purple 工具→emerald │ │ │ │ 经验→amber 定义→slate User Profile→rose │ │ │ ╰────────────────────────────────────────────╯ │ │ 点击 → 打开知识 SideDrawer (drawerType='know') │ │ │ ╰══════════════════════════════════════════════════════════╯ ``` --- ## 4. 工具库 (Tool Library) ### 设计目标 展示系统中可利用的工具集(`tool_table`)。 ### 页面布局 ``` ┌─────────────────────────────────────────────────────────────────────┐ │ 工具资源完备性分析 │ │ 工具成熟度:成功案例数量达到 10 份以上即定义为"Mature"。 │ ├──────────┬──────────┬──────────┐ │ │ StatCard │ StatCard │ StatCard │ ← 3列网格 gap-6 │ │ 工具总数 │ 工具可用 │ 工具成熟 │ │ └──────────┴──────────┴──────────┘ │ ┌─────────────────┬─────────────────┬─────────────────┐ │ │ 工具卡片 1 │ 工具卡片 2 │ 工具卡片 3 │ │ ├─────────────────┼─────────────────┼─────────────────┤ │ │ 工具卡片 4 │ 工具卡片 5 │ ... │ │ └─────────────────┴─────────────────┴─────────────────┘ │ 网格: grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-10 ``` ### StatCard 数据来源(工具库页头) | 卡片 | label | value | subtext | icon | 数据来源 | |------|-------|-------|---------|------|----------| | 工具总数 | "工具总数" | `tool_table.count()` | "活跃工具库总计" | `Wrench` (indigo) | `GET /api/tools` → `.length` | | 工具可用率 | "工具可用率" | `(status='可用'的数量/总数*100)%` | "已接入/总数" | `Globe` (indigo) | 按 `tool_table.status` 过滤计算 | | 工具成熟度 | "工具成熟度" | `(case知识>10的工具数/总数*100)%` | "案例充足(>10)/总数" | `Zap` (amber) | 按 `tool_table.case_knowledge.length > 10` 过滤计算 | ### 工具扁平卡片 (Tool Card) ``` ╭────────────────────────────────────────────────────────────╮ │ │ │ [🔧 Wrench图标] [状态徽章] │ │ w-16 h-16 bg-slate-50 接入状态 │ │ rounded-[1.5rem] px-4 py-2 │ │ hover → bg-indigo-600 rounded-2xl │ │ hover → text-white text-[10px] │ │ │ │ {name} {version} │ │ ▲ ▲ │ │ 2xl sm text-slate-200 ml-2 │ │ font-black │ │ 字段: tool_table.name tool_table.version │ │ │ │ {introduction} │ │ 字段: tool_table.introduction (TEXT) │ │ 样式: text-base text-slate-400 leading-relaxed │ │ line-clamp-2 min-h-[50px] │ │ │ │ ─── (mt-auto) ────────────────────────────────────────── │ │ │ │ ✅ CASE STUDY {cases} FILES [MATURE] │ │ text-[10px] font-black text-xs font-black │ │ text-slate-300 uppercase >10 → text-emerald-500 │ │ │ │ [████████████████████░░░░░░] ← 进度条 │ │ h-2.5 bg-slate-50 rounded-full │ │ 内部: bg-emerald-500 或 bg-indigo-500 │ │ 宽度: Math.min((cases/30)*100, 100)% │ │ │ ╰────────────────────────────────────────────────────────────╯ 容器: bg-white border border-slate-100 rounded-[3rem] p-12 悬停: hover:shadow-2xl hover:border-indigo-100 高度: flex flex-col ``` #### 字段精确映射 | UI 位置 | 数据字段 | 类型 | 格式化规则 | |---------|----------|------|-----------| | **图标** | 固定 | — | `Wrench` 图标,`size={32} strokeWidth={2.5}` | | **状态徽章** | `tool_table.status` | VARCHAR | `"可用"` → `bg-emerald-50 text-emerald-600 border-emerald-100 shadow-sm shadow-emerald-100`; `"未接入"` / `"异常"` → `bg-rose-50 text-rose-600 border-rose-100` | | **工具名称** | `tool_table.name` | VARCHAR | `text-2xl font-black text-slate-800` | | **版本号** | `tool_table.version` | VARCHAR | `text-sm font-medium text-slate-200 ml-2` | | **功能介绍** | `tool_table.introduction` | TEXT | `text-base text-slate-400 line-clamp-2 min-h-[50px]` | | **案例数** | `tool_table.case_knowledge` | JSONB[] | 取 `.length`,展示为 "{N} FILES"。若 `> 10` 追加 `"✨ MATURE"` (text-emerald-500) | | **进度条** | `tool_table.case_knowledge.length` | JSONB[] | 宽度比例 `Math.min((length/30)*100, 100)%`。`> 10` 用 `bg-emerald-500`,否则 `bg-indigo-500`。带 `shadow-[0_0_10px_rgba(79,70,229,0.3)]` | ### 工具 SideDrawer 详情(drawerType='tool') ``` ╭═══════════════════════════════════════════════════ ✖ ═══╮ │ │ │ Observation & Analytics │ │ 工具技术规格 Tool Spec │ │ │ │ ────────────────────────────────────────────────────── │ │ │ │ ① 工具标题 + 版本号 │ │ ───────────────── │ │ {name} [{version}] │ │ 字段: tool_table.name tool_table.version │ │ 样式: text-5xl font-black bg-indigo-50 px-6 py-3 │ │ text-slate-800 rounded-2xl font-black │ │ tracking-tighter text-indigo-600 text-sm │ │ uppercase border │ │ border-indigo-100 │ │ │ │ ② 暗色数据概览卡片 │ │ ╭──────────────────────────────────────────────╮ │ │ │ bg-slate-900 p-10 rounded-[3.5rem] │ │ │ │ text-white shadow-2xl │ │ │ │ 装饰圆: absolute bottom-0 right-0 │ │ │ │ w-64 h-64 bg-white/5 rounded-full │ │ │ │ │ │ │ │ ┌──────────────┬──────────────┐ │ │ │ │ │ MATURITY │ SERVICE │ │ │ │ │ │ CASES │ HEALTH │ │ │ │ │ │ │ │ │ │ │ │ │ {cases} │ {status} │ │ │ │ │ │ 字段: │ 字段: │ │ │ │ │ │ case_ │ tool_table │ │ │ │ │ │ knowledge │ .status │ │ │ │ │ │ .length │ │ │ │ │ │ │ text-5xl │ text-5xl │ │ │ │ │ │ font-black │ font-black │ │ │ │ │ │ │ "可用"→ │ │ │ │ │ │ │ emerald-400 │ │ │ │ │ │ │ "异常"→ │ │ │ │ │ │ │ rose-400 │ │ │ │ │ └──────────────┴──────────────┘ │ │ │ │ │ │ │ │ 成熟度定义说明 (italic, border-l-4 │ │ │ │ border-indigo-500 pl-6 text-sm text-slate-400)│ │ │ ╰──────────────────────────────────────────────╯ │ │ │ │ ③ 图谱知识分布 (Knowledge Breakdown) │ │ ─── Knowledge Breakdown ─── │ │ │ │ 三张横排计分卡 (grid-cols-3 gap-6): │ │ │ │ ╭──────────╮ ╭──────────╮ ╭──────────╮ │ │ │ 工具知识 │ │ 工序知识 │ │ 实操案例 │ │ │ │ TOOL │ │ PROCESS │ │ CASE │ │ │ │ KNOWLEDGE │ │ KNOWLEDGE│ │ KNOWLEDGE│ │ │ │ │ │ │ │ │ │ │ │ {count} │ │ {count} │ │ {count} │ │ │ │ 字段: │ │ 字段: │ │ 字段: │ │ │ │ tool_ │ │ process_ │ │ case_ │ │ │ │ knowledge │ │ knowledge│ │ knowledge│ │ │ │ .length │ │ .length │ │ .length │ │ │ │ │ │ │ │ │ │ │ │ text-3xl │ │ text-3xl │ │ text-3xl │ │ │ │ font-black│ │ font-black│ │ font-black│ │ │ ╰──────────╯ ╰──────────╯ ╰──────────╯ │ │ bg-white p-8 rounded-[2rem] border │ │ border-slate-100 shadow-sm text-center │ │ 每张卡的标签色: │ │ 工具知识 → indigo 工序知识 → amber 案例 → emerald │ │ │ │ ④ 详细技术指标 (Technical Specification) │ │ ─── Technical Specification ─── │ │ │ │ 双列网格 (grid-cols-2 gap-6): │ │ │ │ ╭──────────────────╮ ╭──────────────────╮ │ │ │ INPUT FORMAT │ │ OUTPUT FORMAT │ │ │ │ text-[10px] │ │ text-[10px] │ │ │ │ font-black │ │ font-black │ │ │ │ text-slate-300 │ │ text-slate-300 │ │ │ │ uppercase │ │ uppercase │ │ │ │ │ │ │ │ │ │ {input} │ │ {output} │ │ │ │ 字段: │ │ 字段: │ │ │ │ tool_table.input │ │ tool_table.output│ │ │ │ (JSONB) │ │ (JSONB) │ │ │ │ text-base │ │ text-base │ │ │ │ font-black │ │ font-black │ │ │ │ text-slate-800 │ │ text-slate-800 │ │ │ ╰──────────────────╯ ╰──────────────────╯ │ │ bg-white border border-slate-100 p-8 rounded-[2.5rem] │ │ shadow-sm hover:shadow-xl │ │ │ │ ⑤ 操作向导 (Operational Tutorial) │ │ ╭──────────────────────────────────────────────╮ │ │ │ bg-white border border-slate-100 p-10 │ │ │ │ rounded-[3rem] shadow-sm │ │ │ │ │ │ │ │ 💬 OPERATIONAL TUTORIAL │ │ │ │ MessageSquare icon text-indigo-400 │ │ │ │ │ │ │ │ {tutorial} │ │ │ │ 字段: tool_table.tutorial (TEXT) │ │ │ │ 样式: text-lg text-slate-600 leading-relaxed │ │ │ │ font-serif text-justify │ │ │ │ 若内容含代码片段,使用 高亮 │ │ │ ╰──────────────────────────────────────────────╯ │ │ │ │ ⑥ 驱动的能力 (Capabilities) │ │ ─── Driven Capabilities ─── │ │ │ │ 数据源: tool_table.capabilities (JSONB[]) │ │ 对每个 ID 查询 atomic_capability.name │ │ │ │ 横排标签组: │ │ [{cap.name}] [{cap.name}] ... │ │ bg-amber-50 px-5 py-2 rounded-2xl text-amber-700 │ │ text-[10px] font-black uppercase │ │ border border-amber-100 │ │ hover:bg-amber-100 cursor-pointer │ │ 点击 → 打开能力 SideDrawer (drawerType='cap') │ │ │ │ ⑦ 知识条目详情 │ │ ─── Associated Knowledge ─── │ │ │ │ 分三组展示(各组用折叠展开): │ │ │ │ 📘 工具知识 (tool_knowledge): │ │ 遍历 tool_table.tool_knowledge (JSONB[]) │ │ 每项查 knowledge.task 展示任务名 │ │ │ │ 📗 工序知识 (process_knowledge): │ │ 遍历 tool_table.process_knowledge (JSONB[]) │ │ 每项查 knowledge.task 展示任务名 │ │ │ │ 📕 案例知识 (case_knowledge): │ │ 遍历 tool_table.case_knowledge (JSONB[]) │ │ 每项查 knowledge.task 展示任务名 │ │ │ │ 每条展示为可点击条目: │ │ ╭────────────────────────────────────────────╮ │ │ │ 📄 {knowledge.task} │→ │ │ │ [{types 标签}] │ │ │ │ bg-slate-50 p-4 rounded-2xl │ │ │ │ hover:bg-indigo-50 cursor-pointer │ │ │ ╰────────────────────────────────────────────╯ │ │ 点击 → 打开知识 SideDrawer (drawerType='know') │ │ │ │ ⑧ 运维时间戳 │ │ ───────────── │ │ 🕐 最后更新: {updated_time → 相对时间} │ │ 字段: tool_table.updated_time (BIGINT, 秒级时间戳) │ │ 格式化: 转换为相对时间,如 "3天前" / "2小时前" │ │ 样式: text-xs text-slate-300 font-medium │ │ 位置: SideDrawer 底部或卡片角落 │ │ │ ╰══════════════════════════════════════════════════════════╯ ``` --- ## 5. 知识库 (K-Data Center) ### 设计目标 沉淀生产、方法论(`knowledge`)的最佳实践。 ### 页面布局 ``` ┌─────────────────────────────────────────────────────────────────────┐ │ 知识沉淀库 │ │ 沉淀生产过程中积累的用例、方法论与标准,驱动原子能力的演进。 │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ ┌────────────────────────────────────────────────────────────┐ │ │ │ [🧠 BrainCircuit图标] K-Data Center 🔍搜索 🔽筛选 │ │ │ │ bg-indigo-600 p-4 w-72 ListFilter │ │ │ │ rounded-3xl text-white w-12 h-12 │ │ │ ├────────────────────────────────────────────────────────────┤ │ │ │ Knowledge/Task │ Categories │ Evaluation │ Actions │ │ │ │ (列头 text-[10px] font-black text-slate-300 uppercase) │ │ │ ├────────────────────────────────────────────────────────────┤ │ │ │ ● {task} │ [{types}] │ ★ {score} │ → │ │ │ │ ● {task} │ [{types}] │ ★ {score} │ → │ │ │ │ ● {task} │ [{types}] │ ★ {score} │ → │ │ │ └────────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────┘ 容器: bg-white rounded-[3rem] border border-slate-100 shadow-sm 表头区: p-10 border-b border-slate-50 ``` ### 表格行(Knowledge Row) ``` ╭────────────────────────────────────────────────────────────────────╮ │ │ │ ● {task} │ [#工序] [#经验] │ ★ {score} │ [→] │ │ ▲ ▲ │ ▲ │ ▲ │ ▲ │ │ 指示点 任务名称 │ 类型标签组 │ 评分 │ 箭头按钮 │ │ w-3 lg │ 多色独立标签 │ amber-500 │ w-12 │ │ h-3 font-black │ │ font-black │ h-12 │ │ bg- text-slate │ │ text-lg │ rounded │ │ indigo -800 │ │ │ -2xl │ │ -600 │ │ │ │ │ │ ╰────────────────────────────────────────────────────────────────────╯ 行内距: px-10 py-8 | 悬停: hover:bg-indigo-50/30 分隔: border-b border-slate-50 ``` #### 字段精确映射 | UI 位置 | 数据字段 | 类型 | 格式化规则 | |---------|----------|------|-----------| | **指示圆点** | 固定 | — | `w-3 h-3 rounded-full bg-indigo-600 shadow-[0_0_12px_rgba(79,70,229,0.8)]` | | **任务名称** | `knowledge.task` | VARCHAR | `font-black text-slate-800 text-lg`,hover → `text-indigo-600` | | **类型标签** | `knowledge.types` | ARRAY | 遍历数组,每个类型一个独立标签。样式: `px-4 py-1.5 bg-white border border-slate-100 text-indigo-600 rounded-xl text-[10px] font-black shadow-sm uppercase` | | **评分** | `knowledge.eval.score` | JSONB→number | Star 图标 (`fill-current`) + 分数值。`text-amber-500 font-black text-lg` | | **操作箭头** | 固定 | — | `ChevronRight` 图标,hover → `bg-indigo-600 text-white shadow-lg` | #### 类型标签配色方案 | types 值 | 背景色 | 文字色 | 边框色 | |---------|--------|--------|--------| | 工序 | `bg-blue-50` | `text-blue-600` | `border-blue-100` | | 用例 | `bg-purple-50` | `text-purple-600` | `border-purple-100` | | 工具 | `bg-emerald-50` | `text-emerald-600` | `border-emerald-100` | | 经验 | `bg-amber-50` | `text-amber-600` | `border-amber-100` | | 定义 | `bg-slate-50` | `text-slate-600` | `border-slate-200` | | User Profile | `bg-rose-50` | `text-rose-600` | `border-rose-100` | ### 知识 SideDrawer 详情(drawerType='know') ``` ╭═══════════════════════════════════════════════════ ✖ ═══╮ │ │ │ Observation & Analytics │ │ 知识沉淀条目 Knowledge │ │ │ │ ────────────────────────────────────────────────────── │ │ │ │ ① 标题 + 评分区 │ │ ───────────── │ │ ┌───────────────────────────────┬───────────┐ │ │ │ {task} │ [★] │ │ │ │ 字段: knowledge.task │ {score} │ │ │ │ 样式: text-4xl font-black │ Star图标 │ │ │ │ text-slate-800 │ fill- │ │ │ │ tracking-tighter │ amber-500│ │ │ │ flex-1 mr-10 │ text-2xl │ │ │ │ leading-[1.1] │ bg-amber │ │ │ │ │ -50 p-6 │ │ │ │ │ rounded- │ │ │ │ │ [2rem] │ │ │ │ │ border │ │ │ │ │ amber-100│ │ │ └───────────────────────────────┴───────────┘ │ │ │ │ ② 业务标签系 (Types + Tags) │ │ ───────────────────── │ │ │ │ A. 类型标签 (knowledge.types ARRAY): │ │ [{工序}] [{经验}] [{用例}] ... │ │ px-5 py-2 bg-white rounded-2xl text-[10px] │ │ font-black text-indigo-500 tracking-[0.2em] │ │ uppercase border border-slate-100 shadow-sm │ │ 配色方案同上表 │ │ │ │ B. 标签键值对 (knowledge.tags JSONB): │ │ 遍历 tags 对象的每个 key-value 对 │ │ 每对展示为 KV 徽章组: │ │ ╭──────────────────────────────╮ │ │ │ {key}: {value} │ │ │ │ 如: intent: 信息调研 │ │ │ │ project: feature_extract│ │ │ │ bg-slate-50 px-4 py-2 │ │ │ │ rounded-xl text-xs │ │ │ │ text-slate-600 font-medium │ │ │ │ border border-slate-100 │ │ │ ╰──────────────────────────────╯ │ │ │ │ ③ 评估明细窗 (Eval Details) │ │ ─── Evaluation Details ─── │ │ │ │ 数据源: knowledge.eval (JSONB) │ │ 结构: {score, harmful, helpful, confidence} │ │ │ │ 四列网格 (grid-cols-4 gap-4): │ │ │ │ ╭────────╮ ╭────────╮ ╭────────╮ ╭────────╮ │ │ │ SCORE │ │HARMFUL │ │HELPFUL │ │CONFID. │ │ │ │ │ │ │ │ │ │ │ │ │ │ {score}│ │{harmful│ │{helpful│ │{confid │ │ │ │ │ │} │ │} │ │ence} │ │ │ │ 5 │ │ 0 │ │ 1 │ │ 0.5 │ │ │ │ │ │ │ │ │ │ │ │ │ │ amber │ │ rose │ │emerald │ │ blue │ │ │ │ text- │ │ text- │ │ text- │ │ text- │ │ │ │ 3xl │ │ 3xl │ │ 3xl │ │ 3xl │ │ │ │ font- │ │ font- │ │ font- │ │ font- │ │ │ │ black │ │ black │ │ black │ │ black │ │ │ ╰────────╯ ╰────────╯ ╰────────╯ ╰────────╯ │ │ bg-white p-6 rounded-[2rem] border │ │ border-slate-100 shadow-sm text-center │ │ │ │ score: text-amber-500 (Star图标) │ │ harmful: 0 → text-emerald-500; >0 → text-rose-500 │ │ helpful: >0 → text-emerald-500; 0 → text-slate-400 │ │ confidence: 数值颜色梯度 │ │ <0.3 → text-rose-500 │ │ 0.3-0.7 → text-amber-500 │ │ >0.7 → text-emerald-500 │ │ │ │ ④ 正文区 (Content) │ │ ╭──────────────────────────────────────────────╮ │ │ │ bg-white p-12 rounded-[4rem] │ │ │ │ border border-slate-100 │ │ │ │ shadow-2xl │ │ │ │ │ │ │ │ [📄 FileText 图标] │ │ │ │ absolute -top-5 -left-5 │ │ │ │ bg-indigo-600 text-white p-5 │ │ │ │ rounded-[2rem] shadow-2xl shadow-indigo-200 │ │ │ │ │ │ │ │ {content} │ │ │ │ 字段: knowledge.content (TEXT) │ │ │ │ 样式: text-slate-700 │ │ │ │ leading-[1.9] │ │ │ │ font-serif │ │ │ │ whitespace-pre-wrap │ │ │ │ text-xl │ │ │ │ text-justify │ │ │ │ tracking-tight │ │ │ │ 支持 Markdown 渲染 (marked.js) │ │ │ ╰──────────────────────────────────────────────╯ │ │ │ │ ⑤ 追溯属性 (Lineage / Source) │ │ ╭──────────────────────────────────────────────╮ │ │ │ bg-slate-50 p-10 rounded-[3rem] │ │ │ │ border border-slate-100 │ │ │ │ │ │ │ │ KNOWLEDGE LINEAGE & TRACEABILITY │ │ │ │ (text-[10px] font-black text-slate-300 │ │ │ │ uppercase tracking-[0.3em]) │ │ │ │ │ │ │ │ 👤 CONTRIBUTOR: │ │ │ │ {owner} │ │ │ │ 字段: knowledge.owner (VARCHAR) │ │ │ │ 样式: font-black text-slate-800 │ │ │ │ underline decoration-indigo-200 │ │ │ │ decoration-4 underline-offset-4 │ │ │ │ │ │ │ │ 🏷 CATEGORY: │ │ │ │ {source.category} │ │ │ │ 字段: knowledge.source.category (JSONB) │ │ │ │ 样式: font-bold text-slate-600 │ │ │ │ │ │ │ │ 🤖 AGENT: │ │ │ │ {source.agent_id} │ │ │ │ 字段: knowledge.source.agent_id (JSONB) │ │ │ │ 样式: font-mono text-indigo-600 │ │ │ │ │ │ │ │ 🔑 SCOPES: │ │ │ │ [{scopes[0]}] [{scopes[1]}] ... │ │ │ │ 字段: knowledge.scopes (ARRAY) │ │ │ │ 每项为独立标签 bg-slate-100 rounded-xl │ │ │ │ │ │ │ │ 📅 CREATED: │ │ │ │ {created_at → 格式化日期} │ │ │ │ 字段: knowledge.created_at (BIGINT) │ │ │ │ 格式: YYYY-MM-DD HH:mm │ │ │ │ │ │ │ │ 📅 UPDATED: │ │ │ │ {updated_at → 格式化日期} │ │ │ │ 字段: knowledge.updated_at (BIGINT) │ │ │ │ 格式: YYYY-MM-DD HH:mm + 相对时间 │ │ │ │ │ │ │ │ 📋 STATUS: │ │ │ │ {status} │ │ │ │ 字段: knowledge.status (VARCHAR) │ │ │ │ "approved" → emerald 徽章 │ │ │ │ "pending" → amber 徽章 │ │ │ │ "rejected" → rose 徽章 │ │ │ ╰──────────────────────────────────────────────╯ │ │ │ │ ⑥ 支撑实体挂载点 (Supports) │ │ ─── Support Entities ─── │ │ │ │ A. 支撑的原子能力: │ │ 数据源: knowledge.support_capability (JSONB[]) │ │ 对每个 ID 查询 atomic_capability.name │ │ │ │ ╭────────────────────────────────────────────╮ │ │ │ 🧠 {capability.name} │→ │ │ │ bg-amber-50 px-5 py-3 rounded-2xl │ │ │ │ text-amber-700 font-black text-sm │ │ │ │ border border-amber-100 │ │ │ │ hover:bg-amber-100 cursor-pointer │ │ │ ╰────────────────────────────────────────────╯ │ │ 点击 → 打开能力 SideDrawer (drawerType='cap') │ │ │ │ B. 关联的工具: │ │ 数据源: knowledge.tools (JSONB[]) │ │ 对每个 ID 查询 tool_table.name │ │ │ │ ╭────────────────────────────────────────────╮ │ │ │ 🔧 {tool.name} │→ │ │ │ bg-indigo-50 px-5 py-3 rounded-2xl │ │ │ │ text-indigo-700 font-black text-sm │ │ │ │ border border-indigo-100 │ │ │ │ hover:bg-indigo-100 cursor-pointer │ │ │ ╰────────────────────────────────────────────╯ │ │ 点击 → 打开工具 SideDrawer (drawerType='tool') │ │ │ │ ⑦ 关联关系 (Relationships) │ │ ─── Relationships ─── │ │ │ │ 数据源: knowledge.relationships (JSONB[]) │ │ 每项结构: {type: string, target: string} │ │ │ │ 展示为关系图谱卡片: │ │ ╭────────────────────────────────────────────╮ │ │ │ {type} → {target} │→ │ │ │ type 映射: │ │ │ │ "complement" → 🔄 互补知识 (blue) │ │ │ │ "duplicate" → 📋 重复知识 (slate) │ │ │ │ "subset" → 📦 子集知识 (amber) │ │ │ │ "superset" → 📚 超集知识 (purple) │ │ │ │ "conflict" → ⚠️ 冲突知识 (rose) │ │ │ │ │ │ │ │ bg-{type_color}-50 p-4 rounded-2xl │ │ │ │ border border-{type_color}-100 │ │ │ │ hover:shadow-md cursor-pointer │ │ │ ╰────────────────────────────────────────────╯ │ │ 点击 → 打开目标知识 SideDrawer (drawerType='know') │ │ │ ╰══════════════════════════════════════════════════════════╯ ``` --- ## 全局数据流与关联穿透矩阵 ### 实体间跳转路径完整映射 ``` 需求 SideDrawer ├── 点击 [Associated Atomics] → 能力 SideDrawer └── 点击 [Source Nodes] → 节点 SideDrawer 能力 SideDrawer ├── 点击 [Implements 工具名] → 工具 SideDrawer ├── 点击 [Requirements 需求] → 需求 SideDrawer └── 点击 [Source Knowledge] → 知识 SideDrawer 工具 SideDrawer ├── 点击 [Capabilities 标签] → 能力 SideDrawer └── 点击 [Knowledge 条目] → 知识 SideDrawer 知识 SideDrawer ├── 点击 [Support Capability] → 能力 SideDrawer ├── 点击 [Tools 标签] → 工具 SideDrawer └── 点击 [Relationships] → 知识 SideDrawer (另一条) ``` ### 前端数据缓存策略 由于实体间频繁穿透查询,建议: 1. **首次加载**:Tab 切换时加载当前标签页对应表的全量数据并缓存 2. **关联实体惰性加载**:SideDrawer 内引用的跨表实体,在 Drawer 打开时按需请求 3. **缓存键**:以实体 ID 为 key,5 分钟 TTL 4. **全局 State**:维护 `{ requirements: Map, capabilities: Map, tools: Map, knowledge: Map }` 四个实体缓存池 --- ## 需增加/完善的后端 API 接口 > [!WARNING] > 在目前的 `server.py` 中,主要暴露了关于 Resources 和 Knowledge 的 API 端点。要支撑上述完整的连贯体验,以下接口必须补充: ### 1. 原子能力 API ``` GET /api/atomic_capabilities 列出全部原子能力 GET /api/atomic_capabilities/{id} 按 ID 获取单条能力详情 ``` 响应字段:`id, name, criterion, description, requirements, implements, tools, source_knowledge` ### 2. 需求 API ``` GET /api/requirements 列出全部需求 GET /api/requirements/{id} 按 ID 获取单条需求详情 ``` 响应字段:`id, description, atomics, source_nodes, status, match_result` ### 3. 工具 API ``` GET /api/tools 列出全部工具 GET /api/tools/{id:path} 按 ID 获取单条工具详情(路径格式) ``` 响应字段:`id, name, version, introduction, tutorial, input, output, updated_time, status, capabilities, tool_knowledge, case_knowledge, process_knowledge` ### 4. Dashboard 聚合 API(可选) ``` GET /api/dashboard/stats 获取全局统计数据 ``` 响应字段: ```json { "requirement_count": 42, "requirement_satisfied_count": 18, "capability_count": 15, "capability_ready_count": 6, "tool_count": 24, "tool_available_count": 12, "knowledge_count": 350, "node_tree": [...] } ``` > 此接口可选。替代方案是前端分别请求四个列表接口后自行聚合计算。 --- ## 用户确认点 > [!IMPORTANT] > > 1. **前端框架选择**:原本用 FastAPI 的 Jinja + Vanilla JS 实现,而 `reference.html` 基于 **React + Tailwind**。本次重构您希望使用工程化的 Vite 等完整前端方案,还是像 demo 那样以单文件 HTML + CDN 的极简无构建方式实现? > 2. **后端 API 是否齐备**:目前 `server.py` 尚未看到 Capabilities、Requirements、Tools 等数据的访问路由。是否希望在这轮一并用 FastAPI 写好供前端调用的 REST API? > 3. **知识库筛选能力**:知识库页面是否需要支持按 `types`(工序/用例/工具/经验/定义/User Profile)进行筛选过滤?当前后端已有 `GET /api/knowledge?types=工序` 支持。 > 4. **知识库 eval 展示深度**:列表页是否仅展示 `eval.score` 星级,还是同时展示 `confidence` 置信度条?