Files
bio_frontend/stores/user.ts

88 lines
1.8 KiB
TypeScript

import { useTabsStore } from "./tab";
export const useUserStore = defineStore(
"user",
() => {
// 상태
const isLoggedIn = ref(false);
const user = ref<{
userId?: string;
name?: string;
} | null>(null);
// 권한 스토어 참조
const permissionsStore = usePermissionsStore();
// 탭 스토어 참조
const tabsStore = useTabsStore();
interface LoginData {
userId: string;
name: string;
}
const login = async (userId: string, password: string) => {
const { success, data, description } = await useApi<
ApiResponse<LoginData>
>("/login", {
method: "post",
body: { userId, password },
});
if (success) {
user.value = data;
isLoggedIn.value = true;
// 로그인 성공 시
// 탭 초기화
tabsStore.resetTabs();
// 권한 데이터 가져오기
await permissionsStore.fetchPermissions();
return { success, data };
} else {
return {
success: false,
error: description,
};
}
};
const logout = async () => {
try {
const response = await useApi("/members/logout", {
method: "post",
loadingMessage: "로그아웃 처리중...",
handleError: false,
showAlert: false,
});
console.log("response:", response);
} catch (error) {
console.error(error);
} finally {
user.value = null;
isLoggedIn.value = false;
tabsStore.resetTabs();
permissionsStore.clearPermissions();
// 로그인 페이지로 이동
await navigateTo("/login");
}
};
return {
// 상태
isLoggedIn,
user,
// 액션
login,
logout,
};
},
{
persist: true,
}
);