init source
This commit is contained in:
27
stores/counter.ts
Normal file
27
stores/counter.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
export const useCounterStore = defineStore("counter", () => {
|
||||
const count = ref(0);
|
||||
const name = ref("Counter Store");
|
||||
|
||||
const doubleCount = computed(() => count.value * 2);
|
||||
|
||||
function increment() {
|
||||
count.value++;
|
||||
}
|
||||
|
||||
function decrement() {
|
||||
count.value--;
|
||||
}
|
||||
|
||||
function reset() {
|
||||
count.value = 0;
|
||||
}
|
||||
|
||||
return {
|
||||
count,
|
||||
name,
|
||||
doubleCount,
|
||||
increment,
|
||||
decrement,
|
||||
reset,
|
||||
};
|
||||
});
|
123
stores/user.ts
Normal file
123
stores/user.ts
Normal file
@@ -0,0 +1,123 @@
|
||||
export const useUserStore = defineStore("user", () => {
|
||||
// 상태
|
||||
const isLoggedIn = ref(false);
|
||||
const user = ref<{
|
||||
id?: string;
|
||||
userId?: string;
|
||||
email?: string;
|
||||
name?: string;
|
||||
role?: string;
|
||||
} | null>(null);
|
||||
const token = ref<string | null>(null);
|
||||
|
||||
// 게터
|
||||
const isAdmin = computed(() => user.value?.role === "admin");
|
||||
const userName = computed(() => user.value?.name || "사용자");
|
||||
|
||||
// 액션
|
||||
const login = async (userId: string, password: string) => {
|
||||
try {
|
||||
// 실제 API 호출로 대체할 수 있습니다
|
||||
/*
|
||||
const { data, error: _error } = await useApi('/login', {
|
||||
method: 'post',
|
||||
body: { id: userId, pw: password, loginLogFlag : 0 }
|
||||
})
|
||||
*/
|
||||
// 임시 로그인 로직 (실제로는 API 응답을 사용)
|
||||
if (userId && password) {
|
||||
// 테스트 계정 확인
|
||||
let mockUser;
|
||||
|
||||
if (userId === "admin" && password === "stam1201!") {
|
||||
mockUser = {
|
||||
id: "1",
|
||||
userId: "admin",
|
||||
email: "admin@test.com",
|
||||
name: "관리자",
|
||||
role: "admin",
|
||||
};
|
||||
} else if (userId === "user" && password === "stam1201!") {
|
||||
mockUser = {
|
||||
id: "2",
|
||||
userId: "user",
|
||||
email: "user@test.com",
|
||||
name: "일반사용자",
|
||||
role: "user",
|
||||
};
|
||||
} else {
|
||||
throw new Error("아이디 또는 비밀번호가 올바르지 않습니다.");
|
||||
}
|
||||
|
||||
/*
|
||||
if(data && data.value){
|
||||
mockUser = data.value;
|
||||
}else{
|
||||
throw new Error("아이디 또는 비밀번호가 올바르지 않습니다.");
|
||||
}
|
||||
*/
|
||||
user.value = mockUser;
|
||||
token.value = "mock-token-" + Date.now();
|
||||
isLoggedIn.value = true;
|
||||
|
||||
// 로컬 스토리지에 저장
|
||||
localStorage.setItem("user", JSON.stringify(mockUser));
|
||||
localStorage.setItem("token", token.value);
|
||||
|
||||
return { success: true, user: mockUser };
|
||||
} else {
|
||||
throw new Error("아이디와 비밀번호를 입력해주세요.");
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("로그인 실패:", error);
|
||||
return {
|
||||
success: false,
|
||||
error:
|
||||
error instanceof Error ? error.message : "로그인에 실패했습니다.",
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
const logout = () => {
|
||||
user.value = null;
|
||||
token.value = null;
|
||||
isLoggedIn.value = false;
|
||||
|
||||
// 로컬 스토리지에서 제거
|
||||
localStorage.removeItem("user");
|
||||
localStorage.removeItem("token");
|
||||
};
|
||||
|
||||
const checkAuth = () => {
|
||||
// 페이지 로드 시 로컬 스토리지에서 사용자 정보 복원
|
||||
const savedUser = localStorage.getItem("user");
|
||||
const savedToken = localStorage.getItem("token");
|
||||
|
||||
if (savedUser && savedToken) {
|
||||
user.value = JSON.parse(savedUser);
|
||||
token.value = savedToken;
|
||||
isLoggedIn.value = true;
|
||||
}
|
||||
};
|
||||
|
||||
// 초기 인증 상태 확인
|
||||
if (import.meta.client) {
|
||||
checkAuth();
|
||||
}
|
||||
|
||||
return {
|
||||
// 상태
|
||||
isLoggedIn,
|
||||
user,
|
||||
token,
|
||||
|
||||
// 게터
|
||||
isAdmin,
|
||||
userName,
|
||||
|
||||
// 액션
|
||||
login,
|
||||
logout,
|
||||
checkAuth,
|
||||
};
|
||||
});
|
Reference in New Issue
Block a user