feat: 大部分注册登录功能

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
2026-04-24 18:02:42 +08:00
parent 5ab74ad9dd
commit 5294528148
23 changed files with 858 additions and 167 deletions
+116
View File
@@ -0,0 +1,116 @@
import { toast } from "vue-sonner";
import type {
ICommonResponse,
IUserLoginData,
IUserLoginRequest,
IUserLogoutData,
IUserRegisterData,
IUserRegisterRequest
} from "#shared/types";
import { UserService } from "~/services";
export const useUserStore = defineStore("user", () => {
/** 用户登录状态 */
const isOnline = ref(false);
/** 用户信息 */
const userInfo = ref<IUserLoginData | null>(null);
/** 登录加载状态 */
const loginLoading = ref(false);
/** 注册加载状态 */
const registerLoading = ref(false);
/** 登出加载状态 */
const logoutLoading = ref(false);
/** 用户登录 */
const login = async (
request: IUserLoginRequest
): Promise<ICommonResponse<IUserLoginData> | null> => {
if (loginLoading.value || isOnline.value) return null;
loginLoading.value = true;
try {
const res = await UserService.UserLogin(request);
if (res.code === 0) {
isOnline.value = true;
userInfo.value = res.data;
toast.success(res.msg || "登录成功");
} else {
isOnline.value = false;
userInfo.value = null;
toast.warning(res.msg || "登录失败");
}
return res;
} catch (err) {
isOnline.value = false;
userInfo.value = null;
toast.error(getErrorMessage(err, "登录失败"));
return null;
} finally {
loginLoading.value = false;
}
};
/** 用户注册 */
const register = async (
request: IUserRegisterRequest
): Promise<ICommonResponse<IUserRegisterData> | null> => {
if (registerLoading.value || isOnline.value) return null;
registerLoading.value = true;
try {
const res = await UserService.UserRegister(request);
res.code === 0
? toast.success(res.msg || "注册成功")
: toast.warning(res.msg || "注册失败");
return res;
} catch (err) {
toast.error(getErrorMessage(err, "注册失败"));
return null;
} finally {
registerLoading.value = false;
}
};
/** 用户登出 */
const logout = async (): Promise<ICommonResponse<IUserLogoutData> | null> => {
if (logoutLoading.value || !isOnline.value) return null;
logoutLoading.value = true;
try {
const res = await UserService.UserLogout();
if (res.code === 0) {
isOnline.value = false;
userInfo.value = null;
toast.success(res.msg || "登出成功");
} else {
toast.warning(res.msg || "登出失败");
}
return res;
} catch (err) {
toast.error(getErrorMessage(err, "登出失败"));
return null;
} finally {
logoutLoading.value = false;
}
};
return {
isOnline,
userInfo,
loginLoading,
registerLoading,
logoutLoading,
login,
register,
logout
};
});