模块说明
product 提供商品浏览与工作端维护两套接口:前台侧包含商品列表(分类/品牌/排序/归档筛选)、商品详情(含优惠券与会员价)与商品可选属性;工作端侧(product/work,要求员工身份)提供商品的新增、编辑、图片上传与删除。
鉴权级别:前台可选(登录后返回会员价等个性化数据);工作端必须(额外校验员工身份,非员工 403)。
接口一览
前台接口
| 方法 | URL | 鉴权 | 说明 |
|---|---|---|---|
| GET | /api/product |
可选 | 商品列表(分类 / 品牌 / 排序 / 归档) |
| GET | /api/product/show/{id} |
可选 | 商品详情 |
| GET | /api/product/attribute_list |
可选 | 商品可选属性(规格) |
工作端接口(work_required)
| 方法 | URL | 鉴权 | 说明 |
|---|---|---|---|
| GET | /api/product/work |
员工 | 工作端商品列表 |
| GET | /api/product/work/add |
员工 | 新增表单数据 |
| POST | /api/product/work |
员工 | 提交新增 |
| GET | /api/product/work/edit?id= |
员工 | 编辑表单数据 |
| PUT | /api/product/work/{id} |
员工 | 提交更新 |
| DELETE | /api/product/work/{id} |
员工 | 删除商品 |
| POST | /api/product/work/upload |
员工 | 商品图片上传(multipart) |
商品列表
请求参数
| 参数 | 必填 | 说明 |
|---|---|---|
id |
否 | 分类 ID;显式传 0 表示全部分类,不传则回退到第一个分类 |
category_slug |
否 | 分类英文标识 |
brand_id |
否 | 品牌 ID 筛选 |
by / sort |
否 | 排序字段 / 方向 |
year / month |
否 | 按年月归档 |
page |
否 | 页码,默认 1 |
列表每页数量固定为 6(小程序端约定)。
响应
{
"code": "OK",
"message": "",
"data": {
"title": "商品分类名",
"category_id": 0,
"product_list": [ { "id": 1, "name": "...", "price": "...", "thumb": "...", "...": "" } ],
"product_category": [ { "id": 2, "name": "...", "children": [] } ],
"pager": { "...": "分页信息(以实际返回为准)" }
},
"errors": {},
"request_id": "9f2a5c8e1b3d7f40"
}
商品详情
GET /api/product/show/12
{
"code": "OK",
"message": "",
"data": {
"defined": { "...": "自定义字段" },
"title": "商品详情",
"product": { "id": 12, "name": "...", "price": "...", "content": "<p>……</p>", "...": "" },
"open": { "order": true },
"coupon_list": [ { "...": "领券列表(优惠券模块启用时)" } ]
},
"errors": {},
"request_id": "9f2a5c8e1b3d7f40"
}
| 字段 | 说明 |
|---|---|
open.order |
下单功能是否开启(决定是否显示"立即购买") |
coupon_list |
可领取优惠券(优惠券模块启用时才有) |
product |
商品数据(价格字段在登录态下可能带会员价语义) |
商品可选属性
GET /api/product/attribute_list?id=12&attribute_data={...}
| 参数 | 必填 | 说明 |
|---|---|---|
id |
是 | 商品 ID(也支持 category_slug+slug) |
attribute_data |
否 | 已选属性 JSON 字符串(用于级联联动) |
{
"code": "OK",
"message": "",
"data": { "...": "属性数据(结构以属性模块为准)" },
"errors": {},
"request_id": "9f2a5c8e1b3d7f40"
}
属性模块未启用时 data 为 {}。
工作端接口说明
工作端围绕 WorkProductFormRequest 校验(字段白名单在服务端收口):
- 列表
GET /api/product/work:当前员工可见的商品分页列表,返回product_list; - 新增表单
GET /api/product/work/add:返回默认商品骨架product、扁平分类product_category、图集img_list、品牌brand_list; - 提交新增
POST /api/product/work:按表单字段提交(校验失败 422 并带errors),成功message提示; - 编辑表单
GET /api/product/work/edit?id=12:结构同新增表单,另带attribute_list(属性模块启用时);商品不存在返回 404; - 提交更新
PUT /api/product/work/12(POST +_method=PUT亦可):成功/失败与新增一致; - 删除
DELETE /api/product/work/12:不存在返回 404; - 图片上传
POST /api/product/work/upload:multipart 表单,字段item_id、type(默认thumb)、image(文件)、img_width(可选),返回图片路径数据。
注意事项
- 商品列表的"不传 id 回退第一个分类"是小程序端历史行为:通用客户端建议显式传
id=0(全部)或不传后读取返回的category_id以判断实际生效的分类; - 工作端全部接口前置
mustLoginAndPermission:未登录 401,非员工 403(work_no_permission); - 新增/更新的字段校验失败统一返回
422 INVALID_PARAMS+errors(键=字段名)。