feat: 新增微信小程序登录和手机号绑定功能

This commit is contained in:
Ray.Hao
2026-03-05 07:45:07 +08:00
parent a8b7177a0a
commit 67ada6263b
4 changed files with 801 additions and 393 deletions

View File

@@ -1,5 +1,10 @@
import { defineStore } from "pinia";
import AuthAPI, { type LoginData, type SmsLoginData } from "@/api/auth";
import AuthAPI, {
type LoginData,
type SmsLoginData,
type WechatMiniappPhoneLoginData,
type WechatMiniappBindMobileData,
} from "@/api/auth";
import UserAPI, { type UserInfo } from "@/api/user";
import { setAccessToken, clearTokens } from "@/utils/auth";
import { getUserInfo, setUserInfo } from "@/utils/storage";
@@ -24,6 +29,7 @@ export const useUserStore = defineStore("user", () => {
});
};
// 短信验证码登录
const loginBySms = (data: SmsLoginData) => {
return new Promise((resolve, reject) => {
AuthAPI.loginBySms(data)
@@ -38,6 +44,53 @@ export const useUserStore = defineStore("user", () => {
});
};
// 微信小程序登录(个人小程序)
const loginByWechatMiniapp = (code: string) => {
return new Promise((resolve, reject) => {
AuthAPI.wechatMiniappLogin(code)
.then((data) => {
if (data.accessToken) {
setAccessToken(data.accessToken);
}
resolve(data);
})
.catch((error) => {
console.error("微信小程序登录失败", error);
reject(error);
});
});
};
// 微信小程序一键登录(企业小程序)
const loginByWechatMiniappPhone = (data: WechatMiniappPhoneLoginData) => {
return new Promise((resolve, reject) => {
AuthAPI.wechatMiniappPhoneLogin(data)
.then((data) => {
setAccessToken(data.accessToken);
resolve(data);
})
.catch((error) => {
console.error("微信小程序一键登录失败", error);
reject(error);
});
});
};
// 微信小程序绑定手机号
const bindMobileForWechatMiniapp = (data: WechatMiniappBindMobileData) => {
return new Promise((resolve, reject) => {
AuthAPI.wechatMiniappBindMobile(data)
.then((data) => {
setAccessToken(data.accessToken);
resolve(data);
})
.catch((error) => {
console.error("绑定手机号失败", error);
reject(error);
});
});
};
// 检查会话状态
const checkSession = (): Promise<boolean> => {
return new Promise((resolve) => {
@@ -70,25 +123,20 @@ export const useUserStore = defineStore("user", () => {
// 登出
const logout = async () => {
try {
await AuthAPI.logout(); // 调用后台注销接口
await AuthAPI.logout();
} catch (error) {
console.error("登出失败", error);
} finally {
clearTokens(); // 清除本地的 token
Storage.remove(USER_INFO_KEY); // 清除用户信息缓存
userInfo.value = undefined; // 清空用户信息
// 跳转到登录页面
uni.reLaunch({
url: "/pages/login/index",
});
clearTokens();
Storage.remove(USER_INFO_KEY);
userInfo.value = undefined;
uni.reLaunch({ url: "/pages/login/index" });
}
};
// 判断用户信息是否完整
const isUserInfoComplete = (): boolean => {
if (!userInfo.value) return false;
return !!(userInfo.value.nickname && userInfo.value.avatar);
};
@@ -96,6 +144,9 @@ export const useUserStore = defineStore("user", () => {
userInfo,
login,
loginBySms,
loginByWechatMiniapp,
loginByWechatMiniappPhone,
bindMobileForWechatMiniapp,
logout,
getInfo,
checkSession,