diff --git a/src/api/v1/user.ts b/src/api/v1/user.ts index bbb6891..b350818 100644 --- a/src/api/v1/user.ts +++ b/src/api/v1/user.ts @@ -29,7 +29,9 @@ export interface RefreshTokenResult { expires: Date; } -/** 登录 */ +/** + * 登录 + */ export const fetchLogin = (data?: object) => { return http.request>('post', '/login', { data }); }; @@ -44,5 +46,5 @@ export const fetchPostEmailCode = (data: any) => { /** 刷新`token` */ export const refreshTokenApi = (data?: object) => { - return http.request>('post', '/refresh-token', { data }); + return http.request>('post', 'user/noAuth/refreshToken', { data }); }; diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts index 58e7320..fe050aa 100644 --- a/src/store/modules/user.ts +++ b/src/store/modules/user.ts @@ -1,6 +1,6 @@ import { defineStore } from 'pinia'; import { resetRouter, router, routerArrays, storageLocal, store, type userType } from '../utils'; -import { fetchLogin, fetchPostEmailCode, refreshTokenApi, type RefreshTokenResult } from '@/api/v1/user'; +import { fetchLogin, fetchPostEmailCode, refreshTokenApi } from '@/api/v1/user'; import { useMultiTagsStoreHook } from './multiTags'; import { type DataInfo, removeToken, setToken, userKey } from '@/utils/auth'; import { message } from '@/utils/message'; @@ -19,13 +19,14 @@ export const useUserStore = defineStore({ // 按钮级别权限 permissions: storageLocal().getItem>(userKey)?.permissions ?? [], // 是否勾选了登录页的免登录 - isRemembered: false, + isRemembered: true, // 登录页的免登录存储几天,默认7天 - loginDay: 7, + readMeDay: 7, }), actions: { /** 登入 */ async loginByUsername(data: any) { + data = this.isRemembered ? { ...data, readMeDay: this.readMeDay } : data; const result = await fetchLogin(data); if (result.code === 200) { @@ -68,19 +69,14 @@ export const useUserStore = defineStore({ /** * 刷新`token` */ - async handRefreshToken(data) { - return new Promise((resolve, reject) => { - refreshTokenApi(data) - .then((data: any) => { - if (data) { - setToken(data.data); - resolve(data); - } - }) - .catch(error => { - reject(error); - }); - }); + async handRefreshToken(data: any) { + const result = await refreshTokenApi({ ...data, readMeDay: this.readMeDay }); + if (result.code === 200) { + setToken(data.data); + return true; + } + message(result.message, { type: 'error' }); + return false; }, }, }); diff --git a/src/store/types.ts b/src/store/types.ts index c33268a..6e2fa06 100644 --- a/src/store/types.ts +++ b/src/store/types.ts @@ -1,47 +1,47 @@ -import type { RouteRecordName } from "vue-router"; +import type { RouteRecordName } from 'vue-router'; export type cacheType = { - mode: string; - name?: RouteRecordName; + mode: string; + name?: RouteRecordName; }; export type positionType = { - startIndex?: number; - length?: number; + startIndex?: number; + length?: number; }; export type appType = { - sidebar: { - opened: boolean; - withoutAnimation: boolean; - // 判断是否手动点击Collapse - isClickCollapse: boolean; - }; - layout: string; - device: string; - viewportSize: { width: number; height: number }; + sidebar: { + opened: boolean; + withoutAnimation: boolean; + // 判断是否手动点击Collapse + isClickCollapse: boolean; + }; + layout: string; + device: string; + viewportSize: { width: number; height: number }; }; export type multiType = { - path: string; - name: string; - meta: any; - query?: object; - params?: object; + path: string; + name: string; + meta: any; + query?: object; + params?: object; }; export type setType = { - title: string; - fixedHeader: boolean; - hiddenSideBar: boolean; + title: string; + fixedHeader: boolean; + hiddenSideBar: boolean; }; export type userType = { - avatar?: string; - username?: string; - nickname?: string; - roles?: Array; - permissions?: Array; - isRemembered?: boolean; - loginDay?: number; + avatar?: string; + username?: string; + nickname?: string; + roles?: Array; + permissions?: Array; + isRemembered?: boolean; + readMeDay?: number; }; diff --git a/src/utils/auth.ts b/src/utils/auth.ts index 39c2251..5549ea8 100644 --- a/src/utils/auth.ts +++ b/src/utils/auth.ts @@ -47,13 +47,13 @@ export function setToken(data: any) { const userStore = useUserStore(); let expires = 0; const { token, refreshToken } = data; - const { isRemembered, loginDay } = useUserStoreHook(); + const { isRemembered, readMeDay } = useUserStoreHook(); expires = new Date(data.expires).getTime(); // 如果后端直接设置时间戳,将此处代码改为expires = data.expires,然后把上面的DataInfo改成DataInfo即可 const cookieString = JSON.stringify({ token, expires, refreshToken }); expires > 0 ? Cookies.set(TokenKey, cookieString, { expires: (expires - Date.now()) / 86400000 }) : Cookies.set(TokenKey, cookieString); - Cookies.set(multipleTabsKey, 'true', isRemembered ? { expires: loginDay } : {}); + Cookies.set(multipleTabsKey, 'true', isRemembered ? { expires: readMeDay } : {}); function setUserKey({ avatar, username, nickname, roles, permissions }) { userStore.avatar = avatar; diff --git a/src/views/login/login-form.vue b/src/views/login/login-form.vue index 5af529b..48f5031 100644 --- a/src/views/login/login-form.vue +++ b/src/views/login/login-form.vue @@ -128,6 +128,9 @@ onBeforeUnmount(() => { + + {{ userStore.readMeDay }}天免登录 +