routine.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. import store from '../store';
  2. import { checkLogin } from './login';
  3. import Cache from '../utils/cache';
  4. import { STATE_R_KEY, USER_INFO, OPENID} from './../config/cache';
  5. import * as AuthApi from "@/api/member/auth";
  6. import * as BrokerageAPI from '@/api/trade/brokerage.js'
  7. class Routine
  8. {
  9. constructor()
  10. {
  11. this.scopeUserInfo = 'scope.userInfo';
  12. }
  13. async getUserCode(){
  14. let isAuth = await this.isAuth(), code = '' ;
  15. if(isAuth)
  16. code = await this.getCode();
  17. return code;
  18. }
  19. /**
  20. * 获取用户信息
  21. */
  22. getUserProfile(){
  23. let that = this , code = this.getUserCode();
  24. return new Promise( (resolve,reject) => {
  25. uni.getUserProfile({
  26. lang: 'zh_CN',
  27. desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
  28. success(user) {
  29. if(code) user.code = code;
  30. resolve({userInfo:user,islogin:false});
  31. },
  32. fail(res){
  33. reject(res);
  34. }
  35. })
  36. })
  37. }
  38. /**
  39. * 获取用户信息
  40. */
  41. authorize()
  42. {
  43. let that = this;
  44. return new Promise((resolve,reject)=>{
  45. if(checkLogin())
  46. return resolve({
  47. userInfo:Cache.get(USER_INFO,true),
  48. islogin:true,
  49. });
  50. uni.authorize({
  51. scope: that.scopeUserInfo,
  52. success() {
  53. resolve({islogin:false});
  54. },
  55. fail(res){
  56. reject(res);
  57. }
  58. })
  59. })
  60. }
  61. async getCode(){
  62. let provider = await this.getProvider();
  63. return new Promise((resolve,reject)=>{
  64. uni.login({
  65. provider:provider,
  66. success(res) {
  67. if (res.code) {
  68. Cache.set(STATE_R_KEY, res.code ,10800);
  69. }
  70. return resolve(res.code);
  71. },
  72. fail(){
  73. return reject(null);
  74. }
  75. })
  76. })
  77. }
  78. /**
  79. * 获取服务供应商
  80. */
  81. getProvider()
  82. {
  83. return new Promise((resolve,reject)=>{
  84. uni.getProvider({
  85. service:'oauth',
  86. success(res) {
  87. resolve(res.provider);
  88. },
  89. fail() {
  90. resolve(false);
  91. }
  92. });
  93. });
  94. }
  95. /**
  96. * 是否授权
  97. */
  98. isAuth(){
  99. let that = this;
  100. return new Promise((resolve,reject)=>{
  101. uni.getSetting({
  102. success(res) {
  103. if (!res.authSetting[that.scopeUserInfo]) {
  104. resolve(true)
  105. } else {
  106. resolve(true);
  107. }
  108. },
  109. fail(){
  110. resolve(false);
  111. }
  112. });
  113. });
  114. }
  115. /**
  116. * 微信小程序静默登录
  117. *
  118. * @param code 授权码
  119. * @param spread 推广员编号
  120. */
  121. authUserInfo(code, spread) {
  122. return new Promise((resolve, reject)=>{
  123. // 34 的原因,它是小程序登录的社交类型
  124. AuthApi.socialLogin(34, code, 'default').then(res => {
  125. if (res.code !== 0) {
  126. return;
  127. }
  128. // 设置访问令牌
  129. store.commit('LOGIN', {
  130. token: res.data.accessToken
  131. });
  132. store.commit("SETUID", res.data.userId);
  133. store.commit("OPENID", res.data.openid);
  134. // 绑定推广员
  135. if (spread > 0) {
  136. BrokerageAPI.bindBrokerageUser(spread)
  137. }
  138. return resolve(res);
  139. }).catch(res=>{
  140. return reject(res);
  141. })
  142. })
  143. }
  144. }
  145. export default new Routine();