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