diff --git a/docs/imgs/TinyPro.png b/docs/imgs/TinyPro.png new file mode 100644 index 0000000..6daf040 Binary files /dev/null and b/docs/imgs/TinyPro.png differ diff --git "a/docs/\346\216\245\345\217\243\346\226\207\346\241\243.md" "b/docs/\346\216\245\345\217\243\346\226\207\346\241\243.md" new file mode 100644 index 0000000..37cb861 --- /dev/null +++ "b/docs/\346\216\245\345\217\243\346\226\207\346\241\243.md" @@ -0,0 +1,3427 @@ +--- +title: ospp-latest v1.0.0 +language_tabs: + - shell: Shell + - http: HTTP + - javascript: JavaScript + - ruby: Ruby + - python: Python + - php: PHP + - java: Java + - go: Go +toc_footers: [] +includes: [] +search: true +code_clipboard: true +highlight_theme: darkula +headingLevel: 2 +generator: "@tarslib/widdershins v4.0.17" + +--- + +# ospp-latest + +> v1.0.0 + +Base URLs: + +# Auth + +## POST 登录接口 + +POST /auth/login + +> Body 请求参数 + +```json +{ + "email": "j.nschfnp@qq.com", + "password": "ut sed veniam" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|说明| +|---|---|---|---|---| +|body|body|object| 否 |none| +|» email|body|string| 是 |none| +|» password|body|string| 否 |none| + +> 返回示例 + +> 201 Response + +```json +{ + "token": "string" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|201|[Created](https://tools.ietf.org/html/rfc7231#section-6.3.2)|成功|Inline| + +### 返回数据结构 + +状态码 **201** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» token|string|true|none|经过加盐处理的AccessToken|none| + +## POST 登出 + +POST /auth/logout + +> Body 请求参数 + +```json +{ + "token": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|body|body|object| 否 ||none| +|» token|body|string| 是 | 登录时返回的token|none| + +> 返回示例 + +> 200 Response + +```json +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +# i18 + +## POST 创建一个国际化词条 + +POST /i18 + +> Body 请求参数 + +```json +{ + "lang": 0, + "key": "string", + "content": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|body|body|object| 否 ||none| +|» lang|body|number| 是 ||语言ID| +|» key|body|string| 是 ||词条键| +|» content|body|string| 是 ||词条内容| + +> 返回示例 + +> 200 Response + +```json +{ + "id": 0, + "lang": { + "id": 0, + "name": "string", + "i18": [ + { + "id": 0, + "lang": { + "id": 0, + "name": "string", + "i18": [ + null + ] + }, + "key": "string", + "content": "string" + } + ] + }, + "key": "string", + "content": "string" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[I18](#schemai18)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +## GET 获取国际化字段 + +GET /i18 + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|page|query|number| 否 ||页码.| +|limit|query|number| 否 ||获取数量| +|all|query|number| 否 ||是否全部获取, 如果不未0则忽略page与limit, 返回所有的国际化字段| +|key|query|string| 否 ||国际化字段的键, 如果设定则表示按照键来模糊查找| +|content|query|string| 否 ||国际化字段的值, 如果设定则表示按照值来模糊查找| + +> 返回示例 + +> 200 Response + +```json +{ + "items": [ + { + "id": 0, + "lang": { + "id": 0, + "name": "string", + "i18": [ + { + "id": null, + "lang": null, + "key": null, + "content": null + } + ] + }, + "key": "string", + "content": "string" + } + ], + "meta": { + "itemCount": 0, + "totalItems": 0, + "itemsPerPage": 0, + "currentPage": 0 + }, + "links": { + "first": "string", + "previous": "string", + "next": "string", + "last": "string" + } +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **200** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» items|[[I18](#schemai18)]|true|none||none| +|»» id|number|true|none|国际化字段的自增id|none| +|»» lang|[Lang](#schemalang)|true|none|国际化字段对应的语言信息|none| +|»»» id|number|true|none|语言ID|none| +|»»» name|string|true|none|语言名|none| +|»»» i18|[[I18](#schemai18)]|true|none|对应的国际化词条|none| +|»»»» id|number|true|none|国际化字段的自增id|none| +|»»»» lang|[Lang](#schemalang)|true|none|国际化字段对应的语言信息|none| +|»»»» key|string|true|none|国际化字段的键|none| +|»»»» content|string|true|none|国际化字段的实际内容|none| +|»» key|string|true|none|国际化字段的键|none| +|»» content|string|true|none|国际化字段的实际内容|none| +|» meta|[PaginationMeta](#schemapaginationmeta)|true|none||none| +|»» itemCount|number|false|none||none| +|»» totalItems|number|false|none||none| +|»» itemsPerPage|number|false|none||none| +|»» currentPage|number|false|none||none| +|» links|[PaginationLinks](#schemapaginationlinks)|true|none||none| +|»» first|string|false|none||none| +|»» previous|string|false|none||none| +|»» next|string|false|none||none| +|»» last|string|false|none||none| + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +## GET 获取国际化表 + +GET /i18/format + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|lang|query|string| 否 ||语言名| + +> 返回示例 + +> 200 Response + +```json +{ + "[lang-name]": { + "[key]": "string" + } +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **200** + +*Record>* + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» [lang-name]|object|true|none||none| +|»» [key]|string|true|none||none| + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +## GET 根据国际化字段ID获取某一个国际化字段 + +GET /i18/{id} + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|id|path|integer| 是 ||国际化字段ID| + +> 返回示例 + +> 200 Response + +```json +{ + "id": 0, + "lang": { + "id": 0, + "name": "string", + "i18": [ + { + "id": 0, + "lang": { + "id": 0, + "name": "string", + "i18": [ + null + ] + }, + "key": "string", + "content": "string" + } + ] + }, + "key": "string", + "content": "string" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[I18](#schemai18)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +## PATCH 修改一个国际化字段 + +PATCH /i18/{id} + +> Body 请求参数 + +```json +{ + "lang": 0, + "key": "string", + "content": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|id|path|string| 是 ||国际化字段ID| +|body|body|object| 否 ||none| +|» lang|body|number| 否 ||语言名| +|» key|body|string| 否 ||国际化字段键| +|» content|body|string| 否 ||国际化字段值| + +> 返回示例 + +> 200 Response + +```json +{ + "id": 0, + "lang": { + "id": 0, + "name": "string", + "i18": [ + { + "id": 0, + "lang": { + "id": 0, + "name": "string", + "i18": [ + null + ] + }, + "key": "string", + "content": "string" + } + ] + }, + "key": "string", + "content": "string" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[I18](#schemai18)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +## DELETE 删除一个国际化字段 + +DELETE /i18/{id} + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|id|path|integer| 是 ||国际化字段ID| + +> 返回示例 + +> 200 Response + +```json +{ + "id": 0, + "lang": { + "id": 0, + "name": "string", + "i18": [ + { + "id": 0, + "lang": { + "id": 0, + "name": "string", + "i18": [ + null + ] + }, + "key": "string", + "content": "string" + } + ] + }, + "key": "string", + "content": "string" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[I18](#schemai18)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +# user + +## POST 新建一个用户 + +POST /user/reg + +> Body 请求参数 + +```json +{ + "name": "string", + "email": "string", + "password": "string", + "roleIds": [ + 0 + ], + "department": "string", + "employeeType": "string", + "probationStart": "string", + "probationEnd": "string", + "probationDuration": "string", + "protocolStart": "string", + "protocolEnd": "string", + "address": "string", + "status": 0 +} +``` + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|body|body|object| 否 ||none| +|» name|body|string| 是 | 用户昵称|none| +|» email|body|string| 是 | 用户Email|登录使用| +|» password|body|string| 是 | 用户密码|none| +|» roleIds|body|[number]| 是 | 用户角色ID数组|none| +|» department|body|string| 否 | 遗留未知字段|1.1.0以前的遗留字段| +|» employeeType|body|string| 否 | 遗留未知字段|1.1.0以前的遗留字段| +|» probationStart|body|string| 否 | 遗留未知字段|1.1.0以前的遗留字段| +|» probationEnd|body|string| 否 | 遗留未知字段|1.1.0以前的遗留字段| +|» probationDuration|body|string| 否 | 遗留未知字段|1.1.0以前的遗留字段| +|» protocolStart|body|string| 否 | 遗留未知字段|1.1.0以前的遗留字段| +|» protocolEnd|body|string| 否 | 遗留未知字段|1.1.0以前的遗留字段| +|» address|body|string| 否 | 遗留未知字段|1.1.0以前的遗留字段| +|» status|body|number| 否 | 帐号状态|none| + +> 返回示例 + +> 200 Response + +```json +{ + "id": "string", + "name": "string", + "email": "string", + "password": "string", + "role": [ + { + "id": "string", + "name": "string", + "permission": [ + { + "id": 0, + "desc": "string", + "name": "string" + } + ], + "menus": [ + { + "id": 0, + "name": "string", + "order": 0, + "parentId": 0, + "menuType": "string", + "icon": "string", + "component": "string", + "path": "string", + "locale": "string" + } + ] + } + ], + "department": "string", + "employeeType": "string", + "probationENd": "string", + "robationDuration": "string", + "protocolStart": "string", + "protocolEnd": "string", + "address": "string", + "status": 0, + "createTime": "string", + "updateTime": "string", + "create_time": "string", + "salt": "string", + "update_time": "string" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[User](#schemauser)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +## GET 获取用户信息 + +GET /user/info/{email} + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|email|path|string| 是 ||用户邮箱| + +> 返回示例 + +> 200 Response + +```json +{ + "id": "string", + "name": "string", + "email": "string", + "password": "string", + "role": [ + { + "id": "string", + "name": "string", + "permission": [ + { + "id": 0, + "desc": "string", + "name": "string" + } + ], + "menus": [ + { + "id": 0, + "name": "string", + "order": 0, + "parentId": 0, + "menuType": "string", + "icon": "string", + "component": "string", + "path": "string", + "locale": "string" + } + ] + } + ], + "department": "string", + "employeeType": "string", + "probationENd": "string", + "robationDuration": "string", + "protocolStart": "string", + "protocolEnd": "string", + "address": "string", + "status": 0, + "createTime": "string", + "updateTime": "string", + "create_time": "string", + "salt": "string", + "update_time": "string" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[User](#schemauser)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +## DELETE 删除一个用户 + +DELETE /user/{email} + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|email|path|string| 是 ||用户邮箱| + +> 返回示例 + +> 200 Response + +```json +{ + "id": "string", + "name": "string", + "email": "string", + "password": "string", + "role": [ + { + "id": "string", + "name": "string", + "permission": [ + { + "id": 0, + "desc": "string", + "name": "string" + } + ], + "menus": [ + { + "id": 0, + "name": "string", + "order": 0, + "parentId": 0, + "menuType": "string", + "icon": "string", + "component": "string", + "path": "string", + "locale": "string" + } + ] + } + ], + "department": "string", + "employeeType": "string", + "probationENd": "string", + "robationDuration": "string", + "protocolStart": "string", + "protocolEnd": "string", + "address": "string", + "status": 0, + "createTime": "string", + "updateTime": "string", + "create_time": "string", + "salt": "string", + "update_time": "string" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[User](#schemauser)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +## PATCH 修改一个用户 + +PATCH /user/update + +如果修改了角色, 必须将该用户踢下线 (在redis中删除该用户的token) + +> Body 请求参数 + +```json +{ + "oldPassword": "string", + "newPassword": "string", + "email": "string", + "roleIds": [ + 0 + ], + "department": "string", + "employeeType": "string", + "probationStar": "string", + "probationEnd": "string", + "probationDuration": "string", + "protocolStart": "string", + "protocolEnd": "string", + "address": "string", + "status": 0, + "name": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|body|body|object| 否 ||none| +|» oldPassword|body|string| 否 | 旧密码|none| +|» newPassword|body|string| 否 | 新密码|none| +|» email|body|string| 是 | 邮箱|none| +|» roleIds|body|[number]| 是 | 角色ID|none| +|» department|body|string| 是 ||none| +|» employeeType|body|string| 是 ||none| +|» probationStar|body|string| 是 ||none| +|» probationEnd|body|string| 是 ||none| +|» probationDuration|body|string| 是 ||none| +|» protocolStart|body|string| 是 ||none| +|» protocolEnd|body|string| 是 ||none| +|» address|body|string| 是 ||none| +|» status|body|number| 是 | 状态|none| +|» name|body|string| 是 | 用户名|none| + +> 返回示例 + +> 200 Response + +```json +{ + "id": "string", + "name": "string", + "email": "string", + "password": "string", + "role": [ + { + "id": "string", + "name": "string", + "permission": [ + { + "id": 0, + "desc": "string", + "name": "string" + } + ], + "menus": [ + { + "id": 0, + "name": "string", + "order": 0, + "parentId": 0, + "menuType": "string", + "icon": "string", + "component": "string", + "path": "string", + "locale": "string" + } + ] + } + ], + "department": "string", + "employeeType": "string", + "probationENd": "string", + "robationDuration": "string", + "protocolStart": "string", + "protocolEnd": "string", + "address": "string", + "status": 0, + "createTime": "string", + "updateTime": "string", + "create_time": "string", + "salt": "string", + "update_time": "string" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[User](#schemauser)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +## GET 获取用户列表 + +GET /user + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|name|query|string| 否 ||模糊查找的用户名| +|role|query|string| 否 ||用逗号分隔| +|email|query|string| 否 ||模糊查找的邮箱| + +> 返回示例 + +> 200 Response + +```json +{ + "items": [ + { + "id": "string", + "name": "string", + "email": "string", + "password": "string", + "role": [ + { + "id": "string", + "name": "string", + "permission": [ + {} + ], + "menus": [ + {} + ] + } + ], + "department": "string", + "employeeType": "string", + "probationENd": "string", + "robationDuration": "string", + "protocolStart": "string", + "protocolEnd": "string", + "address": "string", + "status": 0, + "createTime": "string", + "updateTime": "string", + "create_time": "string", + "salt": "string", + "update_time": "string" + } + ], + "meta": { + "itemCount": 0, + "totalItems": 0, + "itemsPerPage": 0, + "currentPage": 0 + }, + "links": { + "first": "string", + "previous": "string", + "next": "string", + "last": "string" + } +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **200** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» items|[[User](#schemauser)]|true|none||none| +|»» id|string|true|none|数据库自增id|none| +|»» name|string|true|none|用户名|none| +|»» email|string|true|none||登录邮箱| +|»» password|string|true|none|密码|none| +|»» role|[[Role](#schemarole)]|true|none|角色|none| +|»»» id|string|true|none|角色id|none| +|»»» name|string|true|none|角色名|none| +|»»» permission|[[Permission](#schemapermission)]|true|none|权限|none| +|»»»» id|number|true|none|权限ID|none| +|»»»» desc|string|true|none|权限介绍|none| +|»»»» name|string|true|none|权限键|none| +|»»» menus|[[Menu](#schemamenu)]|true|none|菜单|none| +|»»»» id|number|true|none|菜单id|none| +|»»»» name|string|true|none|菜单名|none| +|»»»» order|number|true|none|排序|none| +|»»»» parentId|number|false|none|父级id|none| +|»»»» menuType|string|true|none|保留字段|none| +|»»»» icon|string|false|none|图标名|none| +|»»»» component|string|true|none|组件名|none| +|»»»» path|string|true|none|路由路径|none| +|»»»» locale|string|true|none|国际化键|none| +|»» department|string|true|none||1.1.0以前的遗留字段| +|»» employeeType|string|true|none||1.1.0以前的遗留字段| +|»» probationENd|string|true|none||1.1.0以前的遗留字段| +|»» robationDuration|string|true|none||1.1.0以前的遗留字段| +|»» protocolStart|string|true|none||1.1.0以前的遗留字段| +|»» protocolEnd|string|true|none||1.1.0以前的遗留字段| +|»» address|string|true|none||1.1.0以前的遗留字段| +|»» status|number|true|none|帐号状态|none| +|»» createTime|string|true|none||none| +|»» updateTime|string|true|none||none| +|»» create_time|string|true|none||none| +|»» salt|string|true|none|bcrypt盐|none| +|»» update_time|string|true|none||none| +|» meta|[PaginationMeta](#schemapaginationmeta)|true|none||none| +|»» itemCount|number|false|none||none| +|»» totalItems|number|false|none||none| +|»» itemsPerPage|number|false|none||none| +|»» currentPage|number|false|none||none| +|» links|[PaginationLinks](#schemapaginationlinks)|true|none||none| +|»» first|string|false|none||none| +|»» previous|string|false|none||none| +|»» next|string|false|none||none| +|»» last|string|false|none||none| + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +## PATCH 强制修改一个用户的密码 + +PATCH /user/admin/updatePwd + +> 返回示例 + +> 200 Response + +```json +{ + "email": "string", + "newPassword": "string", + "confirmPassword": "string" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **200** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» email|string|true|none||强制修改密码的邮箱| +|» newPassword|string|true|none||新密码| +|» confirmPassword|string|true|none||确认新密码| + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +## PATCH 修改自身密码 + +PATCH /user/updatePwd + +> Body 请求参数 + +```json +{ + "email": "string", + "token": "string", + "newPassword": "string", + "oldPassword": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|body|body|object| 否 ||none| +|» email|body|string| 是 ||要修改用户的邮箱名| +|» token|body|string| 是 ||用户token| +|» newPassword|body|string| 是 ||新密码| +|» oldPassword|body|string| 是 ||旧密码| + +> 返回示例 + +> 200 Response + +```json +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +# role + +## POST 新增一个角色 + +POST /role + +> Body 请求参数 + +```json +{ + "name": "string", + "permissionIds": [ + 0 + ], + "menuIds": [ + 0 + ] +} +``` + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|body|body|object| 否 ||none| +|» name|body|string| 是 | 角色名|none| +|» permissionIds|body|[number]| 是 | 权限id数组|none| +|» menuIds|body|[number]| 是 | 菜单id数组|none| + +> 返回示例 + +> 200 Response + +```json +{ + "id": "string", + "name": "string", + "permission": [ + { + "id": 0, + "desc": "string", + "name": "string" + } + ], + "menus": [ + { + "id": 0, + "name": "string", + "order": 0, + "parentId": 0, + "menuType": "string", + "icon": "string", + "component": "string", + "path": "string", + "locale": "string" + } + ] +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[Role](#schemarole)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +## GET 查找所有角色 + +GET /role + +> 返回示例 + +> 200 Response + +```json +[ + { + "id": "string", + "name": "string", + "permission": [ + { + "id": 0, + "desc": "string", + "name": "string" + } + ], + "menus": [ + { + "id": 0, + "name": "string", + "order": 0, + "parentId": 0, + "menuType": "string", + "icon": "string", + "component": "string", + "path": "string", + "locale": "string" + } + ] + } +] +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **200** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|*anonymous*|[[Role](#schemarole)]|false|none||none| +|» id|string|true|none|角色id|none| +|» name|string|true|none|角色名|none| +|» permission|[[Permission](#schemapermission)]|true|none|权限|none| +|»» id|number|true|none|权限ID|none| +|»» desc|string|true|none|权限介绍|none| +|»» name|string|true|none|权限键|none| +|» menus|[[Menu](#schemamenu)]|true|none|菜单|none| +|»» id|number|true|none|菜单id|none| +|»» name|string|true|none|菜单名|none| +|»» order|number|true|none|排序|none| +|»» parentId|number|false|none|父级id|none| +|»» menuType|string|true|none|保留字段|none| +|»» icon|string|false|none|图标名|none| +|»» component|string|true|none|组件名|none| +|»» path|string|true|none|路由路径|none| +|»» locale|string|true|none|国际化键|none| + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +## PATCH 修改一个角色 + +PATCH /role + +> Body 请求参数 + +```json +{ + "id": 0, + "name": "string", + "permissionIds": [ + 0 + ], + "menuIds": [ + 0 + ] +} +``` + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|body|body|object| 否 ||none| +|» id|body|number| 是 | 角色id|none| +|» name|body|string| 否 | 角色名|none| +|» permissionIds|body|[number]| 否 | 角色权限id列表|none| +|» menuIds|body|[number]| 否 | 角色菜单列表|none| + +> 返回示例 + +> 200 Response + +```json +{ + "id": "string", + "name": "string", + "permission": [ + { + "id": 0, + "desc": "string", + "name": "string" + } + ], + "menus": [ + { + "id": 0, + "name": "string", + "order": 0, + "parentId": 0, + "menuType": "string", + "icon": "string", + "component": "string", + "path": "string", + "locale": "string" + } + ] +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[Role](#schemarole)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +## GET 获取角色列表的详细信息 + +GET /role/detail + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|page|query|integer| 否 ||页数| +|limit|query|integer| 否 ||获取数量| +|name|query|string| 否 ||角色名| + +> 返回示例 + +> 200 Response + +```json +{ + "roleInfo": { + "items": [ + { + "id": "string", + "name": "string", + "permission": [ + { + "id": null, + "desc": null, + "name": null + } + ], + "menus": [ + { + "id": null, + "name": null, + "order": null, + "parentId": null, + "menuType": null, + "icon": null, + "component": null, + "path": null, + "locale": null + } + ] + } + ], + "meta": { + "itemCount": 0, + "totalItems": 0, + "itemsPerPage": 0, + "currentPage": 0 + }, + "links": { + "first": "string", + "previous": "string", + "next": "string", + "last": "string" + } + }, + "menuTree": [ + { + "id": 0, + "label": "string", + "children": [ + { + "id": null, + "label": "string", + "children": [ + {} + ], + "url": "string", + "component": "string", + "customIcon": "string", + "menuType": "string", + "parentId": "string", + "order": 0, + "locale": "string" + } + ], + "url": "string", + "component": "string", + "customIcon": "string", + "menuType": "string", + "parentId": "string", + "order": 0, + "locale": "string" + } + ] +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **200** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» roleInfo|object|true|none||none| +|»» items|[[Role](#schemarole)]|true|none||none| +|»»» id|string|true|none|角色id|none| +|»»» name|string|true|none|角色名|none| +|»»» permission|[[Permission](#schemapermission)]|true|none|权限|none| +|»»»» id|number|true|none|权限ID|none| +|»»»» desc|string|true|none|权限介绍|none| +|»»»» name|string|true|none|权限键|none| +|»»» menus|[[Menu](#schemamenu)]|true|none|菜单|none| +|»»»» id|number|true|none|菜单id|none| +|»»»» name|string|true|none|菜单名|none| +|»»»» order|number|true|none|排序|none| +|»»»» parentId|number|false|none|父级id|none| +|»»»» menuType|string|true|none|保留字段|none| +|»»»» icon|string|false|none|图标名|none| +|»»»» component|string|true|none|组件名|none| +|»»»» path|string|true|none|路由路径|none| +|»»»» locale|string|true|none|国际化键|none| +|»» meta|[PaginationMeta](#schemapaginationmeta)|true|none||none| +|»»» itemCount|number|false|none||none| +|»»» totalItems|number|false|none||none| +|»»» itemsPerPage|number|false|none||none| +|»»» currentPage|number|false|none||none| +|»» links|[PaginationLinks](#schemapaginationlinks)|true|none||none| +|»»» first|string|false|none||none| +|»»» previous|string|false|none||none| +|»»» next|string|false|none||none| +|»»» last|string|false|none||none| +|» menuTree|[[ITreeNodeData](#schemaitreenodedata)]|true|none||none| +|»» id|any|true|none|id|none| + +*anyOf* + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|»»» *anonymous*|number|false|none||none| + +*or* + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|»»» *anonymous*|string|false|none||none| + +*continued* + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|»» label|string|true|none|展示的标签|none| +|»» children|[[ITreeNodeData](#schemaitreenodedata)]|false|none|子集菜单|none| +|»»» id|any|true|none|id|none| +|»»» label|string|true|none|展示的标签|none| +|»»» children|[[ITreeNodeData](#schemaitreenodedata)]|false|none|子集菜单|none| +|»»» url|string|true|none|访问路由|none| +|»»» component|string|true|none|组件|none| +|»»» customIcon|string|true|none|图标名|none| +|»»» menuType|string|true|none|保留字段|none| +|»»» parentId|string|true|none|父级id|none| +|»»» order|integer|true|none|排序|none| +|»»» locale|string|true|none|国际化键|none| +|»» url|string|true|none|访问路由|none| +|»» component|string|true|none|组件|none| +|»» customIcon|string|true|none|图标名|none| +|»» menuType|string|true|none|保留字段|none| +|»» parentId|string|true|none|父级id|none| +|»» order|integer|true|none|排序|none| +|»» locale|string|true|none|国际化键|none| + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +## DELETE 删除一个角色 + +DELETE /role/{id} + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|id|path|number| 是 ||角色id| + +> 返回示例 + +> 200 Response + +```json +{ + "id": "string", + "name": "string", + "permission": [ + { + "id": 0, + "desc": "string", + "name": "string" + } + ], + "menus": [ + { + "id": 0, + "name": "string", + "order": 0, + "parentId": 0, + "menuType": "string", + "icon": "string", + "component": "string", + "path": "string", + "locale": "string" + } + ] +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[Role](#schemarole)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +## GET 获取一个角色的详细信息 + +GET /role/info/{id} + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|id|path|integer| 是 ||角色id| + +> 返回示例 + +> 200 Response + +```json +{ + "id": "string", + "name": "string", + "permission": [ + { + "id": 0, + "desc": "string", + "name": "string" + } + ], + "menus": [ + { + "id": 0, + "name": "string", + "order": 0, + "parentId": 0, + "menuType": "string", + "icon": "string", + "component": "string", + "path": "string", + "locale": "string" + } + ] +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[Role](#schemarole)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +# permission + +## POST 创建权限 + +POST /permission + +> Body 请求参数 + +```json +{ + "name": "string", + "desc": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|body|body|object| 否 ||none| +|» name|body|string| 是 | 权限键|none| +|» desc|body|string| 是 | 权限简介|none| + +> 返回示例 + +> 200 Response + +```json +{ + "id": 0, + "desc": "string", + "name": "string" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[Permission](#schemapermission)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +## PATCH 修改权限 + +PATCH /permission + +> Body 请求参数 + +```json +{ + "name": "string", + "desc": "string", + "id": 0 +} +``` + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|body|body|[UpdatePermissionDTO](#schemaupdatepermissiondto)| 否 ||none| + +> 返回示例 + +> 200 Response + +```json +{} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +## GET 获取权限 + +GET /permission + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|page|query|string| 否 ||页数| +|limit|query|string| 否 ||如果为0则查找所有| +|name|query|string| 否 ||权限名,where子句格式| + +> 返回示例 + +> 200 Response + +```json +{ + "items": [ + { + "id": 0, + "desc": "string", + "name": "string" + } + ], + "meta": { + "itemCount": 0, + "totalItems": 0, + "itemsPerPage": 0, + "currentPage": 0 + }, + "links": { + "first": "string", + "previous": "string", + "next": "string", + "last": "string" + } +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **200** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» items|[[Permission](#schemapermission)]|true|none||none| +|»» id|number|true|none|权限ID|none| +|»» desc|string|true|none|权限介绍|none| +|»» name|string|true|none|权限键|none| +|» meta|[PaginationMeta](#schemapaginationmeta)|true|none||none| +|»» itemCount|number|false|none||none| +|»» totalItems|number|false|none||none| +|»» itemsPerPage|number|false|none||none| +|»» currentPage|number|false|none||none| +|» links|[PaginationLinks](#schemapaginationlinks)|true|none||none| +|»» first|string|false|none||none| +|»» previous|string|false|none||none| +|»» next|string|false|none||none| +|»» last|string|false|none||none| + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +## DELETE 删除权限 + +DELETE /permission/{id} + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|id|path|integer| 是 ||权限id| + +> 返回示例 + +> 200 Response + +```json +[ + { + "id": 0, + "desc": "string", + "name": "string" + } +] +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **200** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» id|number|true|none|权限ID|none| +|» desc|string|true|none|权限介绍|none| +|» name|string|true|none|权限键|none| + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +# menu + +## GET 获取用户菜单 + +GET /menu/role/{email} + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|email|path|string| 是 ||用户email| + +> 返回示例 + +> 200 Response + +```json +[ + { + "id": 0, + "label": "string", + "children": [ + { + "id": 0, + "label": "string", + "children": [ + { + "id": null, + "label": "string", + "children": [ + null + ], + "url": "string", + "component": "string", + "customIcon": "string", + "menuType": "string", + "parentId": "string", + "order": 0, + "locale": "string" + } + ], + "url": "string", + "component": "string", + "customIcon": "string", + "menuType": "string", + "parentId": "string", + "order": 0, + "locale": "string" + } + ], + "url": "string", + "component": "string", + "customIcon": "string", + "menuType": "string", + "parentId": "string", + "order": 0, + "locale": "string" + } +] +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **200** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|*anonymous*|[[ITreeNodeData](#schemaitreenodedata)]|false|none||none| +|» id|any|true|none|id|none| + +*anyOf* + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|»» *anonymous*|number|false|none||none| + +*or* + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|»» *anonymous*|string|false|none||none| + +*continued* + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» label|string|true|none|展示的标签|none| +|» children|[[ITreeNodeData](#schemaitreenodedata)]|false|none|子集菜单|none| +|»» id|any|true|none|id|none| +|»» label|string|true|none|展示的标签|none| +|»» children|[[ITreeNodeData](#schemaitreenodedata)]|false|none|子集菜单|none| +|»» url|string|true|none|访问路由|none| +|»» component|string|true|none|组件|none| +|»» customIcon|string|true|none|图标名|none| +|»» menuType|string|true|none|保留字段|none| +|»» parentId|string|true|none|父级id|none| +|»» order|integer|true|none|排序|none| +|»» locale|string|true|none|国际化键|none| +|» url|string|true|none|访问路由|none| +|» component|string|true|none|组件|none| +|» customIcon|string|true|none|图标名|none| +|» menuType|string|true|none|保留字段|none| +|» parentId|string|true|none|父级id|none| +|» order|integer|true|none|排序|none| +|» locale|string|true|none|国际化键|none| + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +## GET 获取菜单树 + +GET /menu + +获取所有的菜单,并根绝parentId建立一个菜单树 + +> 返回示例 + +> 200 Response + +```json +[ + { + "id": 0, + "label": "string", + "children": [ + { + "id": 0, + "label": "string", + "children": [ + { + "id": null, + "label": "string", + "children": [ + null + ], + "url": "string", + "component": "string", + "customIcon": "string", + "menuType": "string", + "parentId": "string", + "order": 0, + "locale": "string" + } + ], + "url": "string", + "component": "string", + "customIcon": "string", + "menuType": "string", + "parentId": "string", + "order": 0, + "locale": "string" + } + ], + "url": "string", + "component": "string", + "customIcon": "string", + "menuType": "string", + "parentId": "string", + "order": 0, + "locale": "string" + } +] +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **200** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|*anonymous*|[[ITreeNodeData](#schemaitreenodedata)]|false|none||none| +|» id|any|true|none|id|none| + +*anyOf* + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|»» *anonymous*|number|false|none||none| + +*or* + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|»» *anonymous*|string|false|none||none| + +*continued* + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» label|string|true|none|展示的标签|none| +|» children|[[ITreeNodeData](#schemaitreenodedata)]|false|none|子集菜单|none| +|»» id|any|true|none|id|none| +|»» label|string|true|none|展示的标签|none| +|»» children|[[ITreeNodeData](#schemaitreenodedata)]|false|none|子集菜单|none| +|»» url|string|true|none|访问路由|none| +|»» component|string|true|none|组件|none| +|»» customIcon|string|true|none|图标名|none| +|»» menuType|string|true|none|保留字段|none| +|»» parentId|string|true|none|父级id|none| +|»» order|integer|true|none|排序|none| +|»» locale|string|true|none|国际化键|none| +|» url|string|true|none|访问路由|none| +|» component|string|true|none|组件|none| +|» customIcon|string|true|none|图标名|none| +|» menuType|string|true|none|保留字段|none| +|» parentId|string|true|none|父级id|none| +|» order|integer|true|none|排序|none| +|» locale|string|true|none|国际化键|none| + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +## POST 新增一个菜单 + +POST /menu + +> Body 请求参数 + +```json +{ + "order": 0, + "menuType": "string", + "name": "string", + "path": "string", + "component": "string", + "icon": "string", + "locale": "string", + "parentId": 0 +} +``` + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|body|body|object| 否 ||none| +|» order|body|number| 是 ||none| +|» menuType|body|string| 是 ||none| +|» name|body|string| 是 ||none| +|» path|body|string| 是 ||none| +|» component|body|string| 是 ||none| +|» icon|body|string| 是 ||none| +|» locale|body|string| 是 ||none| +|» parentId|body|number¦null| 否 ||none| + +> 返回示例 + +> 200 Response + +```json +{ + "id": 0, + "name": "string", + "order": 0, + "parentId": 0, + "menuType": "string", + "icon": "string", + "component": "string", + "path": "string", + "locale": "string" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[Menu](#schemamenu)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +## PATCH 修改一个菜单 + +PATCH /menu + +> Body 请求参数 + +```json +{ + "order": 0, + "menuType": "string", + "name": "string", + "path": "string", + "component": "string", + "icon": "string", + "locale": "string", + "parentId": 0, + "id": 0 +} +``` + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|body|body|[UpdateMenuDTO](#schemaupdatemenudto)| 否 ||none| + +> 返回示例 + +> 200 Response + +```json +true +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|boolean| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +## DELETE 删除一个菜单 + +DELETE /menu + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|id|query|integer| 否 ||菜单Id| +|parentId|query|integer| 否 ||父级菜单ID| + +> 返回示例 + +> 200 Response + +```json +{ + "id": 0, + "name": "string", + "order": 0, + "parentId": 0, + "menuType": "string", + "icon": "string", + "component": "string", + "path": "string", + "locale": "string" +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[Menu](#schemamenu)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +# mock + +## GET GET 的mock方法 + +GET /mock + +> 返回示例 + +> 200 Response + +```json +"string" +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|string| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +## POST POST的mock方法 + +POST /mock + +> 返回示例 + +> 200 Response + +```json +"string" +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|string| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +# lang + +## GET 获取所有语言 + +GET /lang + +> 返回示例 + +> 200 Response + +```json +[ + { + "id": 0, + "name": "string", + "i18": [ + { + "id": 0, + "lang": { + "id": 0, + "name": "string", + "i18": [ + {} + ] + }, + "key": "string", + "content": "string" + } + ] + } +] +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **200** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|*anonymous*|[[Lang](#schemalang)]|false|none||none| +|» 国际化字段对应的语言信息|[Lang](#schemalang)|false|none|国际化字段对应的语言信息|none| +|»» id|number|true|none|语言ID|none| +|»» name|string|true|none|语言名|none| +|»» i18|[[I18](#schemai18)]|true|none|对应的国际化词条|none| +|»»» id|number|true|none|国际化字段的自增id|none| +|»»» lang|[Lang](#schemalang)|true|none|国际化字段对应的语言信息|none| +|»»»» id|number|true|none|语言ID|none| +|»»»» name|string|true|none|语言名|none| +|»»»» i18|[[I18](#schemai18)]|true|none|对应的国际化词条|none| +|»»» key|string|true|none|国际化字段的键|none| +|»»» content|string|true|none|国际化字段的实际内容|none| + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +## POST 增加一个语言 + +POST /lang + +> Body 请求参数 + +```json +{ + "name": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|body|body|[CreateLang](#schemacreatelang)| 否 ||none| + +> 返回示例 + +> 200 Response + +```json +{ + "id": 0, + "name": "string", + "i18": [ + { + "id": 0, + "lang": { + "id": 0, + "name": "string", + "i18": [ + { + "id": null, + "lang": null, + "key": null, + "content": null + } + ] + }, + "key": "string", + "content": "string" + } + ] +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[Lang](#schemalang)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +## PACH 修改一个语言 + +PACH /lang/{id} + +> Body 请求参数 + +```json +{ + "name": "string" +} +``` + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|id|path|string| 是 ||语言ID| +|body|body|[UpdateLang](#schemaupdatelang)| 否 ||none| + +> 返回示例 + +> 200 Response + +```json +{ + "id": 0, + "name": "string", + "i18": [ + { + "id": 0, + "lang": { + "id": 0, + "name": "string", + "i18": [ + { + "id": null, + "lang": null, + "key": null, + "content": null + } + ] + }, + "key": "string", + "content": "string" + } + ] +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[Lang](#schemalang)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +## DELETE 删除一个语言 + +DELETE /lang/{id} + +### 请求参数 + +|名称|位置|类型|必选|中文名|说明| +|---|---|---|---|---|---| +|id|path|number| 是 ||语言ID| + +> 返回示例 + +> 200 Response + +```json +{ + "id": 0, + "name": "string", + "i18": [ + { + "id": 0, + "lang": { + "id": 0, + "name": "string", + "i18": [ + { + "id": null, + "lang": null, + "key": null, + "content": null + } + ] + }, + "key": "string", + "content": "string" + } + ] +} +``` + +### 返回结果 + +|状态码|状态码含义|说明|数据模型| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[Lang](#schemalang)| +|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|401 未登录|Inline| +|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|403 权限不足|Inline| + +### 返回数据结构 + +状态码 **401** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|true|none||none| +|» message|string|true|none||none| + +状态码 **403** + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» statusCode|number|false|none||none| +|» message|string|false|none||none| + +# 数据模型 + +

UpdateLang

+ + + + + + +```json +{ + "name": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|name|string|false|none|语言名|none| + +

CreateLang

+ + + + + + +```json +{ + "name": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|name|string|true|none|语言名|none| + +

UpdateMenuDTO

+ + + + + + +```json +{ + "order": 0, + "menuType": "string", + "name": "string", + "path": "string", + "component": "string", + "icon": "string", + "locale": "string", + "parentId": 0, + "id": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|order|number|true|none|序号|none| +|menuType|string|true|none|菜单类型|none| +|name|string|true|none|菜单键 |唯一| +|path|string|true|none|菜单路径|none| +|component|string|true|none|组件|none| +|icon|string|true|none|图标名|none| +|locale|string|true|none|国际化字段|展示用| +|parentId|number¦null|false|none|父级id|none| +|id|number|true|none|菜单id|none| + +

CreateMenuDTO

+ + + + + + +```json +{ + "order": 0, + "menuType": "string", + "name": "string", + "path": "string", + "component": "string", + "icon": "string", + "locale": "string", + "parentId": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|order|number|true|none|序号|none| +|menuType|string|true|none|菜单类型|none| +|name|string|true|none|菜单键 |唯一| +|path|string|true|none|菜单路径|none| +|component|string|true|none|组件|none| +|icon|string|true|none|图标名|none| +|locale|string|true|none|国际化字段|展示用| +|parentId|number¦null|false|none|父级id|none| + +

UpdatePermissionDTO

+ + + + + + +```json +{ + "name": "string", + "desc": "string", + "id": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|name|string|false|none|权限键|none| +|desc|string|false|none|权限介绍|none| +|id|integer|true|none|权限id|none| + +

CreatePermissionDTO

+ + + + + + +```json +{ + "name": "string", + "desc": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|name|string|true|none|权限键|none| +|desc|string|true|none|权限介绍|none| + +

ITreeNodeData

+ + + + + + +```json +{ + "id": 0, + "label": "string", + "children": [ + { + "id": 0, + "label": "string", + "children": [ + { + "id": null, + "label": "string", + "children": [ + {} + ], + "url": "string", + "component": "string", + "customIcon": "string", + "menuType": "string", + "parentId": "string", + "order": 0, + "locale": "string" + } + ], + "url": "string", + "component": "string", + "customIcon": "string", + "menuType": "string", + "parentId": "string", + "order": 0, + "locale": "string" + } + ], + "url": "string", + "component": "string", + "customIcon": "string", + "menuType": "string", + "parentId": "string", + "order": 0, + "locale": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|id|any|true|none|id|none| + +anyOf + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» *anonymous*|number|false|none||none| + +or + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|» *anonymous*|string|false|none||none| + +continued + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|label|string|true|none|展示的标签|none| +|children|[[ITreeNodeData](#schemaitreenodedata)]|false|none|子集菜单|none| +|url|string|true|none|访问路由|none| +|component|string|true|none|组件|none| +|customIcon|string|true|none|图标名|none| +|menuType|string|true|none|保留字段|none| +|parentId|string|true|none|父级id|none| +|order|integer|true|none|排序|none| +|locale|string|true|none|国际化键|none| + +

User

+ + + + + + +```json +{ + "id": "string", + "name": "string", + "email": "string", + "password": "string", + "role": [ + { + "id": "string", + "name": "string", + "permission": [ + { + "id": 0, + "desc": "string", + "name": "string" + } + ], + "menus": [ + { + "id": 0, + "name": "string", + "order": 0, + "parentId": 0, + "menuType": "string", + "icon": "string", + "component": "string", + "path": "string", + "locale": "string" + } + ] + } + ], + "department": "string", + "employeeType": "string", + "probationENd": "string", + "robationDuration": "string", + "protocolStart": "string", + "protocolEnd": "string", + "address": "string", + "status": 0, + "createTime": "string", + "updateTime": "string", + "create_time": "string", + "salt": "string", + "update_time": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|id|string|true|none|数据库自增id|none| +|name|string|true|none|用户名|none| +|email|string|true|none||登录邮箱| +|password|string|true|none|密码|none| +|role|[[Role](#schemarole)]|true|none|角色|none| +|department|string|true|none||1.1.0以前的遗留字段| +|employeeType|string|true|none||1.1.0以前的遗留字段| +|probationENd|string|true|none||1.1.0以前的遗留字段| +|robationDuration|string|true|none||1.1.0以前的遗留字段| +|protocolStart|string|true|none||1.1.0以前的遗留字段| +|protocolEnd|string|true|none||1.1.0以前的遗留字段| +|address|string|true|none||1.1.0以前的遗留字段| +|status|number|true|none|帐号状态|none| +|createTime|string|true|none||none| +|updateTime|string|true|none||none| +|create_time|string|true|none||none| +|salt|string|true|none|bcrypt盐|none| +|update_time|string|true|none||none| + +

Role

+ + + + + + +```json +{ + "id": "string", + "name": "string", + "permission": [ + { + "id": 0, + "desc": "string", + "name": "string" + } + ], + "menus": [ + { + "id": 0, + "name": "string", + "order": 0, + "parentId": 0, + "menuType": "string", + "icon": "string", + "component": "string", + "path": "string", + "locale": "string" + } + ] +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|id|string|true|none|角色id|none| +|name|string|true|none|角色名|none| +|permission|[[Permission](#schemapermission)]|true|none|权限|none| +|menus|[[Menu](#schemamenu)]|true|none|菜单|none| + +

Menu

+ + + + + + +```json +{ + "id": 0, + "name": "string", + "order": 0, + "parentId": 0, + "menuType": "string", + "icon": "string", + "component": "string", + "path": "string", + "locale": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|id|number|true|none|菜单id|none| +|name|string|true|none|菜单名|none| +|order|number|true|none|排序|none| +|parentId|number|false|none|父级id|none| +|menuType|string|true|none|保留字段|none| +|icon|string|false|none|图标名|none| +|component|string|true|none|组件名|none| +|path|string|true|none|路由路径|none| +|locale|string|true|none|国际化键|none| + +

Permission

+ + + + + + +```json +{ + "id": 0, + "desc": "string", + "name": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|id|number|true|none|权限ID|none| +|desc|string|true|none|权限介绍|none| +|name|string|true|none|权限键|none| + +

PaginationOptionsRoutingLabels

+ + + + + + +```json +{ + "limitLabel": "string", + "pageLabel": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|limitLabel|string|true|none||none| +|pageLabel|string|true|none||none| + + + + + + + + +```json +{ + "first": "string", + "previous": "string", + "next": "string", + "last": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|first|string|false|none||none| +|previous|string|false|none||none| +|next|string|false|none||none| +|last|string|false|none||none| + +

PaginationMeta

+ + + + + + +```json +{ + "itemCount": 0, + "totalItems": 0, + "itemsPerPage": 0, + "currentPage": 0 +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|itemCount|number|false|none||none| +|totalItems|number|false|none||none| +|itemsPerPage|number|false|none||none| +|currentPage|number|false|none||none| + +

I18

+ + + + + + +```json +{ + "id": 0, + "lang": { + "id": 0, + "name": "string", + "i18": [ + { + "id": 0, + "lang": { + "id": 0, + "name": "string", + "i18": [ + null + ] + }, + "key": "string", + "content": "string" + } + ] + }, + "key": "string", + "content": "string" +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|id|number|true|none|国际化字段的自增id|none| +|lang|[Lang](#schemalang)|true|none|国际化字段对应的语言信息|none| +|key|string|true|none|国际化字段的键|none| +|content|string|true|none|国际化字段的实际内容|none| + +

Lang

+ + + + + + +```json +{ + "id": 0, + "name": "string", + "i18": [ + { + "id": 0, + "lang": { + "id": 0, + "name": "string", + "i18": [ + { + "id": null, + "lang": null, + "key": null, + "content": null + } + ] + }, + "key": "string", + "content": "string" + } + ] +} + +``` + +### 属性 + +|名称|类型|必选|约束|中文名|说明| +|---|---|---|---|---|---| +|id|number|true|none|语言ID|none| +|name|string|true|none|语言名|none| +|i18|[[I18](#schemai18)]|true|none|对应的国际化词条|none| + diff --git "a/docs/\350\256\276\350\256\241\346\226\207\346\241\243.md" "b/docs/\350\256\276\350\256\241\346\226\207\346\241\243.md" new file mode 100644 index 0000000..4b8aaa5 --- /dev/null +++ "b/docs/\350\256\276\350\256\241\346\226\207\346\241\243.md" @@ -0,0 +1,93 @@ +# TinyPro 接口文档 + +本文档旨在捋清TinyPro后端设计架构。 + +## 表设计 + +![](./imgs/TinyPro.png) + +## 专用术语 + +- 公开接口: 一个不需要Token的接口, 一般是登录接口. +- 非公开接口: 一个需要Token的接口, 当Token过期时必须返回401响应码. 错误报文格式请参考[异常格式](#异常格式) +- 保护接口: 一个需要相应权限的接口, 会从Token中读取用户Email, 如果Token过期则**必须**返回401响应码,如果用户**没有**相应的权限,**必须**返回一个403响应码,错误报文格式请参考[异常格式](#异常格式) + +## 请求示意图 + +### 公开接口请求示意图 + +```mermaid +sequenceDiagram + User->>+Server: 发送请求 + Server->>Server: 是公开接口 + Server->>Server: 处理请求 + Server-->>-User: 返回响应 +``` + +### 非公开接口请求示意图 + +#### 正常响应 + +如果用户Token合法且未过期则不会返回异常 + +```mermaid +sequenceDiagram + User->>+Server: 发送请求 + Server->>Server: 不是公开接口 + Server->>+AuthGuard: 用户Token + AuthGuard->>AuthGuard: Token合法 + AuthGuard->>AuthGuard: Token在Redis中未过期 + AuthGuard->>-Server: 放行 + Server->>Server: 处理请求 + Server-->>-User: 返回响应 +``` + +#### 异常响应 + +如果Token过期或异常则会返回异常响应 + +```mermaid +sequenceDiagram + User->>+Server: 发送请求 + Server->>Server: 不是公开接口 + Server->>+AuthGuard: 用户Token + AuthGuard->>AuthGuard: Token不合法 + AuthGuard-->> -User: 401 Token不合法 + + User->>+Server: 发送请求 + Server->>Server: 不是公开接口 + Server->>+AuthGuard: 用户Token + AuthGuard->>AuthGuard: Token合法 + AuthGuard->>AuthGuard: Token过期 + AuthGuard-->> -User: 401 登陆过期 +``` + +### 保护接口 + +#### 正常响应 + +```mermaid +sequenceDiagram + User->>+Server: 发送请求 + Server->>Server: 不是公开接口 + Server->>AuthGuard: Token + AuthGuard-->>Server: Token合法且未过期 + Server->>PermissionGuard: 是保护接口 + PermissionGuard->>PermissionGuard: 未设定权限或拥有相应权限 + PermissionGuard -->> Server: 放行 + Server ->> Server: 逻辑处理 + Server ->> -User: 响应 +``` + +#### 异常响应 + +```mermaid +sequenceDiagram + User->>+Server: 发送请求 + Server->>Server: 不是公开接口 + Server->>AuthGuard: Token + AuthGuard-->>Server: Token合法且未过期 + Server->>PermissionGuard: 是保护接口 + PermissionGuard->>PermissionGuard: 未拥有权限 + PermissionGuard-->>User: 权限不足 +```