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