routine.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  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 util from '@/utils/util'
  15. import { STATE_R_KEY, USER_INFO, EXPIRES_TIME, LOGIN_STATUS} from './../config/cache';
  16. // #ifdef MP
  17. import {base64src} from "../utils/base64src";
  18. import {mpQrcode} from "../api/api";
  19. // #endif
  20. class Routine
  21. {
  22. constructor()
  23. {
  24. this.scopeUserInfo = 'scope.userInfo';
  25. }
  26. async getUserCode(){
  27. let isAuth = await this.isAuth(), code = '' ;
  28. if(isAuth)
  29. code = await this.getCode();
  30. return code;
  31. }
  32. /**
  33. * 小程序基础库版本号比较
  34. */
  35. compareVersion(v1, v2) {
  36. v1 = v1.split('.')
  37. v2 = v2.split('.')
  38. const len = Math.max(v1.length, v2.length)
  39. while (v1.length < len) {
  40. v1.push('0')
  41. }
  42. while (v2.length < len) {
  43. v2.push('0')
  44. }
  45. for (let i = 0; i < len; i++) {
  46. const num1 = parseInt(v1[i])
  47. const num2 = parseInt(v2[i])
  48. if (num1 > num2) {
  49. return 1
  50. } else if (num1 < num2) {
  51. return -1
  52. }
  53. }
  54. return 0
  55. }
  56. /**
  57. * 获取用户信息
  58. */
  59. getUserProfile(){
  60. let that = this , code = this.getUserCode();
  61. return new Promise( (resolve,reject) => {
  62. uni.getUserProfile({
  63. lang: 'zh_CN',
  64. desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
  65. success(user) {
  66. if(code) user.code = code;
  67. resolve({userInfo:user,islogin:false});
  68. },
  69. fail(res){
  70. reject(res);
  71. }
  72. })
  73. })
  74. }
  75. /**
  76. * 获取用户信息
  77. */
  78. authorize()
  79. {
  80. let that = this;
  81. return new Promise((resolve,reject)=>{
  82. if(checkLogin())
  83. return resolve({
  84. userInfo:Cache.get(USER_INFO,true),
  85. islogin:true,
  86. });
  87. uni.authorize({
  88. scope: that.scopeUserInfo,
  89. success() {
  90. resolve({islogin:false});
  91. },
  92. fail(res){
  93. reject(res);
  94. }
  95. })
  96. })
  97. }
  98. async getCode(){
  99. let provider = await this.getProvider();
  100. return new Promise((resolve,reject)=>{
  101. uni.login({
  102. provider:provider,
  103. success(res) {
  104. if (res.code) Cache.set(STATE_R_KEY, res.code ,10800);
  105. return resolve(res.code);
  106. },
  107. fail(){
  108. return reject(null);
  109. }
  110. })
  111. })
  112. }
  113. /**
  114. * 获取服务供应商
  115. */
  116. getProvider()
  117. {
  118. return new Promise((resolve,reject)=>{
  119. uni.getProvider({
  120. service:'oauth',
  121. success(res) {
  122. resolve(res.provider);
  123. },
  124. fail() {
  125. resolve(false);
  126. }
  127. });
  128. });
  129. }
  130. /**
  131. * 是否授权
  132. */
  133. isAuth(){
  134. let that = this;
  135. return new Promise((resolve,reject)=>{
  136. uni.getSetting({
  137. success(res) {
  138. if (!res.authSetting[that.scopeUserInfo]) {
  139. resolve(true)
  140. } else {
  141. resolve(true);
  142. }
  143. },
  144. fail(){
  145. resolve(false);
  146. }
  147. });
  148. });
  149. }
  150. /**
  151. * 小程序登录
  152. */
  153. authUserInfo(data)
  154. {
  155. return new Promise((resolve, reject)=>{
  156. login(data).then(res=>{
  157. if(res.data.type==='login'){
  158. store.commit('LOGIN', {
  159. token: res.data.token
  160. });
  161. store.commit("SETUID", res.data.id);
  162. }
  163. return resolve(res);
  164. }).catch(res=>{
  165. return reject(res);
  166. })
  167. })
  168. }
  169. // 小程序分销二维码
  170. getQrcode() {
  171. let data = {
  172. scene: 'id=0&sd='+Cache.get('UID'),
  173. page: 'pages/index/index'
  174. }
  175. mpQrcode(data).then(res => {
  176. base64src(res.data.code, Date.now(), res => {
  177. Cache.set('wechatQRcode',res)
  178. });
  179. }).catch(err => {
  180. util.Tips({
  181. title: err
  182. });
  183. });
  184. }
  185. }
  186. export default new Routine();