vue-mixin.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  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. const {
  46. access_token,
  47. refresh_token,
  48. access_token_timeout,
  49. refresh_token_timeout,
  50. uid,
  51. no_union_id
  52. } = result
  53. // 如果登录成功 存储token(access_token refresh_token) uid 获取用户数据
  54. if (access_token && refresh_token && uid) {
  55. const now=Math.round(new Date()/1000)
  56. store.dispatch('setAccessTokenAction', access_token)
  57. store.dispatch('setRefreshTokenAction', refresh_token)
  58. Storage.setItem('uid', uid)
  59. Storage.setItem('access_token_timeout',now+access_token_timeout-60)
  60. Storage.setItem('refresh_token_timeout',now+refresh_token_timeout-60)
  61. Storage.setItem('haslogin', { uid: result.uid, loginType: 'auto' })
  62. // this.autoBindPart()
  63. store.dispatch('getUserDataAction').then(()=>{
  64. let page = Storage.getItem('goPage')
  65. console.log('mixin-goPage===', page);
  66. uni.switchTab({
  67. url: '/pages/tabBar/home'
  68. })
  69. })
  70. } else if (no_union_id) {
  71. Storage.setItem('haslogin', { loginType: 'hand_movement' })
  72. uni.reLaunch({
  73. url:'/pages/login/auth'
  74. })
  75. } else {
  76. uni.reLaunch({
  77. url:'/pages/login/index'
  78. })
  79. }
  80. } else {
  81. uni.showModal({
  82. title: '提示',
  83. content: "您还未登录,是否前往登录呢?",
  84. confirmText: "确定",
  85. showCancel: true,
  86. success: function(res) {
  87. if (res.confirm) {
  88. uni.reLaunch({
  89. url:'/pages/login/auth'
  90. })
  91. }
  92. }
  93. })
  94. }
  95. },
  96. // 处理result
  97. disposeResult(result) {
  98. const {
  99. access_token,
  100. refresh_token,
  101. access_token_timeout,
  102. refresh_token_timeout,
  103. uid,
  104. no_union_id
  105. } = result
  106. // 如果登录成功 存储token(access_token refresh_token) uid 获取用户数据
  107. if (access_token && refresh_token && uid) {
  108. const now=Math.round(new Date()/1000)
  109. store.dispatch('setAccessTokenAction', access_token)
  110. store.dispatch('setRefreshTokenAction', refresh_token)
  111. Storage.setItem('uid', uid)
  112. Storage.setItem('access_token_timeout',now+access_token_timeout-60)
  113. Storage.setItem('refresh_token_timeout',now+refresh_token_timeout-60)
  114. Storage.setItem('haslogin', { uid: result.uid, loginType: 'auto' })
  115. // this.autoBindPart()
  116. store.dispatch('getUserDataAction').then(()=>{
  117. let page = Storage.getItem('goPage')
  118. console.log('mixin-goPage===', page);
  119. uni.switchTab({
  120. url: '/pages/tabBar/home'
  121. })
  122. })
  123. } else if (no_union_id) {
  124. Storage.setItem('haslogin', { loginType: 'hand_movement' })
  125. uni.reLaunch({
  126. url:'/pages/login/auth'
  127. })
  128. } else {
  129. uni.reLaunch({
  130. url:'/pages/login/index'
  131. })
  132. }
  133. },
  134. async toAutoLogin() {
  135. this.hasAuth = true
  136. // 检测是否登录 如果已经登录 或者登录结果为账户未发现 则不再进行自动登录
  137. // if (Storage.getItem('refresh_token') || Storage.getItem('login_result') === 'account_not_found') return
  138. let final = {}
  139. const {
  140. code
  141. } = await wx.pro.login({
  142. timeout: 8000
  143. })
  144. const uuid = Storage.getItem('uuid')
  145. try {
  146. let result = await API_Connect.loginByAuto({
  147. code,
  148. uuid,
  149. mp_type
  150. })
  151. if (result.reson === 'unionid_not_found') { // 如果已经进行过用户授权但是没有获取到unionID
  152. let {
  153. encryptedData,
  154. iv
  155. } = await wx.pro.getUserInfo({
  156. withCredentials: true,
  157. lang: 'zh_CN'
  158. })
  159. final = await API_Connect.accessUnionID({
  160. code,
  161. uuid,
  162. encrypted_data: encryptedData,
  163. iv
  164. })
  165. }
  166. if(result.reson === 'account_not_found' || final.reson === 'account_not_found'){ //没有绑定账号 跳到登陆页面
  167. uni.reLaunch({
  168. url:'/pages/login/index'
  169. })
  170. }
  171. Storage.setItem('login_result', result.reson)
  172. Storage.setItem('haslogin', { loginType: 'hand_movement' })
  173. this.disposeResult(result)
  174. } catch (e) {
  175. Storage.setItem('login_result', false)
  176. if (e.response.data.code === 'E133') {
  177. uni.redirectTo({
  178. url: '/pages/tabBar/home'
  179. })
  180. this.hasAuth = false
  181. Storage.removeItem('uuid')
  182. }
  183. }
  184. },
  185. }
  186. }
  187. Vue.prototype.$toAutoLogin = mixin.methods.toAutoLogin
  188. Vue.prototype.$checkHasLogin = mixin.methods.checkHasLogin
  189. export default mixin