routine.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. import { useAppStore } from "@/stores/app";
  2. import { checkLogin } from "./login";
  3. import { login } from "../api/public";
  4. import Cache from "../utils/cache";
  5. import { STATE_R_KEY, USER_INFO, EXPIRES_TIME } from "@/config/cache";
  6. // const appStore = useAppStore() // 在这里使用会报错,Pinia在main.js还未挂载
  7. class Routine {
  8. constructor() {
  9. this.scopeUserInfo = "scope.userInfo";
  10. }
  11. async getUserCode() {
  12. let isAuth = await this.isAuth(),
  13. code = "";
  14. if (isAuth) code = await this.getCode();
  15. return code;
  16. }
  17. /**
  18. * 获取用户信息
  19. */
  20. getUserProfile() {
  21. let code = this.getUserCode();
  22. return new Promise((resolve, reject) => {
  23. uni.getUserProfile({
  24. lang: "zh_CN",
  25. desc: "用于完善会员资料", // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
  26. success(user) {
  27. if (code) user.code = code;
  28. resolve({ userInfo: user, islogin: false });
  29. },
  30. fail(res) {
  31. reject(res);
  32. },
  33. });
  34. });
  35. }
  36. /**
  37. * 获取用户信息
  38. */
  39. authorize() {
  40. return new Promise((resolve, reject) => {
  41. if (checkLogin())
  42. return resolve({
  43. userInfo: Cache.get(USER_INFO, true),
  44. islogin: true,
  45. });
  46. uni.authorize({
  47. scope: this.scopeUserInfo,
  48. success() {
  49. resolve({ islogin: false });
  50. },
  51. fail(res) {
  52. reject(res);
  53. },
  54. });
  55. });
  56. }
  57. async getCode() {
  58. let provider = await this.getProvider();
  59. return new Promise((resolve, reject) => {
  60. uni.login({
  61. provider: provider,
  62. success(res) {
  63. if (res.code) Cache.set(STATE_R_KEY, res.code, 10800);
  64. return resolve(res.code);
  65. },
  66. fail() {
  67. return reject(null);
  68. },
  69. });
  70. });
  71. }
  72. /**
  73. * 获取服务供应商
  74. */
  75. getProvider() {
  76. return new Promise((resolve, reject) => {
  77. uni.getProvider({
  78. service: "oauth",
  79. success(res) {
  80. resolve(res.provider);
  81. },
  82. fail() {
  83. resolve(false);
  84. },
  85. });
  86. });
  87. }
  88. /**
  89. * 是否授权
  90. */
  91. isAuth() {
  92. return new Promise((resolve, reject) => {
  93. uni.getSetting({
  94. success(res) {
  95. if (!res.authSetting[this.scopeUserInfo]) {
  96. resolve(true);
  97. } else {
  98. resolve(true);
  99. }
  100. },
  101. fail() {
  102. resolve(false);
  103. },
  104. });
  105. });
  106. }
  107. /**
  108. * 小程序登录
  109. */
  110. authUserInfo(code, data) {
  111. return new Promise((resolve, reject) => {
  112. login(code, data)
  113. .then((res) => {
  114. if (res.data.type === "login") {
  115. const appStore = useAppStore();
  116. appStore.LOGIN({ token: res.data.token });
  117. appStore.SETUID(res.data.uid);
  118. // 保存过期时间(7天后过期)
  119. const expiresTime =
  120. Math.round(new Date() / 1000) + 7 * 24 * 60 * 60;
  121. Cache.set(EXPIRES_TIME, expiresTime, 0);
  122. }
  123. return resolve(res);
  124. })
  125. .catch((res) => {
  126. return reject(res);
  127. });
  128. });
  129. }
  130. }
  131. export default new Routine();