feat: 异常页跳转和导航登录信息更新

This commit is contained in:
WANGFAN\wangf 2025-04-10 16:52:00 +08:00
parent 820364684e
commit 15207d0ae0
15 changed files with 237 additions and 23 deletions

BIN
dist.7z Normal file

Binary file not shown.

View File

@ -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
View File

@ -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"];

View File

@ -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>

View File

@ -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;

View File

@ -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"],

View File

@ -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,

View File

@ -1,3 +1,4 @@
import menu from "./menu"; import menu from "./menu";
import system from "./system";
export default [...menu]; export default [...menu, ...system];

View File

@ -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);
});
} }
/** /**
* *

View File

@ -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;

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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();

File diff suppressed because one or more lines are too long