登录/登出优化

This commit is contained in:
tao
2026-01-12 11:46:28 +08:00
parent 4371ced698
commit faf9b7c9a4
5 changed files with 26 additions and 17 deletions

View File

@@ -5,7 +5,7 @@ import { message, notification } from "ant-design-vue";
import { useUserStore } from "./user";
import { login, logout as logoutApi } from "@/api/system";
import { setToken, getToken, removeToken, setAccount, removeAccount } from "@/utils/auth";
import { setToken, getToken, removeToken, removeAccount, getRememberMe } from "@/utils/auth";
import type { LoginInfo } from "@/api/system/model";
export const useAuthStore = defineStore("auth", () => {
@@ -29,19 +29,13 @@ export const useAuthStore = defineStore("auth", () => {
duration: 3,
});
let userInfo = {};
if (rememberMe) {
userInfo = {
...params,
rememberMe
};
userStore.setUserInfo({ ...params, rememberMe });
} else {
userInfo = {
username: params.username
};
userStore.clearUserInfo();
userStore.setUsername(params.username);
}
userStore.clearUserInfo();
userStore.setUserInfo(userInfo);
const redirect = route.query.redirect || "/";
router.replace(redirect as string);
return res;
@@ -60,7 +54,7 @@ export const useAuthStore = defineStore("auth", () => {
// 在实际应用中,这里可以调用后端的退出登录接口
await logoutApi();
removeToken();
userStore.clearUserInfo();
!getRememberMe() && removeAccount();
await router.push("/login");
message.success("已成功退出");
}

View File

@@ -10,21 +10,29 @@ export const useUserStore = defineStore("user", () => {
// Simulate API call
}
function setUsername(name: string) {
username.value = name;
}
function setUserInfo(params: any) {
setAccount({
username.value = params.username || '';
params.rememberMe && setAccount({
username: params.username,
password: params.password,
rememberMe: params.rememberMe ? "true" : "false",
rememberMe: params.rememberMe,
});
}
function clearUserInfo() {
username.value = '';
removeAccount();
}
return {
username,
fetchUserInfo,
setUsername,
setUserInfo,
clearUserInfo,
}

View File

@@ -24,11 +24,14 @@ export interface AccountInfo {
rememberMe?: 'true' | 'false';
}
export function getRememberMe() {
return Cookies.get("rememberMe");
}
export function getAccount() {
return {
username: Cookies.get("username"),
password: Cookies.get("password"),
rememberMe: Cookies.get("rememberMe"),
};
}

View File

@@ -6,7 +6,7 @@ import type { LoginInfo } from '@/api/system/model'
import type { Rule } from 'ant-design-vue/es/form';
import { useAuthStore } from '@/store';
import { storeToRefs } from 'pinia';
import { getAccount } from '@/utils/auth';
import { getAccount, getRememberMe } from '@/utils/auth';
import { decrypt } from '@/utils/jsencrypt';
const authStore = useAuthStore();
@@ -66,7 +66,8 @@ const refreshCaptcha = async () => {
// 初始化
const initLoginForm = () => {
const { username, password, rememberMe: isRememberMe } = getAccount();
const { username, password } = getAccount();
const isRememberMe = getRememberMe();
if (isRememberMe && isRememberMe === 'true') {
rememberMe.value = true;
formData.username = username || '';