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

32 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 修复菜单管理「编辑无法保存」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
(无)