vue-mixin.js 4.1 KB

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