profile_controller.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. 'use strict';
  2. /**
  3. * 账号相关控制器
  4. *
  5. * @author CaiAoLin
  6. * @date 2018/1/26
  7. * @version
  8. */
  9. module.exports = app => {
  10. class ProfileController extends app.BaseController {
  11. /**
  12. * 账号资料页面
  13. *
  14. * @param {Object} ctx - egg全局变量
  15. * @return {void}
  16. */
  17. async info(ctx) {
  18. // 获取当前用户数据
  19. const sessionUser = ctx.session.sessionUser;
  20. // 获取账号数据
  21. const accountData = await ctx.service.projectAccount.getDataByCondition({ id: sessionUser.accountId });
  22. // 获取基础数据的字段规则
  23. const baseRule = ctx.service.projectAccount.rule('profileBase');
  24. const baseJsValidator = await this.jsValidator.convert(baseRule).setSelector('#base-form').build();
  25. // 获取修改密码的字段规则
  26. const passwordRule = ctx.service.projectAccount.rule('modifyPassword');
  27. const passwordJsValidator = await this.jsValidator.convert(passwordRule).setSelector('#password-form').build();
  28. const renderData = {
  29. accountData,
  30. baseJsValidator,
  31. passwordJsValidator,
  32. };
  33. await this.layout('profile/info.ejs', renderData);
  34. }
  35. /**
  36. * 保存基本信息
  37. *
  38. * @param {Object} ctx - egg全局变量
  39. * @return {void}
  40. */
  41. async saveBase(ctx) {
  42. try {
  43. // 获取当前用户数据
  44. const sessionUser = ctx.session.sessionUser;
  45. // 获取基础数据的字段规则
  46. const baseRule = ctx.service.projectAccount.rule('profileBase');
  47. ctx.helper.validate(baseRule);
  48. const result = await ctx.service.projectAccount.save(ctx.request.body, sessionUser.accountId);
  49. if (!result) {
  50. throw '保存信息失败';
  51. }
  52. this.setMessage('修改成功', this.messageType.SUCCESS);
  53. } catch (error) {
  54. console.log(error);
  55. this.setMessage(error.toString(), this.messageType.ERROR);
  56. }
  57. ctx.redirect(ctx.request.headers.referer);
  58. }
  59. /**
  60. * 修改密码操作
  61. *
  62. * @param {Object} ctx - egg全局变量
  63. * @return {void}
  64. */
  65. async modifyPassword(ctx) {
  66. const password = ctx.request.body.password;
  67. const newPassword = ctx.request.body.new_password;
  68. try {
  69. const sessionUser = ctx.session.sessionUser;
  70. let accountId = sessionUser.accountId;
  71. accountId = parseInt(accountId);
  72. if (isNaN(accountId) || accountId <= 0) {
  73. throw '参数错误';
  74. }
  75. // 验证数据
  76. const passwordRule = ctx.service.projectAccount.rule('modifyPassword');
  77. ctx.helper.validate(passwordRule);
  78. const result = await ctx.service.projectAccount.modifyPassword(accountId, password, newPassword);
  79. if (!result) {
  80. throw '修改密码失败';
  81. }
  82. this.setMessage('修改密码成功', this.messageType.SUCCESS);
  83. } catch (error) {
  84. this.setMessage(error.toString(), this.messageType.ERROR);
  85. }
  86. ctx.redirect(ctx.request.headers.referer);
  87. }
  88. /**
  89. * 设置短信验证码
  90. *
  91. * @param {object} ctx - egg全局变量
  92. * @return {void}
  93. */
  94. async getCode(ctx) {
  95. const response = {
  96. err: 0,
  97. msg: '',
  98. };
  99. try {
  100. const sessionUser = ctx.session.sessionUser;
  101. const mobile = ctx.request.body.mobile;
  102. const rule = { mobile: { type: 'mobile', allowEmpty: false } };
  103. ctx.helper.validate(rule);
  104. const result = await ctx.service.projectAccount.setSMSCode(sessionUser.accountId, mobile);
  105. if (!result) {
  106. throw '获取验证码失败';
  107. }
  108. } catch (error) {
  109. response.err = 1;
  110. response.msg = error.toString();
  111. }
  112. ctx.body = response;
  113. }
  114. /**
  115. * 绑定认证手机
  116. *
  117. * @param {object} ctx - egg全局变量
  118. * @return {void}
  119. */
  120. async bindMobile(ctx) {
  121. try {
  122. const rule = ctx.service.projectAccount.rule('bindMobile');
  123. ctx.helper.validate(rule);
  124. const sessionUser = ctx.session.sessionUser;
  125. const result = await ctx.service.projectAccount.bindMobile(sessionUser.accountId, ctx.request.body);
  126. if (!result) {
  127. throw '绑定手机失败!';
  128. }
  129. this.setMessage('绑定成功', this.messageType.SUCCESS);
  130. } catch (error) {
  131. console.log(error);
  132. this.setMessage(error.toString(), this.messageType.ERROR);
  133. }
  134. ctx.redirect(ctx.request.headers.referer);
  135. }
  136. }
  137. return ProfileController;
  138. };