From d96e51d1a95bf8e963c61133d78c1e34c28d9422 Mon Sep 17 00:00:00 2001 From: zhanglp Date: Wed, 13 Jul 2022 11:07:55 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E9=87=8D=E6=9E=84=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/db.config.js | 2 +- controllers/userController.js | 64 +- ...41\347\220\206\345\271\263\345\217\260.md" | 1188 +++++++++++++++++ model/userModel.js | 72 +- router/login.js | 17 +- router/user.js | 120 +- services/userServices.js | 201 ++- 7 files changed, 1496 insertions(+), 168 deletions(-) create mode 100644 "doc/\346\216\245\345\217\243\346\226\207\346\241\243/\350\211\276\345\260\274\347\247\221\346\212\200\345\220\216\345\217\260\347\256\241\347\220\206\345\271\263\345\217\260.md" diff --git a/config/db.config.js b/config/db.config.js index 3cc3bef..f7e151f 100644 --- a/config/db.config.js +++ b/config/db.config.js @@ -1,5 +1,5 @@ module.exports = { - debug: true, //开启调试 + debug: false, //开启调试 host: "110.42.130.88", port: "3306", user: "quick", diff --git a/controllers/userController.js b/controllers/userController.js index 9aaff19..0fde154 100644 --- a/controllers/userController.js +++ b/controllers/userController.js @@ -1,35 +1,61 @@ const { - getUserTotal, getUserPageList, - getUserList, + getUserDetail, getUserInfo, addUser, updateUser, removeUser, + batchRemoveUser, + updateUserPassword, + resetUserPassword, + enabledUser, + disableUser, } = require("../services/userServices"); class UserController { constructor() {} - getTotal(query) { - return getUserTotal(query) - } - getPageList(query,page) { - - return getUserPageList(query,page) - } - getList(query) { - return getUserList(query) - } - getInfo(userName) { - return getUserInfo(userName) - } - add(user) { + getPageList(query) { + const { userName, current, size } = query; + return getUserPageList(current, size, userName); + } + getDetail(query) { + const { id } = query; + return getUserDetail(id); + } + getInfo(query) { + const { userName } = query; + return getUserInfo(userName); + } + add(body) { + const user = body; return addUser(user); } - update(user) { + update(body) { + const user = body; return updateUser(user); } - remove(id) { + remove(body) { + const { id } = body; return removeUser(id); } + batchRemove(body) { + const { ids } = body; + return batchRemoveUser(ids); + } + updatePassword(body) { + const { id, newPassword } = body; + return updateUserPassword(id, newPassword); + } + resetPassword(body) { + const { id } = body; + return resetUserPassword(id); + } + enabled(body) { + const { id } = body; + return enabledUser(id); + } + disable(body) { + const { id } = body; + return disableUser(id); + } } -module.exports = new UserController(); \ No newline at end of file +module.exports = new UserController(); diff --git "a/doc/\346\216\245\345\217\243\346\226\207\346\241\243/\350\211\276\345\260\274\347\247\221\346\212\200\345\220\216\345\217\260\347\256\241\347\220\206\345\271\263\345\217\260.md" "b/doc/\346\216\245\345\217\243\346\226\207\346\241\243/\350\211\276\345\260\274\347\247\221\346\212\200\345\220\216\345\217\260\347\256\241\347\220\206\345\271\263\345\217\260.md" new file mode 100644 index 0000000..84441df --- /dev/null +++ "b/doc/\346\216\245\345\217\243\346\226\207\346\241\243/\350\211\276\345\260\274\347\247\221\346\212\200\345\220\216\345\217\260\347\256\241\347\220\206\345\271\263\345\217\260.md" @@ -0,0 +1,1188 @@ +## /用户管理 +```text +用户操作相关接口 +``` +#### 公共Header参数 +参数名 | 示例值 | 参数描述 +--- | --- | --- +暂无参数 +#### 公共Query参数 +参数名 | 示例值 | 参数描述 +--- | --- | --- +暂无参数 +#### 公共Body参数 +参数名 | 示例值 | 参数描述 +--- | --- | --- +暂无参数 +#### 预执行脚本 +```javascript +暂无预执行脚本 +``` +#### 后执行脚本 +```javascript +暂无后执行脚本 +``` +## /用户管理/用户分页列表 +```text +暂无描述 +``` +#### 接口状态 +> 已完成 + +#### 接口URL +> /user/getPageList?current=1&size=10 + +#### 请求方式 +> GET + +#### Content-Type +> none + +#### 请求Query参数 +参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 +--- | --- | --- | --- | --- +current | 1 | String | 是 | 当前页码 +size | 10 | String | 是 | 每页条数 +userName | zhanglp | String | 否 | 用户名 +startTime | 2022-07-13 | String | 否 | 开始时间 +endTime | 2022-07-14 | String | 否 | 结束时间 +#### 预执行脚本 +```javascript +暂无预执行脚本 +``` +#### 后执行脚本 +```javascript +暂无后执行脚本 +``` +#### 成功响应示例 +```javascript +{ + "status": 0, + "msg": "订单分页列表", + "data": [ + { + "id": 11, + "user_id": "YH_1", + "user_name": "admin", + "password": "14e1b600b1fd579f47433b88e8d85291", + "avatar": "", + "full_name": "管理员", + "phone": "15229380174", + "email": "quick@163.com", + "address": "北京朝阳", + "create_time": "2022-05-13 16:20:47", + "remark": "管理员账号,请勿删除", + "deleted": 0, + "enabled": 0 + } + ], + "page": { + "current": 1, + "size": 10, + "total": 3 + } +} +``` +参数名 | 示例值 | 参数类型 | 参数描述 +--- | --- | --- | --- +status | - | Number | 状态:0:成功,1:失败 +msg | 订单分页列表 | String | 提示信息 +data | - | Object | 响应数据 +data.id | 11 | Number | 订单主键 +data.user_id | YH_1 | String | 用户编号 +data.user_name | admin | String | 用户名 +data.password | 14e1b600b1fd579f47433b88e8d85291 | String | 密码 +data.avatar | - | Object | 头像 +data.full_name | 管理员 | String | 姓名 +data.phone | 15229380174 | String | 手机号 +data.email | quick@163.com | String | 邮箱 +data.address | 北京朝阳 | String | 地址 +data.create_time | 2022-05-13 16:20:47 | String | 创建时间 +data.remark | 管理员账号,请勿删除 | String | 备注 +data.deleted | - | Number | 是否删除:0:未删除,1:已删除 +data.enabled | - | Number | 是否启用:0:启用,1:禁用 +page | - | Object | 分页 +page.current | 1 | Number | 当前页码 +page.size | 10 | Number | 每页条数 +page.total | 3 | Number | 分页总条数 +#### 错误响应示例 +```javascript +{ + "status": 1, + "msg": "获取用户分页列表失败", + "data": null +} +``` +参数名 | 示例值 | 参数类型 | 参数描述 +--- | --- | --- | --- +status | 1 | Number | 状态:0:成功,1:失败 +msg | 获取用户分页列表失败 | String | 提示信息 +data | - | Object | 响应数据 +## /用户管理/用户详情 +```text +暂无描述 +``` +#### 接口状态 +> 已完成 + +#### 接口URL +> /user/getDetail?id=11 + +#### 请求方式 +> GET + +#### Content-Type +> none + +#### 请求Query参数 +参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 +--- | --- | --- | --- | --- +id | 11 | Text | 是 | 订单主键 +#### 预执行脚本 +```javascript +暂无预执行脚本 +``` +#### 后执行脚本 +```javascript +暂无后执行脚本 +``` +#### 成功响应示例 +```javascript +{ + "status": 0, + "msg": "用户详情", + "data": { + "id": 11, + "user_id": "YH_1", + "user_name": "admin", + "password": "14e1b600b1fd579f47433b88e8d85291", + "avatar": "", + "full_name": "管理员", + "phone": "15229380174", + "email": "quick@163.com", + "address": "北京朝阳", + "create_time": "2022-05-13 16:20:47", + "remark": "管理员账号,请勿删除", + "deleted": 0, + "enabled": 0 + } +} +``` +参数名 | 示例值 | 参数类型 | 参数描述 +--- | --- | --- | --- +status | - | Number | 状态:0:成功,1:失败 +msg | 用户详情 | String | 提示信息 +data | - | Object | 响应数据 +data.id | 11 | Number | 订单主键 +data.user_id | YH_1 | String | 用户编号 +data.user_name | admin | String | 用户名 +data.password | 14e1b600b1fd579f47433b88e8d85291 | String | 密码 +data.avatar | - | Object | 头像 +data.full_name | 管理员 | String | 姓名 +data.phone | 15229380174 | String | 手机号 +data.email | quick@163.com | String | 邮箱 +data.address | 北京朝阳 | String | 地址 +data.create_time | 2022-05-13 16:20:47 | String | 创建时间 +data.remark | 管理员账号,请勿删除 | String | 备注 +data.deleted | - | Number | 是否删除:0:未删除,1:已删除 +data.enabled | - | Number | 是否启用:0:启用,1:禁用 +#### 错误响应示例 +```javascript +{ + "status": 1, + "msg": "获取用户详情失败", + "data": null, +} +``` +参数名 | 示例值 | 参数类型 | 参数描述 +--- | --- | --- | --- +status | 1 | Number | 状态:0:成功,1:失败 +msg | 获取用户详情失败 | String | 提示信息 +data | - | Object | 响应数据 +## /用户管理/登录用户信息 +```text +暂无描述 +``` +#### 接口状态 +> 已完成 + +#### 接口URL +> /user/getInfo?userName=admin + +#### 请求方式 +> GET + +#### Content-Type +> none + +#### 请求Query参数 +参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 +--- | --- | --- | --- | --- +userName | admin | Text | 是 | 用户名 +#### 预执行脚本 +```javascript +暂无预执行脚本 +``` +#### 后执行脚本 +```javascript +暂无后执行脚本 +``` +#### 成功响应示例 +```javascript +{ + "status": 0, + "msg": "登录用户信息", + "data": { + "id": 11, + "user_id": "YH_1", + "user_name": "admin", + "password": "14e1b600b1fd579f47433b88e8d85291", + "avatar": "", + "full_name": "管理员", + "phone": "15229380174", + "email": "quick@163.com", + "address": "北京朝阳", + "create_time": "2022-05-13 16:20:47", + "remark": "管理员账号,请勿删除", + "deleted": 0, + "enabled": 0 + } +} +``` +参数名 | 示例值 | 参数类型 | 参数描述 +--- | --- | --- | --- +status | - | Number | 状态:0:成功,1:失败 +msg | 登录用户信息 | String | 提示信息 +data | - | Object | 响应数据 +data.id | 11 | Number | 订单主键 +data.user_id | YH_1 | Number | 用户编号 +data.user_name | admin | String | 用户名称 +data.password | 14e1b600b1fd579f47433b88e8d85291 | String | 密码 +data.avatar | - | Object | 头像 +data.full_name | 管理员 | String | 姓名 +data.phone | 15229380174 | String | 手机号 +data.email | quick@163.com | String | 邮箱 +data.address | 北京朝阳 | String | 地址 +data.create_time | 2022-05-13 16:20:47 | String | 创建时间 +data.remark | 管理员账号,请勿删除 | String | 备注 +data.deleted | - | Number | 是否删除:0:未删除,1:已删除 +data.enabled | - | Number | 是否启用:0:启用,1:禁用 +#### 错误响应示例 +```javascript +{ + "status": 1, + "msg": "获取用户登录信息失败", + "data": null +} +``` +参数名 | 示例值 | 参数类型 | 参数描述 +--- | --- | --- | --- +status | 1 | Number | 状态:0:成功,1:失败 +msg | 获取用户登录信息失败 | String | 提示信息 +data | - | Object | 响应数据 +## /用户管理/新增用户 +```text +暂无描述 +``` +#### 接口状态 +> 已完成 + +#### 接口URL +> /user/add + +#### 请求方式 +> POST + +#### Content-Type +> json + +#### 请求Body参数 +```javascript +{ + "userId": "YH_333", + "userName": "leifn22", + "avatar": "", + "fullName": "", + "phone": "", + "email": "1841031740@qq.com", + "address": "陕西西安" +} +``` +参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 +--- | --- | --- | --- | --- +userId | YH_333 | String | 是 | 用户编号 +userName | leifn22 | String | 是 | 用户名 +avatar | /upload/1111.png | String | 否 | 头像 +fullName | 张飞 | String | 否 | 姓名 +phone | 15229380174 | String | 否 | 手机号 +email | 1841031740@qq.com | String | 否 | 邮箱 +address | 陕西西安 | String | 否 | 地址 +#### 预执行脚本 +```javascript +暂无预执行脚本 +``` +#### 后执行脚本 +```javascript +暂无后执行脚本 +``` +#### 成功响应示例 +```javascript +{ + "status": 0, + "msg": "添加用户成功", + "data": null +} +``` +参数名 | 示例值 | 参数类型 | 参数描述 +--- | --- | --- | --- +status | - | Number | 状态:0:成功,1:失败 +msg | 添加用户成功 | String | 提示信息 +data | - | Object | 响应数据 +#### 错误响应示例 +```javascript +{ + "status": 1, + "msg": "添加用户失败", + "data": null +} +``` +参数名 | 示例值 | 参数类型 | 参数描述 +--- | --- | --- | --- +status | 1 | Number | 状态:0:成功,1:失败 +msg | 添加用户失败 | String | 提示信息 +data | - | Object | 响应数据 +## /用户管理/编辑用户 +```text +暂无描述 +``` +#### 接口状态 +> 已完成 + +#### 接口URL +> /user/update + +#### 请求方式 +> POST + +#### Content-Type +> json + +#### 请求Body参数 +```javascript +{ + "id": "41", + "userName": "lllll", + "avatar": "", + "fullName": "张立平", + "phone": "13520073575", + "email": "1841031740@qq.com", + "address": "陕西西安2" +} +``` +参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 +--- | --- | --- | --- | --- +id | 41 | String | 是 | 订单主键 +userName | lllll | String | 是 | 用户名 +avatar | /uploads/22.png | String | 否 | 头像 +fullName | 张立平 | String | 否 | 姓名 +phone | 13520073575 | String | 否 | 手机号 +email | 1841031740@qq.com | String | 否 | 邮箱 +address | 陕西西安2 | String | 否 | 地址 +#### 预执行脚本 +```javascript +暂无预执行脚本 +``` +#### 后执行脚本 +```javascript +暂无后执行脚本 +``` +#### 成功响应示例 +```javascript +{ + "status": 0, + "msg": "修改用户成功", + "data": null +} +``` +参数名 | 示例值 | 参数类型 | 参数描述 +--- | --- | --- | --- +status | - | Number | 状态:0:成功,1:失败 +msg | 修改用户成功 | String | 提示信息 +data | - | Object | 响应数据 +#### 错误响应示例 +```javascript +{ + "status": 1, + "msg": "修改用户失败", + "data": null +} +``` +参数名 | 示例值 | 参数类型 | 参数描述 +--- | --- | --- | --- +status | 1 | Number | 状态:0:成功,1:失败 +msg | 修改用户失败 | String | 提示信息 +data | - | Object | 响应数据 +## /用户管理/删除用户 +```text +暂无描述 +``` +#### 接口状态 +> 已完成 + +#### 接口URL +> /user/remove + +#### 请求方式 +> POST + +#### Content-Type +> json + +#### 请求Body参数 +```javascript +{ + "id":"41" +} +``` +参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 +--- | --- | --- | --- | --- +id | 4 | String | 是 | 订单主键 +#### 预执行脚本 +```javascript +暂无预执行脚本 +``` +#### 后执行脚本 +```javascript +暂无后执行脚本 +``` +#### 成功响应示例 +```javascript +{ + "status": 0, + "msg": "删除用户成功", + "data": null +} +``` +参数名 | 示例值 | 参数类型 | 参数描述 +--- | --- | --- | --- +status | - | Number | 状态:0:成功,1:失败 +msg | 删除用户成功 | String | 提示信息 +data | - | Object | 响应数据 +#### 错误响应示例 +```javascript +{ + "status": 1, + "msg": "删除用户失败", + "data": null +} +``` +参数名 | 示例值 | 参数类型 | 参数描述 +--- | --- | --- | --- +status | 1 | Number | 状态:0:成功,1:失败 +msg | 删除用户失败 | String | 提示信息 +data | - | Object | 响应数据 +## /用户管理/批量删除用户 +```text +暂无描述 +``` +#### 接口状态 +> 已完成 + +#### 接口URL +> /user/batchRemove + +#### 请求方式 +> POST + +#### Content-Type +> json + +#### 请求Body参数 +```javascript +{ + "ids":"35,36,37" +} +``` +参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 +--- | --- | --- | --- | --- +ids | 4,5,6 | String | 是 | 需要删除的主键,多个以逗号分割 +#### 预执行脚本 +```javascript +暂无预执行脚本 +``` +#### 后执行脚本 +```javascript +暂无后执行脚本 +``` +#### 成功响应示例 +```javascript +{ + "status": 0, + "msg": "删除用户成功", + "data": null +} +``` +参数名 | 示例值 | 参数类型 | 参数描述 +--- | --- | --- | --- +status | - | Number | 状态:0:成功,1:失败 +msg | 删除用户成功 | String | 提示信息 +data | - | Object | 响应数据 +#### 错误响应示例 +```javascript +{ + "status": 1, + "msg": "删除用户失败", + "data": null +} +``` +参数名 | 示例值 | 参数类型 | 参数描述 +--- | --- | --- | --- +status | 1 | Number | 状态:0:成功,1:失败 +msg | 删除用户失败 | String | 提示信息 +data | - | Object | 响应数据 +## /用户管理/批量导入用户 +```text +暂无描述 +``` +#### 接口状态 +> 需修改 + +#### 接口URL +> http://localhost:3002/api/user/improtUser + +#### 请求方式 +> POST + +#### Content-Type +> form-data + +#### 预执行脚本 +```javascript +暂无预执行脚本 +``` +#### 后执行脚本 +```javascript +暂无后执行脚本 +``` +## /用户管理/批量导出用户 +```text +暂无描述 +``` +#### 接口状态 +> 需修改 + +#### 接口URL +> http://localhost:3002/api/user/exportUser + +#### 请求方式 +> POST + +#### Content-Type +> form-data + +#### 预执行脚本 +```javascript +暂无预执行脚本 +``` +#### 后执行脚本 +```javascript +暂无后执行脚本 +``` +## /用户管理/重置用户密码 +```text +暂无描述 +``` +#### 接口状态 +> 已完成 + +#### 接口URL +> /user/resetPassword + +#### 请求方式 +> POST + +#### Content-Type +> json + +#### 请求Body参数 +```javascript +{ + "id":"4" +} +``` +参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 +--- | --- | --- | --- | --- +id | 4 | String | 是 | 订单主键 +#### 预执行脚本 +```javascript +暂无预执行脚本 +``` +#### 后执行脚本 +```javascript +暂无后执行脚本 +``` +#### 成功响应示例 +```javascript +{ + "status": 0, + "msg": "重置用户密码成功", + "data": null +} +``` +参数名 | 示例值 | 参数类型 | 参数描述 +--- | --- | --- | --- +status | - | Number | 状态:0:成功,1:失败 +msg | 重置用户密码成功 | String | 提示信息 +data | - | Object | 响应数据 +#### 错误响应示例 +```javascript +{ + "status": 1, + "msg": "重置用户密码失败", + "data": null +} +``` +参数名 | 示例值 | 参数类型 | 参数描述 +--- | --- | --- | --- +status | 1 | Number | 状态:0:成功,1:失败 +msg | 重置用户密码失败 | String | 提示信息 +data | - | Object | 响应数据 +## /用户管理/启用用户 +```text +暂无描述 +``` +#### 接口状态 +> 已完成 + +#### 接口URL +> /user/enabled + +#### 请求方式 +> POST + +#### Content-Type +> json + +#### 请求Body参数 +```javascript +{ + "id":"4" +} +``` +参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 +--- | --- | --- | --- | --- +id | 4 | String | 是 | 订单主键 +#### 预执行脚本 +```javascript +暂无预执行脚本 +``` +#### 后执行脚本 +```javascript +暂无后执行脚本 +``` +#### 成功响应示例 +```javascript +{ + "status": 0, + "msg": "启用用户成功", + "data": null +} +``` +参数名 | 示例值 | 参数类型 | 参数描述 +--- | --- | --- | --- +status | - | Number | 状态:0:成功,1:失败 +msg | 启用用户成功 | String | 提示信息 +data | - | Object | 响应数据 +#### 错误响应示例 +```javascript +{ + "status": 1, + "msg": "启用用户失败", + "data": null +} +``` +参数名 | 示例值 | 参数类型 | 参数描述 +--- | --- | --- | --- +status | 1 | Number | 状态:0:成功,1:失败 +msg | 启用用户失败 | String | 提示信息 +data | - | Object | 响应数据 +## /用户管理/禁用用户 +```text +暂无描述 +``` +#### 接口状态 +> 已完成 + +#### 接口URL +> /user/disable + +#### 请求方式 +> POST + +#### Content-Type +> json + +#### 请求Body参数 +```javascript +{ + "id":"4" +} +``` +参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 +--- | --- | --- | --- | --- +id | 4 | String | 是 | 订单主键 +#### 预执行脚本 +```javascript +暂无预执行脚本 +``` +#### 后执行脚本 +```javascript +暂无后执行脚本 +``` +#### 成功响应示例 +```javascript +{ + "status": 0, + "msg": "禁用用户成功", + "data": null +} +``` +参数名 | 示例值 | 参数类型 | 参数描述 +--- | --- | --- | --- +status | - | Number | 状态:0:成功,1:失败 +msg | 禁用用户成功 | String | 提示信息 +data | - | Object | 响应数据 +#### 错误响应示例 +```javascript +{ + "status": 1, + "msg": "禁用用户失败", + "data": null +} +``` +参数名 | 示例值 | 参数类型 | 参数描述 +--- | --- | --- | --- +status | 1 | Number | 状态:0:成功,1:失败 +msg | 禁用用户失败 | String | 提示信息 +data | - | Object | 响应数据 +## /字典管理 +```text +系统字典相关接口 +``` +#### 公共Header参数 +参数名 | 示例值 | 参数描述 +--- | --- | --- +暂无参数 +#### 公共Query参数 +参数名 | 示例值 | 参数描述 +--- | --- | --- +暂无参数 +#### 公共Body参数 +参数名 | 示例值 | 参数描述 +--- | --- | --- +暂无参数 +#### 预执行脚本 +```javascript +暂无预执行脚本 +``` +#### 后执行脚本 +```javascript +暂无后执行脚本 +``` +## /字典管理/字典列表 +```text +暂无描述 +``` +#### 接口状态 +> 已完成 + +#### 接口URL +> http://localhost:3002/api/dictionary/getList?dic_type_id=gender + +#### 请求方式 +> GET + +#### Content-Type +> form-data + +#### 请求Query参数 +参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 +--- | --- | --- | --- | --- +dic_type_id | gender | Text | 是 | 字典类型 +#### 预执行脚本 +```javascript +暂无预执行脚本 +``` +#### 后执行脚本 +```javascript +暂无后执行脚本 +``` +## /字典管理/新增字典 +```text +暂无描述 +``` +#### 接口状态 +> 已完成 + +#### 接口URL +> http://localhost:3002/api/dictionary/add + +#### 请求方式 +> POST + +#### Content-Type +> json + +#### 请求Body参数 +```javascript +{ + "id":"", + "dic_type_id": "keyword", + "dic_id": "14", + "name": "联系我" +} +``` +参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 +--- | --- | --- | --- | --- +id | 5 | Number | 是 | - +username | lei | String | 是 | 用户名 +password | 123 | String | 是 | 密码 +createtime | 2022-05-13 | String | 是 | - +#### 预执行脚本 +```javascript +暂无预执行脚本 +``` +#### 后执行脚本 +```javascript +暂无后执行脚本 +``` +## /字典管理/编辑字典 +```text +暂无描述 +``` +#### 接口状态 +> 已完成 + +#### 接口URL +> http://localhost:3002/api/dictionary/update + +#### 请求方式 +> POST + +#### Content-Type +> json + +#### 请求Body参数 +```javascript +{ + "id":"15", + "dic_type_id": "keyword", + "dic_id": "14", + "name": "联系我" +} +``` +参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 +--- | --- | --- | --- | --- +id | 5 | Number | 是 | - +username | lei11 | String | 是 | 用户名 +password | 123 | String | 是 | 密码 +createtime | 2022-05-13 | String | 是 | - +#### 预执行脚本 +```javascript +暂无预执行脚本 +``` +#### 后执行脚本 +```javascript +暂无后执行脚本 +``` +## /字典管理/删除字典 +```text +暂无描述 +``` +#### 接口状态 +> 已完成 + +#### 接口URL +> http://localhost:3002/api/dictionary/remove?id=4 + +#### 请求方式 +> POST + +#### Content-Type +> form-data + +#### 请求Query参数 +参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 +--- | --- | --- | --- | --- +id | 4 | Text | 是 | - +#### 预执行脚本 +```javascript +暂无预执行脚本 +``` +#### 后执行脚本 +```javascript +暂无后执行脚本 +``` +## /字典分类 +```text +字典分类相关接口 +``` +#### 公共Header参数 +参数名 | 示例值 | 参数描述 +--- | --- | --- +暂无参数 +#### 公共Query参数 +参数名 | 示例值 | 参数描述 +--- | --- | --- +暂无参数 +#### 公共Body参数 +参数名 | 示例值 | 参数描述 +--- | --- | --- +暂无参数 +#### 预执行脚本 +```javascript +暂无预执行脚本 +``` +#### 后执行脚本 +```javascript +暂无后执行脚本 +``` +## /字典分类/字典分类列表 +```text +暂无描述 +``` +#### 接口状态 +> 已完成 + +#### 接口URL +> http://localhost:3002/api/dictionaryType/getList + +#### 请求方式 +> GET + +#### Content-Type +> form-data + +#### 预执行脚本 +```javascript +暂无预执行脚本 +``` +#### 后执行脚本 +```javascript +暂无后执行脚本 +``` +## /字典分类/新增字典分类 +```text +暂无描述 +``` +#### 接口状态 +> 已完成 + +#### 接口URL +> http://localhost:3002/api/dictionaryType/add + +#### 请求方式 +> POST + +#### Content-Type +> json + +#### 请求Body参数 +```javascript +{ + "id": "", + "dic_type_id": "gender1", + "name": "性别1" +} +``` +参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 +--- | --- | --- | --- | --- +id | 5 | Number | 是 | - +username | lei | String | 是 | 用户名 +password | 123 | String | 是 | 密码 +createtime | 2022-05-13 | String | 是 | - +#### 预执行脚本 +```javascript +暂无预执行脚本 +``` +#### 后执行脚本 +```javascript +暂无后执行脚本 +``` +## /字典分类/编辑字典分类 +```text +暂无描述 +``` +#### 接口状态 +> 已完成 + +#### 接口URL +> http://localhost:3002/api/dictionaryType/update + +#### 请求方式 +> POST + +#### Content-Type +> json + +#### 请求Body参数 +```javascript +{ + "id": 1, + "dic_type_id": "gender1", + "name": "性别3" +} +``` +参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 +--- | --- | --- | --- | --- +id | 5 | Number | 是 | - +username | lei11 | String | 是 | 用户名 +password | 123 | String | 是 | 密码 +createtime | 2022-05-13 | String | 是 | - +#### 预执行脚本 +```javascript +暂无预执行脚本 +``` +#### 后执行脚本 +```javascript +暂无后执行脚本 +``` +## /字典分类/删除字典分类 +```text +暂无描述 +``` +#### 接口状态 +> 已完成 + +#### 接口URL +> http://localhost:3002/api/dictionaryType/remove?id=4 + +#### 请求方式 +> POST + +#### Content-Type +> form-data + +#### 请求Query参数 +参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 +--- | --- | --- | --- | --- +id | 4 | Text | 是 | - +#### 预执行脚本 +```javascript +暂无预执行脚本 +``` +#### 后执行脚本 +```javascript +暂无后执行脚本 +``` +## /登录 副本 +```text +暂无描述 +``` +#### 接口状态 +> 开发中 + +#### 接口URL +> http://localhost:3002/api/user/login + +#### 请求方式 +> POST + +#### Content-Type +> json + +#### 请求Body参数 +```javascript +{ + "username":"admin", + "password":"123456" +} +``` +#### 预执行脚本 +```javascript +暂无预执行脚本 +``` +#### 后执行脚本 +```javascript +暂无后执行脚本 +``` +## /登录 +```text +暂无描述 +``` +#### 接口状态 +> 开发中 + +#### 接口URL +> http://localhost:3002/api/login + +#### 请求方式 +> POST + +#### Content-Type +> json + +#### 请求Body参数 +```javascript +{ + "tenant": "000000", + "userName": "admin", + "userPassword": "e10adc3949ba59abbe56e057f20f883e" +} +``` +#### 预执行脚本 +```javascript +暂无预执行脚本 +``` +#### 后执行脚本 +```javascript +暂无后执行脚本 +``` +## /退出 +```text +暂无描述 +``` +#### 接口状态 +> 开发中 + +#### 接口URL +> http://localhost:3002/api/user/loginOut + +#### 请求方式 +> POST + +#### Content-Type +> form-data + +#### 预执行脚本 +```javascript +暂无预执行脚本 +``` +#### 后执行脚本 +```javascript +暂无后执行脚本 +``` +## /刷新token +```text +暂无描述 +``` +#### 接口状态 +> 开发中 + +#### 接口URL +> http://localhost:3002/api/user/refreshToken + +#### 请求方式 +> POST + +#### Content-Type +> form-data + +#### 预执行脚本 +```javascript +暂无预执行脚本 +``` +#### 后执行脚本 +```javascript +暂无后执行脚本 +``` \ No newline at end of file diff --git a/model/userModel.js b/model/userModel.js index 37d7c80..18beb3f 100644 --- a/model/userModel.js +++ b/model/userModel.js @@ -1,49 +1,37 @@ const db = require("../config/dbPool"); -const { getDate, quickMd5 } = require("../utils/index"); - class UserModel { - selectOneWhere(field,value){ - const sql = `select * from sys_users where user_name=?`; - // const sqlArr = [field,value]; - const sqlArr = [value]; + selectOneWhere(fields, values) { + let whereStr = "deleted=0"; + fields.forEach((field, index) => { + whereStr += ` and ${field}='${values[index]}'`; + }); + const sql = `select * from sys_users where ${whereStr} `; + const sqlArr = []; return db.queryAsync(sql, sqlArr); } - selectTotal(query){ - const {userName}=query - let whereStr=`` - if(userName){ - whereStr=`${whereStr} and user_name like '%${userName}%'` + selectTotal(userName) { + let whereStr = ``; + if (userName) { + whereStr = `${whereStr} and user_name like '%${userName}%'`; } - const sql = `select count(user_id) as total from sys_users where 1=1 ${whereStr}`; + const sql = `select count(user_id) as total from sys_users where deleted=0 ${whereStr}`; const sqlArr = []; return db.queryAsync(sql, sqlArr); } - selectPage(query,page) { - const {current,size:pageSize}=page - const {userName}=query - const pageIndex= pageSize * (current - 1) - let whereStr=`` + selectPage(current, size, userName) { + let whereStr = ``; const sqlArr = []; - if(userName){ - whereStr=`${whereStr} and user_name like '%${userName}%'` + if (userName) { + whereStr = `${whereStr} and user_name like '%${userName}%'`; } - sqlArr.push(pageIndex) - sqlArr.push(pageSize) - const sql = `select * from sys_users where 1=1 ${whereStr} order by user_id desc limit ?,?` - console.log('sql',sql); - - return db.queryAsync(sql,sqlArr); - } - selectAll() { - const sql = "select * from sys_users"; - const sqlArr = []; + sqlArr.push(current); + sqlArr.push(size); + const sql = `select * from sys_users where deleted=0 ${whereStr} order by user_id desc limit ?,?`; return db.queryAsync(sql, sqlArr); } insert(user) { - user.password=quickMd5(quickMd5("123456"))//初始密码123456,密码两次加密,代表前端一次,后端一次 - user.create_time = getDate(); const sql = - "insert into sys_users(user_id,user_name,password,full_name,phone,email,address,create_time,remark) values(?,?,?,?,?,?,?,?,?)"; + "insert into sys_users(user_id,user_name,password,full_name,phone,email,address,create_time,deleted,enabled,remark) values(?,?,?,?,?,?,?,?,?,?,?)"; const sqlArr = [ user.userId, user.userName, @@ -53,6 +41,8 @@ class UserModel { user.email, user.address, user.create_time, + 0, + 0, user.remark, ]; return db.queryAsync(sql, sqlArr); @@ -71,10 +61,20 @@ class UserModel { ]; return db.queryAsync(sql, sqlArr); } - remove(id) { - const sql = "delete from sys_users where id=?"; - const sqlArr = [id]; + updateField(ids, fields, values) { + let setStr = "set "; + fields.forEach((field, index) => { + setStr += `${field}='${values[index]}'`; + }); + const sql = `update sys_users ${setStr} where deleted=0 and id in (${ids})`; + const sqlArr = []; + return db.queryAsync(sql, sqlArr); + } + remove(ids) { + // const sql=`update sys_users set deleted=0 where id in (${ids})`//逻辑删除 + const sql = `delete from sys_users where deleted=0 and id in (${ids})`; //物理删除 + const sqlArr = []; return db.queryAsync(sql, sqlArr); } } -module.exports = new UserModel(); \ No newline at end of file +module.exports = new UserModel(); diff --git a/router/login.js b/router/login.js index 5ba1a9b..2e32c5c 100644 --- a/router/login.js +++ b/router/login.js @@ -6,22 +6,7 @@ const { router.post("/api/login", (req, res) => { const {body}=req login(body).then((data) => { - if(data){ - res.send({ - status: 0, - msg: "登录成功", - data: { - token:data - }, - }); - }else{ - res.send({ - status: 1, - msg: "登录失败,用户名或密码错误", - data: null - }); - } - + res.send(data) }); }); diff --git a/router/user.js b/router/user.js index 0a3b645..fff7bd5 100644 --- a/router/user.js +++ b/router/user.js @@ -1,90 +1,82 @@ const express = require("express"); const router = express.Router(); const { - getTotal, getPageList, - getList, + getDetail, getInfo, add, update, remove, + batchRemove, + updatePassword, + resetPassword, + enabled, + disable, } = require("../controllers/userController"); router.get("/api/user/getPageList", (req, res) => { - const {query}=req - const page={ - current:1, - size:10, - total:0 - } - const {current,size}=query - if(current){ - page.current=parseInt(current) - } - if(size){ - page.size=parseInt(size) - } - getPageList(query,page).then((data) => { - const { results } = data; - getTotal(query).then((data1)=>{ - const { results:results1 } = data1; - page.total=results1[0]?results1[0].total:0 - res.send({ - status: 0, - msg: "订单列表", - data: results, - page - }); - }) + const { query } = req; + getPageList(query).then((data) => { + res.send(data); }); }); -router.get("/api/user/getList", (req, res) => { - getList().then((data) => { - const { results, fields } = data; - res.send({ - status: 0, - msg: "用户列表", - data: results, - }); +router.get("/api/user/getDetail", (req, res) => { + const { query } = req; + getDetail(query).then((data) => { + res.send(data); }); }); router.get("/api/user/getInfo", (req, res) => { - getInfo(req.query.userName).then((data) => { - res.send({ - status: 0, - msg: "登录用户信息", - data: data, - }); + const { query } = req; + getInfo(query).then((data) => { + res.send(data); }); }); router.post("/api/user/add", (req, res) => { - add(req.body).then((data) => { - const { results, fields } = data; - res.send({ - status: 0, - msg: "用户创建成功", - data: null, - }); + const { body } = req; + add(body).then((data) => { + res.send(data); }); }); router.post("/api/user/update", (req, res) => { - update(req.body).then((data) => { - const { results, fields } = data; - res.send({ - status: 0, - msg: "用户修改成功", - data: null, - }); + const { body } = req; + update(body).then((data) => { + res.send(data); }); }); router.post("/api/user/remove", (req, res) => { - remove(req.query.userId).then((data) => { - const { results, fields } = data; - res.send({ - status: 0, - msg: "用户删除成功", - data: null, - }); + const { body } = req; + remove(body).then((data) => { + res.send(data); }); }); - -module.exports = router; \ No newline at end of file +router.post("/api/user/batchRemove", (req, res) => { + const { body } = req; + batchRemove(body).then((data) => { + res.send(data); + }); +}); +router.post("/api/user/updatePassword", (req, res) => { + const { body } = req; + updatePassword(body).then((data) => { + res.send(data); + }); +}); +router.post("/api/user/resetPassword", (req, res) => { + const { body } = req; + resetPassword(body).then((data) => { + res.send(data); + }); +}); +router.post("/api/user/enabled", (req, res) => { + const { body } = req; + enabled(body).then((data) => { + res.send(data); + }); +}); +router.post("/api/user/disable", (req, res) => { + const { body } = req; + disable(body).then((data) => { + res.send(data); + }); +}); +module.exports = router; diff --git a/services/userServices.js b/services/userServices.js index 23a3cc5..98eeace 100644 --- a/services/userServices.js +++ b/services/userServices.js @@ -1,41 +1,178 @@ -const {quickMd5} =require('../utils/index') -const { selectOneWhere,selectTotal,selectPage,selectAll,insert,update,remove } = require("../model/userModel"); +const { quickMd5, getDate } = require("../utils/index"); +const { + selectOneWhere, + selectTotal, + selectPage, + insert, + update, + updateField, + remove, +} = require("../model/userModel"); class UserServices { constructor() {} - async userLogin(loginInfo){ - const {userName,userPassword}=loginInfo - const result=await selectOneWhere('user_name',userName) - const user=result.results&&result.results[0] - const password=user&&user.password - const passwordMd5=quickMd5(userPassword) - const token=quickMd5("123456") - if(password!==passwordMd5){ - return null - } - return token - } - getUserTotal(query){ - return selectTotal(query); - } - getUserPageList(query,page){ - return selectPage(query,page); - } - getUserList() { - return selectAll(); + async userLogin(loginInfo) { + const { userName, userPassword } = loginInfo; + const result = await selectOneWhere("user_name", userName); + const user = result.results && result.results[0]; + const password = user && user.password; + const passwordMd5 = quickMd5(userPassword); + const token = quickMd5("123456"); + let jsonObj = {}; + if (password !== passwordMd5) { + jsonObj = { + status: 1, + msg: "登录失败,用户名或密码错误", + data: null, + }; + } + jsonObj = { + status: 0, + msg: "登录成功", + data: { + token: token, + }, + }; + return jsonObj; + } + async getUserPageList(current, size, userName) { + let pageIndex = 1; + let pageSize = 10; + if (current < 1) { + current = 1; + } + if (size < 1) { + size = 10; + } + current = parseInt(current); + size = parseInt(size); + pageIndex = size * (current - 1); + pageSize = size; + const pageListResult = await selectPage(pageIndex, pageSize, userName); + const pageList = pageListResult.results && pageListResult.results; + const totalResult = await selectTotal(userName); + const total = totalResult.results && totalResult.results[0].total; + const jsonObj = { + status: 0, + msg: "订单分页列表", + data: pageList, + page: { + current, + size, + total, + }, + }; + return jsonObj; + } + async getUserDetail(id) { + const fields = ["id"]; + const values = [id]; + const result = await selectOneWhere(fields, values); + const user = result.results && result.results[0]; + const jsonObj = { + status: 0, + msg: "用户详情", + data: user, + }; + return jsonObj; } async getUserInfo(userName) { - const result=await selectOneWhere('user_name',userName) - const user=result.results&&result.results[0] - return user + const fields = ["user_name"]; + const values = [userName]; + const result = await selectOneWhere(fields, values); + const user = result.results && result.results[0]; + const jsonObj = { + status: 0, + msg: "登录用户信息", + data: user, + }; + return jsonObj; + } + async addUser(user) { + user.password = quickMd5(quickMd5("123456")); //初始密码123456,密码两次加密,代表前端一次,后端一次 + user.create_time = getDate(); + await insert(user); + const jsonObj = { + status: 0, + msg: "添加用户成功", + data: null, + }; + return jsonObj; + } + async updateUser(user) { + await update(user); + const jsonObj = { + status: 0, + msg: "修改用户成功", + data: null, + }; + return jsonObj; + } + async removeUser(id) { + await remove(id); + const jsonObj = { + status: 0, + msg: "删除用户成功", + data: null, + }; + return jsonObj; + } + async batchRemoveUser(ids) { + await remove(ids); + const jsonObj = { + status: 0, + msg: "删除用户成功", + data: null, + }; + return jsonObj; + } + async updateUserPassword(user) { + let password = quickMd5(user.newPassword); + const fields = ["password"]; + const values = [password]; + await updateField(user.id, fields, values); + const jsonObj = { + status: 0, + msg: "修改用户密码成功", + data: null, + }; + return jsonObj; } - addUser(user) { - return insert(user); + async resetUserPassword(id) { + let password = quickMd5(quickMd5("123456")); //初始密码123456,密码两次加密,代表前端一次,后端一次 + const fields = ["password"]; + const values = [password]; + await updateField(id, fields, values); + const jsonObj = { + status: 0, + msg: "重置用户密码成功", + data: null, + }; + return jsonObj; } - updateUser(user) { - return update(user); + async enabledUser(id) { + const fields = ["enabled"]; + const values = [0]; + await updateField(id, fields, values); + const jsonObj = { + status: 0, + msg: "启用用户成功", + data: null, + }; + return jsonObj; } - removeUser(id) { - return remove(id); + async disableUser(id) { + if (!id) { + return null; + } + const fields = ["enabled"]; + const values = [1]; + await updateField(id, fields, values); + const jsonObj = { + status: 0, + msg: "禁用用户成功", + data: null, + }; + return jsonObj; } } -module.exports = new UserServices(); \ No newline at end of file +module.exports = new UserServices(); -- Gitee From 402075e1f7c8ef977d99ab00ceec1acfa425090b Mon Sep 17 00:00:00 2001 From: zhanglp Date: Thu, 14 Jul 2022 06:36:36 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=87=8D=E7=BD=AE=E5=AF=86=E7=A0=81=EF=BC=8C?= =?UTF-8?q?=E5=90=AF=E7=94=A8=E7=A6=81=E7=94=A8=E7=AD=89=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/userModel.js | 2 +- router/user.js | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/model/userModel.js b/model/userModel.js index 18beb3f..30905d4 100644 --- a/model/userModel.js +++ b/model/userModel.js @@ -26,7 +26,7 @@ class UserModel { } sqlArr.push(current); sqlArr.push(size); - const sql = `select * from sys_users where deleted=0 ${whereStr} order by user_id desc limit ?,?`; + const sql = `select * from sys_users where deleted=0 ${whereStr} order by id desc limit ?,?`; return db.queryAsync(sql, sqlArr); } insert(user) { diff --git a/router/user.js b/router/user.js index fff7bd5..b2659a5 100644 --- a/router/user.js +++ b/router/user.js @@ -69,12 +69,14 @@ router.post("/api/user/resetPassword", (req, res) => { }); router.post("/api/user/enabled", (req, res) => { const { body } = req; + console.log('enabled-body',body); enabled(body).then((data) => { res.send(data); }); }); router.post("/api/user/disable", (req, res) => { const { body } = req; + console.log('-disablebody',body); disable(body).then((data) => { res.send(data); }); -- Gitee From 4b501a5833571b9049e42dc5c9ec9c1e2d8a4727 Mon Sep 17 00:00:00 2001 From: zhanglp Date: Tue, 19 Jul 2022 17:57:55 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E5=88=A0=E9=99=A4=E7=94=A8=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- router/user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/router/user.js b/router/user.js index b2659a5..59b47fe 100644 --- a/router/user.js +++ b/router/user.js @@ -43,7 +43,7 @@ router.post("/api/user/update", (req, res) => { res.send(data); }); }); -router.post("/api/user/remove", (req, res) => { +router.post("/api/user/delete", (req, res) => { const { body } = req; remove(body).then((data) => { res.send(data); -- Gitee From 21f597ac19b6eafbd473427bb1e40625054362d2 Mon Sep 17 00:00:00 2001 From: zhanglp Date: Wed, 20 Jul 2022 07:48:24 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E5=AD=97=E5=85=B8=E5=8F=8A=E5=AD=97?= =?UTF-8?q?=E5=85=B8=E5=88=86=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controllers/dictionaryController.js | 18 +++++---- controllers/dictionaryTypeController.js | 17 +++++---- router/dictionary.js | 44 +++++++--------------- router/dictionaryType.js | 44 ++++++++-------------- services/dictionaryServices.js | 49 ++++++++++++++++++++----- services/dictionaryTypeServices.js | 49 ++++++++++++++++++++----- 6 files changed, 130 insertions(+), 91 deletions(-) diff --git a/controllers/dictionaryController.js b/controllers/dictionaryController.js index 5346186..8e277a9 100644 --- a/controllers/dictionaryController.js +++ b/controllers/dictionaryController.js @@ -2,21 +2,25 @@ const { getDictionaryList, addDictionary, updateDictionary, - removeDictionary, + deleteDictionary, } = require("../services/dictionaryServices"); class DictionaryController { constructor() {} - getList(dicTypeId) { - return getDictionaryList(dicTypeId) + getList(body) { + const {dicTypeId}=body + return getDictionaryList(dicTypeId) } - add(dictionary) { + add(body) { + const dictionary = body; return addDictionary(dictionary); } - update(dictionary) { + update(body) { + const dictionary = body; return updateDictionary(dictionary); } - remove(id) { - return removeDictionary(id); + remove(body) { + const { id } = body; + return deleteDictionary(id); } } module.exports = new DictionaryController(); diff --git a/controllers/dictionaryTypeController.js b/controllers/dictionaryTypeController.js index 54fed2e..5652143 100644 --- a/controllers/dictionaryTypeController.js +++ b/controllers/dictionaryTypeController.js @@ -2,21 +2,24 @@ const { getDictionaryTypeList, addDictionaryType, updateDictionaryType, - removeDictionaryType, + deleteDictionaryType, } = require("../services/dictionaryTypeServices"); class DictionaryTypeController { constructor() {} - getList(dicTypeId) { - return getDictionaryTypeList(dicTypeId) + getList() { + return getDictionaryTypeList(); } - add(dictionaryType) { + add(body) { + const dictionaryType = body; return addDictionaryType(dictionaryType); } - update(dictionaryType) { + update(body) { + const dictionaryType = body; return updateDictionaryType(dictionaryType); } - remove(id) { - return removeDictionaryType(id); + remove(body) { + const { id } = body; + return deleteDictionaryType(id); } } module.exports = new DictionaryTypeController(); diff --git a/router/dictionary.js b/router/dictionary.js index 601174e..f5874ee 100644 --- a/router/dictionary.js +++ b/router/dictionary.js @@ -6,45 +6,29 @@ const { update, remove, } = require("../controllers/dictionaryController"); + router.get("/api/dictionary/getList", (req, res) => { - getList(req.query.dicTypeId).then((data) => { - const { results, fields } = data; - res.send({ - status: 0, - msg: "字典列表", - data: results, - }); + const { query } = req; + getList(query).then((data) => { + res.send(data); }); }); router.post("/api/dictionary/add", (req, res) => { - add(req.body).then((data) => { - const { results, fields } = data; - res.send({ - status: 0, - msg: "字典创建成功", - data: null, - }); + const { body } = req; + add(body).then((data) => { + res.send(data); }); }); router.post("/api/dictionary/update", (req, res) => { - update(req.body).then((data) => { - const { results, fields } = data; - res.send({ - status: 0, - msg: "字典修改成功", - data: null, - }); + const { body } = req; + update(body).then((data) => { + res.send(data); }); }); -router.post("/api/dictionary/remove", (req, res) => { - remove(req.query.id).then((data) => { - const { results, fields } = data; - res.send({ - status: 0, - msg: "字典删除成功", - data: null, - }); +router.post("/api/dictionary/delete", (req, res) => { + const { body } = req; + remove(body).then((data) => { + res.send(data); }); }); - module.exports = router; diff --git a/router/dictionaryType.js b/router/dictionaryType.js index 91a3cf1..5db5723 100644 --- a/router/dictionaryType.js +++ b/router/dictionaryType.js @@ -6,44 +6,30 @@ const { update, remove, } = require("../controllers/dictionaryTypeController"); + router.get("/api/dictionaryType/getList", (req, res) => { - getList(req.query.dicTypeId).then((data) => { - const { results, fields } = data; - res.send({ - status: 0, - msg: "字典分类列表", - data: results, - }); + const { query } = req; + getList(query).then((data) => { + console.log('data',data); + res.send(data); }); }); router.post("/api/dictionaryType/add", (req, res) => { - add(req.body).then((data) => { - const { results, fields } = data; - res.send({ - status: 0, - msg: "字典分类创建成功", - data: null, - }); + const { body } = req; + add(body).then((data) => { + res.send(data); }); }); router.post("/api/dictionaryType/update", (req, res) => { - update(req.body).then((data) => { - const { results, fields } = data; - res.send({ - status: 0, - msg: "字典分类修改成功", - data: null, - }); + const { body } = req; + update(body).then((data) => { + res.send(data); }); }); -router.post("/api/dictionaryType/remove", (req, res) => { - remove(req.query.id).then((data) => { - const { results, fields } = data; - res.send({ - status: 0, - msg: "字典分类删除成功", - data: null, - }); +router.post("/api/dictionaryType/delete", (req, res) => { + const { body } = req; + remove(body).then((data) => { + res.send(data); }); }); diff --git a/services/dictionaryServices.js b/services/dictionaryServices.js index 057e797..403b0b6 100644 --- a/services/dictionaryServices.js +++ b/services/dictionaryServices.js @@ -1,17 +1,48 @@ -const {selectWhere,insert,update,remove } = require("../model/dictionaryModel"); +const { + selectWhere, + insert, + update, + remove + } = require("../model/dictionaryModel"); + class DictionaryServices { constructor() {} - getDictionaryList(dicTypeId) { - return selectWhere(dicTypeId); + async getDictionaryList(dicTypeId) { + const dictionaryListResult = await selectWhere(dicTypeId); + const dictionaryList = dictionaryListResult.results && dictionaryListResult.results; + const jsonObj = { + status: 0, + msg: "字典列表", + data:dictionaryList + }; + return jsonObj; } - addDictionary(dictionary) { - return insert(dictionary); + async addDictionary(dictionary) { + await insert(dictionary); + const jsonObj = { + status: 0, + msg: "添加字典成功", + data: null, + }; + return jsonObj; } - updateDictionary(dictionary) { - return update(dictionary); + async updateDictionary(dictionary) { + await update(dictionary); + const jsonObj = { + status: 0, + msg: "修改字典成功", + data: null, + }; + return jsonObj; } - removeDictionary(id) { - return remove(id); + async deleteDictionary(id) { + await remove(id); + const jsonObj = { + status: 0, + msg: "删除字典成功", + data: null, + }; + return jsonObj; } } module.exports = new DictionaryServices(); diff --git a/services/dictionaryTypeServices.js b/services/dictionaryTypeServices.js index a2f8901..db99a19 100644 --- a/services/dictionaryTypeServices.js +++ b/services/dictionaryTypeServices.js @@ -1,17 +1,48 @@ -const {select,insert,update,remove } = require("../model/dictionaryTypeModel"); +const { + select, + insert, + update, + remove + } = require("../model/dictionaryTypeModel"); + class DictionaryTypeServices { constructor() {} - getDictionaryTypeList() { - return select(); + async getDictionaryTypeList() { + const dictionaryTypeListResult = await select(); + const dictionaryTypeList = dictionaryTypeListResult.results && dictionaryTypeListResult.results; + const jsonObj = { + status: 0, + msg: "字典分类列表", + data:dictionaryTypeList + }; + return jsonObj; } - addDictionaryType(dictionaryType) { - return insert(dictionaryType); + async addDictionaryType(dictionaryType) { + await insert(dictionaryType); + const jsonObj = { + status: 0, + msg: "添加字典分类成功", + data: null, + }; + return jsonObj; } - updateDictionaryType(dictionaryType) { - return update(dictionaryType); + async updateDictionaryType(dictionaryType) { + await update(dictionaryType); + const jsonObj = { + status: 0, + msg: "修改字典分类成功", + data: null, + }; + return jsonObj; } - removeDictionaryType(id) { - return remove(id); + async deleteDictionaryType(id) { + await remove(id); + const jsonObj = { + status: 0, + msg: "删除字典分类成功", + data: null, + }; + return jsonObj; } } module.exports = new DictionaryTypeServices(); -- Gitee From 01186c9b4bc8d0e4460e8dda3e051f9d48a32a58 Mon Sep 17 00:00:00 2001 From: zhanglp Date: Sat, 23 Jul 2022 01:53:26 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E5=92=8C=E8=A7=92=E8=89=B2=E5=8F=8A=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/www | 8 ++- controllers/menuController.js | 31 ++++++++++++ controllers/roleController.js | 25 ++++++++++ controllers/userController.js | 1 + model/menuModel.js | 40 +++++++++++++++ model/roleMenuModel.js | 40 +++++++++++++++ model/roleModel.js | 35 +++++++++++++ model/userModel.js | 5 ++ model/userRoleModel.js | 40 +++++++++++++++ router/menu.js | 43 ++++++++++++++++ router/role.js | 36 ++++++++++++++ router/user.js | 2 +- services/menuServices.js | 93 +++++++++++++++++++++++++++++++++++ services/roleMenuServices.js | 42 ++++++++++++++++ services/roleServices.js | 48 ++++++++++++++++++ services/userRoleServices.js | 42 ++++++++++++++++ services/userServices.js | 5 +- 17 files changed, 532 insertions(+), 4 deletions(-) create mode 100644 controllers/menuController.js create mode 100644 controllers/roleController.js create mode 100644 model/menuModel.js create mode 100644 model/roleMenuModel.js create mode 100644 model/roleModel.js create mode 100644 model/userRoleModel.js create mode 100644 router/menu.js create mode 100644 router/role.js create mode 100644 services/menuServices.js create mode 100644 services/roleMenuServices.js create mode 100644 services/roleServices.js create mode 100644 services/userRoleServices.js diff --git a/bin/www b/bin/www index c4e1d4f..c424b13 100644 --- a/bin/www +++ b/bin/www @@ -13,13 +13,17 @@ const { getIPAddress } = require("../utils/index"); console.log(getIPAddress()) const indexRouter = require("../router/index"); -const userRouter = require("../router/user"); const loginRouter = require("../router/login"); +const userRouter = require("../router/user"); +const roleRouter = require("../router/role"); +const menuRouter = require("../router/menu"); const dictionaryType = require("../router/dictionaryType"); const dictionary = require("../router/dictionary"); app.use(indexRouter); -app.use(userRouter); app.use(loginRouter); +app.use(userRouter); +app.use(roleRouter); +app.use(menuRouter); app.use(dictionaryType); app.use(dictionary); diff --git a/controllers/menuController.js b/controllers/menuController.js new file mode 100644 index 0000000..c9438c2 --- /dev/null +++ b/controllers/menuController.js @@ -0,0 +1,31 @@ +const { + getMenuList, + addMenu, + updateMenu, + deleteMenu, + getPermissionMenuListByUserId, +} = require("../services/menuServices"); + +class MenuController { + constructor() {} + getPermission(body){ + const {id:userId}=body + return getPermissionMenuListByUserId(userId) + } + getList() { + return getMenuList(); + } + add(body) { + const menu = body; + return addMenu(menu); + } + update(body) { + const menu = body; + return updateMenu(menu); + } + remove(body) { + const { id } = body; + return deleteMenu(id); + } +} +module.exports = new MenuController(); diff --git a/controllers/roleController.js b/controllers/roleController.js new file mode 100644 index 0000000..14d790f --- /dev/null +++ b/controllers/roleController.js @@ -0,0 +1,25 @@ +const { + getRoleList, + addRole, + updateRole, + deleteRole, +} = require("../services/roleServices"); +class RoleController { + constructor() {} + getList() { + return getRoleList(); + } + add(body) { + const role = body; + return addRole(role); + } + update(body) { + const role = body; + return updateRole(role); + } + remove(body) { + const { id } = body; + return deleteRole(id); + } +} +module.exports = new RoleController(); diff --git a/controllers/userController.js b/controllers/userController.js index 0fde154..871c31d 100644 --- a/controllers/userController.js +++ b/controllers/userController.js @@ -11,6 +11,7 @@ const { enabledUser, disableUser, } = require("../services/userServices"); + class UserController { constructor() {} getPageList(query) { diff --git a/model/menuModel.js b/model/menuModel.js new file mode 100644 index 0000000..3c55fe1 --- /dev/null +++ b/model/menuModel.js @@ -0,0 +1,40 @@ +'use strict'; +const db = require("../config/dbPool"); + +class MenuModel { + select() { + const sql = "select * from sys_menus"; + const sqlArr = []; + return db.queryAsync(sql, sqlArr); + } + selectWhere(ids) { + const sql = `select * from sys_menus where id in(${ids})`; + const sqlArr = []; + return db.queryAsync(sql, sqlArr); + } + insert(dic) { + const sql = + "insert into sys_menus(menu_id,menu_name) values(?,?)"; + const sqlArr = [ + dic.dicTypeId, + dic.name, + ]; + return db.queryAsync(sql, sqlArr); + } + update(dic) { + const sql = + "update sys_menus set menu_name=? where id=?"; + const sqlArr = [ + dic.dicTypeId, + dic.name, + dic.id, + ]; + return db.queryAsync(sql, sqlArr); + } + remove(id) { + const sql = "delete from sys_menus where id=?"; + const sqlArr = [id]; + return db.queryAsync(sql, sqlArr); + } +} +module.exports = new MenuModel(); diff --git a/model/roleMenuModel.js b/model/roleMenuModel.js new file mode 100644 index 0000000..bae3b42 --- /dev/null +++ b/model/roleMenuModel.js @@ -0,0 +1,40 @@ +'use strict'; +const db = require("../config/dbPool"); + +class RoleModel { + select() { + const sql = "select * from per_role_menus"; + const sqlArr = []; + return db.queryAsync(sql, sqlArr); + } + selectWhere(roleIds){ + const sql = `select * from per_role_menus where role_id in(${roleIds})`; + const sqlArr = []; + return db.queryAsync(sql, sqlArr); + } + insert(dic) { + const sql = + "insert into per_role_menus(role_id,role_name) values(?,?)"; + const sqlArr = [ + dic.roleId, + dic.roleName, + ]; + return db.queryAsync(sql, sqlArr); + } + update(dic) { + const sql = + "update per_role_menus set role_name=? where id=?"; + const sqlArr = [ + dic.roleId, + dic.roleName, + dic.id, + ]; + return db.queryAsync(sql, sqlArr); + } + remove(id) { + const sql = "delete from per_role_menus where id=?"; + const sqlArr = [id]; + return db.queryAsync(sql, sqlArr); + } +} +module.exports = new RoleModel(); diff --git a/model/roleModel.js b/model/roleModel.js new file mode 100644 index 0000000..0c7dabe --- /dev/null +++ b/model/roleModel.js @@ -0,0 +1,35 @@ +'use strict'; +const db = require("../config/dbPool"); + +class RoleModel { + select() { + const sql = "select * from sys_roles"; + const sqlArr = []; + return db.queryAsync(sql, sqlArr); + } + insert(dic) { + const sql = + "insert into sys_roles(role_id,role_name) values(?,?)"; + const sqlArr = [ + dic.roleId, + dic.roleName, + ]; + return db.queryAsync(sql, sqlArr); + } + update(dic) { + const sql = + "update sys_roles set role_name=? where id=?"; + const sqlArr = [ + dic.roleId, + dic.roleName, + dic.id, + ]; + return db.queryAsync(sql, sqlArr); + } + remove(id) { + const sql = "delete from sys_roles where id=?"; + const sqlArr = [id]; + return db.queryAsync(sql, sqlArr); + } +} +module.exports = new RoleModel(); diff --git a/model/userModel.js b/model/userModel.js index 30905d4..54f1795 100644 --- a/model/userModel.js +++ b/model/userModel.js @@ -1,5 +1,10 @@ const db = require("../config/dbPool"); class UserModel { + selectMenu(roleId){ + const sql = `select * from sys_users where roleId=? `; + const sqlArr = [roleId]; + return db.queryAsync(sql, sqlArr); + } selectOneWhere(fields, values) { let whereStr = "deleted=0"; fields.forEach((field, index) => { diff --git a/model/userRoleModel.js b/model/userRoleModel.js new file mode 100644 index 0000000..d431ca7 --- /dev/null +++ b/model/userRoleModel.js @@ -0,0 +1,40 @@ +'use strict'; +const db = require("../config/dbPool"); + +class UserRoleModel { + select() { + const sql = "select * from per_user_roles"; + const sqlArr = []; + return db.queryAsync(sql, sqlArr); + } + selectWhere( field, value){ + const sql = `select * from per_user_roles where ${field}=?`; + const sqlArr = [value]; + return db.queryAsync(sql, sqlArr); + } + insert(dic) { + const sql = + "insert into per_user_roles(role_id,role_name) values(?,?)"; + const sqlArr = [ + dic.roleId, + dic.roleName, + ]; + return db.queryAsync(sql, sqlArr); + } + update(dic) { + const sql = + "update per_user_roles set role_name=? where id=?"; + const sqlArr = [ + dic.roleId, + dic.roleName, + dic.id, + ]; + return db.queryAsync(sql, sqlArr); + } + remove(id) { + const sql = "delete from per_user_roles where id=?"; + const sqlArr = [id]; + return db.queryAsync(sql, sqlArr); + } +} +module.exports = new UserRoleModel(); diff --git a/router/menu.js b/router/menu.js new file mode 100644 index 0000000..3a2bd86 --- /dev/null +++ b/router/menu.js @@ -0,0 +1,43 @@ +const express = require("express"); +const router = express.Router(); +const { + getPermission, + getList, + add, + update, + remove, +} = require("../controllers/menuController"); + +router.get("/api/menu/getPermission", (req, res) => { + const { query } = req; + getPermission(query).then((data) => { + res.send(data); + }); +}); +router.get("/api/menu/getList", (req, res) => { + const { query } = req; + getList(query).then((data) => { + console.log('data',data); + res.send(data); + }); +}); +router.post("/api/menu/add", (req, res) => { + const { body } = req; + add(body).then((data) => { + res.send(data); + }); +}); +router.post("/api/menu/update", (req, res) => { + const { body } = req; + update(body).then((data) => { + res.send(data); + }); +}); +router.post("/api/menu/delete", (req, res) => { + const { body } = req; + remove(body).then((data) => { + res.send(data); + }); +}); + +module.exports = router; diff --git a/router/role.js b/router/role.js new file mode 100644 index 0000000..12b6430 --- /dev/null +++ b/router/role.js @@ -0,0 +1,36 @@ +const express = require("express"); +const router = express.Router(); +const { + getList, + add, + update, + remove, +} = require("../controllers/roleController"); + +router.get("/api/role/getList", (req, res) => { + const { query } = req; + getList(query).then((data) => { + console.log('data',data); + res.send(data); + }); +}); +router.post("/api/role/add", (req, res) => { + const { body } = req; + add(body).then((data) => { + res.send(data); + }); +}); +router.post("/api/role/update", (req, res) => { + const { body } = req; + update(body).then((data) => { + res.send(data); + }); +}); +router.post("/api/role/delete", (req, res) => { + const { body } = req; + remove(body).then((data) => { + res.send(data); + }); +}); + +module.exports = router; diff --git a/router/user.js b/router/user.js index 59b47fe..0a0e0a0 100644 --- a/router/user.js +++ b/router/user.js @@ -13,6 +13,7 @@ const { enabled, disable, } = require("../controllers/userController"); + router.get("/api/user/getPageList", (req, res) => { const { query } = req; getPageList(query).then((data) => { @@ -76,7 +77,6 @@ router.post("/api/user/enabled", (req, res) => { }); router.post("/api/user/disable", (req, res) => { const { body } = req; - console.log('-disablebody',body); disable(body).then((data) => { res.send(data); }); diff --git a/services/menuServices.js b/services/menuServices.js new file mode 100644 index 0000000..857d7d1 --- /dev/null +++ b/services/menuServices.js @@ -0,0 +1,93 @@ +const { + select, + selectWhere, + insert, + update, + remove + } = require("../model/menuModel"); + const {getUserRoleListByUserId} =require('./userRoleServices') +const {getRoleMenuListByIds} =require('./roleMenuServices') + +class MenuServices { + constructor() {} + async getPermissionMenuListByUserId(userId){ + + const userRoleList=await getUserRoleListByUserId(userId) + const roleIdArr=[] + const menuIdArr=[] + userRoleList.forEach(async (element) => { + const roleId=element.role_id + roleIdArr.push(roleId) + }); + if(roleIdArr.length<=0){ + return { + status: 0, + msg: "授权菜单列表", + data:[] + }; + } + const roleIds= roleIdArr.join(',') + const roleMenuList=await getRoleMenuListByIds(roleIds) + roleMenuList.forEach(element => { + const menuId=element.menu_id + const index=menuIdArr.indexOf(menuId) + if(index==-1){ + menuIdArr.push(menuId) + } + }); + if(menuIdArr.length<=0){ + return { + status: 0, + msg: "授权菜单列表", + data:[] + }; + } + const menuIds= menuIdArr.join(',') + const menuListResult = await selectWhere(menuIds); + const menuList = menuListResult.results && menuListResult.results; + const jsonObj = { + status: 0, + msg: "授权菜单列表", + data:menuList + }; + return jsonObj; + } + async getMenuList() { + const menuListResult = await select(); + const menuList = menuListResult.results && menuListResult.results; + const jsonObj = { + status: 0, + msg: "菜单列表", + data:menuList + }; + return jsonObj; + } + async addMenu(menu) { + await insert(menu); + const jsonObj = { + status: 0, + msg: "添加菜单成功", + data: null, + }; + return jsonObj; + } + async updateMenu(menu) { + await update(menu); + const jsonObj = { + status: 0, + msg: "修改菜单成功", + data: null, + }; + return jsonObj; + } + async deleteMenu(id) { + await remove(id); + const jsonObj = { + status: 0, + msg: "删除菜单成功", + data: null, + }; + return jsonObj; + } +} +module.exports = new MenuServices(); diff --git a/services/roleMenuServices.js b/services/roleMenuServices.js new file mode 100644 index 0000000..52aaa2d --- /dev/null +++ b/services/roleMenuServices.js @@ -0,0 +1,42 @@ +const { + selectWhere + } = require("../model/roleMenuModel"); + +class RoleMenuServices { + constructor() {} + async getRoleMenuListByIds(roleIds) { + const roleMenuListResult = await selectWhere(roleIds) + const roleMenuList = roleMenuListResult.results && roleMenuListResult.results; + return roleMenuList + } + async getAssignedUserList(userId) { + const userRoleListResult = await selectWhere('user_id',userId) + const userRoleList = userRoleListResult.results && userRoleListResult.results; + const jsonObj = { + status: 0, + msg: "分配的用户列表", + data:userRoleList + }; + return jsonObj; + } + async allotUser(userRole) { + await insert(userRole); + const jsonObj = { + status: 0, + msg: "分配用户成功", + data: null, + }; + return jsonObj; + } + + async unassignUser(id) { + await remove(id); + const jsonObj = { + status: 0, + msg: "取消分配用户成功", + data: null, + }; + return jsonObj; + } +} +module.exports = new RoleMenuServices(); diff --git a/services/roleServices.js b/services/roleServices.js new file mode 100644 index 0000000..5f977c9 --- /dev/null +++ b/services/roleServices.js @@ -0,0 +1,48 @@ +const { + select, + insert, + update, + remove + } = require("../model/roleModel"); + +class RoleServices { + constructor() {} + async getRoleList() { + const roleListResult = await select(); + const roleList = roleListResult.results && roleListResult.results; + const jsonObj = { + status: 0, + msg: "角色列表", + data:roleList + }; + return jsonObj; + } + async addRole(role) { + await insert(role); + const jsonObj = { + status: 0, + msg: "添加角色成功", + data: null, + }; + return jsonObj; + } + async updateRole(role) { + await update(role); + const jsonObj = { + status: 0, + msg: "修改角色成功", + data: null, + }; + return jsonObj; + } + async deleteRole(id) { + await remove(id); + const jsonObj = { + status: 0, + msg: "删除角色成功", + data: null, + }; + return jsonObj; + } +} +module.exports = new RoleServices(); diff --git a/services/userRoleServices.js b/services/userRoleServices.js new file mode 100644 index 0000000..e9040dd --- /dev/null +++ b/services/userRoleServices.js @@ -0,0 +1,42 @@ +const { + selectWhere + } = require("../model/userRoleModel"); + +class UserRoleServices { + constructor() {} + async getUserRoleListByUserId(userId) { + const userRoleListResult = await selectWhere('user_id',userId) + const userRoleList = userRoleListResult.results && userRoleListResult.results; + return userRoleList + } + async getAssignedUserList(userId) { + const userRoleListResult = await selectWhere('user_id',userId) + const userRoleList = userRoleListResult.results && userRoleListResult.results; + const jsonObj = { + status: 0, + msg: "分配的用户列表", + data:userRoleList + }; + return jsonObj; + } + async allotUser(userRole) { + await insert(userRole); + const jsonObj = { + status: 0, + msg: "分配用户成功", + data: null, + }; + return jsonObj; + } + + async unassignUser(id) { + await remove(id); + const jsonObj = { + status: 0, + msg: "取消分配用户成功", + data: null, + }; + return jsonObj; + } +} +module.exports = new UserRoleServices(); diff --git a/services/userServices.js b/services/userServices.js index 98eeace..66d2acf 100644 --- a/services/userServices.js +++ b/services/userServices.js @@ -8,11 +8,14 @@ const { updateField, remove, } = require("../model/userModel"); + class UserServices { constructor() {} async userLogin(loginInfo) { const { userName, userPassword } = loginInfo; - const result = await selectOneWhere("user_name", userName); + const fields=['user_name'] + const values=[userName] + const result = await selectOneWhere(fields,values); const user = result.results && result.results[0]; const password = user && user.password; const passwordMd5 = quickMd5(userPassword); -- Gitee