perf: 同步代码

This commit is contained in:
xiaoxian521 2021-10-20 21:35:21 +08:00
parent 8bfbfe5ab1
commit f96885b48d
5 changed files with 35 additions and 18 deletions

View File

@ -26,7 +26,7 @@ import {
import { RouteConfigs, relativeStorageType, tagsViewsType } from "../../types"; import { RouteConfigs, relativeStorageType, tagsViewsType } from "../../types";
import { emitter } from "/@/utils/mitt"; import { emitter } from "/@/utils/mitt";
import { templateRef } from "@vueuse/core"; import { templateRef } from "@vueuse/core";
import { handleAliveRoute } from "/@/router"; import { handleAliveRoute, delAliveRoutes } from "/@/router";
import { storageLocal } from "/@/utils/storage"; import { storageLocal } from "/@/utils/storage";
import { useRoute, useRouter } from "vue-router"; import { useRoute, useRouter } from "vue-router";
import { usePermissionStoreHook } from "/@/store/modules/permission"; import { usePermissionStoreHook } from "/@/store/modules/permission";
@ -124,7 +124,8 @@ function dynamicRouteTag(value: string, parentPath: string): void {
routerArrays.push({ routerArrays.push({
path: value, path: value,
parentPath: `/${parentPath.split("/")[1]}`, parentPath: `/${parentPath.split("/")[1]}`,
meta: arrItem.meta meta: arrItem.meta,
name: arrItem.name
}); });
relativeStorage.routesInStorage = routerArrays; relativeStorage.routesInStorage = routerArrays;
} else { } else {
@ -151,6 +152,8 @@ function onFresh() {
} }
function deleteDynamicTag(obj: any, current: any, tag?: string) { function deleteDynamicTag(obj: any, current: any, tag?: string) {
//
let delAliveRouteList = [];
let valueIndex: number = routerArrays.findIndex((item: any) => { let valueIndex: number = routerArrays.findIndex((item: any) => {
return item.path === obj.path; return item.path === obj.path;
}); });
@ -171,7 +174,7 @@ function deleteDynamicTag(obj: any, current: any, tag?: string) {
]; ];
routerArrays = relativeStorage.routesInStorage; routerArrays = relativeStorage.routesInStorage;
} else { } else {
routerArrays.splice(start, end); delAliveRouteList = routerArrays.splice(start, end);
relativeStorage.routesInStorage = routerArrays; relativeStorage.routesInStorage = routerArrays;
} }
}; };
@ -189,7 +192,9 @@ function deleteDynamicTag(obj: any, current: any, tag?: string) {
let newRoute: any = routerArrays.slice(-1); let newRoute: any = routerArrays.slice(-1);
if (current === route.path) { if (current === route.path) {
// //
handleAliveRoute(route.matched, "delete"); tag
? delAliveRoutes(delAliveRouteList)
: handleAliveRoute(route.matched, "delete");
// tagtag // tagtag
if (tag === "left") return; if (tag === "left") return;
nextTick(() => { nextTick(() => {
@ -198,18 +203,14 @@ function deleteDynamicTag(obj: any, current: any, tag?: string) {
}); });
}); });
} else { } else {
//
let oldPath = route.path;
router.push(obj.path);
// //
handleAliveRoute(route.matched, "delete"); tag ? delAliveRoutes(delAliveRouteList) : delAliveRoutes([obj]);
if (!routerArrays.length) return; if (!routerArrays.length) return;
let isHasOldPath = routerArrays.some(item => { let isHasActiveTag = routerArrays.some(item => {
return item.path === oldPath; return item.path === route.path;
}); });
isHasOldPath !isHasActiveTag &&
? router.push(oldPath) router.push({
: router.push({
path: newRoute[0].path path: newRoute[0].path
}); });
} }
@ -230,7 +231,11 @@ function onClickDrop(key, item, selectRoute?: RouteConfigs) {
case 1: case 1:
// //
selectRoute selectRoute
? deleteMenu({ path: selectRoute.path, meta: selectRoute.meta }) ? deleteMenu({
path: selectRoute.path,
meta: selectRoute.meta,
name: selectRoute.name
})
: deleteMenu({ path: route.path, meta: route.meta }); : deleteMenu({ path: route.path, meta: route.meta });
break; break;
case 2: case 2:
@ -275,7 +280,6 @@ function onClickDrop(key, item, selectRoute?: RouteConfigs) {
relativeStorage.routesInStorage = routerArrays; relativeStorage.routesInStorage = routerArrays;
usePermissionStoreHook().clearAllCachePage(); usePermissionStoreHook().clearAllCachePage();
router.push("/welcome"); router.push("/welcome");
break; break;
} }
setTimeout(() => { setTimeout(() => {

View File

@ -19,6 +19,7 @@ export type RouteConfigs = {
showLink?: boolean; showLink?: boolean;
savedPosition?: boolean; savedPosition?: boolean;
}; };
name?: string;
}; };
export type relativeStorageType = { export type relativeStorageType = {

View File

@ -10,6 +10,7 @@ import { i18n } from "/@/plugins/i18n";
import { openLink } from "/@/utils/link"; import { openLink } from "/@/utils/link";
import NProgress from "/@/utils/progress"; import NProgress from "/@/utils/progress";
import { useTimeoutFn } from "@vueuse/core"; import { useTimeoutFn } from "@vueuse/core";
import { RouteConfigs } from "/@/layout/types";
import { storageSession, storageLocal } from "/@/utils/storage"; import { storageSession, storageLocal } from "/@/utils/storage";
import { usePermissionStoreHook } from "/@/store/modules/permission"; import { usePermissionStoreHook } from "/@/store/modules/permission";
@ -61,6 +62,16 @@ export const getAliveRoute = () => {
return alivePageList; return alivePageList;
}; };
// 批量删除缓存路由
export const delAliveRoutes = (delAliveRouteList: Array<RouteConfigs>) => {
delAliveRouteList.forEach(route => {
usePermissionStoreHook().cacheOperate({
mode: "delete",
name: route?.name
});
});
};
// 处理缓存路由(添加、删除、刷新) // 处理缓存路由(添加、删除、刷新)
export const handleAliveRoute = ( export const handleAliveRoute = (
matched: RouteRecordNormalized[], matched: RouteRecordNormalized[],

View File

@ -46,7 +46,7 @@ export const usePermissionStore = defineStore({
case "delete": case "delete":
// eslint-disable-next-line no-case-declarations // eslint-disable-next-line no-case-declarations
const delIndex = this.cachePageList.findIndex(v => v === name); const delIndex = this.cachePageList.findIndex(v => v === name);
this.cachePageList.splice(delIndex, 1); delIndex !== -1 && this.cachePageList.splice(delIndex, 1);
break; break;
} }
}, },

View File

@ -62,6 +62,7 @@ export default ({ command, mode }: ConfigEnv): UserConfigExport => {
{ {
libraryName: "vxe-table", libraryName: "vxe-table",
esModule: true, esModule: true,
ensureStyleFile: true,
resolveComponent: name => `vxe-table/es/${name}`, resolveComponent: name => `vxe-table/es/${name}`,
resolveStyle: name => `vxe-table/es/${name}/style.css` resolveStyle: name => `vxe-table/es/${name}/style.css`
} }