task-275(验收反馈): 菜单权限标识/路由后台自动生成(menu_auto_/auto/ 前缀),表单移除两项输入;编辑缺省保持原值

This commit is contained in:
2026-09-06 01:57:17 +08:00
parent c3dc2a3f2f
commit 6e2e4bf8e7
10 changed files with 152 additions and 34 deletions
@@ -225,9 +225,6 @@ onMounted(loadMenus)
<el-form-item label="菜单名称">
<el-input v-model="menuForm.name" placeholder="如:用户管理" />
</el-form-item>
<el-form-item label="权限标识">
<el-input v-model="menuForm.columnKey" placeholder="如:admin_users(唯一,稳定授权标识)" />
</el-form-item>
<el-form-item label="菜单类型">
<el-select v-model="menuForm.menuType" style="width: 100%" @change="onMenuTypeChange">
<el-option v-for="opt in MENU_TYPE_OPTIONS" :key="opt.value" :label="opt.label" :value="opt.value" />
@@ -243,9 +240,6 @@ onMounted(loadMenus)
/>
</el-select>
</el-form-item>
<el-form-item label="路由">
<el-input v-model="menuForm.routePath" placeholder="如:/account/users 或 group-xxx" />
</el-form-item>
<el-form-item label="排序">
<el-input-number v-model="menuForm.sortOrder" :min="0" />
</el-form-item>
@@ -38,13 +38,14 @@ export interface MenuManageForm {
sortOrder: number
}
/** 请求体字段与 Java PermissionMenuCreate/UpdateRequest 对齐(camelCase)。 */
/** 请求体字段与 Java PermissionMenuCreate/UpdateRequest 对齐(camelCase)。
* 权限标识/路由由后台自动生成,不随表单提交,故为可选字段。 */
export interface MenuManagePayload {
name: string
columnKey: string
columnKey?: string
parentId: number | null
menuType: string
routePath: string
routePath?: string
sortOrder: number
}
@@ -258,23 +259,20 @@ export function emptyMenuManageForm(): MenuManageForm {
return { name: '', columnKey: '', parentId: null, menuType: ADMIN_MENU_TYPE, routePath: '', sortOrder: 0 }
}
/** 表单校验(镜像后端 NotBlank 文案);返回逐字段错误。 */
/** 表单校验(镜像后端 NotBlank 文案);返回逐字段错误。权限标识/路由由后台自动生成,不参与校验。 */
export function validateMenuManageForm(form: MenuManageForm): { valid: boolean; errors: MenuManageFormErrors } {
const errors: MenuManageFormErrors = {}
if (!text(form.name)) errors.name = '菜单名称不能为空'
if (!text(form.columnKey)) errors.columnKey = '菜单标识不能为空'
if (!text(form.menuType)) errors.menuType = '菜单类型不能为空'
if (!text(form.routePath)) errors.routePath = '菜单路由不能为空'
return { valid: Object.keys(errors).length === 0, errors }
}
function toMenuManagePayload(form: MenuManageForm): MenuManagePayload {
// 权限标识(column_key)/路由(route_path) 不随表单提交:由后台自动生成(创建)或保持原值(编辑)。
return {
name: text(form.name),
columnKey: text(form.columnKey),
parentId: typeof form.parentId === 'number' ? form.parentId : null,
menuType: text(form.menuType),
routePath: text(form.routePath),
sortOrder: normalizeMenuSort(form.sortOrder),
}
}