diff --git a/src/views/app/ModuleManage.vue b/src/views/app/ModuleManage.vue index 6f9be9a..e476706 100644 --- a/src/views/app/ModuleManage.vue +++ b/src/views/app/ModuleManage.vue @@ -27,14 +27,14 @@ - + - + @@ -153,13 +153,16 @@ const form = ref<{ sortNo: null, }); -const ruleValidate = ref({ - name: [{ required: true, message: "请输入模块名称", trigger: "blur" }], - path: [{ required: true, message: "请输入模块路径", trigger: "blur" }], - customId: [{ required: true, type: "number", message: "请输入自定义ID", trigger: "change" }], -}); - const openingIsChild = ref(false); + +/* 子模块双定位:树节点(带路径/编码)或纯按钮权限(两者皆可空)→ 仅根模块必填 */ +const ruleValidate = computed(() => ({ + name: [{ required: true, message: "请输入模块名称", trigger: "blur" }], + ...(openingIsChild.value ? {} : { + path: [{ required: true, message: "请输入模块路径", trigger: "blur" }], + customId: [{ required: true, type: "number", message: "请输入自定义ID", trigger: "change" }], + }), +})); const modalTitle = computed(() => { if (currentId.value != null) return '编辑模块'; return openingIsChild.value ? '新增子模块' : '新增模块'; @@ -258,7 +261,7 @@ async function onRawSave() { data: { appId: appId.value, name: form.value.name, - path: form.value.path, + path: form.value.path?.trim() || undefined, icon: form.value.icon?.trim() || undefined, customId: form.value.customId == null ? '' : String(form.value.customId), parentId: form.value.parentId ?? undefined, @@ -272,8 +275,8 @@ async function onRawSave() { id: currentId.value, appId: appId.value, name: form.value.name, - path: form.value.path, - // 后端 edit 逐字段整体赋值,字段缺省即置空 → 清空图标能生效 + path: form.value.path?.trim() || undefined, + // 后端 edit 逐字段整体赋值,字段缺省即置空 → 清空图标/路径能生效 icon: form.value.icon?.trim() || undefined, customId: form.value.customId == null ? '' : String(form.value.customId), parentId: form.value.parentId ?? undefined,