feat: 异常页跳转和导航登录信息更新
This commit is contained in:
parent
820364684e
commit
15207d0ae0
@ -53,7 +53,7 @@ service.interceptors.response.use(
|
||||
}
|
||||
},
|
||||
function (error: any) {
|
||||
localStorage.removeItem("token");
|
||||
localStorage.removeItem("user-info");
|
||||
router.push("/login");
|
||||
return Promise.reject(error);
|
||||
}
|
||||
|
||||
1
src/components.d.ts
vendored
1
src/components.d.ts
vendored
@ -19,7 +19,6 @@ declare module "vue" {
|
||||
RouterLink: (typeof import("vue-router"))["RouterLink"];
|
||||
RouterView: (typeof import("vue-router"))["RouterView"];
|
||||
SelectIcon: (typeof import("./components/select-icon/index.vue"))["default"];
|
||||
SelectSvg: (typeof import("./components/select-svg/index.vue"))["default"];
|
||||
SvgAndIcon: (typeof import("./components/svg-and-icon/index.vue"))["default"];
|
||||
SvgIcon: (typeof import("./components/svg-icon/index.vue"))["default"];
|
||||
VerifyCode: (typeof import("./components/verify-code/index.vue"))["default"];
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div>
|
||||
<a-config-provider global :locale="locale">
|
||||
<a-config-provider :global="true" :locale="locale">
|
||||
<slot></slot>
|
||||
</a-config-provider>
|
||||
</div>
|
||||
|
||||
@ -58,8 +58,8 @@
|
||||
<!-- 我的 -->
|
||||
<a-dropdown trigger="hover">
|
||||
<div class="my_setting" id="system-my-setting">
|
||||
<a-image width="32" height="32" fit="cover" :src="myImage" class="my_image" />
|
||||
<span>admin</span>
|
||||
<a-image width="32" height="32" fit="cover" :src="account.user.avatar || myImage" class="my_image" />
|
||||
<span class="user-nickname">{{ account.user.nickName }}</span>
|
||||
<div class="icon_down">
|
||||
<icon-down style="stroke-width: 3" />
|
||||
</div>
|
||||
@ -118,7 +118,9 @@ import { useRoutesConfigStore } from "@/store/modules/route-config";
|
||||
const i18n = useI18n();
|
||||
const router = useRouter();
|
||||
const { isMobile } = useDevicesSize();
|
||||
const userStore = useUserInfoStore();
|
||||
const themeStore = useThemeConfig();
|
||||
const { account } = storeToRefs(userStore);
|
||||
const { language, darkMode } = storeToRefs(themeStore);
|
||||
|
||||
// 系统设置
|
||||
@ -192,8 +194,7 @@ const logOut = () => {
|
||||
onBeforeOk: async () => {
|
||||
try {
|
||||
// 用户退出
|
||||
const store = useUserInfoStore();
|
||||
await store.logOut();
|
||||
await userStore.logOut();
|
||||
router.replace("/login");
|
||||
// 清除路由数据
|
||||
useRoutesConfigStore().resetRoute();
|
||||
@ -240,6 +241,9 @@ const logOut = () => {
|
||||
margin-right: 8px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
.user-nickname {
|
||||
white-space: nowrap;
|
||||
}
|
||||
.icon_down {
|
||||
margin: 0 0 0 5px;
|
||||
transition: transform 0.2s;
|
||||
|
||||
@ -203,7 +203,7 @@ export const accountData = [
|
||||
email: "2547096351@qq.com",
|
||||
phone: "15888888888",
|
||||
sex: 1,
|
||||
avatar: "",
|
||||
avatar: "https://ooo.0x0.ooo/2025/04/10/O0dG7r.jpg",
|
||||
status: 1,
|
||||
description: "系统初始用户",
|
||||
roles: ["admin"],
|
||||
@ -224,7 +224,7 @@ export const accountData = [
|
||||
email: "2547096351@qq.com",
|
||||
phone: "15888888888",
|
||||
sex: 0,
|
||||
avatar: "",
|
||||
avatar: "https://ooo.0x0.ooo/2025/04/10/O0ddJI.jpg",
|
||||
status: 1,
|
||||
description: "UI组用户",
|
||||
roles: ["common"],
|
||||
|
||||
@ -801,7 +801,7 @@ export const systemMenu = [
|
||||
component: "directive/test-directive/test-directive",
|
||||
meta: {
|
||||
title: "test-directive",
|
||||
hide: false,
|
||||
hide: true,
|
||||
disable: false,
|
||||
keepAlive: true,
|
||||
affix: false,
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
import menu from "./menu";
|
||||
import system from "./system";
|
||||
|
||||
export default [...menu];
|
||||
export default [...menu, ...system];
|
||||
|
||||
@ -11,7 +11,7 @@ import { moduleReplacement, linearArray } from "@/router/route-output";
|
||||
* @methods removeTabsList 删除tabs页的指定路由
|
||||
* @methods removeRouteName 删除缓存路由名,用于取消页面缓存,单个删除
|
||||
* @methods removeRouteNames 删除缓存路由名,用于取消页面缓存,批量删除
|
||||
* @methods resetRoute 重置routeTree路由树
|
||||
* @methods resetRoute 重置动态添加的路由
|
||||
* @methods initSetRouter 路由初始化
|
||||
*/
|
||||
export const routesConfigStore = () => {
|
||||
@ -76,12 +76,15 @@ export const routesConfigStore = () => {
|
||||
cacheRoutes.value = cacheRoutes.value.filter((item: string) => !list.includes(item));
|
||||
}
|
||||
/**
|
||||
* 重置routeTree路由树
|
||||
* 重置动态添加的路由
|
||||
*/
|
||||
async function resetRoute() {
|
||||
routeTree.value = []; // 有访问权限的路由树
|
||||
tabsList.value = []; // 标签页数据
|
||||
currentRoute.value = {}; // 当前路由
|
||||
// 清除标签页数据
|
||||
tabsList.value = [];
|
||||
// 清除动态添加的路由
|
||||
routeList.value.forEach((item: any) => {
|
||||
if (router.hasRoute(item.name)) router.removeRoute(item.name);
|
||||
});
|
||||
}
|
||||
/**
|
||||
* 路由初始化
|
||||
|
||||
2
src/typings/global.d.ts
vendored
2
src/typings/global.d.ts
vendored
@ -9,7 +9,7 @@ declare namespace Menu {
|
||||
redirect?: string;
|
||||
component?: string | (() => Promise<unknown>);
|
||||
meta: MetaType;
|
||||
children?: MenuOptions[] | null;
|
||||
children?: MenuOptions[] | null | any;
|
||||
}
|
||||
interface MetaType {
|
||||
title: string;
|
||||
|
||||
@ -15,7 +15,11 @@
|
||||
import { useRouter } from "vue-router";
|
||||
const router = useRouter();
|
||||
const onBack = () => {
|
||||
router.go(-1);
|
||||
if (window.history.state.back !== null) {
|
||||
router.replace(window.history.state.back);
|
||||
} else {
|
||||
router.replace("/login");
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
|
||||
@ -15,7 +15,11 @@
|
||||
import { useRouter } from "vue-router";
|
||||
const router = useRouter();
|
||||
const onBack = () => {
|
||||
router.go(-1);
|
||||
if (window.history.state.back !== null) {
|
||||
router.replace(window.history.state.back);
|
||||
} else {
|
||||
router.replace("/login");
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
|
||||
@ -20,7 +20,11 @@ const onBack = () => {
|
||||
if (!navigator.onLine) {
|
||||
Message.error("网络未连接");
|
||||
} else {
|
||||
router.go(-1);
|
||||
if (window.history.state.back !== null) {
|
||||
router.replace(window.history.state.back);
|
||||
} else {
|
||||
router.replace("/login");
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
@ -43,6 +43,7 @@ import { useUserInfoStore } from "@/store/modules/user-info";
|
||||
import { loginAPI } from "@/api/modules/user/index";
|
||||
import { useRoutesConfigStore } from "@/store/modules/route-config";
|
||||
import { useSystemStore } from "@/store/modules/system";
|
||||
let userStores = useUserInfoStore();
|
||||
const routeStore = useRoutesConfigStore();
|
||||
const router = useRouter();
|
||||
const form = ref({
|
||||
@ -93,11 +94,10 @@ const onSubmit = async ({ errors }: any) => {
|
||||
const onLogin = async () => {
|
||||
// 登录
|
||||
let res = await loginAPI(form.value);
|
||||
let stores = useUserInfoStore();
|
||||
// 存储token
|
||||
await stores.setToken(res.data.token);
|
||||
await userStores.setToken(res.data.token);
|
||||
// 加载用户信息
|
||||
await stores.setAccount();
|
||||
await userStores.setAccount();
|
||||
// 加载路由信息
|
||||
await routeStore.initSetRouter();
|
||||
|
||||
|
||||
195
vite.config.ts.timestamp-1744272306432-c95fef97772a3.mjs
Normal file
195
vite.config.ts.timestamp-1744272306432-c95fef97772a3.mjs
Normal file
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user