菜单树-更新
接口信息
- 接口地址:
{your-site-url}/api/skill/menu/update - 基础 URL:
{your-site-url}需替换为你自己的独立站 URL 地址,如https://your-domain.com/apimanager666 - 请求方式:
POST - 说明: 此接口用于更新一个已有的菜单树(包括菜单子项的增删改)。将传入的完整
menu_items替换菜单树原有的子项结构。返回data为空数组表示更新成功。
⚠️ 重要:更新前请务必先通过 菜单树-详细 获取当前菜单的完整数据(
menu_tree_items),在此基础上修改后再提交更新。直接用旧数据或构造不全的数据提交会导致丢失未包含的子项。
认证
请求头中需要携带 skill-access-token:
| Header | 值 |
|---|---|
skill-access-token |
{your-skill-access-token} (请替换为你自己的 token) |
Content-Type |
application/json |
请求参数 (JSON Body)
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
menu_id |
int | 是 | 要更新的菜单树 ID |
menu_name |
string | 是 | 菜单树名称 |
menu_items |
Array[Object] | 是 | 完整的菜单子项数组。系统会用传入的 menu_items 替换原有的所有子项(即传入什么,最终就是什么) |
menu_items 子项字段
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
id |
int/string | 现有项必填/新增留空 | 菜单子项 ID。已有子项传入数据库 id(整数),新增子项留空 ""。系统根据是否传入有效 id 判断是更新还是新增 |
name |
string | 是 | 菜单子项名称 |
url_type |
int/string | 否 | 链接类型 code。值从 菜单-Url选择器 获取,对应返回值中的 code 字段。新增未选类型时可留空 "" |
url_value |
string | 否 | 链接值。对应 菜单-Url选择器 返回值中的 url 字段。新增未选链接时可留空 ""。不同 url_type 对应的 url 格式见下表 |
object_id |
int/string | 否 | 链接类型对应的实体 ID(如商品 ID、页面 ID 等)。固定链接类型或无实体时留空 "" |
object_title |
string | 否 | 对应实体的显示标题,无内容留空 "" |
open_new |
int | 是 | 是否新窗口打开。1 = 是,2 = 否 |
is_hidden |
int | 是 | 是否隐藏。1 = 是,2 = 否 |
child |
Array[Object] | 否 | 下级子菜单数组,结构同 menu_items,支持无限级嵌套。无子项传空数组 [] |
url_type 类型枚举
| code | text | url | 说明 |
|---|---|---|---|
1 |
首页 | / |
网站首页 |
2 |
商品专辑页 | /collections/{handle} |
需选择具体专辑 |
3 |
商品详情页 | /products/{handle} |
需选择具体商品 |
4 |
博客专辑页 | /blogs/{handle} |
需选择具体博客专辑 |
5 |
博客文章页 | /blog/{handle} |
需选择具体文章 |
6 |
自定义页面 | /pages/{handle} |
需选择具体页面 |
7 |
查询订单 | /account/order-query |
固定页面 |
8 |
自定义 URL | (手动输入) | 可输入任意 URL |
9 |
Contacts | /contacts |
联系我们 |
10 |
商品专辑页(所有商品) | /collections/all |
展示所有商品 |
11 |
商品评论页 | /review/all |
所有评论 |
12 |
专辑列表页(指定专辑) | /collections |
专辑列表入口 |
url 拼接规则:
- 固定链接(code 1、7、9、10、11、12):
url_value直接取表中url的值- 动态链接(code 2、3、4、5、6):将
url中的{handle}替换为所选实体的 handle
- 例:商品 handle 为
diamond-chain-earrings-02d9fu8a,code=3 →url_value=/products/diamond-chain-earrings-02d9fu8a- code 8(自定义 URL):手动填写任意完整 URL,如
https://example.com/page
以下字段后端自动处理,无需传入(即使获取详情时返回了,提交时也不需要传):
shop_id、menu_id、parent_id、level、position— 后端根据菜单树和嵌套层级自动设置created_at、updated_at— 后端自动维护remote_id— 后端自动处理
前端辅助字段(后端忽略,可传可不传):
randomId— 前端用于列表渲染的临时唯一标识isDown— 前端用于标记子项展开/折叠状态
请求示例
示例一:更新已有菜单(保留现有子项 + 修改 + 新增)
{
"menu_id": 745,
"menu_name": "terry tree",
"menu_items": [
{
"id": 2372,
"name": "Home",
"url_type": 1,
"url_value": "/",
"object_id": "",
"object_title": "",
"open_new": 2,
"is_hidden": 2,
"child": []
},
{
"id": 2373,
"name": "Collections",
"url_type": 2,
"url_value": "/collections/spu",
"object_id": 366,
"object_title": "智能专辑:spu",
"open_new": 2,
"is_hidden": 2,
"child": [
{
"id": "",
"name": "child dress",
"url_type": "",
"url_value": "",
"object_id": "",
"object_title": "",
"open_new": 2,
"is_hidden": 2,
"child": []
}
]
},
{
"id": "",
"name": "dress",
"url_type": 2,
"url_value": "/collections/spu",
"object_id": 366,
"object_title": "智能专辑:spu",
"open_new": 2,
"is_hidden": 2,
"child": []
}
]
}
示例说明:
id: 2372→ 有 ID,更新现有子项 "Home"id: 2373+child中的id: ""→ 父项更新,子项新增- 最后一个
id: ""→ 新增一级菜单项 "dress" - 未包含在
menu_items中的旧子项将被删除
cURL
curl --location --request POST '{your-site-url}/api/skill/menu/update' \
--header 'skill-access-token: {your-skill-access-token}' \
--header 'Content-Type: application/json' \
--data-raw '{"menu_id":747,"menu_name":"Main Menu","menu_items":[{"id":"","name":"Home","url_type":1,"url_value":"/","object_id":"","object_title":"","open_new":2,"is_hidden":2,"child":[]},{"id":"","name":"Products","url_type":3,"url_value":"/products/diamond-chain-earrings-02d9fu8a","object_id":7042,"object_title":"Diamond Chain Earrings","open_new":2,"is_hidden":2,"child":[{"id":"","name":"Sub Product","url_type":2,"url_value":"/collections/53535243","object_id":372,"object_title":"53535243","open_new":1,"is_hidden":1,"child":[]}]}]}'
返回结果
code 为 200 表示调用成功;code 不为 200 表示调用失败。
成功响应
{
"code": 200,
"data": [],
"message": "success"
}
返回字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
code |
Number | 状态码,200 表示成功 |
message |
String | 执行结果的文字描述 |
data |
Array | 成功时为空数组 [] |
注意事项
更新流程
- 先调用 菜单树-详细 获取当前菜单完整数据
- 取出
data.menu_tree_items,在此基础上进行修改(增删改子项、修改名称/链接等) - 提交时只保留必要字段,去掉
shop_id、menu_id、parent_id、level、position、created_at、updated_at、remote_id
增删改规则
- 更新采用全量替换策略:传入的
menu_items会完全替换该菜单树下原有的所有子项 - 已存在的子项传入数据库
id(整数),系统根据id判断是更新 - 新增的子项
id留空"",系统会自动分配新 ID - 未包含在
menu_items中的旧子项将被删除 child支持无限级嵌套,父级关系由嵌套层级自动推断,无需手动设置parent_idurl_type和对应的object_id/url_value需匹配,新项目可先留空