初始化仓库

This commit is contained in:
tao
2025-12-17 17:00:29 +08:00
commit 71158afc35
44 changed files with 5301 additions and 0 deletions

66
src/store/auth.ts Normal file
View File

@@ -0,0 +1,66 @@
import { defineStore } from 'pinia';
import { ref } from 'vue';
import { useRouter } from 'vue-router';
import Cookies from 'js-cookie';
import { message } from 'ant-design-vue';
import { useUserStore } from './user';
import { login } from '@/api/system';
import type { LoginInfo } from '@/api/system/model';
const TOKEN_KEY = 'token';
export const useAuthStore = defineStore('auth', () => {
const router = useRouter();
const userStore = useUserStore();
const loginLoading = ref(false);
const token = ref(Cookies.get(TOKEN_KEY) || null);
function setToken(newToken: string) {
token.value = newToken;
Cookies.set(TOKEN_KEY, newToken);
}
function clearToken() {
token.value = null;
Cookies.remove(TOKEN_KEY);
}
async function authLogin(params: LoginInfo) {
try {
loginLoading.value = true;
const res = await login(params);
if (res.code === 200) {
setToken(res.token as string);
await userStore.fetchUserInfo();
message.success('登录成功');
await router.push('/');
return res;
} else {
// 抛出错误,让调用方处理
throw new Error(res.msg || '登录失败');
}
} catch (error) {
throw error;
} finally {
loginLoading.value = false;
}
}
async function logout() {
// 在实际应用中,这里可以调用后端的退出登录接口
// await doLogoutApi();
clearToken();
userStore.clearUserInfo();
await router.push('/login');
message.success('已成功退出');
}
return {
token,
loginLoading,
authLogin,
logout,
};
});