login.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import UserApi from "../apis/user"
  2. import { saveToken, saveUserInfo } from './storage'
  3. import EventEmitter from './eventEmitter'
  4. const app = getApp()
  5. function wxLogin() {
  6. return new Promise((resovle, reject) => {
  7. wx.login({
  8. success(res) {
  9. resovle(res.code)
  10. },
  11. fail(err) {
  12. wx.showModal({
  13. title: "登录失败",
  14. content: "网络异常,请重试",
  15. })
  16. reject(err)
  17. },
  18. })
  19. })
  20. }
  21. function checkSession() {
  22. return new Promise((resolve, reject) => {
  23. wx.checkSession({
  24. success: (res) => {
  25. resolve(res)
  26. },
  27. fail(err) {
  28. reject(err)
  29. },
  30. })
  31. })
  32. }
  33. function loginByPhone(data, isAgency) {
  34. const LoginApi = UserApi.loginByPhoneCode
  35. return LoginApi(data).then(res => {
  36. const data = res.data
  37. data.user = data.guide
  38. data.user.user_id = data.user.viewerId
  39. saveToken(data.token)
  40. saveUserInfo(data.user)
  41. app.globalData.token = data.token
  42. app.globalData.userinfo = data.user
  43. EventEmitter.emit('login')
  44. return res
  45. })
  46. }
  47. function tips (res) {
  48. if (res.data.code == 3032) {
  49. wx.showToast({
  50. title: '经纪人未注册,请联系管理员',
  51. icon: 'none',
  52. duration: 2000,
  53. })
  54. return
  55. }
  56. if (res.data.code != 3008) {
  57. wx.showToast({
  58. title: res.data.msg,
  59. icon: 'none',
  60. duration: 2000,
  61. })
  62. return
  63. }
  64. }
  65. export function loginFn(phone_data, code, isAgency) {
  66. const { encryptedData, iv, rawData, signature } = phone_data.detail
  67. if (!encryptedData || !iv) {
  68. return new Promise((_, reject) => reject())
  69. }
  70. return new Promise((resolve, reject) => {
  71. checkSession()
  72. .then(() => {
  73. return loginByPhone({ phone_num: encryptedData, iv, wx_code: code, rawData, signature }, isAgency).then(res => {
  74. resolve(res)
  75. })
  76. })
  77. .catch((err) => {
  78. // 登录失败可能是code失效,故重新wx.login重新获取code
  79. tips(err)
  80. wxLogin().then((code) => {
  81. loginByPhone({ phone_num: encryptedData, iv, wx_code: code }, isAgency).then(res => {
  82. resolve(res)
  83. }).catch(err => {
  84. tips(err)
  85. })
  86. })
  87. })
  88. })
  89. }
  90. export function loginByUserInfo (data, code) {
  91. data.wx_code = code
  92. data.phone_num = ''
  93. return UserApi.loginByUserInfo(data).then(res => {
  94. data = res.data
  95. data.viewer.user_id = data.viewer.viewerId
  96. saveToken(data.token)
  97. saveUserInfo(data.viewer)
  98. app.globalData.token = data.token
  99. app.globalData.userinfo = data.viewer
  100. EventEmitter.emit('login')
  101. return res
  102. }).catch(err => {
  103. tips(err)
  104. })
  105. }