const _ = require('lodash'); const moment = require('moment'); const jwt = require('jsonwebtoken'); const express = require('express'); const { body } = require('express-validator'); const paramCheck = require('../../../middleware/check'); const { getToken } = require('../../../utils/qiniu'); const { setCookie, md5, clearCookie, onSuccess, onError } = require('../../../utils'); const { jwtSecretBusin } = require('../../../config'); const Business = require('../../../db/models/business'); const { smsCode } = require('../../../models/page'); const redis = require('../../../utils/redis'); const router = express.Router(); /** * showdoc * @catalog v1/商家/登陆相关 * @title 登录 * @description 登录接口 * @method POST * @url /business/login * @param account 1 string 账号 * @param password 1 string 密码 * @return * @remark * @number */ // 登录 router.post( '/login', paramCheck([body(['account', 'password']).isString()]), async (req, res, next) => { const { account, password } = req.body; const busItem = await Business.findOne({ where: { account, }, }); if (!busItem) { return res.send(onError('您还没有开通账号,请联系我们申请开通')); } const data = await Business.findOne({ where: { account, pwd: md5(password), }, }); if (!data || !data.id) { return res.send(onError('密码输入错误,请重试')); } if (data.deadline !== '' && moment().diff(data.deadline) > 0) { return res.send(onError('商家到期')); } req.session.business = data; // setCookie({ // res, // key: 'token', // value: data, // domain: '', // }); await Business.update( { lastTime: moment().format('YYYY-MM-DD HH:mm:ss') }, { where: { id: data.id } } ); return res.send(onSuccess(data)); } ); /** * showdoc * @catalog v1/商家/短信登录 * @title 短信登录 * @description 短信登录接口 * @method POST * @url /business/phone_login/ * @param phone 1 string 联系方式 * @param code 1 string 短信验证码 * @return {"code":0, "data": "增加成功"} * @remark * @number */ router.post( '/phone_login', paramCheck([body(['phone']).isString(), body(['code']).isInt()]), async (req, res) => { const { phone, code } = req.body; const data = await Business.findOne({ where: { phone, }, }); if (!data || !data.id) { return res.send(onError('您还没有开通账号,请联系我们申请开通')); } // 判断验证码是否正确 const codeItem = await redis.get(`smsCode:${phone}`); if (code !== codeItem) { return res.send(onError('验证码不正确')); } // 正确后删除redis中的验证码 await redis.del(`smsCode:${phone}`); req.session.business = data; // setCookie({ // res, // key: 'token', // value: data, // domain: '', // }); await Business.update( { lastTime: moment().format('YYYY-MM-DD HH:mm:ss') }, { where: { id: data.id } } ); return res.send(onSuccess(data)); } ); /** * showdoc * @catalog v1/商家/短信登录 * @title 短信验证码 * @description 短信验证码接口 * @method POST * @url /business/sms * @param phone 1 string 手机号 * @return {"code":0, "data": "发送成功"} * @remark * @number */ router.post('/sms', paramCheck([body(['phone']).notEmpty()]), async (req, res) => { const data = await Business.findOne({ where: { phone: req.body.phone, }, }); if (!data || !data.id) { return res.send(onError('您还没有开通账号,请联系我们申请开通')); } const info = await smsCode(req.body); res.send(info); }); /** * showdoc * @catalog v1/商家/登陆相关 * @title 退出登录 * @description 退出登录接口 * @method GET * @url /business/signout * @return * @remark * @number */ // 登出 router.get('/signout', async (req, res) => { // clearCookie(res, 'token'); req.session.destroy(async err => { err && console.error(err, 'err'); // res.redirect('/business/login'); }); // return res.send(onSuccess(null, '退出成功')); return res.redirect('/'); }); /** * showdoc * @catalog v1/商家/登陆相关 * @title 个人信息 * @description 个人信息接口 * @method GET * @url /business/my * @return {"code":0,"data":{"id":1000,"account":"admin111","name":"测试","roleId":1000,"img":"https://s4.360chief.com/bpp/5996773316732686.png","createdAt":"2022-06-13 11:07:11","roleName":"项目经理"}} * @remark * @number */ router.get('/my', async (req, res) => { const data = await Business.findOne({ where: { id: req.business.id }, }); res.send(onSuccess(data)); }); /** * showdoc * @catalog v1/商家/登陆相关 * @title 修改该密码 * @description 修改密码接口 * @method PUT * @url /business/pwd/ * @param npwd 1 string 新密码 * @param pwd 1 string 密码 * @return {"code":0, "msg": "修改成功"} * @remark * @number */ router.put('/pwd', paramCheck([body(['npwd', 'pwd']).isString()]), async (req, res) => { const { pwd, npwd } = req.body; const bItem = await Business.findOne({ where: { id: req.business.id, pwd: md5(pwd) } }); if (!bItem) { res.send(onError('密码错误')); } req.body.pwd = md5(npwd); const data = await Business.update(_.pick(req.body, ['pwd']), { where: { id: req.business.id }, limit: 1, }); res.send(onSuccess(null, '修改成功')); }); module.exports = router;