import type { FormRules } from 'element-plus' export const rules = (menuForm: any, iconOptions: any[]): FormRules => { return { // 1. 菜单名称:必填 + 长度限制 name: [ { required: true, message: '请输入菜单名称', trigger: 'blur' }, { min: 2, max: 20, message: '菜单名称长度在 2 到 20 个字符之间', trigger: 'blur' } ], // 2. 父级菜单:必填(默认0,无需手动填) parentName: [{ required: true, message: '请选择父级菜单', trigger: 'change' } ], // 3. 路由路径:必填 + 格式校验(以/开头,仅包含字母/数字/下划线/斜杠) path: [ { required: true, message: '请输入路由路径', trigger: 'blur' }, { pattern: /^\/[a-zA-Z0-9_\/]+$/, message: '路由路径必须以/开头,仅包含字母、数字、下划线和斜杠', trigger: 'blur' } ], // 4. 后端路由:必填 + 格式校验(以/开头,仅包含字母/数字/下划线/斜杠) api: [ { required: true, pattern: /^\/[a-zA-Z0-9_\/]+$/, message: '后端路由必须以/开头,仅包含字母、数字、下划线和斜杠', trigger: 'blur' } ], // 5. 图标名称:可选,但填了就必须是指定范围(匹配你提供的图标列表) icon: [ {required: true, message: '请选择图标名称', trigger: 'blur'} ], // 6. 排序:必填 + 数字 + 最小值0 sort: [ { required: true, message: '请输入排序值', trigger: 'blur' }, { type: 'number', min: 0, message: '排序值必须是大于等于0的数字', trigger: 'blur' } ], // 7. 菜单类型:必填(单选框默认1,无需手动选) type: [ { required: true, message: '请选择菜单类型', trigger: 'change' }, { type: 'number', enum: [1, 2], message: '菜单类型只能是1(菜单)或2(按钮)', trigger: 'change' } ] } }