80 lines
1.6 KiB
TypeScript
80 lines
1.6 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 () => {
|
|
await useApi("/members/logout", {
|
|
method: "post",
|
|
loadingMessage: "로그아웃 처리중...",
|
|
showAlert: false,
|
|
});
|
|
|
|
user.value = null;
|
|
isLoggedIn.value = false;
|
|
|
|
tabsStore.resetTabs();
|
|
permissionsStore.clearPermissions();
|
|
|
|
await navigateTo("/login");
|
|
};
|
|
|
|
return {
|
|
// 상태
|
|
isLoggedIn,
|
|
user,
|
|
|
|
// 액션
|
|
login,
|
|
logout,
|
|
};
|
|
},
|
|
{
|
|
persist: true,
|
|
}
|
|
);
|