vue-mixin.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. import Vue from 'vue'
  2. import Storage from '@/utils/storage'
  3. import * as API_Connect from '@/api/connect'
  4. import 'wx-promise-pro'
  5. import store from '@/store'
  6. const mp_type = 'miniprogram_uu_sleep'
  7. const mixin = {
  8. data() {
  9. return {
  10. // 项目名称
  11. projectName: 'UU睡眠',
  12. // 是否已经授权 默认false
  13. hasAuth: false,
  14. }
  15. },
  16. onLoad(query) {
  17. },
  18. /** 解决在真机上下拉不回弹 */
  19. onPullDownRefresh() {
  20. wx.stopPullDownRefresh()
  21. },
  22. onShareAppMessage(){
  23. },
  24. methods: {
  25. async checkHasLogin() {
  26. const {
  27. code
  28. } = await wx.pro.login({
  29. timeout: 8000
  30. })
  31. const uuid = Storage.getItem('uuid')
  32. let result = await API_Connect.checkHasLogin({
  33. code,
  34. uuid,
  35. mp_type
  36. })
  37. // console.log('是否登录返回=', result)
  38. let _this = this
  39. if (result.autologin === 'yes') {
  40. _this.hasAuth = true
  41. Storage.setItem('haslogin', { uid: result.uid, loginType: 'auto' })
  42. _this.disposeResult(result)
  43. } else {
  44. uni.reLaunch({
  45. url:'/pages/auth/auth'
  46. })
  47. }
  48. },
  49. // 处理result
  50. disposeResult(result) {
  51. const {
  52. access_token,
  53. refresh_token,
  54. access_token_timeout,
  55. refresh_token_timeout,
  56. uid,
  57. no_union_id
  58. } = result
  59. // 如果登录成功 存储token(access_token refresh_token) uid 获取用户数据
  60. if (access_token && refresh_token && uid) {
  61. const now=Math.round(new Date()/1000)
  62. store.dispatch('setAccessTokenAction', access_token)
  63. store.dispatch('setRefreshTokenAction', refresh_token)
  64. Storage.setItem('uid', uid)
  65. Storage.setItem('access_token_timeout',now+access_token_timeout-60)
  66. Storage.setItem('refresh_token_timeout',now+refresh_token_timeout-60)
  67. Storage.setItem('haslogin', { uid: result.uid, loginType: 'auto' })
  68. // this.autoBindPart()
  69. store.dispatch('getUserDataAction').then(()=>{
  70. let page = Storage.getItem('goPage')
  71. console.log('mixin-goPage===', page);
  72. uni.switchTab({
  73. url: '/pages/home/index'
  74. })
  75. })
  76. } else if (no_union_id) {
  77. Storage.setItem('haslogin', { loginType: 'hand_movement' })
  78. uni.reLaunch({
  79. url:'/pages/auth/auth'
  80. })
  81. } else {
  82. uni.reLaunch({
  83. url:'/pages/login/index'
  84. })
  85. }
  86. },
  87. async toAutoLogin() {
  88. this.hasAuth = true
  89. // 检测是否登录 如果已经登录 或者登录结果为账户未发现 则不再进行自动登录
  90. // if (Storage.getItem('refresh_token') || Storage.getItem('login_result') === 'account_not_found') return
  91. let final = {}
  92. const {
  93. code
  94. } = await wx.pro.login({
  95. timeout: 8000
  96. })
  97. const uuid = Storage.getItem('uuid')
  98. try {
  99. let result = await API_Connect.loginByAuto({
  100. code,
  101. uuid,
  102. mp_type
  103. })
  104. if (result.reson === 'unionid_not_found') { // 如果已经进行过用户授权但是没有获取到unionID
  105. let {
  106. encryptedData,
  107. iv
  108. } = await wx.pro.getUserInfo({
  109. withCredentials: true,
  110. lang: 'zh_CN'
  111. })
  112. final = await API_Connect.accessUnionID({
  113. code,
  114. uuid,
  115. encrypted_data: encryptedData,
  116. iv
  117. })
  118. }
  119. if(result.reson === 'account_not_found' || final.reson === 'account_not_found'){ //没有绑定账号 跳到登陆页面
  120. uni.reLaunch({
  121. url:'/pages/login/index'
  122. })
  123. }
  124. Storage.setItem('login_result', result.reson)
  125. Storage.setItem('haslogin', { loginType: 'hand_movement' })
  126. this.disposeResult(result)
  127. } catch (e) {
  128. Storage.setItem('login_result', false)
  129. if (e.response.data.code === 'E133') {
  130. uni.redirectTo({
  131. url: '/pages/home/index'
  132. })
  133. this.hasAuth = false
  134. Storage.removeItem('uuid')
  135. }
  136. }
  137. },
  138. }
  139. }
  140. Vue.prototype.$toAutoLogin = mixin.methods.toAutoLogin
  141. Vue.prototype.$checkHasLogin = mixin.methods.checkHasLogin
  142. export default mixin