使用WorkBuddy工具写一个人物关系图

人工智能 2 条评论

先上效果:角色关系图
这个页面纯AI写成,工具是WorkBuddy,调用的大模型是DeepSeek,制作时间是(2026-8-13),开发过程中要求AI写好文档记录,整理审核,并修改后如下。

1. 项目概述

这是一个人物关系网络搭建工具,可以比较方便的绘制不同人物间的关系,有以下功能:在无限画布上以节点表示人物、带箭头的连线表示关系,并配套章节大纲视图(按章节高亮出场人物)、搜索高亮、可自定义快捷键、人物模板复制粘贴、迷你地图导航。所有的数据只保存在浏览器 localStorage,支持 JSON 导出/导入,纯前端即可完成创作与备份迁移。

2. 原始需求(v1 立项,2026-08-11)

#需求实现
1现代简约风格(类 Miro)浅色主题、卡片式节点、点阵背景、柔和阴影与动效
2无限画布鼠标拖拽平移、滚轮以光标为中心缩放(25%~300%)、点阵随缩放联动
3人物节点:点击添加/拖拽/双击编辑/右键删除/多色/属性自定义双击空白添加;拖拽移动;双击弹窗编辑;右键菜单(编辑/12 色切换/删除);属性为自由键值对
4连线工具,带箭头标注关系工具栏切换连线模式,选起点→终点创建;贝塞尔曲线+箭头+关系标签;点选/双击/右键管理
5章节大纲,按章节过滤显示右侧面板自由编写章节标题+备注,出场人物 chips 勾选;点击章节标题切换视图,非出场人物/关系半透明淡化(与搜索叠加)
6顶部工具栏添加人物、连线、章节大纲、撤销/重做、快捷键、复制/粘贴、导出/导入/清空
7右下角迷你地图节点概览 + 视口蓝框,点击/拖动定位

数据方案:localStorage 自动保存;章节过滤用半透明淡化;属性用自由键值对;内置《红楼梦》示例数据(10 人物/12 关系/5 章节);连线支持关系标注。


3. 迭代历程

3.1 v1 阶段(2026-08-11,主理人直接开发)

轮次内容关键修复/新增
1核心交付(40 项冒烟测试)画布/节点/连线/章节/工具栏/迷你地图全功能
2搜索与高亮搜人物名/属性/关系标签,命中高亮(mark+光晕)、未命中淡化,与章节过滤叠加
3箭头遮挡修复端点由固定半径改为按节点真实尺寸计算矩形边界交点,外移 GAP 保证箭头露出
4成对反向线重合修复弯曲方向改为 id 哈希确定性算法;教训:曾误加 dir 符号导致控制点重合,去掉后反向线垂直向量天然分离
5可自定义快捷键系统动作表+keymap 架构、录制弹窗、冲突检测、localStorage 持久化
6复制粘贴(模板工作流)复制人物(名称/颜色/全部属性),粘贴自动弹编辑框改名,支持空白模板复用
7迷你地图坐标错位修复视口范围误用屏幕偏移量 → 改为世界坐标 -camera/zoom;bbox 改为仅由节点决定(点击定位精确)
8关系标签白框修复文字宽度在元素挂载前测量失真 → 先挂载再测量 + 字宽兜底估算
9双向线端点错开端点沿节点边界切线按弯曲方向偏移;角部回推防遮挡

3.2 v2 阶段(2026-08-13,软件开发团队协作)

流程:工程师审查 → 用户确认 → 工程师实施 → QA 回归。

审查发现 11 项问题(1 P0 + 5 P1 + 5 P2),全部修复 + 3 项行为变化,QA 152/152 通过:

编号问题修复
P0-1章节编辑(标题/备注/出场人)不入撤销栈,Ctrl+Z 静默丢修改统一先 pushUndo(备注用失焦时一次性入栈防每键一栈)
P1-2删除/撤销后选中态与浮动工具条残留(幽灵工具条、et-del 死键)统一 selectEdge(null)/selectNode(null)/updateClipboardUI
P1-3本地数据/导入校验过弱,脏数据打崩页面新增 sanitizeData 逐项清洗(persons/relations/chapters/camera)
P1-4章节过滤死锁:非本章不可点、空章节全锁、无清除入口章节面板「显示全部」按钮 + 空章节画布提示
P1-5搜索每键全量重建 + O(E²) 查找,大图卡顿词变化才重建 DOM;applyFilters 预建 Map 索引
P1-6连线模式下误点空白静默丢起点link 模式下空白点击仅 toast 提示,不取消起点
P2-7平移/缩放每帧全量重绘迷你地图;三处重复监听rAF 节流 + 公共 attachDrag 助手
P2-8清空/导入状态未复位;删人后复制按钮态不刷新新增 resetUiState() 统一复位
P2-9双击章节头先取消视图再展开;连线后停留连线模式单击延迟 250ms 防双击误触;连线创建后自动退出连线模式
P2-10Firefox 行模式缩放过慢;localStorage 写失败无提示wheel deltaMode 兼容;首次失败 toast 一次
P2-11死代码、旧浏览器兼容删 worldToScreen;color-mix @supports 降级

3 项行为变化:自动退出连线模式;清除章节过滤入口;保护连线起点。


4. 当前版本功能清单(v2)

  • 无限画布:平移/缩放/点阵背景/空状态提示
  • 人物节点:双击添加、拖拽、双击编辑(名称/12 色/自由属性键值对)、右键菜单(编辑/复制/改色/删除)、复制粘贴(模板工作流)
  • 关系连线:连线工具、贝塞尔曲线+箭头+标签、点选/双击/右键管理、双向线端点错开
  • 章节大纲:自由编写标题/备注、出场人物 chips、章节视图过滤(半透明淡化)、「显示全部」入口、空章节提示、新增自动定位
  • 搜索:人物名/属性/关系标签实时搜索,命中高亮(mark+脉冲)、未命中淡化、与章节过滤叠加
  • 快捷键:10 个动作全部可自定义(录制/冲突检测/恢复默认),Ctrl+Z/Y、Ctrl+S、Ctrl+F、Delete、Esc、L 等默认键
  • 迷你地图:节点概览+视口蓝框,点击/拖动定位,rAF 节流
  • 数据:localStorage 自动保存、JSON 导出/导入(含数据清洗)、撤销/重做(60 步)
  • 健壮性:应用内确认弹窗(不依赖原生 confirm)、数据清洗层、localStorage 失败提示

5. 技术要点

  • 架构:单文件 IIFE;DOM 节点 + SVG 连线混合渲染;world 层 transform: translate+scale 实现相机
  • 坐标体系:屏幕↔世界换算 屏幕 = 世界×zoom + camera;迷你地图 bbox 仅由节点决定
  • 连线几何:按节点真实尺寸计算边界交点、端点切线错开、id 哈希决定弯曲方向(反向线天然分离)、挂载后测量标签宽度
  • 状态管理:ui 对象统一管理(tool/选择/章节/搜索);撤销栈为深拷贝快照(60 步)
  • 快捷键:keymap 可配置架构,window 捕获阶段录制监听
  • XSS 防护:所有 innerHTML 拼接经 esc() 转义

6. 已知问题与注意事项

  1. 快捷键配置独立存储(独立 key),导出/导入图谱数据不包含快捷键配置
  2. 迷你地图在内容极稀疏/视口远超节点范围时,蓝框可能部分超出小地图(canvas 裁剪),属设计行为
  3. 章节头单击有 250ms 延迟(防双击误触),快速连点需注意

7. 后续可优化方向

  • 多作品/多图谱切换(不同小说分空间)
  • 导出图片(canvas 快照)或导出人物模板 JSON
  • 关系线按类型着色/线型(如敌对红色虚线)
  • 移动端触控适配(当前以鼠标为主)
  • 快捷键配置随图谱一并导出

2 条评论

  • 回复

    不错,有点意思。

  • 回复

    好耶

发表评论