配置全局状态管理

This commit is contained in:
tao
2025-12-23 13:30:06 +08:00
parent e8a69a3536
commit 448a22df5e
2 changed files with 30 additions and 26 deletions

View File

@@ -1,12 +1,11 @@
import Cookies from "js-cookie";
import { defineStore } from "pinia"; import { defineStore } from "pinia";
import { ref } from "vue"; import { ref } from "vue";
import { useRoute, useRouter } from "vue-router"; import { useRoute, useRouter } from "vue-router";
import { message } from "ant-design-vue"; import { message, notification } from "ant-design-vue";
import { useUserStore } from "./user"; import { useUserStore } from "./user";
import { login, logout as logoutApi } from "@/api/system"; import { login, logout as logoutApi } from "@/api/system";
import { TokenKey as TOKEN_KEY } from "@/utils/auth"; import { setToken, getToken, removeToken, setAccount, removeAccount } from "@/utils/auth";
import type { LoginInfo } from "@/api/system/model"; import type { LoginInfo } from "@/api/system/model";
export const useAuthStore = defineStore("auth", () => { export const useAuthStore = defineStore("auth", () => {
@@ -15,26 +14,29 @@ export const useAuthStore = defineStore("auth", () => {
const userStore = useUserStore(); const userStore = useUserStore();
const loginLoading = ref(false); const loginLoading = ref(false);
const token = ref(Cookies.get(TOKEN_KEY) || null); const token = ref(getToken() || null);
function setToken(newToken: string) { async function authLogin(params: LoginInfo, rememberMe: boolean) {
token.value = newToken;
Cookies.set(TOKEN_KEY, newToken);
}
function clearToken() {
token.value = null;
Cookies.remove(TOKEN_KEY);
}
async function authLogin(params: LoginInfo) {
try { try {
loginLoading.value = true; loginLoading.value = true;
const res = await login(params); const res = await login(params);
if (res.code === 200) { if (res.code === 200) {
setToken(res.token as string); setToken(res.token as string);
await userStore.fetchUserInfo(); await userStore.fetchUserInfo();
message.success("登录成功"); notification.success({
message: "登录成功",
description: `欢迎回来,${params.username}`,
duration: 3,
});
if (rememberMe) {
userStore.setUserInfo({
...params,
rememberMe
});
} else {
userStore.clearUserInfo();
}
const redirect = route.query.redirect || "/"; const redirect = route.query.redirect || "/";
router.replace(redirect as string); router.replace(redirect as string);
return res; return res;
@@ -52,7 +54,7 @@ export const useAuthStore = defineStore("auth", () => {
async function logout() { async function logout() {
// 在实际应用中,这里可以调用后端的退出登录接口 // 在实际应用中,这里可以调用后端的退出登录接口
await logoutApi(); await logoutApi();
clearToken(); removeToken();
userStore.clearUserInfo(); userStore.clearUserInfo();
await router.push("/login"); await router.push("/login");
message.success("已成功退出"); message.success("已成功退出");

View File

@@ -1,22 +1,24 @@
import { defineStore } from 'pinia'; import { defineStore } from 'pinia';
import Cookies from 'js-cookie'; import Cookies from 'js-cookie';
import { setAccount, removeAccount } from "@/utils/auth";
const USERNAME_KEY = 'username'; export const useUserStore = defineStore("user", {
export const useUserStore = defineStore('user', {
state: () => ({ state: () => ({
username: Cookies.get(USERNAME_KEY) || null, username: Cookies.get('username') || null,
}), }),
actions: { actions: {
async fetchUserInfo() { async fetchUserInfo() {
// Simulate API call // Simulate API call
const fetchedUsername = 'mock_user'; },
this.username = fetchedUsername; setUserInfo(params: any) {
Cookies.set(USERNAME_KEY, fetchedUsername); setAccount({
username: params.username,
password: params.password,
rememberMe: params.rememberMe ? "true" : "false",
});
}, },
clearUserInfo() { clearUserInfo() {
this.username = null; removeAccount();
Cookies.remove(USERNAME_KEY);
}, },
}, },
}); });