From 448a22df5ede79b381ba3b56ad380b321a58ae34 Mon Sep 17 00:00:00 2001 From: tao Date: Tue, 23 Dec 2025 13:30:06 +0800 Subject: [PATCH] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=85=A8=E5=B1=80=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/store/auth.ts | 36 +++++++++++++++++++----------------- src/store/user.ts | 20 +++++++++++--------- 2 files changed, 30 insertions(+), 26 deletions(-) diff --git a/src/store/auth.ts b/src/store/auth.ts index 8de8c8e..13913a0 100644 --- a/src/store/auth.ts +++ b/src/store/auth.ts @@ -1,12 +1,11 @@ -import Cookies from "js-cookie"; import { defineStore } from "pinia"; import { ref } from "vue"; import { useRoute, useRouter } from "vue-router"; -import { message } from "ant-design-vue"; +import { message, notification } from "ant-design-vue"; import { useUserStore } from "./user"; 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"; export const useAuthStore = defineStore("auth", () => { @@ -15,26 +14,29 @@ export const useAuthStore = defineStore("auth", () => { const userStore = useUserStore(); const loginLoading = ref(false); - const token = ref(Cookies.get(TOKEN_KEY) || null); + const token = ref(getToken() || 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) { + async function authLogin(params: LoginInfo, rememberMe: boolean) { try { loginLoading.value = true; const res = await login(params); if (res.code === 200) { setToken(res.token as string); 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 || "/"; router.replace(redirect as string); return res; @@ -52,7 +54,7 @@ export const useAuthStore = defineStore("auth", () => { async function logout() { // 在实际应用中,这里可以调用后端的退出登录接口 await logoutApi(); - clearToken(); + removeToken(); userStore.clearUserInfo(); await router.push("/login"); message.success("已成功退出"); diff --git a/src/store/user.ts b/src/store/user.ts index d3bedba..8e68965 100644 --- a/src/store/user.ts +++ b/src/store/user.ts @@ -1,22 +1,24 @@ import { defineStore } from 'pinia'; 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: () => ({ - username: Cookies.get(USERNAME_KEY) || null, + username: Cookies.get('username') || null, }), actions: { async fetchUserInfo() { // Simulate API call - const fetchedUsername = 'mock_user'; - this.username = fetchedUsername; - Cookies.set(USERNAME_KEY, fetchedUsername); + }, + setUserInfo(params: any) { + setAccount({ + username: params.username, + password: params.password, + rememberMe: params.rememberMe ? "true" : "false", + }); }, clearUserInfo() { - this.username = null; - Cookies.remove(USERNAME_KEY); + removeAccount(); }, }, });