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) {
localStorage.removeItem("token");
localStorage.removeItem("user-info");
router.push("/login");
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"];
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"];

View File

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

View File

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

View File

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

View File

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

View File

@ -1,3 +1,4 @@
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 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);
});
}
/**
*

View File

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

View File

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

View File

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

View File

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

View File

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

File diff suppressed because one or more lines are too long