Files
bio_frontend/stores/user.ts

80 lines
1.6 KiB
TypeScript
Raw Normal View History

import { useTabsStore } from "./tab";
export const useUserStore = defineStore(
"user",
() => {
// 상태
const isLoggedIn = ref(false);
const user = ref<{
userId?: string;
name?: string;
} | null>(null);
2025-08-08 13:11:33 +09:00
2025-09-23 14:15:32 +09:00
// 권한 스토어 참조
const permissionsStore = usePermissionsStore();
// 탭 스토어 참조
const tabsStore = useTabsStore();
2025-08-22 14:01:30 +09:00
interface LoginData {
userId: string;
name: string;
}
2025-09-23 14:15:32 +09:00
const login = async (userId: string, password: string) => {
const { success, data, description } = await useApi<
ApiResponse<LoginData>
>("/login", {
method: "post",
body: { userId, password },
});
2025-08-27 17:06:25 +09:00
if (success) {
user.value = data;
isLoggedIn.value = true;
2025-09-23 14:15:32 +09:00
// 로그인 성공 시
// 탭 초기화
tabsStore.resetTabs();
// 권한 데이터 가져오기
2025-09-23 14:15:32 +09:00
await permissionsStore.fetchPermissions();
return { success, data };
} else {
return {
success: false,
error: description,
};
}
};
2025-08-08 13:11:33 +09:00
const logout = async () => {
await useApi("/members/logout", {
method: "post",
loadingMessage: "로그아웃 처리중...",
showAlert: false,
});
2025-08-08 13:11:33 +09:00
// user.value = null;
// isLoggedIn.value = false;
2025-08-08 13:11:33 +09:00
// tabsStore.resetTabs();
// permissionsStore.clearPermissions();
2025-08-27 17:06:25 +09:00
// await navigateTo("/login");
};
2025-08-27 17:06:25 +09:00
return {
// 상태
isLoggedIn,
user,
2025-08-08 13:11:33 +09:00
// 액션
login,
logout,
};
},
{
persist: true,
}
);