Files
smart_grid_iot/.trae/specs/fix-menu-edit-save/spec.md
T

1.9 KiB
Raw Blame History

修复菜单管理「编辑无法保存」Spec

Why

菜单管理页面点击「编辑」修改菜单名称后点击保存,接口返回「更新菜单成功」但数据未持久化(名称未变);新增菜单则直接返回 500。根因:MenuService.create/update 以 snake_case 数据库列名(menu_name 等)作为 Sequelize 的取值键,而实体属性是 camelCase(menuName 等),Sequelize 无法匹配从而静默忽略(update)或触发 NOT NULL 报错(create)。

What Changes

  • 修正 server/src/service/menu.service.ts 中 create() 与 update():将写入 Sequelize 的键改为实体 camelCase 属性名(parentId/menuName/menuPath/component/icon/sortOrder/menuType/permission/visible),字段映射由实体 field 配置负责。
  • 前端与接口协议不变(前端已发送 camelCase body,menu.controller.ts、menu.dto.ts、client/src/api/menu.ts 均无需改动)。
  • BREAKING: 无(仅为内部映射修正,接口行为从「假成功/500」变为「真实持久化」)。

Impact

  • Affected specs: 系统管理域(sys_menu RBAC)
  • Affected code: server/src/service/menu.service.ts(仅 create/update 两处取值键);连带修复后「新增菜单」「编辑菜单」均恢复可用

ADDED Requirements

(无新增能力)

MODIFIED Requirements

Requirement: 菜单新增与编辑持久化

菜单管理的「新增」与「编辑」操作 SHALL 将表单值真实写入 sys_menu 表。

Scenario: 编辑菜单名称后保存

  • WHEN 用户在菜单管理中点击某菜单「编辑」,修改菜单名称并点击确定
  • THEN 接口返回成功,重新拉取菜单树显示新名称,且刷新页面后名称保持不变

Scenario: 新增菜单

  • WHEN 用户在菜单管理中点击「新增」,填写必填项并确定
  • THEN 接口返回 200 并持久化,菜单树中出现新菜单(而非 500)

REMOVED Requirements

(无)