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 Business = require('../../../db/models/business'); const Area = require('../../../db/models/area'); const router = express.Router(); async function fillSingle(data) { if (data) { const { cityId, provinceId } = data; const [cItem, pItem] = await Promise.all([ Area.findOne({ where: { id: cityId } }), Area.findOne({ where: { id: provinceId } }), ]); data.cityName = cItem.name; data.provinceName = pItem.name; } return data; } /** * showdoc * @catalog v1/后台/商家 * @title 商家列表 * @description 商家列表接口 * @method GET * @url /master/business/ * @param page 0 Int 页码: 不传默认取第1页数据,每页20条数据 * @return {"code":0, "count":1, "data": []} * @return_param id integer id * @return_param name string 名 * @return_param account string 账号 * @return_param phone string 手机号 * @return_param company string 公司 * @return_param cityId integer 城市ID * @return_param provinceId integer 省ID * @return_param deadline string 到期时间 * @return_param pwd string 密码 * @return_param type integer 1审定核证机构2资源减排所有方3两个都选 * @return_param cityName string 城市名称 * @return_param provinceName string 省名称 * @return_param lastTime string 上次登录时间 * @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 Business.findAll({ where, limit, offset: page * limit }); info.data = await fill(info.data, fillSingle); if (!page) { info.count = await Business.count({ where }); } res.send(info); }); /** * showdoc * @catalog v1/后台/商家 * @title 商家详情 * @description * @method GET * @url /master/business/:id * @param :id 1 STRING 详情ID * @return {"code":0, "data": {}} * @return_param id integer id * @return_param name string 名 * @return_param account string 账号 * @return_param phone string 手机号 * @return_param company string 公司 * @return_param cityId integer 城市ID * @return_param provinceId integer 省ID * @return_param deadline string 到期时间 * @return_param pwd string 密码 * @return_param type integer 1审定核证机构2资源减排所有方3两个都选 * @return_param cityName string 城市名称 * @return_param provinceName string 省名称 * @return_param lastTime string 上次登录时间 * @return_param createdAt date - * @return_param updatedAt date - * @remark * @number */ router.get('/:id', async (req, res) => { let data = await Business.findOne({ where: req.params }); data = await fill(data, fillSingle); res.send(onSuccess(data)); }); /** * showdoc * @catalog v1/后台/商家 * @title 商家添加 * @description * @method POST * @url /master/business/ * @param name 1 string 名 * @param account 1 string 账号 * @param phone 1 string 手机号 * @param company 0 string 公司 * @param cityId 1 integer 城市ID * @param provinceId 1 integer 省ID * @param deadline 0 string 到期时间 * @param pwd 1 string 密码 * @param type 1 integer 1审定核证机构2资源减排所有方3两个都选 * @return {"code":0, "data": {}} * @remark * @number */ router.post( '/', check([body(['name', 'phone', 'cityId', 'provinceId', 'pwd']).notEmpty()]), async (req, res) => { const { pwd, account, phone } = req.body; const count = await Business.count({ where: { [Op.or]: [{ phone }, { account }] } }); if (count) { return res.send(onError('账号或手机号重复')); } if (pwd.length < 6) { return res.send(onError('密码不能少于6位')); } pwd && (req.body.pwd = md5(pwd)); const data = await Business.create(req.body); res.send(onSuccess(data)); } ); /** * showdoc * @catalog v1/后台/商家 * @title 重置密码 * @description 重置密码接口 * @method PUT * @url /master/business/pwd/:id * @param :id 1 STRING 详情ID * @param pwd 1 string 密码 * @return {"code":0, "msg": "修改成功"} * @remark * @number */ router.put('/pwd/:id', async (req, res) => { const { pwd } = req.body; if (pwd.length < 6) { return res.send(onError('密码不能少于6位')); } pwd && (req.body.pwd = md5(pwd)); const data = await Business.update(req.body, { where: req.params, limit: 1 }); res.send(onSuccess(null, '修改成功')); }); /** * showdoc * @catalog v1/后台/商家 * @title 商家修改 * @description * @method PUT * @url /master/business/:id * @param :id 1 STRING 详情ID * @param name 0 string 名 * @param account 0 string 账号 * @param phone 0 string 手机号 * @param company 0 string 公司 * @param cityId 0 integer 城市ID * @param provinceId 0 integer 省ID * @param deadline 0 string 到期时间 * @param pwd 0 string 密码 * @param type 0 integer 1审定核证机构2资源减排所有方3两个都选 * @return {"code":0, "msg": "修改成功"} * @remark * @number */ router.put('/:id', async (req, res) => { const { pwd, phone, account } = req.body; if (pwd && pwd.length < 6) { return res.send(onError('密码不能少于6位')); } const count = await Business.count({ where: { [Op.or]: [{ phone }, { account }], id: { [Op.ne]: req.params.id } }, }); if (count) { return res.send(onError('账号或手机号重复')); } pwd && (req.body.pwd = md5(pwd)); const data = await Business.update(req.body, { where: req.params, limit: 1 }); res.send(onSuccess(null, '修改成功')); }); /** * showdoc * @catalog v1/后台/商家 * @title 商家删除 * @description * @method DELETE * @url /master/business/:id * @param :id 1 STRING 详情ID * @return {"code":0, "msg": "删除成功"} * @remark * @number */ router.delete('/:id', async (req, res) => { const data = await Business.destroy({ where: req.params, limit: 1 }); res.send(onSuccess(null, '删除成功')); }); module.exports = router;