login.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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 = isAgency ? UserApi.loginByPhoneCodeAgency : UserApi.loginByPhoneCode
  35. return LoginApi(data).then(res => {
  36. const data = res.data
  37. data.user = data.user || data.agency
  38. data.user.user_id = data.user.user_id || data.user.agency_user_id
  39. saveToken(data.token)
  40. saveUserInfo(data.user)
  41. getApp().globalData.token = data.token
  42. getApp().globalData.userinfo = data.user
  43. EventEmitter.emit('login')
  44. return res
  45. })
  46. }
  47. function tips (res) {
  48. console.log(res)
  49. if (res.data.code == 3032) {
  50. wx.showToast({
  51. title: '经纪人未注册,请联系管理员',
  52. icon: 'none',
  53. duration: 2000,
  54. })
  55. return
  56. }
  57. if (res.data.code != 3008) {
  58. wx.showToast({
  59. title: res.data.msg,
  60. icon: 'none',
  61. duration: 2000,
  62. })
  63. return
  64. }
  65. }
  66. export default function Login(phone_data, code, isAgency) {
  67. const { encryptedData, iv } = phone_data.detail
  68. if (!encryptedData || !iv) {
  69. return new Promise((_, reject) => reject())
  70. }
  71. return new Promise((resolve, reject) => {
  72. checkSession()
  73. .then(() => {
  74. return loginByPhone({ phone_num: encryptedData, iv, wx_code: code }, isAgency).then(res => {
  75. resolve(res)
  76. })
  77. })
  78. .catch((err) => {
  79. // 登陆失败可能是code失效,故重新wx.login重新获取code
  80. tips(err)
  81. wxLogin().then((code) => {
  82. loginByPhone({ phone_num: encryptedData, iv, wx_code: code }, isAgency).then(res => {
  83. resolve(res)
  84. }).catch(err => {
  85. console.log(err, 'err')
  86. tips(err)
  87. })
  88. })
  89. })
  90. })
  91. }
  92. export async function loginByUserInfo () {
  93. wx.showLoading('登录中')
  94. return new Promise(async (resolve, reject) => {
  95. let code = await wxLogin()
  96. wx.getUserInfo({
  97. withCredentials: true,
  98. success (res) {
  99. console.log(res)
  100. res.wx_code = code
  101. UserApi.loginByUserInfo(res).then(loginRes => {
  102. const data = loginRes.data
  103. data.user = data.user || data.agency
  104. data.user.user_id = data.user.user_id || data.user.agency_user_id
  105. saveToken(data.token)
  106. saveUserInfo(data.user)
  107. getApp().globalData.token = data.token
  108. getApp().globalData.userinfo = data.user
  109. EventEmitter.emit('login')
  110. wx.hideLoading()
  111. resolve(res)
  112. })
  113. },
  114. fail (err) {
  115. wx.hideLoading()
  116. reject(err)
  117. }
  118. })
  119. })
  120. }