_index.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. const _ = require('lodash');
  2. const moment = require('moment');
  3. const jwt = require('jsonwebtoken');
  4. const express = require('express');
  5. const { body } = require('express-validator');
  6. const paramCheck = require('../../../middleware/check');
  7. const { getToken } = require('../../../utils/qiniu');
  8. const { setCookie, md5, clearCookie, onSuccess, onError } = require('../../../utils');
  9. const { jwtSecretBusin } = require('../../../config');
  10. const Business = require('../../../db/models/business');
  11. const { smsCode } = require('../../../models/page');
  12. const redis = require('../../../utils/redis');
  13. const router = express.Router();
  14. /**
  15. * showdoc
  16. * @catalog v1/商家/登陆相关
  17. * @title 登录
  18. * @description 登录接口
  19. * @method POST
  20. * @url /business/login
  21. * @param account 1 string 账号
  22. * @param password 1 string 密码
  23. * @return
  24. * @remark
  25. * @number
  26. */
  27. // 登录
  28. router.post(
  29. '/login',
  30. paramCheck([body(['account', 'password']).isString()]),
  31. async (req, res, next) => {
  32. const { account, password } = req.body;
  33. const busItem = await Business.findOne({
  34. where: {
  35. account,
  36. },
  37. });
  38. if (!busItem) {
  39. return res.send(onError('您还没有开通账号,请联系我们申请开通'));
  40. }
  41. const data = await Business.findOne({
  42. where: {
  43. account,
  44. pwd: md5(password),
  45. },
  46. });
  47. if (!data || !data.id) {
  48. return res.send(onError('密码输入错误,请重试'));
  49. }
  50. if (data.deadline !== '' && moment().diff(data.deadline) > 0) {
  51. return res.send(onError('商家到期'));
  52. }
  53. req.session.business = data;
  54. // setCookie({
  55. // res,
  56. // key: 'token',
  57. // value: data,
  58. // domain: '',
  59. // });
  60. await Business.update(
  61. { lastTime: moment().format('YYYY-MM-DD HH:mm:ss') },
  62. { where: { id: data.id } }
  63. );
  64. return res.send(onSuccess(data));
  65. }
  66. );
  67. /**
  68. * showdoc
  69. * @catalog v1/商家/短信登录
  70. * @title 短信登录
  71. * @description 短信登录接口
  72. * @method POST
  73. * @url /business/phone_login/
  74. * @param phone 1 string 联系方式
  75. * @param code 1 string 短信验证码
  76. * @return {"code":0, "data": "增加成功"}
  77. * @remark
  78. * @number
  79. */
  80. router.post(
  81. '/phone_login',
  82. paramCheck([body(['phone']).isString(), body(['code']).isInt()]),
  83. async (req, res) => {
  84. const { phone, code } = req.body;
  85. const data = await Business.findOne({
  86. where: {
  87. phone,
  88. },
  89. });
  90. if (!data || !data.id) {
  91. return res.send(onError('您还没有开通账号,请联系我们申请开通'));
  92. }
  93. // 判断验证码是否正确
  94. const codeItem = await redis.get(`smsCode:${phone}`);
  95. if (code !== codeItem) {
  96. return res.send(onError('验证码不正确'));
  97. }
  98. // 正确后删除redis中的验证码
  99. await redis.del(`smsCode:${phone}`);
  100. req.session.business = data;
  101. // setCookie({
  102. // res,
  103. // key: 'token',
  104. // value: data,
  105. // domain: '',
  106. // });
  107. await Business.update(
  108. { lastTime: moment().format('YYYY-MM-DD HH:mm:ss') },
  109. { where: { id: data.id } }
  110. );
  111. return res.send(onSuccess(data));
  112. }
  113. );
  114. /**
  115. * showdoc
  116. * @catalog v1/商家/短信登录
  117. * @title 短信验证码
  118. * @description 短信验证码接口
  119. * @method POST
  120. * @url /business/sms
  121. * @param phone 1 string 手机号
  122. * @return {"code":0, "data": "发送成功"}
  123. * @remark
  124. * @number
  125. */
  126. router.post('/sms', paramCheck([body(['phone']).notEmpty()]), async (req, res) => {
  127. const data = await Business.findOne({
  128. where: {
  129. phone: req.body.phone,
  130. },
  131. });
  132. if (!data || !data.id) {
  133. return res.send(onError('您还没有开通账号,请联系我们申请开通'));
  134. }
  135. const info = await smsCode(req.body);
  136. res.send(info);
  137. });
  138. /**
  139. * showdoc
  140. * @catalog v1/商家/登陆相关
  141. * @title 退出登录
  142. * @description 退出登录接口
  143. * @method GET
  144. * @url /business/signout
  145. * @return
  146. * @remark
  147. * @number
  148. */
  149. // 登出
  150. router.get('/signout', async (req, res) => {
  151. // clearCookie(res, 'token');
  152. req.session.destroy(async err => {
  153. err && console.error(err, 'err');
  154. // res.redirect('/business/login');
  155. });
  156. // return res.send(onSuccess(null, '退出成功'));
  157. return res.redirect('/');
  158. });
  159. /**
  160. * showdoc
  161. * @catalog v1/商家/登陆相关
  162. * @title 个人信息
  163. * @description 个人信息接口
  164. * @method GET
  165. * @url /business/my
  166. * @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":"项目经理"}}
  167. * @remark
  168. * @number
  169. */
  170. router.get('/my', async (req, res) => {
  171. const data = await Business.findOne({
  172. where: { id: req.business.id },
  173. });
  174. res.send(onSuccess(data));
  175. });
  176. /**
  177. * showdoc
  178. * @catalog v1/商家/登陆相关
  179. * @title 修改该密码
  180. * @description 修改密码接口
  181. * @method PUT
  182. * @url /business/pwd/
  183. * @param npwd 1 string 新密码
  184. * @param pwd 1 string 密码
  185. * @return {"code":0, "msg": "修改成功"}
  186. * @remark
  187. * @number
  188. */
  189. router.put('/pwd', paramCheck([body(['npwd', 'pwd']).isString()]), async (req, res) => {
  190. const { pwd, npwd } = req.body;
  191. const bItem = await Business.findOne({ where: { id: req.business.id, pwd: md5(pwd) } });
  192. if (!bItem) {
  193. res.send(onError('密码错误'));
  194. }
  195. req.body.pwd = md5(npwd);
  196. const data = await Business.update(_.pick(req.body, ['pwd']), {
  197. where: { id: req.business.id },
  198. limit: 1,
  199. });
  200. res.send(onSuccess(null, '修改成功'));
  201. });
  202. module.exports = router;