apiAutoTest/项目实战接口文档.md

1969 lines
55 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 后端服务源码
使用的https://www.bilibili.com/video/BV1EE411B7SU?p=10其后端源码已部署到我自己的云服务器上
# ⚠️接口文档中有些响应结果有些许差异,使用前,最好先调试下...
## 1.1. API V1 接口说明
- 接口基准地址:`http://49.232.203.244:8888/api/private/v1/`
- 服务端已开启 CORS 跨域支持
- API V1 认证统一使用 Token 认证,通过登录接口`用户名admin`,`密码123456`进行登录获得token**
- **需要授权的 API ,必须在请求头中使用 `Authorization` 字段提供 `token` 令牌**
- **使用 HTTP Status Code 标识状态**
- **数据返回格式统一使用 JSON**
### 1.1.1. 支持的请求方法
- GETSELECT从服务器取出资源一项或多项
- POSTCREATE在服务器新建一个资源。
- PUTUPDATE在服务器更新资源客户端提供改变后的完整资源
- PATCHUPDATE在服务器更新资源客户端提供改变的属性
- DELETEDELETE从服务器删除资源。
- HEAD获取资源的元数据。
- OPTIONS获取信息关于资源的哪些属性是客户端可以改变的。
### 1.1.2. 通用返回状态说明
| *状态码* | *含义* | *说明* |
| -------- | --------------------- | --------------------------------------------------- |
| 200 | OK | 请求成功 |
| 201 | CREATED | 创建成功 |
| 204 | DELETED | 删除成功 |
| 400 | BAD REQUEST | 请求的地址不存在或者包含不支持的参数 |
| 401 | UNAUTHORIZED | 未授权 |
| 403 | FORBIDDEN | 被禁止访问 |
| 404 | NOT FOUND | 请求的资源不存在 |
| 422 | Unprocesable entity | [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误 |
| 500 | INTERNAL SERVER ERROR | 内部错误 |
| | | |
------
## 1.2. 登录
### 1.2.1. 登录验证接口
- 请求路径login
- 请求方法post
- 请求参数
| 参数名 | 参数说明 | 备注 |
| -------- | -------- | -------- |
| username | 用户名 | 不能为空 |
| password | 密码 | 不能为空 |
- 响应参数
| 参数名 | 参数说明 | 备注 |
| -------- | ----------- | --------------- |
| id | 用户 ID | |
| rid | 用户角色 ID | |
| username | 用户名 | |
| mobile | 手机号 | |
| email | 邮箱 | |
| token | 令牌 | 基于 jwt 的令牌 |
- 响应数据
```json
{
"data": {
"id": 500,
"rid": 0,
"username": "admin",
"mobile": "123",
"email": "123@qq.com",
"token": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjUwMCwicmlkIjowLCJpYXQiOjE1MTI1NDQyOTksImV4cCI6MTUxMjYzMDY5OX0.eGrsrvwHm-tPsO9r_pxHIQ5i5L1kX9RX444uwnRGaIM"
},
"meta": {
"msg": "登录成功",
"status": 200
}
}
```
## 1.3. 用户管理
### 1.3.1. 用户数据列表
- 请求路径users
- 请求方法get
- 请求参数
| 参数名 | 参数说明 | 备注 |
| -------- | ------------ | -------- |
| query | 查询参数 | 可以为空 |
| pagenum | 当前页码 | 不能为空 |
| pagesize | 每页显示条数 | 不能为空 |
- 响应参数
| 参数名 | 参数说明 | 备注 |
| --------- | ------------ | ---- |
| totalpage | 总记录数 | |
| pagenum | 当前页码 | |
| users | 用户数据集合 | |
- 响应数据
```json
{
"data": {
"totalpage": 5,
"pagenum": 4,
"users": [
{
"id": 25,
"username": "tige117",
"mobile": "18616358651",
"type": 1,
"email": "tige112@163.com",
"create_time": "2017-11-09T20:36:26.000Z",
"mg_state": true, // 当前用户的状态
"role_name": "炒鸡管理员"
}
]
},
"meta": {
"msg": "获取成功",
"status": 200
}
}
```
### 1.3.2. 添加用户
- 请求路径users
- 请求方法post
- 请求参数
| 参数名 | 参数说明 | 备注 |
| -------- | -------- | -------- |
| username | 用户名称 | 不能为空 |
| password | 用户密码 | 不能为空 |
| email | 邮箱 | 可以为空 |
| mobile | 手机号 | 可以为空 |
- 响应参数
| 参数名 | 参数说明 | 备注 |
| -------- | ----------- | ---- |
| id | 用户 ID | |
| rid | 用户角色 ID | |
| username | 用户名 | |
| mobile | 手机号 | |
| email | 邮箱 | |
- 响应数据
```json
{
"data": {
"id": 28,
"username": "tige1200",
"mobile": "test",
"type": 1,
"openid": "",
"email": "test@test.com",
"create_time": "2017-11-10T03:47:13.533Z",
"modify_time": null,
"is_delete": false,
"is_active": false
},
"meta": {
"msg": "用户创建成功",
"status": 201
}
}
```
### 1.3.3. 修改用户状态
- 请求路径users/:uId/state/:type
- 请求方法put
- 请求参数
| 参数名 | 参数说明 | 备注 |
| ------ | -------- | ------------------------------------------- |
| uId | 用户 ID | 不能为空`携带在url中` |
| type | 用户状态 | 不能为空`携带在url中`,值为 true 或者 false |
- ~~响应数据~
```json
{
"data": {
"id": 566,
"rid": 30,
"username": "admin",
"mobile": "123456",
"email": "bb@itcast.com",
"mg_state": 0
},
"meta": {
"msg": "设置状态成功",
"status": 200
}
}
```
### 1.3.4. 根据 ID 查询用户信息
- 请求路径users/:id
- 请求方法get
- 请求参数
| 参数名 | 参数说明 | 备注 |
| ------ | -------- | --------------------- |
| id | 用户 ID | 不能为空`携带在url中` |
- 响应参数
| 参数名 | 参数说明 | 备注 |
| ------- | -------- | ---- |
| id | 用户 ID | |
| role_id | 角色 ID | |
| mobile | 手机号 | |
| email | 邮箱 | |
- 响应数据
```json
{
"data": {
"id": 503,
"username": "admin3",
"role_id": 0,
"mobile": "00000",
"email": "new@new.com"
},
"meta": {
"msg": "查询成功",
"status": 200
}
}
```
### 1.3.5. 编辑用户提交
- 请求路径users/:id
- 请求方法put
- 请求参数
| 参数名 | 参数说明 | 备注 |
| ------ | -------- | --------------------------- |
| id | 用户 id | 不能为空 `参数是url参数:id` |
| email | 邮箱 | 可以为空 |
| mobile | 手机号 | 可以为空 |
- 响应参数
| 参数名 | 参数说明 | 备注 |
| ------- | -------- | ---- |
| id | 用户 ID | |
| role_id | 角色 ID | |
| mobile | 手机号 | |
| email | 邮箱 | |
- 响应数据
```json
/* 200表示成功,500表示失败 */
{
"data": {
"id": 503,
"username": "admin3",
"role_id": 0,
"mobile": "111",
"email": "123@123.com"
},
"meta": {
"msg": "更新成功",
"status": 200
}
}
```
### 1.3.6. 删除单个用户
- 请求路径users/:id
- 请求方法delete
- 请求参数
| 参数名 | 参数说明 | 备注 |
| ------ | -------- | -------------------------- |
| id | 用户 id | 不能为空`参数是url参数:id` |
- 响应参数
- 响应数据
```json
{
"data": null,
"meta": {
"msg": "删除成功",
"status": 200
}
}
```
### 1.3.7. 分配用户角色
- 请求路径users/:id/role
- 请求方法put
- 请求参数
| 参数名 | 参数说明 | 备注 |
| ------ | -------- | -------------------------- |
| id | 用户 ID | 不能为空`参数是url参数:id` |
| rid | 角色 id | 不能为空`参数body参数` |
- 响应参数
| 参数名 | 参数说明 | 备注 |
| ------- | -------- | ---- |
| id | 用户 ID | |
| role_id | 角色 ID | |
| mobile | 手机号 | |
| email | 邮箱 | |
- 响应数据
```json
{
"data": {
"id": 508,
"rid": "30",
"username": "asdf1",
"mobile": "123123",
"email": "adfsa@qq.com"
},
"meta": {
"msg": "设置角色成功",
"status": 200
}
}
```
## 1.4. 权限管理
### 1.4.1. 所有权限列表
- 请求路径rights/:type
- 请求方法get
- 请求参数
| 参数名 | 参数说明 | 备注 |
| ------ | -------- | ------------------------------------------------------------ |
| type | 类型 | 值 list 或 tree , list 列表显示权限, tree 树状显示权限,`参数是url参数:type` |
- 响应参数
| 参数名 | 参数说明 | 备注 |
| -------- | ------------ | ---- |
| id | 权限 ID | |
| authName | 权限说明 | |
| level | 权限层级 | |
| pid | 权限父 ID | |
| path | 对应访问路径 | |
- 响应数据 type=list
```json
{
"data": [
{
"id": 101,
"authName": "商品管理",
"level": "0",
"pid": 0,
"path": null
},
{
"id": 102,
"authName": "订单管理",
"level": "0",
"pid": 0,
"path": null
}
],
"meta": {
"msg": "获取权限列表成功",
"status": 200
}
}
```
type=tree
```json
{
data: [
{
id: 101,
authName: '商品管理',
path: null,
pid: 0,
children: [
{
id: 104,
authName: '商品列表',
path: null,
pid: 101,
children: [
{
id: 105,
authName: '添加商品',
path: null,
pid: '104,101'
}
]
}
]
}
],
meta: {
msg: '获取权限列表成功',
status: 200
}
}
```
### 1.4.2. 左侧菜单权限
- 请求路径menus
- 请求方法get
- 响应数据
```json
{
"data":
{
"id": 101,
"authName": "商品管理",
"path": null,
"children": [
{
"id": 104,
"authName": "商品列表",
"path": null,
"children": []
}
]
}
"meta": {
"msg": "获取菜单列表成功",
"status": 200
}
}
```
## 1.5. 角色管理
### 1.5.1. 角色列表
- 请求路径roles
- 请求方法get
- 响应数据说明
+ 第一层为角色信息
- 第二层开始为权限说明,权限一共有 3 层权限
- 最后一层权限,不包含 `children` 属性
- 响应数据
```json
{
"data": [
{
"id": 30,
"roleName": "主管",
"roleDesc": "技术负责人",
"children": [
{
"id": 101,
"authName": "商品管理",
"path": null,
"children": [
{
"id": 104,
"authName": "商品列表",
"path": null,
"children": [
{
"id": 105,
"authName": "添加商品",
"path": null
}
]
}
]
}
]
}
],
"meta": {
"msg": "获取成功",
"status": 200
}
}
```
### 1.5.2. 添加角色
- 请求路径roles
- 请求方法post
- 请求参数
| 参数名 | 参数说明 | 备注 |
| -------- | -------- | -------- |
| roleName | 角色名称 | 不能为空 |
| roleDesc | 角色描述 | 可以为空 |
- 响应参数
| 参数名 | 参数说明 | 备注 |
| -------- | -------- | ---- |
| roleId | 角色 ID | |
| roleName | 角色名称 | |
| roleDesc | 角色描述 | |
- 响应数据
```json
{
"data": {
"roleId": 40,
"roleName": "admin2",
"roleDesc": "admin2Desc"
},
"meta": {
"msg": "创建成功",
"status": 201
}
}
```
### 1.5.3. 根据 ID 查询角色
- 请求路径roles/:id
- 请求方法get
- 请求参数
| 参数名 | 参数说明 | 备注 |
| ------ | -------- | --------------------- |
| :id | 角色 ID | 不能为空`携带在url中` |
- 响应参数
| 参数名 | 参数说明 | 备注 |
| -------- | -------- | ---- |
| roleId | 角色 ID | |
| roleName | 角色名称 | |
| roleDesc | 角色描述 | |
- 响应数据
```json
{
"data": {
"roleId": 31,
"roleName": "测试角色",
"roleDesc": "测试负责人"
},
"meta": {
"msg": "获取成功",
"status": 200
}
}
```
### 1.5.4. 编辑提交角色
- 请求路径roles/:id
- 请求方法put
- 请求参数
| 参数名 | 参数说明 | 备注 |
| -------- | -------- | --------------------- |
| :id | 角色 ID | 不能为空`携带在url中` |
| roleName | 角色名称 | 不能为空 |
| roleDesc | 角色描述 | 可以为空 |
- 响应数据
```json
{
"data": {
"roleId": 31,
"roleName": "测试角色",
"roleDesc": "测试角色描述"
},
"meta": {
"msg": "获取成功",
"status": 200
}
}
```
### 1.5.5. 删除角色
- 请求路径roles/:id
- 请求方法delete
- 请求参数
| 参数名 | 参数说明 | 备注 |
| ------ | -------- | --------------------- |
| :id | 角色 ID | 不能为空`携带在url中` |
- 响应数据
```json
{
"data": null,
"meta": {
"msg": "删除成功",
"status": 200
}
}
```
### 1.5.6. 角色授权
- 请求路径roles/:roleId/rights
- 请求方法post
- 请求参数:通过 `请求体` 发送给后端
| 参数名 | 参数说明 | 备注 |
| ------- | ---------------------- | ------------------------------------------------------------ |
| :roleId | 角色 ID | 不能为空`携带在url中` |
| rids | 权限 ID 列表(字符串) | 以 `,` 分割的权限 ID 列表获取所有被选中、叶子节点的key和半选中节点的key, 包括 123级节点 |
- 响应数据
```json
{
"data": null,
"meta": {
"msg": "更新成功",
"status": 200
}
}
```
### 1.5.7. 删除角色指定权限
- 请求路径roles/:roleId/rights/:rightId
- 请求方法delete
- 请求参数
| 参数名 | 参数说明 | 备注 |
| -------- | -------- | -------------------------- |
| :roleId | 角色 ID | 不能为空`携带在url中`token |
| :rightId | 权限 ID | 不能为空`携带在url中` |
- 响应数据说明
- 返回的data, 是当前角色下最新的权限数据
- 响应数据
```json
{
"data": [
{
"id": 101,
"authName": "商品管理",
"path": null,
"children": [
{
"id": 104,
"authName": "商品列表",
"path": null,
"children": [
{
"id": 105,
"authName": "添加商品",
"path": null
},
{
"id": 116,
"authName": "修改",
"path": null
}
]
}
]
}
],
"meta": {
"msg": "取消权限成功",
"status": 200
}
}
```
## 1.6. 商品分类管理
### 1.6.1. 商品分类数据列表
- 请求路径categories
- 请求方法get
- 请求参数
| 参数名 | 参数说明 | 备注 |
| -------- | ------------------ | ------------------------------------------------------------ |
| type | [1,2,3] | 值123 分别表示显示一层二层三层分类列表<br />【可选参数】如果不传递,则默认获取所有级别的分类 |
| pagenum | 当前页码值 | 【可选参数】如果不传递,则默认获取所有分类 |
| pagesize | 每页显示多少条数据 | 【可选参数】如果不传递,则默认获取所有分类 |
- 响应参数
| 参数名 | 参数说明 | 备注 |
| --------- | ------------ | ---- |
| cat_id | 分类 ID | |
| cat_name | 分类名称 | |
| cat_pid | 分类父 ID | |
| cat_level | 分类当前层级 | |
- 响应数据
```json
{
"data": [
{
"cat_id": 1,
"cat_name": "大家电",
"cat_pid": 0,
"cat_level": 0,
"cat_deleted": false,
"children": [
{
"cat_id": 3,
"cat_name": "电视",
"cat_pid": 1,
"cat_level": 1,
"cat_deleted": false,
"children": [
{
"cat_id": 6,
"cat_name": "曲面电视",
"cat_pid": 3,
"cat_level": 2,
"cat_deleted": false
},
{
"cat_id": 7,
"cat_name": "海信",
"cat_pid": 3,
"cat_level": 2,
"cat_deleted": false
}
]
}
]
}
],
"meta": {
"msg": "获取成功",
"status": 200
}
}
```
### 1.6.2. 添加分类
- 请求路径categories
- 请求方法post
- 请求参数
| 参数名 | 参数说明 | 备注 |
| --------- | --------- | ----------------------------------------------------------- |
| cat_pid | 分类父 ID | 不能为空如果要添加1级分类则父分类Id应该设置为 `0` |
| cat_name | 分类名称 | 不能为空 |
| cat_level | 分类层级 | 不能为空,`0`表示一级分类;`1`表示二级分类;`2`表示三级分类 |
- 响应数据
```json
{
"data": {
"cat_id": 62,
"cat_name": "相框",
"cat_pid": "1",
"cat_level": "1"
},
"meta": {
"msg": "创建成功",
"status": 201
}
}
```
### 1.6.3. 根据 id 查询分类
- 请求路径categories/:id
- 请求方法get
- 请求参数
| 参数名 | 参数说明 | 备注 |
| ------ | -------- | --------------------- |
| :id | 分类 ID | 不能为空`携带在url中` |
- 响应数据
```
{
"data": {
"cat_id": 3,
"cat_name": "厨卫电器",
"cat_pid": 0,
"cat_level": 0
},
"meta": {
"msg": "获取成功",
"status": 200
}
}
```
### 1.6.4. 编辑提交分类
- 请求路径categories/:id
- 请求方法put
- 请求参数
| 参数名 | 参数说明 | 备注 |
| -------- | -------- | -------------------------------- |
| :id | 分类 ID | 不能为空`携带在url中` |
| cat_name | 分类名称 | 不能为空【此参数,放到请求体中】 |
- 响应数据
```
{
"data": {
"cat_id": 22,
"cat_name": "自拍杆",
"cat_pid": 7,
"cat_level": 2
},
"meta": {
"msg": "更新成功",
"status": 200
}
}
```
### 1.6.5. 删除分类
- 请求路径categories/:id
- 请求方法delete
- 请求参数
| 参数名 | 参数说明 | 备注 |
| ------ | -------- | --------------------- |
| :id | 分类 ID | 不能为空`携带在url中` |
- 响应数据
```
{
"data": null,
"meta": {
"msg": "删除成功",
"status": 200
}
}
```
## 1.7. 分类参数管理
### 1.7.1. 参数列表
- 请求路径categories/:id/attributes
- 请求方法get
- 请求参数
| 参数名 | 参数说明 | 备注 |
| ------ | ----------- | --------------------------------------------------------- |
| :id | 分类 ID | 不能为空`携带在url中` |
| sel | [only,many] | 不能为空,通过 only 或 many 来获取分类静态参数还是动态参数 |
- 响应参数
| 参数名 | 参数说明 | 备注 |
| ---------- | ---------------------------------------------- | ---- |
| attr_id | 分类参数 ID | |
| attr_name | 分类参数名称 | |
| cat_id | 分类参数所属分类 | |
| attr_sel | only:输入框(唯一) many:后台下拉列表/前台单选框 | |
| attr_write | manual:手工录入 list:从列表选择 | |
| attr_vals | 如果 attr_write:list,那么有值,该值以逗号分隔 | |
- 响应数据
```
{
"data": [
{
"attr_id": 1,
"attr_name": "cpu",
"cat_id": 22,
"attr_sel": "only",
"attr_write": "manual",
"attr_vals": "ffff"
}
],
"meta": {
"msg": "获取成功",
"status": 200
}
}
```
### 1.7.2. 添加动态参数或者静态属性
- 请求路径categories/:id/attributes
- 请求方法post
- 请求参数
| 参数名 | 参数说明 | 备注 |
| --------- | ------------------------------------------ | --------------------- |
| :id | 分类 ID | 不能为空`携带在url中` |
| attr_name | 参数名称 | 不能为空 |
| attr_sel | [only,many] | 不能为空 |
| attr_vals | 如果是 many 就需要填写值的选项,以逗号分隔 | 【可选参数】 |
- 响应数据
```
{
"data": {
"attr_id": 44,
"attr_name": "测试参数",
"cat_id": "1",
"attr_sel": "many",
"attr_write": "list",
"attr_vals": "a,b,c"
},
"meta": {
"msg": "创建成功",
"status": 201
}
}
```
### 1.7.3. 删除参数
- 请求路径: categories/:id/attributes/:attrid
- 请求方法delete
- 请求参数
| 参数名 | 参数说明 | 备注 |
| ------- | -------- | --------------------- |
| :id | 分类 ID | 不能为空`携带在url中` |
| :attrid | 参数 ID | 不能为空`携带在url中` |
- 响应数据
```
{
"data": null,
"meta": {
"msg": "删除成功",
"status": 200
}
}
```
### 1.7.4. 根据 ID 查询参数
- 请求路径categories/:id/attributes/:attrId
- 请求方法get
- 请求参数
| 参数名 | 参数说明 | 备注 |
| --------- | ------------------------------------------ | --------------------- |
| :id | 分类 ID | 不能为空`携带在url中` |
| :attrId | 属性 ID | 不能为空`携带在url中` |
| attr_sel | [only,many] | 不能为空 |
| attr_vals | 如果是 many 就需要填写值的选项,以逗号分隔 | |
- 响应数据
```
{
"data": {
"attr_id": 1,
"attr_name": "cpu",
"cat_id": 22,
"attr_sel": "only",
"attr_write": "manual",
"attr_vals": "ffff"
},
"meta": {
"msg": "获取成功",
"status": 200
}
}
```
### 1.7.5. 编辑提交参数
- 请求路径categories/:id/attributes/:attrId
- 请求方法put
- 请求参数
| 参数名 | 参数说明 | 备注 |
| --------- | ---------------------- | -------------------------- |
| :id | 分类 ID | 不能为空`携带在url中` |
| :attrId | 属性 ID | 不能为空`携带在url中` |
| attr_name | 新属性的名字 | 不能为空,携带在`请求体`中 |
| attr_sel | 属性的类型[many或only] | 不能为空,携带在`请求体`中 |
| attr_vals | 参数的属性值 | 可选参数,携带在`请求体`中 |
- 响应数据
```
{
"data": {
"attr_id": 9,
"attr_name": "测试更新",
"cat_id": "43",
"attr_sel": "only",
"attr_write": "manual",
"attr_vals": "abc"
},
"meta": {
"msg": "更新成功",
"status": 200
}
}
```
## 1.8. 商品管理
### 1.8.1. 商品列表数据
- 请求路径goods
- 请求方法get
- 请求参数
| 参数名 | 参数说明 | 备注 |
| -------- | ------------ | -------- |
| query | 查询参数 | 可以为空 |
| pagenum | 当前页码 | 不能为空 |
| pagesize | 每页显示条数 | 不能为空 |
- 响应参数
| 参数名 | 参数说明 | 备注 |
| ------------ | ------------ | -------------------------------------- |
| total | 总共商品条数 | |
| pagenum | 当前商品页数 | |
| goods_id | 商品 ID | |
| goods_name | 商品名称 | |
| goods_price | 价格 | |
| goods_number | 数量 | |
| goods_weight | 重量 | 不能为空 |
| goods_state | 商品状态 | 商品状态 0: 未通过 1: 审核中 2: 已审核 |
| add_time | 添加时间 | |
| upd_time | 更新时间 | |
| hot_mumber | 热销品数量 | |
| is_promote | 是否是热销品 | |
- 响应数据
```
{
"data": {
"total": 50,
"pagenum": "1",
"goods": [
{
"goods_id": 144,
"goods_name": "asfdsd",
"goods_price": 1,
"goods_number": 1,
"goods_weight": 1,
"goods_state": null,
"add_time": 1512954923,
"upd_time": 1512954923,
"hot_mumber": 0,
"is_promote": false
}
]
},
"meta": {
"msg": "获取成功",
"status": 200
}
}
```
### 1.8.2. 添加商品
- 请求路径goods
- 请求方法post
- 请求参数
| 参数名 | 参数说明 | 备注 |
| --------------- | ------------------------------------------------- | -------- |
| goods_name | 商品名称 | 不能为空 |
| goods_cat | 以为','分割的分类列表 | 不能为空 |
| goods_price | 价格 | 不能为空 |
| goods_number | 数量 | 不能为空 |
| goods_weight | 重量 | 不能为空 |
| goods_introduce | 介绍 | 可以为空 |
| pics | 上传的图片临时路径(对象) | 可以为空 |
| attrs | 商品的参数(数组),包含 `动态参数``静态属性` | 可以为空 |
- 请求数据
```json
{
"goods_name":"test_goods_name2",
"goods_cat": "1,2,3",
"goods_price":20,
"goods_number":30,
"goods_weight":40,
"goods_introduce":"abc",
"pics":[
{"pic":"/tmp_uploads/30f08d52c551ecb447277eae232304b8"}
],
"attrs":[
{
"attr_id":15,
"attr_value":"ddd"
},
{
"attr_id":15,
"attr_value":"eee"
}
]
}
```
- 响应参数
| 参数名 | 参数说明 | 备注 |
| ------------ | -------------------------- | ------------------------------------------------------------ |
| total | 总共商品条数 | |
| pagenum | 当前商品页数 | |
| goods_id | 商品 ID | |
| goods_cat | 以为','分割的分类列表 | |
| goods_name | 商品名称 | |
| goods_price | 价格 | |
| goods_number | 数量 | |
| goods_weight | 重量 | 不能为空 |
| goods_state | 商品状态 | 商品状态 0: 未通过 1: 审核中 2: 已审核 |
| add_time | 添加时间 | |
| upd_time | 更新时间 | |
| hot_mumber | 热销品数量 | |
| is_promote | 是否是热销品 | |
| pics | 上传的图片临时路径(对象) | pics_id:图片 ID,goods_id:商品 ID,pics_big:大图,pics_mid:中图,pics_sma:小图 |
| attrs | 商品的参数(数组) | goods_id:商品 ID,attr_value:当前商品的参数值,add_price:浮动价格,attr_vals:预定义的参数值,attr_sel:手动输入,还是单选, |
- 响应数据
```json
{
"data": {
"goods_id": 145,
"goods_name": "test_goods_name2",
"goods_price": 20,
"cat_id": 1,
"goods_number": 30,
"goods_weight": 40,
"goods_introduce": "abc",
"goods_big_logo": "",
"goods_small_logo": "",
"goods_state": 1,
"add_time": 1512962370,
"upd_time": 1512962370,
"hot_mumber": 0,
"is_promote": false,
"pics": [
{
"pics_id": 397,
"goods_id": 145,
"pics_big": "uploads/goodspics/big_30f08d52c551ecb447277eae232304b8",
"pics_mid": "uploads/goodspics/mid_30f08d52c551ecb447277eae232304b8",
"pics_sma": "uploads/goodspics/sma_30f08d52c551ecb447277eae232304b8"
}
],
"attrs": [
{
"goods_id": 145,
"attr_id": 15,
"attr_value": "ddd",
"add_price": null,
"attr_name": "fffffff",
"attr_sel": "many",
"attr_write": "list",
"attr_vals": ""
},
{
"goods_id": 145,
"attr_id": 15,
"attr_value": "eee",
"add_price": null,
"attr_name": "fffffff",
"attr_sel": "many",
"attr_write": "list",
"attr_vals": ""
}
]
},
"meta": {
"msg": "创建商品成功",
"status": 201
}
}
```
### 1.8.3. 根据 ID 查询商品
- 请求路径goods/:id
- 请求方法get
- 请求参数
| 参数名 | 参数说明 | 备注 |
| ------ | -------- | --------------------- |
| id | 商品 ID | 不能为空`携带在url中` |
- 响应参数
| 参数名 | 参数说明 | 备注 |
| ------------ | -------------------------- | ------------------------------------------------------------ |
| total | 总共商品条数 | |
| pagenum | 当前商品页数 | |
| goods_id | 商品 ID | |
| goods_name | 商品名称 | |
| goods_price | 价格 | |
| goods_number | 数量 | |
| goods_weight | 重量 | 不能为空 |
| goods_state | 商品状态 | 商品状态 0: 未通过 1: 审核中 2: 已审核 |
| add_time | 添加时间 | |
| upd_time | 更新时间 | |
| hot_mumber | 热销品数量 | |
| is_promote | 是否是热销品 | |
| pics | 上传的图片临时路径(对象) | pics_id:图片 ID,goods_id:商品 ID,pics_big:大图,pics_mid:中图,pics_sma:小图 |
| attrs | 商品的参数(数组) | goods_id:商品 ID,attr_value:当前商品的参数值,add_price:浮动价格,attr_vals:预定义的参数值,attr_sel:手动输入,还是单选, |
- 响应数据
```
{
"data": {
"goods_id": 145,
"goods_name": "test_goods_name2",
"goods_price": 20,
"goods_number": 30,
"goods_weight": 40,
"goods_introduce": "abc",
"goods_big_logo": "",
"goods_small_logo": "",
"goods_state": 1,
"add_time": 1512962370,
"upd_time": 1512962370,
"hot_mumber": 0,
"is_promote": false,
"pics": [
{
"pics_id": 397,
"goods_id": 145,
"pics_big": "uploads/goodspics/big_30f08d52c551ecb447277eae232304b8",
"pics_mid": "uploads/goodspics/mid_30f08d52c551ecb447277eae232304b8",
"pics_sma": "uploads/goodspics/sma_30f08d52c551ecb447277eae232304b8"
}
],
"attrs": [
{
"goods_id": 145,
"attr_id": 15,
"attr_value": "ddd",
"add_price": null,
"attr_name": "fffffff",
"attr_sel": "many",
"attr_write": "list",
"attr_vals": ""
},
{
"goods_id": 145,
"attr_id": 15,
"attr_value": "eee",
"add_price": null,
"attr_name": "fffffff",
"attr_sel": "many",
"attr_write": "list",
"attr_vals": ""
}
]
},
"meta": {
"msg": "创建商品成功",
"status": 201
}
}
```
### 1.8.4. 编辑提交商品
- 请求路径goods/:id
- 请求方法put
- 请求参数
| 参数名 | 参数说明 | 备注 |
| --------------- | -------------------------- | --------------------- |
| id | 商品 ID | 不能为空`携带在url中` |
| goods_name | 商品名称 | 不能为空 |
| goods_price | 价格 | 不能为空 |
| goods_number | 数量 | 不能为空 |
| goods_weight | 重量 | 不能为空 |
| goods_introduce | 介绍 | 可以为空 |
| pics | 上传的图片临时路径(对象) | 可以为空 |
| attrs | 商品的参数(数组) | 可以为空 |
- 请求数据
```
{
"goods_name":"test_goods_name2",
"goods_price":20,
"goods_number":30,
"goods_weight":40,
"goods_introduce":"abc",
"pics":[
{"pic":"/tmp_uploads/30f08d52c551ecb447277eae232304b8"}
],
"attrs":[
{
"attr_id":15,
"attr_value":"ddd"
},
{
"attr_id":15,
"attr_value":"eee"
}
]
}
```
- 响应参数
| 参数名 | 参数说明 | 备注 |
| ------------ | -------------------------- | ------------------------------------------------------------ |
| total | 总共商品条数 | |
| pagenum | 当前商品页数 | |
| goods_id | 商品 ID | |
| goods_name | 商品名称 | |
| goods_price | 价格 | |
| goods_number | 数量 | |
| goods_weight | 重量 | 不能为空 |
| goods_state | 商品状态 | 商品状态 0: 未通过 1: 审核中 2: 已审核 |
| add_time | 添加时间 | |
| upd_time | 更新时间 | |
| hot_mumber | 热销品数量 | |
| is_promote | 是否是热销品 | |
| pics | 上传的图片临时路径(对象) | pics_id:图片 ID,goods_id:商品 ID,pics_big:大图,pics_mid:中图,pics_sma:小图 |
| attrs | 商品的参数(数组) | goods_id:商品 ID,attr_value:当前商品的参数值,add_price:浮动价格,attr_vals:预定义的参数值,attr_sel:手动输入,还是单选, |
- 响应数据
```
{
"data": {
"goods_id": 145,
"goods_name": "test_goods_name2",
"goods_price": 20,
"goods_number": 30,
"goods_weight": 40,
"goods_introduce": "abc",
"goods_big_logo": "",
"goods_small_logo": "",
"goods_state": 1,
"add_time": 1512962370,
"upd_time": 1512962370,
"hot_mumber": 0,
"is_promote": false,
"pics": [
{
"pics_id": 397,
"goods_id": 145,
"pics_big": "uploads/goodspics/big_30f08d52c551ecb447277eae232304b8",
"pics_mid": "uploads/goodspics/mid_30f08d52c551ecb447277eae232304b8",
"pics_sma": "uploads/goodspics/sma_30f08d52c551ecb447277eae232304b8"
}
],
"attrs": [
{
"goods_id": 145,
"attr_id": 15,
"attr_value": "ddd",
"add_price": null,
"attr_name": "fffffff",
"attr_sel": "many",
"attr_write": "list",
"attr_vals": ""
},
{
"goods_id": 145,
"attr_id": 15,
"attr_value": "eee",
"add_price": null,
"attr_name": "fffffff",
"attr_sel": "many",
"attr_write": "list",
"attr_vals": ""
}
]
},
"meta": {
"msg": "创建商品成功",
"status": 201
}
}
```
### 1.8.5. 删除商品
- 请求路径goods/:id
- 请求方法delete
- 请求参数
| 参数名 | 参数说明 | 备注 |
| ------ | -------- | --------------------- |
| id | 商品 ID | 不能为空`携带在url中` |
- 响应数据
```
{
"data": null,
"meta": {
"msg": "删除成功",
"status": 200
}
}
```
\###同步商品图片
- 请求路径goods/:id/pics
- 请求方法put
- 请求参数
| 参数名 | 参数说明 | 备注 |
| ------ | ------------ | ------------------------------------------------------------ |
| id | 商品 ID | 不能为空`携带在url中` |
| pics | 商品图片集合 | 如果有 pics_id 字段会保留该图片,如果没有 pics_id 但是有 pic 字段就会新生成图片数据 |
- 请求数据
```
;[
{ pic: 'tmp_uploads/db28f6316835836e97653b5c75e418be.png' },
{
pics_id: 397,
goods_id: 145,
pics_big: 'uploads/goodspics/big_30f08d52c551ecb447277eae232304b8',
pics_mid: 'uploads/goodspics/mid_30f08d52c551ecb447277eae232304b8',
pics_sma: 'uploads/goodspics/sma_30f08d52c551ecb447277eae232304b8'
}
]
```
- 响应数据
```
{
"data": {
"goods_id": 96,
"goods_name": "iphoneXX",
"goods_price": 2,
"goods_number": 22,
"goods_weight": 22,
"goods_introduce": null,
"goods_big_logo": "./uploads/goods/20171113/483a3b8e99e534ec3e4312dbbaee7c9d.jpg",
"goods_small_logo": "./uploads/goods/20171113/small_483a3b8e99e534ec3e4312dbbaee7c9d.jpg",
"goods_state": 0,
"is_del": "1",
"add_time": 1510045904,
"upd_time": 1512635159,
"delete_time": 1512635159,
"hot_mumber": 0,
"is_promote": false,
"pics": [
{
"pics_id": 383,
"goods_id": 96,
"pics_big": "uploads/goodspics/big_6f5750132abd3f5b2b93dd722fcde653.jpg",
"pics_mid": "uploads/goodspics/mid_6f5750132abd3f5b2b93dd722fcde653.jpg",
"pics_sma": "uploads/goodspics/sma_6f5750132abd3f5b2b93dd722fcde653.jpg"
}
],
"attrs": [
{
"goods_id": 96,
"attr_id": 15,
"attr_value": "eee",
"add_price": null,
"attr_name": "fffffff",
"attr_sel": "many",
"attr_write": "list",
"attr_vals": ""
},
{
"goods_id": 96,
"attr_id": 15,
"attr_value": "ddd",
"add_price": null,
"attr_name": "fffffff",
"attr_sel": "many",
"attr_write": "list",
"attr_vals": ""
}
]
},
"meta": {
"msg": "更新成功",
"status": 200
}
}
```
\###同步商品属性
- 请求路径goods/:id/attributes
- 请求方法put
- 请求参数
| 参数名 | 参数说明 | 备注 |
| ------ | -------- | --------------------- |
| id | 商品 ID | 不能为空`携带在url中` |
- 请求数据
```
;[
{
attr_id: 15,
attr_value: 'ddd'
},
{
attr_id: 15,
attr_value: 'eee'
}
]
```
- 响应数据
```
{
"data": {
"goods_id": 96,
"goods_name": "iphoneXX",
"goods_price": 2,
"goods_number": 22,
"goods_weight": 22,
"goods_introduce": null,
"goods_big_logo": "./uploads/goods/20171113/483a3b8e99e534ec3e4312dbbaee7c9d.jpg",
"goods_small_logo": "./uploads/goods/20171113/small_483a3b8e99e534ec3e4312dbbaee7c9d.jpg",
"goods_state": 0,
"is_del": "1",
"add_time": 1510045904,
"upd_time": 1512635159,
"delete_time": 1512635159,
"hot_mumber": 0,
"is_promote": false,
"pics": [
{
"pics_id": 383,
"goods_id": 96,
"pics_big": "uploads/goodspics/big_6f5750132abd3f5b2b93dd722fcde653.jpg",
"pics_mid": "uploads/goodspics/mid_6f5750132abd3f5b2b93dd722fcde653.jpg",
"pics_sma": "uploads/goodspics/sma_6f5750132abd3f5b2b93dd722fcde653.jpg"
}
],
"attrs": [
{
"goods_id": 96,
"attr_id": 15,
"attr_value": "eee",
"add_price": null,
"attr_name": "fffffff",
"attr_sel": "many",
"attr_write": "list",
"attr_vals": ""
},
{
"goods_id": 96,
"attr_id": 15,
"attr_value": "ddd",
"add_price": null,
"attr_name": "fffffff",
"attr_sel": "many",
"attr_write": "list",
"attr_vals": ""
}
]
},
"meta": {
"msg": "更新成功",
"status": 200
}
}
```
\###商品图片处理必须安装 GraphicsMagick
- linux
```
apt-get install GraphicsMagick
```
- Mac OS X
```
brew install GraphicsMagick
```
- Windows [点击下载](https://sourceforge.net/projects/graphicsmagick/files/graphicsmagick-binaries/1.3.27/GraphicsMagick-1.3.27-Q8-win64-dll.exe/download)
## 1.9. 图片上传
- 请求路径upload
- 请求方法post
- 请求参数
| 参数名 | 参数说明 | 备注 |
| ------ | -------- | ---- |
| file | 上传文件 | |
- 响应数据
```
{
"data": {
"tmp_path": "tmp_uploads/ccfc5179a914e94506bcbb7377e8985f.png",
"url": "http://127.0.0.1:8888tmp_uploads/ccfc5179a914e94506bcbb7377e8985f.png"
},
"meta": {
"msg": "上传成功",
"status": 200
}
}
```
## 1.10. 订单管理
### 1.10.1. 订单数据列表
- 请求路径orders
- 请求方法get
- 请求参数
| 参数名 | 参数说明 | 备注 |
| -------------------- | --------------- | -------- |
| query | 查询参数 | 可以为空 |
| pagenum | 当前页码 | 不能为空 |
| pagesize | 每页显示条数 | 不能为空 |
| user_id | 用户 ID | 可以为空 |
| pay_status | 支付状态 | 可以为空 |
| is_send | 是否发货 | 可以为空 |
| order_fapiao_title | ['个人','公司'] | 可以为空 |
| order_fapiao_company | 公司名称 | 可以为空 |
| order_fapiao_content | 发票内容 | 可以为空 |
| consignee_addr | 发货地址 | 可以为空 |
- 响应数据
```
{
"data": {
"total": 1,
"pagenum": "1",
"goods": [
{
"order_id": 47,
"user_id": 133,
"order_number": "itcast-59e7502d7993d",
"order_price": 322,
"order_pay": "1",
"is_send": "是",
"trade_no": "",
"order_fapiao_title": "个人",
"order_fapiao_company": "",
"order_fapiao_content": "办公用品",
"consignee_addr": "a:7:{s:6:\"cgn_id\";i:1;s:7:\"user_id\";i:133;s:8:\"cgn_name\";s:9:\"王二柱\";s:11:\"cgn_address\";s:51:\"北京市海淀区苏州街长远天地大厦305室\";s:7:\"cgn_tel\";s:11:\"13566771298\";s:8:\"cgn_code\";s:6:\"306810\";s:11:\"delete_time\";N;}",
"pay_status": "1",
"create_time": 1508331565,
"update_time": 1508331565
}
]
},
"meta": {
"msg": "获取成功",
"status": 200
}
}
```
### 1.10.2. 修改订单状态
- 请求路径orders/:id
- 请求方法put
- 请求参数
| 参数名 | 参数说明 | 备注 |
| ------------ | ------------ | ------------------------------------------ |
| id | 订单 ID | 不能为空`携带在url中` |
| is_send | 订单是否发货 | 1:已经发货0:未发货 |
| order_pay | 订单支付 | 支付方式 0 未支付 1 支付宝 2 微信 3 银行卡 |
| order_price | 订单价格 | |
| order_number | 订单数量 | |
| pay_status | 支付状态 | 订单状态: 0 未付款、1 已付款 |
- 请求数据说明
- 所有请求数据都是增量更新,如果参数不填写,就不会更新该字段
- 响应数据
```
{
"data": {
"order_id": 67,
"user_id": 1,
"order_number": "itcast-g7kmck71vjaujfgoi",
"order_price": 20,
"order_pay": "0",
"is_send": "否",
"trade_no": "",
"order_fapiao_title": "个人",
"order_fapiao_company": "",
"order_fapiao_content": "",
"consignee_addr": "",
"pay_status": "0",
"create_time": 1512533560,
"update_time": 1512533560,
"goods": [
{
"id": 82,
"order_id": 67,
"goods_id": 96,
"goods_price": 333,
"goods_number": 2,
"goods_total_price": 999
},
{
"id": 83,
"order_id": 67,
"goods_id": 95,
"goods_price": 666,
"goods_number": 5,
"goods_total_price": 999
}
]
},
"meta": {
"msg": "获取成功",
"status": 200
}
}
```
### 1.10.3. 查看订单详情
- 请求路径orders/:id
- 请求方法get
- 请求参数
| 参数名 | 参数说明 | 备注 |
| ------ | -------- | --------------------- |
| id | 订单 ID | 不能为空`携带在url中` |
- 响应数据
```
{
"data": {
"order_id": 67,
"user_id": 1,
"order_number": "itcast-g7kmck71vjaujfgoi",
"order_price": 20,
"order_pay": "0",
"is_send": "否",
"trade_no": "",
"order_fapiao_title": "个人",
"order_fapiao_company": "",
"order_fapiao_content": "",
"consignee_addr": "",
"pay_status": "0",
"create_time": 1512533560,
"update_time": 1512533560,
"goods": [
{
"id": 82,
"order_id": 67,
"goods_id": 96,
"goods_price": 333,
"goods_number": 2,
"goods_total_price": 999
},
{
"id": 83,
"order_id": 67,
"goods_id": 95,
"goods_price": 666,
"goods_number": 5,
"goods_total_price": 999
}
]
},
"meta": {
"msg": "获取成功",
"status": 200
}
}
```
### 1.10.4. 修改地址
1. [省市区/县联动效果 - 结合ElementUI的 el-cascader 组件](https://github.com/iceyangcc/provinces-china)
### 1.10.5. 查看物流信息
+ 请求路径:/kuaidi/:id
+ 请求方法get
+ 供测试的物流单号1106975712662
+ 响应数据:
```json
{
"data": [
{
"time": "2018-05-10 09:39:00",
"ftime": "2018-05-10 09:39:00",
"context": "已签收,感谢使用顺丰,期待再次为您服务",
"location": ""
},
{
"time": "2018-05-10 08:23:00",
"ftime": "2018-05-10 08:23:00",
"context": "[北京市]北京海淀育新小区营业点派件员 顺丰速运 95338正在为您派件",
"location": ""
},
{
"time": "2018-05-10 07:32:00",
"ftime": "2018-05-10 07:32:00",
"context": "快件到达 [北京海淀育新小区营业点]",
"location": ""
},
{
"time": "2018-05-10 02:03:00",
"ftime": "2018-05-10 02:03:00",
"context": "快件在[北京顺义集散中心]已装车,准备发往 [北京海淀育新小区营业点]",
"location": ""
},
{
"time": "2018-05-09 23:05:00",
"ftime": "2018-05-09 23:05:00",
"context": "快件到达 [北京顺义集散中心]",
"location": ""
},
{
"time": "2018-05-09 21:21:00",
"ftime": "2018-05-09 21:21:00",
"context": "快件在[北京宝胜营业点]已装车,准备发往 [北京顺义集散中心]",
"location": ""
},
{
"time": "2018-05-09 13:07:00",
"ftime": "2018-05-09 13:07:00",
"context": "顺丰速运 已收取快件",
"location": ""
},
{
"time": "2018-05-09 12:25:03",
"ftime": "2018-05-09 12:25:03",
"context": "卖家发货",
"location": ""
},
{
"time": "2018-05-09 12:22:24",
"ftime": "2018-05-09 12:22:24",
"context": "您的订单将由HLA北京海淀区清河中街店门店安排发货。",
"location": ""
},
{
"time": "2018-05-08 21:36:04",
"ftime": "2018-05-08 21:36:04",
"context": "商品已经下单",
"location": ""
}
],
"meta": { "status": 200, "message": "获取物流信息成功!" }
}
```
## 1.11. 数据统计
### 1.11.1. 基于时间统计的折线图
- 请求路径reports/type/1
- 请求方法get
- 响应数据
- 需要合并的选项
```js
options: {
title: {
text: '用户来源'
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
label: {
backgroundColor: '#E9EEF3'
}
}
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: [
{
boundaryGap: false
}
],
yAxis: [
{
type: 'value'
}
]
}
```