const { Op } = require('sequelize'); const express = require('express'); const _ = require('lodash'); const { query, body } = require('express-validator'); const { onSuccess, fill, md5, onError } = require('../../../utils'); const { limit } = require('../../config'); const check = require('../../../middleware/check'); const Admin = require('../../../db/models/admin'); const router = express.Router(); async function fillSingle(data) { return data; } /** * showdoc * @catalog v1/后台/管理员 * @title 管理员列表 * @description 管理员列表接口 * @method GET * @url /master/admin/ * @param page 0 Int 页码: 不传默认取第1页数据,每页20条数据 * @return {"code":0, "count":1, "data": []} * @return_param id integer id * @return_param name string 名 * @return_param img string 头像 * @return_param phone string 电话 * @return_param pwd string 密码 * @return_param auth array 权限 * @return_param createdAt date - * @return_param updatedAt date - * @remark * @number */ router.get('/', async (req, res) => { const { page = 0 } = req.query; const where = _.omit(req.query, ['page']); const info = onSuccess(); info.data = await Admin.findAll({ where, limit, offset: page * limit }); info.data = await fill(info.data, fillSingle); if (!page) { info.count = await Admin.count({ where }); } res.send(info); }); /** * showdoc * @catalog v1/后台/管理员 * @title 管理员详情 * @description * @method GET * @url /master/admin/:id * @param :id 1 STRING 详情ID * @return {"code":0, "data": {}} * @return_param id integer id * @return_param name string 名 * @return_param img string 头像 * @return_param phone string 电话 * @return_param pwd string 密码 * @return_param auth array 权限 * @return_param createdAt date - * @return_param updatedAt date - * @remark * @number */ router.get('/:id', async (req, res) => { let data = await Admin.findOne({ where: req.params }); data = await fill(data, fillSingle); res.send(onSuccess(data)); }); /** * showdoc * @catalog v1/后台/管理员 * @title 管理员添加 * @description * @method POST * @url /master/admin/ * @param name 1 string 名 * @param phone 1 string 电话 * @param pwd 1 string 密码 * @param auth 1 array 权限 * @return {"code":0, "data": {}} * @remark * @number */ router.post('/', check([body(['name', 'phone', 'pwd']).notEmpty()]), async (req, res) => { const { pwd, phone, name } = req.body; pwd && (req.body.pwd = md5(pwd)); const count = await Admin.count({ where: { [Op.or]: [{ phone }, { name }] } }); if (count) { return res.send(onError('手机号或名称重复')); } const data = await Admin.create(req.body); res.send(onSuccess(data)); }); /** * showdoc * @catalog v1/后台/管理员 * @title 管理员修改 * @description * @method PUT * @url /master/admin/:id * @param :id 1 STRING 详情ID * @param name 0 string 名 * @param phone 0 string 电话 * @param pwd 0 string 密码 * @param auth 0 array 权限 * @return {"code":0, "msg": "修改成功"} * @remark * @number */ router.put('/:id', async (req, res) => { const { pwd, phone, name } = req.body; pwd && (req.body.pwd = md5(pwd)); const count = await Admin.count({ where: { [Op.or]: [{ phone }, { name }], id: { [Op.ne]: req.params.id } }, }); if (count) { return res.send(onError('手机号或名称重复')); } const data = await Admin.update(req.body, { where: req.params, limit: 1 }); res.send(onSuccess(null, '修改成功')); }); /** * showdoc * @catalog v1/后台/管理员 * @title 管理员删除 * @description * @method DELETE * @url /master/admin/:id * @param :id 1 STRING 详情ID * @return {"code":0, "msg": "删除成功"} * @remark * @number */ router.delete('/:id', async (req, res) => { const data = await Admin.destroy({ where: req.params, limit: 1 }); res.send(onSuccess(null, '删除成功')); }); module.exports = router;