You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

179 lines
3.7 KiB

3 months ago
  1. // +----------------------------------------------------------------------
  2. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  3. // +----------------------------------------------------------------------
  4. // | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
  5. // +----------------------------------------------------------------------
  6. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  7. // +----------------------------------------------------------------------
  8. // | Author: CRMEB Team <admin@crmeb.com>
  9. // +----------------------------------------------------------------------
  10. import store from '../store';
  11. import { checkLogin } from './login';
  12. import { login } from '../api/public';
  13. import Cache from '../utils/cache';
  14. import { spread } from "@/api/user";
  15. import { STATE_R_KEY, USER_INFO, EXPIRES_TIME, LOGIN_STATUS} from './../config/cache';
  16. class Routine
  17. {
  18. constructor()
  19. {
  20. this.scopeUserInfo = 'scope.userInfo';
  21. }
  22. async getUserCode(){
  23. let isAuth = await this.isAuth(), code = '' ;
  24. if(isAuth)
  25. code = await this.getCode();
  26. return code;
  27. }
  28. /**
  29. * 小程序基础库版本号比较
  30. */
  31. compareVersion(v1, v2) {
  32. v1 = v1.split('.')
  33. v2 = v2.split('.')
  34. const len = Math.max(v1.length, v2.length)
  35. while (v1.length < len) {
  36. v1.push('0')
  37. }
  38. while (v2.length < len) {
  39. v2.push('0')
  40. }
  41. for (let i = 0; i < len; i++) {
  42. const num1 = parseInt(v1[i])
  43. const num2 = parseInt(v2[i])
  44. if (num1 > num2) {
  45. return 1
  46. } else if (num1 < num2) {
  47. return -1
  48. }
  49. }
  50. return 0
  51. }
  52. /**
  53. * 获取用户信息
  54. */
  55. getUserProfile(){
  56. let that = this , code = this.getUserCode();
  57. return new Promise( (resolve,reject) => {
  58. uni.getUserProfile({
  59. lang: 'zh_CN',
  60. desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
  61. success(user) {
  62. if(code) user.code = code;
  63. resolve({userInfo:user,islogin:false});
  64. },
  65. fail(res){
  66. reject(res);
  67. }
  68. })
  69. })
  70. }
  71. /**
  72. * 获取用户信息
  73. */
  74. authorize()
  75. {
  76. let that = this;
  77. return new Promise((resolve,reject)=>{
  78. if(checkLogin())
  79. return resolve({
  80. userInfo:Cache.get(USER_INFO,true),
  81. islogin:true,
  82. });
  83. uni.authorize({
  84. scope: that.scopeUserInfo,
  85. success() {
  86. resolve({islogin:false});
  87. },
  88. fail(res){
  89. reject(res);
  90. }
  91. })
  92. })
  93. }
  94. async getCode(){
  95. let provider = await this.getProvider();
  96. return new Promise((resolve,reject)=>{
  97. uni.login({
  98. provider:provider,
  99. success(res) {
  100. if (res.code) Cache.set(STATE_R_KEY, res.code ,10800);
  101. return resolve(res.code);
  102. },
  103. fail(){
  104. return reject(null);
  105. }
  106. })
  107. })
  108. }
  109. /**
  110. * 获取服务供应商
  111. */
  112. getProvider()
  113. {
  114. return new Promise((resolve,reject)=>{
  115. uni.getProvider({
  116. service:'oauth',
  117. success(res) {
  118. resolve(res.provider);
  119. },
  120. fail() {
  121. resolve(false);
  122. }
  123. });
  124. });
  125. }
  126. /**
  127. * 是否授权
  128. */
  129. isAuth(){
  130. let that = this;
  131. return new Promise((resolve,reject)=>{
  132. uni.getSetting({
  133. success(res) {
  134. if (!res.authSetting[that.scopeUserInfo]) {
  135. resolve(true)
  136. } else {
  137. resolve(true);
  138. }
  139. },
  140. fail(){
  141. resolve(false);
  142. }
  143. });
  144. });
  145. }
  146. /**
  147. * 小程序登录
  148. */
  149. authUserInfo(code,data)
  150. {
  151. return new Promise((resolve, reject)=>{
  152. login(code,data).then(res=>{
  153. if(res.data.type==='login'){
  154. store.commit('LOGIN', {
  155. token: res.data.token
  156. });
  157. store.commit("SETUID", res.data.uid);
  158. }
  159. return resolve(res);
  160. }).catch(res=>{
  161. return reject(res);
  162. })
  163. })
  164. }
  165. }
  166. export default new Routine();