Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
1.9 KiB
1.9 KiB
修复菜单管理「编辑无法保存」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
(无)