校验菜单清单
查看文档来源信息
- 来源目录:
addons/sys_base/docs - 来源文件:
接口文档/83-校验菜单清单.md
详细说明
用于在保存草稿前校验菜单清单正文。接口只执行解析后的正式规则校验和目标范围校验,不创建、不更新菜单版本记录。
当前接口即使发现 blocking 阻断项,也会返回 code=0,并通过 data.result.validation 给出阻断项明细。调用方应根据 validation.summary.hasBlocking 或 blockingCount 判断是否允许继续调用上传接口。
接口信息
| 项目 | 内容 |
|---|---|
| 请求方式 | POST |
| 请求路径 | /sys_base/platform/manifest/validateMenuCatalog |
| 来源文件 | 接口文档/83-校验菜单清单.md |
请求头
| 请求头 | 示例值 | 说明 |
|---|---|---|
Content-Type | application/json | 请求体格式。 |
x-token | <登录令牌> | 登录令牌。 |
app-id | mid-admin | 当前应用 ID。 |
addons-type | sys_base | 当前模块标识。 |
入参
| 参数名 | 类型 | 是否必填 | 示例值 | 参数说明 |
|---|---|---|---|---|
targetAddonsType | string | 是 | sys_base | 当前页面选择的目标模块标识,必须与清单 manifest.addonsType 一致。 |
targetCatalogType | string | 是 | system_menu | 当前入口要求的清单类型,固定为 system_menu 或 app_menu。 |
targetAppScope | object | 是 | {"scopeMode":"all_apps"} | 当前页面选择的应用范围,必须与清单 manifest.appScope 一致。 |
fileName | string | 否 | sys_base.system_menu.json | 待校验文件名,仅用于调用方追踪,不参与校验结果落库。 |
manifest | object | 是 | {...} | 待校验菜单清单正文。 |
参数说明
请参考上方入参表。
请求示例
json
{
"targetAddonsType": "sys_base",
"targetCatalogType": "system_menu",
"targetAppScope": {
"scopeMode": "all_apps"
},
"fileName": "sys_base.system_menu.json",
"manifest": {
"addonsType": "sys_base",
"catalogType": "system_menu",
"catalogCode": "sys_base.system_menu",
"catalogTitle": "系统菜单清单",
"catalogVersion": "v1.0.0",
"sourceProjectCode": "sys_base.pcweb",
"appScope": {
"scopeMode": "all_apps"
},
"pages": [],
"actions": [],
"menuSeeds": [],
"defaultPage": null
}
}响应输出
json
{
"code": 0,
"msg": "菜单清单校验完成",
"data": {
"result": {
"manifest": {
"addonsType": "sys_base",
"catalogType": "system_menu"
},
"appScope": {
"scopeMode": "all_apps"
},
"appScopeKey": "scopeMode=all_apps",
"validation": {
"summary": {
"blockingCount": 3,
"warningCount": 0,
"infoCount": 0,
"hasBlocking": true
},
"issues": [
{
"severity": "blocking",
"field": "pages",
"ruleCode": "required_pages",
"message": "pages 不能为空",
"suggestion": "至少声明一个正式页面"
}
]
}
}
}
}字段说明
| 字段名 | 类型 | 字段说明 |
|---|---|---|
code | number | 调用成功为 0。校验未通过不改变 code,以 validation 表达。 |
msg | string | 接口调用结果。 |
data.result.manifest | object | 后端规范化后的菜单清单正文。 |
data.result.appScope | object | 规范化后的应用范围。 |
data.result.appScopeKey | string | 应用范围隔离键。 |
data.result.validation.summary.blockingCount | number | 阻断项数量。大于 0 时不得保存草稿。 |
data.result.validation.summary.warningCount | number | 提醒项数量。 |
data.result.validation.summary.hasBlocking | boolean | 是否存在阻断项。 |
data.result.validation.issues[].severity | string | 问题等级,取值为 blocking、warning 或 info。 |
data.result.validation.issues[].field | string | 问题字段路径。 |
data.result.validation.issues[].ruleCode | string | 校验规则编码。 |
data.result.validation.issues[].message | string | 问题描述。 |
data.result.validation.issues[].suggestion | string | 修复建议。 |
curl 示例
bash
curl --location --request POST 'http://127.0.0.1:8100/sys_base/platform/manifest/validateMenuCatalog' \
--header 'Content-Type: application/json' \
--header 'x-token: <登录令牌>' \
--header 'app-id: mid-admin' \
--header 'addons-type: sys_base' \
--data-raw '{
"targetAddonsType": "sys_base",
"targetCatalogType": "system_menu",
"targetAppScope": {
"scopeMode": "all_apps"
},
"fileName": "sys_base.system_menu.json",
"manifest": {
"addonsType": "sys_base",
"catalogType": "system_menu",
"catalogCode": "sys_base.system_menu",
"catalogTitle": "系统菜单清单",
"catalogVersion": "v1.0.0",
"sourceProjectCode": "sys_base.pcweb",
"appScope": {
"scopeMode": "all_apps"
},
"pages": [],
"actions": [],
"menuSeeds": [],
"defaultPage": null
}
}'