| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- import { useAppStore } from "@/stores/app";
- import { checkLogin } from "./login";
- import { login } from "../api/public";
- import Cache from "../utils/cache";
- import { STATE_R_KEY, USER_INFO, EXPIRES_TIME } from "@/config/cache";
- // const appStore = useAppStore() // 在这里使用会报错,Pinia在main.js还未挂载
- class Routine {
- constructor() {
- this.scopeUserInfo = "scope.userInfo";
- }
- async getUserCode() {
- let isAuth = await this.isAuth(),
- code = "";
- if (isAuth) code = await this.getCode();
- return code;
- }
- /**
- * 获取用户信息
- */
- getUserProfile() {
- let code = this.getUserCode();
- return new Promise((resolve, reject) => {
- uni.getUserProfile({
- lang: "zh_CN",
- desc: "用于完善会员资料", // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
- success(user) {
- if (code) user.code = code;
- resolve({ userInfo: user, islogin: false });
- },
- fail(res) {
- reject(res);
- },
- });
- });
- }
- /**
- * 获取用户信息
- */
- authorize() {
- return new Promise((resolve, reject) => {
- if (checkLogin())
- return resolve({
- userInfo: Cache.get(USER_INFO, true),
- islogin: true,
- });
- uni.authorize({
- scope: this.scopeUserInfo,
- success() {
- resolve({ islogin: false });
- },
- fail(res) {
- reject(res);
- },
- });
- });
- }
- async getCode() {
- let provider = await this.getProvider();
- return new Promise((resolve, reject) => {
- uni.login({
- provider: provider,
- success(res) {
- if (res.code) Cache.set(STATE_R_KEY, res.code, 10800);
- return resolve(res.code);
- },
- fail() {
- return reject(null);
- },
- });
- });
- }
- /**
- * 获取服务供应商
- */
- getProvider() {
- return new Promise((resolve, reject) => {
- uni.getProvider({
- service: "oauth",
- success(res) {
- resolve(res.provider);
- },
- fail() {
- resolve(false);
- },
- });
- });
- }
- /**
- * 是否授权
- */
- isAuth() {
- return new Promise((resolve, reject) => {
- uni.getSetting({
- success(res) {
- if (!res.authSetting[this.scopeUserInfo]) {
- resolve(true);
- } else {
- resolve(true);
- }
- },
- fail() {
- resolve(false);
- },
- });
- });
- }
- /**
- * 小程序登录
- */
- authUserInfo(code, data) {
- return new Promise((resolve, reject) => {
- login(code, data)
- .then((res) => {
- if (res.data.type === "login") {
- const appStore = useAppStore();
- appStore.LOGIN({ token: res.data.token });
- appStore.SETUID(res.data.uid);
- // 保存过期时间(7天后过期)
- const expiresTime =
- Math.round(new Date() / 1000) + 7 * 24 * 60 * 60;
- Cache.set(EXPIRES_TIME, expiresTime, 0);
- }
- return resolve(res);
- })
- .catch((res) => {
- return reject(res);
- });
- });
- }
- }
- export default new Routine();
|