Step F1:前端工程骨架 & 登录鉴权

This commit is contained in:
Cheng Zhou
2025-12-16 20:21:30 +08:00
parent 5eab324c50
commit 78d13d077c
25 changed files with 523 additions and 1 deletions
+44
View File
@@ -0,0 +1,44 @@
import { defineStore } from "pinia";
import { ref } from "vue";
import { login as apiLogin, fetchMe } from "../api/auth";
import { setToken, clearToken, getToken } from "../utils/auth";
import type { UserInfo } from "../types/api";
export const useAuthStore = defineStore("auth", () => {
const token = ref<string | null>(getToken());
const user = ref<UserInfo | null>(null);
const loading = ref(false);
const login = async (username: string, password: string) => {
loading.value = true;
try {
const { data } = await apiLogin({ username, password });
token.value = data.access_token;
setToken(data.access_token);
await fetchMeAction();
} finally {
loading.value = false;
}
};
const fetchMeAction = async () => {
const { data } = await fetchMe();
user.value = data;
return data;
};
const logout = () => {
token.value = null;
user.value = null;
clearToken();
};
return {
token,
user,
loading,
login,
fetchMe: fetchMeAction,
logout,
};
});