From 0928437c679d63930b6f5b9d85359162466c236c Mon Sep 17 00:00:00 2001 From: oneao Date: Thu, 3 Sep 2026 22:10:55 +0800 Subject: [PATCH] 20260903221055 --- .../fms-vue表单保存流程规范重构_087f3fa9.md | 129 ++++ .../page-2026-09-03T11-49-41-084Z.yml | 6 + .../page-2026-09-03T11-53-16-378Z.yml | 69 ++ code/fms/fms-vue/mm1.yaml | 40 + code/fms/fms-vue/page-new.yaml | 69 ++ .../fms-module-edit/FmsModuleEditModal.vue | 183 +++-- .../fms-module-list/FmsModuleListPage.vue | 39 +- .../fms-module-list/FmsModuleTable.vue | 6 +- .../fms-module-list/FmsQueryToolbar.vue | 4 +- .../fms-module-list/moduleListUtils.js | 23 - .../fms/fms-vue/src/layouts/DefaultLayout.vue | 2 +- .../src/layouts/components/AppTabs.vue | 2 +- .../src/layouts/components/AppTopbar.vue | 6 +- code/fms/fms-vue/src/layouts/layoutUtils.js | 4 + code/fms/fms-vue/src/router/index.js | 4 +- code/fms/fms-vue/src/stores/app.js | 218 +++--- code/fms/fms-vue/src/stores/i18n.js | 107 +++ code/fms/fms-vue/src/stores/languages.js | 94 --- code/fms/fms-vue/src/utils/cacheKey.js | 11 - code/fms/fms-vue/src/utils/common.js | 7 + code/fms/fms-vue/src/utils/dataChanges.js | 61 ++ code/fms/fms-vue/src/utils/i18n.js | 120 --- code/fms/fms-vue/src/utils/tempId.js | 12 - code/fms/fms-vue/src/utils/translate.js | 37 - .../src/views/module/i18n-type/index.vue | 12 +- .../views/module/menu-management/index.vue | 702 +++++++++++------- .../module-management/ModuleAutoCodePanel.vue | 2 +- .../module-management/ModuleBasicPanel.vue | 12 +- .../module-management/ModuleFieldsPanel.vue | 2 +- .../module-management/ModuleI18nPanel.vue | 274 +------ .../ModuleListConfigPanel.vue | 2 +- .../ModuleQueryConfigPanel.vue | 2 +- .../design-editor/FormDesignEditor.vue | 2 +- .../common/useStructureEditing.js | 2 +- .../components/fieldDefaults.js | 2 +- .../views/module/module-management/index.vue | 356 +++++---- .../views/module/module-management/utils.js | 223 ++++++ code/fms/fms-vue/tests/stores/stores.spec.js | 15 +- code/fms/fms-vue/tests/unit/data-diff.spec.js | 86 +++ .../unit/delete-confirm-regression.spec.js | 63 +- .../tests/unit/field-participation.spec.js | 112 --- .../tests/unit/module-dirty-sections.spec.js | 138 ---- .../tests/unit/module-i18n-reconcile.spec.js | 177 +++++ .../tests/unit/module-list-utils.spec.js | 2 +- .../unit/module-save-orchestration.spec.js | 213 ------ code/fms/开发规范.md | 112 ++- 46 files changed, 2121 insertions(+), 1643 deletions(-) create mode 100644 code/fms/.codebuddy/plans/fms-vue表单保存流程规范重构_087f3fa9.md create mode 100644 code/fms/fms-vue/.playwright-cli/page-2026-09-03T11-49-41-084Z.yml create mode 100644 code/fms/fms-vue/.playwright-cli/page-2026-09-03T11-53-16-378Z.yml create mode 100644 code/fms/fms-vue/mm1.yaml create mode 100644 code/fms/fms-vue/page-new.yaml create mode 100644 code/fms/fms-vue/src/layouts/layoutUtils.js create mode 100644 code/fms/fms-vue/src/stores/i18n.js delete mode 100644 code/fms/fms-vue/src/stores/languages.js delete mode 100644 code/fms/fms-vue/src/utils/cacheKey.js create mode 100644 code/fms/fms-vue/src/utils/common.js delete mode 100644 code/fms/fms-vue/src/utils/i18n.js delete mode 100644 code/fms/fms-vue/src/utils/tempId.js delete mode 100644 code/fms/fms-vue/src/utils/translate.js create mode 100644 code/fms/fms-vue/src/views/module/module-management/utils.js create mode 100644 code/fms/fms-vue/tests/unit/data-diff.spec.js delete mode 100644 code/fms/fms-vue/tests/unit/field-participation.spec.js delete mode 100644 code/fms/fms-vue/tests/unit/module-dirty-sections.spec.js create mode 100644 code/fms/fms-vue/tests/unit/module-i18n-reconcile.spec.js delete mode 100644 code/fms/fms-vue/tests/unit/module-save-orchestration.spec.js diff --git a/code/fms/.codebuddy/plans/fms-vue表单保存流程规范重构_087f3fa9.md b/code/fms/.codebuddy/plans/fms-vue表单保存流程规范重构_087f3fa9.md new file mode 100644 index 00000000..5bbcee79 --- /dev/null +++ b/code/fms/.codebuddy/plans/fms-vue表单保存流程规范重构_087f3fa9.md @@ -0,0 +1,129 @@ +--- +name: fms-vue表单保存流程规范重构 +overview: 按根目录《开发规范.md》的「详细表单页面设计」与「表单数据与变更检测」章节,将 fms-vue 三处详细表单保存主流程(module-management/index.vue、menu-management/index.vue、FmsModuleEditModal.vue)统一重构为 handleSave/beforeSave/buildSaveData/afterSave 五段式结构,补齐 origin 基线 + diff 保存 + 成功后重载;ModuleI18nPanel 退化为受控数据展示组件,i18n diff 上移到 index.vue 统一编排;并同步 i18n-type 等调用方与相关测试。 +todos: + - id: refactor-edit-modal + content: 重构 FmsModuleEditModal:新增 origin 快照与编辑态 diff、拆分 handleSave/beforeSave/buildSaveData/afterSave、prop beforeSave 更名 onBeforeSave,无变化时不调保存接口;同步 i18n-type/index.vue 的 prop 绑定 + status: completed + - id: refactor-menu-save + content: 用 [skill:lsp-code-analysis] 定位引用后,将 menu-management/index.vue 的 saveMenu 重构为内联五段式并补 s_menu/s_i18n diff 与无变化跳过,同步模板/hotkey/onSwitchSave + status: completed + - id: refactor-module-save-i18n + content: 将 module-management/index.vue 的 saveModule 重构为内联五段式,并用 [subagent:code-explorer] 复核后把 i18n 基线/diff 统一上移、ModuleI18nPanel 改为受控展示组件、迁移 applySyncPlan 联动 + status: completed + - id: sync-tests-quality + content: 删除引用缺失 composable 的 module-save-orchestration.spec.js 并清理残留引用,核对 module-dirty-sections.spec.js,运行 oxlint/oxfmt 与受影响单测 + status: completed + dependencies: + - refactor-edit-modal + - refactor-menu-save + - refactor-module-save-i18n +--- + +## 用户需求 + +将 fms-vue 中「详细表单页面」的代码结构与命名统一重构,使其完全符合根目录 `开发规范.md` 中「详细表单页面设计」(52-62 行)与「表单数据与变更检测」(64-108 行)两条规范,消除"相似但不一致"的实现差异。 + +## 重构范围(用户已确认) + +- 仅三处表单主流程:`module-management/index.vue`、`menu-management/index.vue`、`FmsModuleEditModal.vue`,及调用方 `i18n-type/index.vue` 的同步。 +- 列表/内联保存保留专用名,**不改**:`saveToggle`、`saveChanges`、`deleteSelected`、`persistRowOrder`、`saveColumnSettings`、菜单/模块树的拖拽即时保存与启用切换。 +- module-management 保存编排**保持内联在 index.vue**(不新建 composable)。 +- ModuleI18nPanel **一并纳入统一**:i18n 的 origin/当前数据与 diff 由 index.vue 统一持有与计算,面板退化为受控数据展示组件。 +- `beforeSave` 名称冲突处理:`FmsModuleEditModal` 的外部 prop `beforeSave` 改名(建议 `onBeforeSave`,模板 `:on-before-save`),组件内部标准方法使用规范名 `beforeSave()`。 + +## 目标统一形态 + +每个入口遵循固定流程与命名:`handleSave()`(入口)→ `beforeSave()`(校验/字段同步/数据准备,false 终止)→ `buildSaveData()`(组装请求,返回 null 表示无变化不调接口)→ `saveObjectApi()` → `afterSave()`(成功后的 reload/状态更新)。编辑态必须有 `origin` 基线、只提交 diff 出的变化、无变化时不调用保存接口、成功后重新从服务端加载再更新基线。 + +## 技术栈 + +Vue 3 `