From 5cb37923c1cc92cc0262d2247fa83cb89e04cad1 Mon Sep 17 00:00:00 2001 From: rookie4show Date: Thu, 26 Feb 2026 21:08:08 +0800 Subject: [PATCH] feat: custom assets + group rules + perf + docs --- docs/1management/plan.md | 46 +++--- docs/test/README.md | 6 + docs/test/acceptance.md | 116 ++++++++++++++ .../common/GenericImageSelector.vue | 80 +++++++++- src/components/flow/FlowEditor.vue | 67 ++++++++ .../flow/nodes/common/VectorNode.vue | 54 +++++-- .../flow/panels/AssetSelectorPanel.vue | 27 +++- src/configs/groupRules.ts | 52 ++++++ src/index.js | 2 + src/types/selector.ts | 6 +- src/utils/customAssets.ts | 88 +++++++++++ src/utils/groupRules.ts | 148 ++++++++++++++++++ 12 files changed, 656 insertions(+), 36 deletions(-) create mode 100644 docs/test/README.md create mode 100644 docs/test/acceptance.md create mode 100644 src/configs/groupRules.ts create mode 100644 src/utils/customAssets.ts create mode 100644 src/utils/groupRules.ts diff --git a/docs/1management/plan.md b/docs/1management/plan.md index d2829f0..aea6711 100644 --- a/docs/1management/plan.md +++ b/docs/1management/plan.md @@ -6,8 +6,8 @@ **技术栈:** Vue 3 + LogicFlow + Element Plus + Pinia **目标:** 作为独立编辑器和可嵌入组件,支持在 onmyoji-wiki 中作为块插件使用 -**当前状态:** ✅ 阶段 1 完成(独立编辑器)+ ✅ 阶段 2 完成(组件化改造) -**总体完成度:** 100%(核心功能) +**当前状态:** ✅ 阶段 1 完成(独立编辑器)+ ✅ 阶段 2 完成(组件化改造)+ 🔄 阶段 3 进行中(wiki 集成稳定化) +**总体完成度:** 92%(核心功能完成,集成与质量收尾中) --- @@ -206,30 +206,30 @@ --- -### 🎨 阶段 3:wiki 集成测试(待开发) +### 🎨 阶段 3:wiki 集成测试(进行中) **目标:** 在 onmyoji-wiki 中测试集成效果 #### 步骤 5:本地引用测试(1-2 天) -- [ ] 在 wiki 中引用 yys-editor(file: 方式) -- [ ] 创建 YysEditorBlock 组件 -- [ ] 测试预览模式 -- [ ] 测试编辑模式 -- [ ] 测试数据保存 +- [x] 在 wiki 中引用 yys-editor(file: 方式) +- [x] 创建集成包装层(当前以 `/editor` 页面集成替代独立 `YysEditorBlock` 组件) +- [x] 测试预览模式 +- [x] 测试编辑模式 +- [x] 测试数据保存 #### 步骤 6:交互优化(2-3 天) -- [ ] 优化模式切换体验 -- [ ] 优化数据同步 -- [ ] 优化错误处理 +- [x] 优化模式切换体验 +- [x] 优化数据同步 +- [x] 优化错误处理 - [ ] 优化加载性能 **验收标准:** -- 在 wiki 中可以正常使用 -- 预览/编辑切换流畅 -- 数据保存正确 -- 体验类似 Notion 块 +- 在 wiki 中可以正常使用(已达成) +- 预览/编辑切换流畅(已达成) +- 数据保存正确(已达成) +- 体验类似 Notion 块(进行中,持续优化) --- @@ -301,12 +301,12 @@ wiki 文档 **完成时间:** 2026-02-20 -### Milestone 3:wiki 集成(待开发) -- [ ] 本地引用测试 -- [ ] 交互优化 +### Milestone 3:wiki 集成(进行中) +- [x] 本地引用测试 +- [~] 交互优化(已完成主要问题修复,继续打磨性能) - [ ] 文档完善 -**预计完成:** 与 wiki 同步 +**预计完成:** 2026-03 第 1 周(随 wiki 联调收尾) --- @@ -428,6 +428,11 @@ const handleCancel = () => { ## 📝 更新日志 +### 2026-02-26 +- ✅ 修复嵌入式编辑器在 wiki 弹层中的画布高度与边界占满问题(多次 resize + 容器高度链路修正) +- ✅ 修复编辑已有资产后立即保存时数据偶发不刷新的问题(保存前 flush + 预览强制 key 更新) +- ✅ 完成与 onmyoji-wiki 的本地库联调闭环(`build:lib` + `file:../yys-editor`) + ### 2026-02-25 - ✅ 修复嵌入编辑器在 onmyoji-wiki 弹层中的初始化尺寸异常 - 编辑区域高度改为基于容器测量后计算 @@ -453,6 +458,7 @@ const handleCancel = () => { --- -**最后更新:** 2026-02-20 +**最后更新:** 2026-02-26 +**文档版本:** v2.2.0(wiki 集成稳定化进行中) **文档版本:** v2.1.0(组件化改造完成) **文档版本:** v2.0.0(重新规划) diff --git a/docs/test/README.md b/docs/test/README.md new file mode 100644 index 0000000..93dbd60 --- /dev/null +++ b/docs/test/README.md @@ -0,0 +1,6 @@ +# 测试索引(yys-editor) + +本目录用于记录 yys-editor 的人工验收测试点(不包含自动化测试)。 + +- 主验收清单:`docs/test/acceptance.md` + diff --git a/docs/test/acceptance.md b/docs/test/acceptance.md new file mode 100644 index 0000000..c5a4304 --- /dev/null +++ b/docs/test/acceptance.md @@ -0,0 +1,116 @@ +# yys-editor 验收测试点(手工) + +目标:覆盖“用户素材上传/管理、资产引用、Dynamic Group 规则提示、性能优化”等需求。 + +## 0. 基础启动与构建 + +步骤: +- `npm install` +- `npm run dev` +- `npm run build` + +预期: +- dev 正常启动,页面可操作。 +- build 成功输出 `dist/`。 + +## 1. 资产基路径与引用一致性 + +步骤: +- 在编辑器中插入素材节点(式神/御魂等),保存。 +- 刷新页面或重新打开。 + +预期: +- 素材仍能正确显示。 +- 对于以 `/assets/...` 开头的资源,能够在宿主子路径部署时被正确改写(由宿主配置/注入决定)。 + +排查点: +- `src/utils/assetUrl.ts` 的 `setAssetBaseUrl/getAssetBaseUrl/resolveAssetUrl`。 + +## 2. 用户素材上传与使用(我的素材) + +步骤: +- 打开素材选择面板(AssetSelector)。 +- 点击“上传我的素材”,选择一张图片。 +- 在列表中找到该素材,点击选中。 + +预期: +- 新素材出现在“我的素材”分组。 +- 选择后节点的 selectedAsset 生效并可渲染。 + +## 3. 用户素材删除与持久化 + +步骤: +- 上传 1 张素材。 +- 删除该素材(按钮“删除”)。 +- 刷新页面。 + +预期: +- 删除后不再出现在列表中。 +- 刷新后不会复活(localStorage 已同步)。 + +排查点: +- `src/utils/customAssets.ts` 的 `list/save/delete/createCustomAssetFromFile`。 +- `src/components/common/GenericImageSelector.vue` 的上传与删除逻辑。 + +## 4. 缺失资产的降级策略(本地自玩导出图) + +目的:验证“场景 1:仅 yys-editor 使用并导出图片时,缺失资产不应崩溃”。 + +步骤: +- 将某个节点的 avatar 修改为不存在路径或不可访问路径(用于测试)。 +- 尝试导出/渲染。 + +预期: +- 不出现阻断性异常(可降级为占位或提示)。 + +备注: +- 若目前仅实现 wiki 侧降级:记录为“待补 yys-editor 侧降级策略”。 + +## 5. Dynamic Group 分组(基础行为) + +步骤: +- 在画布上创建多个节点。 +- 创建动态分组(Dynamic Group),将节点加入/移出分组。 + +预期: +- 分组操作成功。 +- 分组信息能写入节点 meta(用于规则检查)。 + +## 6. 规则静态检查(分组内) + +步骤: +- 在同一分组中放入: + - “辉夜姬” 与 “破势” + - “千姬” 与 “腹肌清姬/蝮骨清姬” + - 只有式神但没有供火式神 +- 观察右侧/控制区的规则提示列表。 + +预期: +- 出现对应警告提示。 +- 取消分组、移除节点后提示实时更新/消失。 + +排查点: +- `src/utils/groupRules.ts`、`src/configs/groupRules.ts`。 +- `src/components/flow/FlowEditor.vue` 的 `scheduleGroupRuleValidation(...)` 调度时机。 + +## 7. 性能回归(矢量节点快速缩放) + +步骤: +- 放置矢量节点(VectorNode)。 +- 快速缩放、连续拖动缩放柄。 + +预期: +- 明显卡顿减少,不出现“缩放一下就卡死”的体验。 + +排查点: +- `src/components/flow/nodes/common/VectorNode.vue` 的 RAF 合并更新逻辑。 + +## 8. 导出给 wiki 的兼容性(数据结构) + +步骤: +- 生成一份包含分组、素材、文本等内容的 graphData。 +- 将 JSON 用于 wiki 的 FlowPreview/editor。 + +预期: +- wiki 侧能正常 normalize 并预览(节点 off-canvas 会自动平移回可视区)。 + diff --git a/src/components/common/GenericImageSelector.vue b/src/components/common/GenericImageSelector.vue index 0ab5c01..6ff398b 100644 --- a/src/components/common/GenericImageSelector.vue +++ b/src/components/common/GenericImageSelector.vue @@ -4,6 +4,17 @@ 当前选择:{{ config.currentItem[config.itemRender.labelField] }} +
+ + 上传我的素材 +
+
{{ item[config.itemRender.labelField] }} + + 删除 +
@@ -54,9 +74,10 @@