接口模型.md 10.1 KB

机会导向管理后台接口(非正式版)

全局统一设定

请求头指定要求的字段

字段 说明
x-mmm-accesstoken 发起请求时使用时校验用 token
x-mmm-refreshtoken 刷新 token 时使用的 token
  • 备注 :token 使用 jwt 进行处理.其中包含有 user_id、company_id 的数据,登录时获取

token 机制描述

token 的响应内容

{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NzYwNTM2OTAsImlhdCI6MTU3NjA1MTg4OCwiaXNzIjoibW1tX29wcG1nIiwibmJmIjoxNTc2MDUxODg4LCJ1aWQiOjEwLCJjb21wYW55X2lkIjoyfQ.R056B306_vO4UKfMRalncFULE5Z0phN4WOhS9PMwydc",
  "expires_in": 1576053688,
  "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NzYwNTU0OTAsImlhdCI6MTU3NjA1MTg4OCwiaXNzIjoibW1tX29wcG1nIiwibmJmIjoxNTc2MDUxODg4LCJ1aWQiOjEwLCJjb21wYW55X2lkIjoyfQ.OY54QdDwAq2B1NPnAmHkSxy_KvhktmZA2boSlcSSfoU",
  "refresh_expires": 1576055488
}

客户端可本地存储该内容数据。

  • access_token 对应请求头的 x-mmm-accesstoken。expires_in 指的是 access_token 的到期时间(时间戳),客户端可以依此判断 access_token 到期时间,然后决定是否调用接口刷新 token。
  • refresh_token 对应请求头的 x-mmm-refreshtoken。refresh_expires 指的是 refresh_token 的到期时间(时间戳),客户端可以依此判断 refresh_token 到期时间,然后决定是否退出重新登录。
  • 刷新 toke 的依据是 refresh_token,如果 refresh_token 过期失效则只能退出系统重新登录。
  • 为应对客户端未主动刷新 token 的情况。当服务端发现 access_token 过期且 refresh_token 未过期时返回错误码【2】,并附带刷新后的 token,影响的内容格式同上,客户端可依此刷新请求头。当服务端发现 refresh_token 过期时返回错误码【3】,客户需要退出重新登录。

通用响应结构

{
  "code": "错误码数字",
  "msg": "错误描述字符串",
  "data": {
    "xxx": "any"
  }
}
  • 备注:data 中的内容根据各接口实际情况确定

认证相关

登录

  • 请求路径 :/auth/login
  • 请求方式 :POST
  • 请求 json:
{
  "account": "账号",
  "password": "密码"
}
  • 正常响应 json
{
  "code": 0,
  "msg": "成功",
  "data": {
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NzYwNTM2OTAsImlhdCI6MTU3NjA1MTg4OCwiaXNzIjoibW1tX29wcG1nIiwibmJmIjoxNTc2MDUxODg4LCJ1aWQiOjEwLCJjb21wYW55X2lkIjoyfQ.R056B306_vO4UKfMRalncFULE5Z0phN4WOhS9PMwydc",
    "expires_in": 1576053688,
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NzYwNTU0OTAsImlhdCI6MTU3NjA1MTg4OCwiaXNzIjoibW1tX29wcG1nIiwibmJmIjoxNTc2MDUxODg4LCJ1aWQiOjEwLCJjb21wYW55X2lkIjoyfQ.OY54QdDwAq2B1NPnAmHkSxy_KvhktmZA2boSlcSSfoU",
    "refresh_expires": 1576055488
  }
}
  • 备注:该请求无需指定请求头

刷新 token

  • 请求路径 :/v1/auth/refresh_token
  • 请求方式 :get
  • 请求 json:
  • 正常响应 json
{
  "code": 0,
  "msg": "成功",
  "data": {
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NzYwNTM2OTAsImlhdCI6MTU3NjA1MTg4OCwiaXNzIjoibW1tX29wcG1nIiwibmJmIjoxNTc2MDUxODg4LCJ1aWQiOjEwLCJjb21wYW55X2lkIjoyfQ.R056B306_vO4UKfMRalncFULE5Z0phN4WOhS9PMwydc",
    "expires_in": 1576053688,
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NzYwNTU0OTAsImlhdCI6MTU3NjA1MTg4OCwiaXNzIjoibW1tX29wcG1nIiwibmJmIjoxNTc2MDUxODg4LCJ1aWQiOjEwLCJjb21wYW55X2lkIjoyfQ.OY54QdDwAq2B1NPnAmHkSxy_KvhktmZA2boSlcSSfoU",
    "refresh_expires": 1576055488
  }
}
  • 备注:无

切换公司

  • 请求路径 :/v1/auth/change_company
  • 请求方式 :post
  • 请求 json:
{
  "company_id": 2
}
  • 正常响应 json
{
  "code": 0,
  "msg": "成功",
  "data": {
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NzYwNTM2OTAsImlhdCI6MTU3NjA1MTg4OCwiaXNzIjoibW1tX29wcG1nIiwibmJmIjoxNTc2MDUxODg4LCJ1aWQiOjEwLCJjb21wYW55X2lkIjoyfQ.R056B306_vO4UKfMRalncFULE5Z0phN4WOhS9PMwydc",
    "expires_in": 1576053688,
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NzYwNTU0OTAsImlhdCI6MTU3NjA1MTg4OCwiaXNzIjoibW1tX29wcG1nIiwibmJmIjoxNTc2MDUxODg4LCJ1aWQiOjEwLCJjb21wYW55X2lkIjoyfQ.OY54QdDwAq2B1NPnAmHkSxy_KvhktmZA2boSlcSSfoU",
    "refresh_expires": 1576055488
  }
}
  • 备注:切换公司实际是变更 token 信息

公司部门管理

添加部门

  • 请求路径:/v1/department/add
  • 请求方式:post
  • 请求 json:
{
  "name": "部门8",
  "parent_id": 13,
  "manages": [1, 2, 3] //部门主管id列表
}
  • 正常响应 json
{
  "code": 0,
  "msg": "成功",
  "data": {
    "id": 12 //部门id
  }
}
  • 备注;无

编辑部门

  • 请求路径:/v1/department/edit
  • 请求方式:post
  • 请求 json:
{
  "id": 1,
  "name": "部门8",
  "parent_id": 13,
  "manages": [1, 2, 3] //部门主管id列表
}
  • 响应 json
{
  "code": 0,
  "msg": "成功",
  "data": null
}
  • 备注;无

删除部门

  • 请求路径:/v1/department/delete
  • 请求方式:post
  • 请求 json:
{
  "ids": [1, 2]
}
  • 响应 json
{
  "code": 0,
  "msg": "成功",
  "data": null
}
  • 备注;无

公司职位管理

添加职位

  • 请求路径:/v1/position/add
  • 请求方式:post
  • 请求 json:
{
  "name": "职位b-1",
  "parent_id": 8
}
  • 响应 json
{
  "code": 0,
  "msg": "成功",
  "data": {
    "id": 2
  }
}
  • 备注;无

编辑职位

  • 请求路径:/v1/position/edit
  • 请求方式:post
  • 请求 json:
{
  "id": 2,
  "name": "职位b-1",
  "parent_id": 8
}
  • 响应 json
{
  "code": 0,
  "msg": "成功",
  "data": {
    "id": 2
  }
}
  • 备注;无

删除职位

  • 请求路径:/v1/position/delete
  • 请求方式:post
  • 请求 json:
{
  "ids": [1, 2, 3]
}
  • 响应 json
{
  "code": 0,
  "msg": "成功",
  "data": null
}
  • 备注;无

公司员工角色

添加角色

  • 请求路径:/v1/rbac/role/add
  • 请求方式:post
  • 请求 json:
{
  "pid": 8,
  "name": "角色7"
}
  • 响应 json
{
  "code": 0,
  "msg": "成功",
  "data": {
    "id": 2
  }
}
  • 备注;无

编辑角色

  • 请求路径:/v1/rbac/role/edit
  • 请求方式:post
  • 请求 json:
{
  "id": 7,
  "pid": 8,
  "name": "角色7"
}
  • 响应 json
{
  "code": 0,
  "msg": "成功",
  "data": {
    "id": 2
  }
}

删除角色

  • 请求路径:/v1/rbac/role/delete
  • 请求方式:post
  • 请求 json:
{
  "id": 1
}
  • 响应 json
{
  "code": 0,
  "msg": "成功",
  "data": null
}
  • 备注;无

  • 备注;无

公告

添加公告

  • 请求路径 :/v1/bulletin/add
  • 请求方式 :post
  • 请求 json:
{
  "type": 2,
  "title": "标题",
  "content": "公告内容",
  "allow_close": 0,
  "question_switch": 1,
  "receiver": ["1", "2"],
  "question": {
    "id": 1,
    "type": 1,
    "title": "今天星期几?",
    "content": [
      {
        "id": 1,
        "content": "星期1"
      },
      {
        "id": 2,
        "content": "星期2"
      }
    ]
  },
  "cover": {
    "path": "/xx/xx.img",
    "w": 50,
    "h": 70
  }
}
obj.type  公告类型(1图+跳转链接、2纯文本)
obj.title  标题
obj.content 公告内容
obj.allow_close 允许关闭公告(0允许关闭窗口,1阅读完才能关闭,2选项打勾后才能关闭)
obj.question_switch 设置问题开关 (是否有问题) 1:是 0:否
obj.receiver  接收者
obj.question.type 类型:0-单选,1-多选
obj.question.title 标题
obj.question.content 问题选项
obj.cover 封面
  • 响应 json
{
  "code": "00000",
  "msg": "成功",
  "data": {}
}

公告列表

  • 请求路径 :/v1/bulletin/list
  • 请求方式 :post
  • 请求 json:
{
  "page": 1,
  "page_size": 20,
  "status": 0
}
obj.status 状态 0-所有 1-下架 2-上架
  • 响应 json
{
  "code": "00000",
  "msg": "成功",
  "data": {
    "list": [
      {
        "id": 5,
        "type": 2,
        "title": "测试公告",
        "status": 1,
        "receiver": [
          {
            "id": 1,
            "name": "Jennifer Clark"
          },
          {
            "id": 2,
            "name": "邓娱婷1208"
          }
        ],
        "time": "2019-12-11 17:11:43"
      }
    ],
    "Total": 2
  }
}

公告详情

  • 请求路径 :/v1/bulletin/get
  • 请求方式 :post
  • 请求 json:
{
  "id": 5
}
obj.status 状态 0-所有 1-下架 2-上架
  • 响应 json
{
  "code": "00000",
  "msg": "成功",
  "data": {
    "id": 5,
    "type": 2,
    "title": "测试公告",
    "content": "今天发布了一则公告",
    "allow_close": 0,
    "question_switch": 1,
    "receiver": [
      {
        "id": 1,
        "name": "Jennifer Clark"
      },
      {
        "id": 2,
        "name": "邓娱婷1208"
      }
    ],
    "question": {
      "id": 4,
      "type": 1,
      "title": "今天星期几?",
      "content": [
        {
          "id": 1,
          "content": "星期1"
        },
        {
          "id": 2,
          "content": "星期2"
        }
      ]
    },
    "cover": {
      "path": "/xx/xx.img",
      "h": 70,
      "w": 50
    }
  }
}

公告更新

  • 请求路径 :/v1/bulletin/update
  • 请求方式 :post
  • 请求 json:
{
  "id": 3,
  "type": 2,
  "title": "测试公告3",
  "content": "今天发布了一则公告3",
  "allow_close": 0,
  "question_switch": 1,
  "receiver": ["1", "2", "3"],
  "question": {
    "id": 2,
    "type": 1,
    "title": "今天星期几?",
    "content": [
      {
        "id": 1,
        "content": "星期2"
      },
      {
        "id": 2,
        "content": "星期3"
      }
    ]
  },
  "cover": {
    "path": "/xx/xx.img",
    "w": 50,
    "h": 70
  }
}
  • 响应 json
{
  "code": "00000",
  "msg": "成功",
  "data": null
}