加载中…
商品 product

模块说明

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(键=字段名)。
添加日期:2026-10-06