feat: 註冊登入流程修改

This commit is contained in:
skytek_xinliang
2026-09-30 15:45:07 +08:00
parent d4f7c2c176
commit d3159f3271
15 changed files with 744 additions and 293 deletions
+27 -13
View File
@@ -4,6 +4,7 @@ import {
login as apiLogin,
logout as apiLogout,
register as apiRegister,
updateEmail as apiUpdateEmail,
} from "@/api/auth";
import {
getProfile as apiGetProfile,
@@ -19,6 +20,7 @@ import type {
ChronicDisease,
ConsentVersion,
ExerciseFrequency,
FitnessGroup,
Gender,
PainLevel,
Profile,
@@ -27,6 +29,7 @@ import type {
RiskLevel,
SelfAssessmentRequest,
SelfAssessmentResponse,
UpdateEmailResponse,
WantedImprovement,
} from "@/api/types";
import {
@@ -294,6 +297,9 @@ export const useAppStore = defineStore("app", () => {
let authInitializationPromise: Promise<boolean> | null = null;
/** 僅供前端顯示或其他使用者資料用途;course/group 不再傳送此值。 */
const userID = ref("");
const authGroup = ref<FitnessGroup | null>(null);
const emailMissing = ref(false);
const requiresEmailCompletion = computed(() => emailMissing.value);
const userProfile = ref<UserProfile>(createEmptyUserProfile());
const selfAssessment = ref<SelfAssessment>(createEmptySelfAssessment());
const selfAssessmentLoading = ref(false);
@@ -328,16 +334,10 @@ export const useAppStore = defineStore("app", () => {
function setAuthenticated(response: AuthResponse) {
isLoggedIn.value = true;
userID.value = response.userID;
if (response.profile) {
userProfile.value = applyProfileToStore(response.profile);
return;
}
const emptyProfile = createEmptyUserProfile();
authGroup.value = response.group;
emailMissing.value = response.mail === 1;
userProfile.value = {
...emptyProfile,
name: response.userName,
...createEmptyUserProfile(),
phone: response.phone,
};
}
@@ -388,10 +388,9 @@ export const useAppStore = defineStore("app", () => {
const response: AuthResponse = USE_MOCK
? {
userID: "MOCK-USER",
userName: "",
phone,
group: "medium",
profile: null,
mail: 0,
}
: await apiLogin({ phone, password });
@@ -411,10 +410,9 @@ export const useAppStore = defineStore("app", () => {
const response: AuthResponse = USE_MOCK
? {
userID: "MOCK-USER",
userName: "",
phone: request.phone,
group: "medium",
profile: null,
mail: 0,
}
: await apiRegister(request);
@@ -426,6 +424,8 @@ export const useAppStore = defineStore("app", () => {
function clearAuthentication() {
isLoggedIn.value = false;
userID.value = "";
authGroup.value = null;
emailMissing.value = false;
userProfile.value = createEmptyUserProfile();
selfAssessment.value = createEmptySelfAssessment();
selfAssessmentLoading.value = false;
@@ -445,6 +445,16 @@ export const useAppStore = defineStore("app", () => {
}
}
async function updateEmail(email: string): Promise<UpdateEmailResponse> {
const response: UpdateEmailResponse = USE_MOCK
? { messageCode: "200", email, mail: 0 }
: await apiUpdateEmail(email);
emailMissing.value = false;
userProfile.value.email = response.email;
return response;
}
async function updateProfile(
profile: Partial<EditableProfile>,
): Promise<UserProfile> {
@@ -628,6 +638,9 @@ export const useAppStore = defineStore("app", () => {
isLoggedIn,
isAuthInitialized,
userID,
authGroup,
emailMissing,
requiresEmailCompletion,
userProfile,
selfAssessment,
selfAssessmentLoading,
@@ -642,6 +655,7 @@ export const useAppStore = defineStore("app", () => {
initializeAuthentication,
logout,
clearAuthentication,
updateEmail,
updateProfile,
setSelfAssessment,
setProvisionalSelfAssessment,