1. 电商管理后台 API 接口文档
1.1. API V1 接口说明
接口基准地址:http://127.0.0.1:8888/api/private/v1/
服务端已开启 CORS 跨域支持 API V1 认证统一使用 Token 认证 需要授权的 API ,必须在请求头中使用 Authorization
字段提供 token
令牌 使用 HTTP Status Code 标识状态 数据返回格式统一使用 JSON
1.1.1. 支持的请求方法
GET(SELECT):从服务器取出资源(一项或多项)。 POST(CREATE):在服务器新建一个资源。 PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。 PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。 DELETE(DELETE):从服务器删除资源。 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. 登录验证接口
参数名 参数说明 备注 username 用户名 不能为空 password 密码 不能为空
参数名 参数说明 备注 id 用户 ID rid 用户角色 ID username 用户名 mobile 手机号 email 邮箱 token 令牌 基于 jwt 的令牌
main.js中:
axios. defaults. baseURL = 'http://timemeetyou.com:8889/api/private/v1/'
axios. interceptors. request. use ( config => {
config. headers. Authorization = window. sessionStorage. getItem ( 'token' )
return config
} )
Vue. prototype. $http = axios
Vue. config. productionTip = false
login页面中
data ( ) {
return {
loginForm: {
username: 'admin' ,
password: '123456'
} ,
methods: {
resetLoginForm ( ) {
this . $refs. loginFormRef. resetFields ( )
} ,
login ( ) {
this . $refs. loginFormRef. validate ( async valid => {
if ( ! valid) return
const { data: res } = await this . $http. post ( 'login' , this . loginForm)
if ( res. meta. status !== 200 ) return this . $message. error ( '登录失败!' )
this . $message. success ( '登录成功!' )
console. log ( res)
window. sessionStorage. setItem ( 'token' , res. data. token)
this . $router. push ( '/home' )
} )
}
}
{
"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. 用户数据列表
参数名 参数说明 备注 query 查询参数 可以为空 pagenum 当前页码 不能为空 pagesize 每页显示条数 不能为空
参数名 参数说明 备注 totalpage 总记录数 pagenum 当前页码 users 用户数据集合
请求数据
< script>
export default {
data ( ) {
return {
queryInfo: {
query: '' ,
pagenum: 1 ,
pagesize: 2
} ,
userList: [ ] ,
total: 0
}
} ,
created ( ) {
this . getUserList ( )
} ,
methods: {
async getUserList ( ) {
const { res: data } = await this . $http. get ( 'users' , {
params: this . queryInfo
} )
if ( res. meta. status !== 200 )
return this . $message. error ( '获取用户列表失败' )
this . userList = res. data. users;
this . total = res. data. total;
}
}
}
< / script>
{
"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. 添加用户
参数名 参数说明 备注 username 用户名称 不能为空 password 用户密码 不能为空 email 邮箱 可以为空 mobile 手机号 可以为空
参数名 参数说明 备注 id 用户 ID rid 用户角色 ID username 用户名 mobile 手机号 email 邮箱
data下添加表单数据: // 添加用户的表单数据 addForm: { username: ‘’, password: ‘’, email: ‘’, mobile: ‘’ },
确认按钮添加click事件: <el-button type=“primary” @click=“addUser”>确 定
添加新用户函数: addUser(){ //点击确定按钮,添加新用户 //调用validate进行表单验证 this.KaTeX parse error: Expected '}', got 'EOF' at end of input: …d) return this. message.error(“请填写完整用户信息”); //发送请求完成添加用户的操作 const {data:res} = await this.
h
t
t
p
.
p
o
s
t
(
"
u
s
e
r
s
"
,
t
h
i
s
.
a
d
d
F
o
r
m
)
/
/
判
断
如
果
添
加
失
败
,
就
做
提
示
i
f
(
r
e
s
.
m
e
t
a
.
s
t
a
t
u
s
!
=
=
201
)
r
e
t
u
r
n
t
h
i
s
.
http.post("users",this.addForm) //判断如果添加失败,就做提示 if (res.meta.status !== 201) return this.
h t t p . p o s t ( " u s e r s " , t h i s . a d d F o r m ) / / 判 断 如 果 添 加 失 败 , 就 做 提 示 i f ( r e s . m e t a . s t a t u s ! = = 2 0 1 ) r e t u r n t h i s . message.error(‘添加用户失败’) //添加成功的提示 this.$message.success(“添加用户成功”) //关闭对话框 this.addDialogVisible = false //重新请求最新的数据 this.getUserList() } ) },
{
"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
< el- table- column label= "状态" prop= "mg_state" >
< ! -- 作用域插槽接收数据 -- >
< template slot- scope= "scope" >
< ! -- 获取行数据 -- >
< ! -- { { scope. column} } -- >
< el- switch v- model= "scope.row.mg_state" @change= "userStateChanged(scope.row)" > < / el- switch >
< / template>
< / el- table- column>
调用API接口保存状态的修改
async userStateChanged ( row) {
const { data: res } = await this . $http. put (
`users/ ${ row. id} /state/ ${ row. mg_state} `
)
if ( res. meta. status !== 200 ) {
row. mg_state = ! row. mg_state
return this . $message. error ( '修改状态失败' )
}
this . $message. success ( '更新状态成功' )
} ,
{
"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 邮箱
通过形参的方式传id
<template slot-scope="scope">
<!-- 修改按钮 -->
<el-button
type="primary"
icon="el-icon-edit"
size="mini"
@click="showEditDialog(scope.row.id)"
></el-button>
//展示编辑对话框
showEditDialog(id) {
this.editDialogVisible = true
},
打印出id查看是否获取成功,若获取成功则进行下一步: 根据id获取用户信息 data中添加:
// 保存查询到的用户信息对象
editForm: {}
async showEditDialog(id) {
// console.log(id)
const {data:res} = await this.$http.get('users/'+id)
//判断如果查询失败,就做提示
if (res.meta.status !== 200) return this.$message.error("查询用户失败");
//保存查询到的信息
this.editForm = res.data
this.editDialogVisible = true
},
{
"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 邮箱
{
"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
{
"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 邮箱
{
"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 对应访问路径
data() { return { rightsList:[] }; }, created() { this.getRightsList(); }, methods: { async getRightsList() { const { data: res } = await this.KaTeX parse error: Expected '}', got 'EOF' at end of input: … return this. message.error(“获取权限列表失败!”); }
this.rightsList = res.data;
console.log(this.rightsList);
},
},
{
"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
{
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. 左侧菜单权限
{
"data" :
{
"id" : 101 ,
"authName" : "商品管理" ,
"path" : null ,
"children" : [
{
"id" : 104 ,
"authName" : "商品列表" ,
"path" : null ,
"children" : [ ]
}
]
}
"meta" : {
"msg" : "获取菜单列表成功" ,
"status" : 200
}
}
1.5. 角色管理
1.5.1. 角色列表
data ( ) {
return {
roleList: [ ]
} ;
} ,
created ( ) {
this . gteRolesList ( ) ;
} ,
methods: {
async getRoleList ( ) {
const { data: res} = await this . $http. get ( 'roles' )
console. log ( res. data)
this . roleList = res. data;
}
}
{
"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. 添加角色
参数名 参数说明 备注 roleName 角色名称 不能为空 roleDesc 角色描述 可以为空
参数名 参数说明 备注 roleId 角色 ID roleName 角色名称 roleDesc 角色描述
{
"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 角色描述
{
"data" : {
"roleId" : 31 ,
"roleName" : "测试角色" ,
"roleDesc" : "测试负责人"
} ,
"meta" : {
"msg" : "获取成功" ,
"status" : 200
}
}
1.5.4. 编辑提交角色
请求路径:roles/:id 请求方法:put 请求参数
参数名 参数说明 备注 :id 角色 ID 不能为空携带在url中
roleName 角色名称 不能为空 roleDesc 角色描述 可以为空
{
"data" : {
"roleId" : 31 ,
"roleName" : "测试角色" ,
"roleDesc" : "测试角色描述"
} ,
"meta" : {
"msg" : "获取成功" ,
"status" : 200
}
}
1.5.5. 删除角色
请求路径:roles/:id 请求方法:delete 请求参数
参数名 参数说明 备注 :id 角色 ID 不能为空携带在url中
{
"data" : null ,
"meta" : {
"msg" : "删除成功" ,
"status" : 200
}
}
1.5.6. 角色授权
请求路径:roles/:roleId/rights 请求方法:post 请求参数:通过 请求体
发送给后端
参数名 参数说明 备注 :roleId 角色 ID 不能为空携带在url中
rids 权限 ID 列表(字符串) 以 ,
分割的权限 ID 列表(获取所有被选中、叶子节点的key和半选中节点的key, 包括 1,2,3级节点)
{
"data" : null ,
"meta" : {
"msg" : "更新成功" ,
"status" : 200
}
}
1.5.7. 删除角色指定权限
请求路径:roles/:roleId/rights/:rightId
请求方法:delete
请求参数
参数名 参数说明 备注 :roleId 角色 ID 不能为空携带在url中
:rightId 权限 ID 不能为空携带在url中
响应数据说明
响应数据
{
"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
}
}
调用API实现删除功能 给每一个权限的el-tag添加closable属性,是的权限右侧出现“X”图标 再给el-tag添加绑定close事件处理函数removeRightById(scope.row,item1.id) removeRightById(scope.row,item2.id) removeRightById(scope.row,item3.id)
async removeRightById(role,rightId){
//弹窗提示用户是否要删除
const confirmResult = await this.$confirm('请问是否要删除该权限','删除提示',{
confirmButtonText:'确认删除',
cancelButtonText:'取消',
type:'warning'
}).catch(err=>err)
//如果用户点击确认,则confirmResult 为'confirm'
//如果用户点击取消, 则confirmResult获取的就是catch的错误消息'cancel'
if(confirmResult != "confirm"){
return this.$message.info("已经取消删除")
}
//用户点击了确定表示真的要删除
//当发送delete请求之后,返回的数据就是最新的角色权限信息
const {data:res} = await this.$http.delete(`roles/${role.id}/rights/${rightId}`)
if (res.meta.status !== 200)
return this.$message.error('删除角色权限失败')
//无需再重新加载所有权限
//只需要对现有的角色权限进行更新即可
role.children = res.data
// this.getRoleList();
}
1.6. 商品分类管理
1.6.1. 商品分类数据列表
请求路径:categories 请求方法:get 请求参数
参数名 参数说明 备注 type [1,2,3] 值:1,2,3 分别表示显示一层二层三层分类列表 【可选参数】如果不传递,则默认获取所有级别的分类 pagenum 当前页码值 【可选参数】如果不传递,则默认获取所有分类 pagesize 每页显示多少条数据 【可选参数】如果不传递,则默认获取所有分类
参数名 参数说明 备注 cat_id 分类 ID cat_name 分类名称 cat_pid 分类父 ID cat_level 分类当前层级
{
"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
表示三级分类
{
"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. 商品列表数据
参数名 参数说明 备注 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_name 商品名称 不能为空 goods_cat 以为’,'分割的分类列表 不能为空 goods_price 价格 不能为空 goods_number 数量 不能为空 goods_weight 重量 不能为空 goods_introduce 介绍 可以为空 pics 上传的图片临时路径(对象) 可以为空 attrs 商品的参数(数组),包含 动态参数
和 静态属性
可以为空
{
"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:手动输入,还是单选,
{
"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
apt-get install GraphicsMagick
brew install GraphicsMagick
1.9. 图片上传
{
"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. 订单数据列表
参数名 参数说明 备注 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. 修改地址
省市区/县联动效果 - 结合ElementUI的 el-cascader 组件
1.10.5. 查看物流信息
请求路径:/kuaidi/:id
请求方法:get
供测试的物流单号:1106975712662
响应数据:
{
"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
响应数据
需要合并的选项
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'
}
]
}