mirror of
				https://github.com/pure-admin/vue-pure-admin.git
				synced 2025-11-03 13:44:47 +08:00 
			
		
		
		
	perf(router): refresh (#142)
* feat: set add multiTagsCache * perf(router): refresh * fix(multiTags): clear storage when close other tag Co-authored-by: lrl <742798240@qq.com>
This commit is contained in:
		
							parent
							
								
									d6a358e851
								
							
						
					
					
						commit
						12879f9553
					
				@ -10,6 +10,7 @@ import {
 | 
			
		||||
  getCurrentInstance
 | 
			
		||||
} from "vue";
 | 
			
		||||
import panel from "../panel/index.vue";
 | 
			
		||||
import { getConfig } from "/@/config";
 | 
			
		||||
import { useRouter } from "vue-router";
 | 
			
		||||
import { emitter } from "/@/utils/mitt";
 | 
			
		||||
import { templateRef } from "@vueuse/core";
 | 
			
		||||
@ -77,7 +78,8 @@ const logoVal = ref(storageLocal.getItem("logoVal") || "1");
 | 
			
		||||
const settings = reactive({
 | 
			
		||||
  greyVal: instance.sets.grey,
 | 
			
		||||
  weakVal: instance.sets.weak,
 | 
			
		||||
  tabsVal: instance.sets.hideTabs
 | 
			
		||||
  tabsVal: instance.sets.hideTabs,
 | 
			
		||||
  multiTagsCache: instance.sets.multiTagsCache
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
function toggleClass(flag: boolean, clsName: string, target?: HTMLElement) {
 | 
			
		||||
@ -93,7 +95,8 @@ const greyChange = (value): void => {
 | 
			
		||||
  instance.sets = {
 | 
			
		||||
    grey: value,
 | 
			
		||||
    weak: instance.sets.weak,
 | 
			
		||||
    hideTabs: instance.sets.hideTabs
 | 
			
		||||
    hideTabs: instance.sets.hideTabs,
 | 
			
		||||
    multiTagsCache: instance.sets.multiTagsCache
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -107,7 +110,8 @@ const weekChange = (value): void => {
 | 
			
		||||
  instance.sets = {
 | 
			
		||||
    grey: instance.sets.grey,
 | 
			
		||||
    weak: value,
 | 
			
		||||
    hideTabs: instance.sets.hideTabs
 | 
			
		||||
    hideTabs: instance.sets.hideTabs,
 | 
			
		||||
    multiTagsCache: instance.sets.multiTagsCache
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -116,11 +120,23 @@ const tagsChange = () => {
 | 
			
		||||
  instance.sets = {
 | 
			
		||||
    grey: instance.sets.grey,
 | 
			
		||||
    weak: instance.sets.weak,
 | 
			
		||||
    hideTabs: showVal
 | 
			
		||||
    hideTabs: showVal,
 | 
			
		||||
    multiTagsCache: instance.sets.multiTagsCache
 | 
			
		||||
  };
 | 
			
		||||
  emitter.emit("tagViewsChange", showVal);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const multiTagsCacheChange = () => {
 | 
			
		||||
  let multiTagsCache = settings.multiTagsCache;
 | 
			
		||||
  instance.sets = {
 | 
			
		||||
    grey: instance.sets.grey,
 | 
			
		||||
    weak: instance.sets.weak,
 | 
			
		||||
    hideTabs: instance.sets.hideTabs,
 | 
			
		||||
    multiTagsCache: multiTagsCache
 | 
			
		||||
  };
 | 
			
		||||
  useMultiTagsStoreHook().multiTagsCacheChange(multiTagsCache);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//初始化项目配置
 | 
			
		||||
nextTick(() => {
 | 
			
		||||
  settings.greyVal &&
 | 
			
		||||
@ -148,6 +164,7 @@ function onReset() {
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ]);
 | 
			
		||||
  useMultiTagsStoreHook().multiTagsCacheChange(getConfig().MultiTagsCache);
 | 
			
		||||
  router.push("/login");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -317,6 +334,18 @@ function setLayoutThemeColor(theme: string) {
 | 
			
		||||
        >
 | 
			
		||||
        </el-switch>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li>
 | 
			
		||||
        <span>标签页持久化</span>
 | 
			
		||||
        <el-switch
 | 
			
		||||
          v-model="settings.multiTagsCache"
 | 
			
		||||
          inline-prompt
 | 
			
		||||
          inactive-color="#a6a6a6"
 | 
			
		||||
          active-text="开"
 | 
			
		||||
          inactive-text="关"
 | 
			
		||||
          @change="multiTagsCacheChange"
 | 
			
		||||
        >
 | 
			
		||||
        </el-switch>
 | 
			
		||||
      </li>
 | 
			
		||||
 | 
			
		||||
      <li>
 | 
			
		||||
        <span>标签风格</span>
 | 
			
		||||
 | 
			
		||||
@ -60,7 +60,8 @@ const layout = computed(() => {
 | 
			
		||||
    instance.$storage.sets = {
 | 
			
		||||
      grey: instance.$config?.Grey ?? false,
 | 
			
		||||
      weak: instance.$config?.Weak ?? false,
 | 
			
		||||
      hideTabs: instance.$config?.HideTabs ?? false
 | 
			
		||||
      hideTabs: instance.$config?.HideTabs ?? false,
 | 
			
		||||
      multiTagsCache: instance.$config?.MultiTagsCache ?? false
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  return instance.$storage?.layout.layout;
 | 
			
		||||
 | 
			
		||||
@ -199,6 +199,49 @@ export function resetRouter() {
 | 
			
		||||
  });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function findRouteByPath(path, routes) {
 | 
			
		||||
  let res = routes.find(item => item.path == path);
 | 
			
		||||
  if (res) {
 | 
			
		||||
    return res;
 | 
			
		||||
  } else {
 | 
			
		||||
    for (let i = 0; i < routes.length; i++) {
 | 
			
		||||
      if (
 | 
			
		||||
        routes[i].children instanceof Array &&
 | 
			
		||||
        routes[i].children.length > 0
 | 
			
		||||
      ) {
 | 
			
		||||
        res = findRouteByPath(path, routes[i].children);
 | 
			
		||||
        if (res) {
 | 
			
		||||
          return res;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return null;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function getParentPaths(path, routes) {
 | 
			
		||||
  // 深度遍历查找
 | 
			
		||||
  function dfs(routes, path, parents) {
 | 
			
		||||
    for (let i = 0; i < routes.length; i++) {
 | 
			
		||||
      const item = routes[i];
 | 
			
		||||
      // 找到path则返回父级path
 | 
			
		||||
      if (item.path === path) return parents;
 | 
			
		||||
      // children不存在或为空则不递归
 | 
			
		||||
      if (!item.children || !item.children.length) continue;
 | 
			
		||||
      // 往下查找时将当前path入栈
 | 
			
		||||
      parents.push(item.path);
 | 
			
		||||
 | 
			
		||||
      if (dfs(item.children, path, parents).length) return parents;
 | 
			
		||||
      // 深度遍历查找未找到时当前path 出栈
 | 
			
		||||
      parents.pop();
 | 
			
		||||
    }
 | 
			
		||||
    // 未找到时返回空数组
 | 
			
		||||
    return [];
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return dfs(routes, path, []);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 路由白名单
 | 
			
		||||
const whiteList = ["/login"];
 | 
			
		||||
 | 
			
		||||
@ -256,9 +299,17 @@ router.beforeEach((to, _from, next) => {
 | 
			
		||||
              handTag(path, parentPath, name, meta);
 | 
			
		||||
              return router.push(path);
 | 
			
		||||
            } else {
 | 
			
		||||
              const { path, name, meta } = to;
 | 
			
		||||
              handTag(path, parentPath, name, meta);
 | 
			
		||||
              return router.push(to.path);
 | 
			
		||||
              const { path } = to;
 | 
			
		||||
              const routes = router.options.routes;
 | 
			
		||||
              const route = findRouteByPath(path, routes);
 | 
			
		||||
              const routePartent = getParentPaths(path, routes);
 | 
			
		||||
              handTag(
 | 
			
		||||
                route.path,
 | 
			
		||||
                routePartent[routePartent.length - 1],
 | 
			
		||||
                route.name,
 | 
			
		||||
                route.meta
 | 
			
		||||
              );
 | 
			
		||||
              return router.push(path);
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
          router.push(to.path);
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,5 @@
 | 
			
		||||
import { defineStore } from "pinia";
 | 
			
		||||
import { store } from "/@/store";
 | 
			
		||||
import { getConfig } from "/@/config";
 | 
			
		||||
import { storageLocal } from "/@/utils/storage";
 | 
			
		||||
import { multiType, positionType } from "./types";
 | 
			
		||||
 | 
			
		||||
@ -8,7 +7,7 @@ export const useMultiTagsStore = defineStore({
 | 
			
		||||
  id: "pure-multiTags",
 | 
			
		||||
  state: () => ({
 | 
			
		||||
    // 存储标签页信息(路由信息)
 | 
			
		||||
    multiTags: getConfig().MultiTagsCache
 | 
			
		||||
    multiTags: storageLocal.getItem("responsive-sets").multiTagsCache
 | 
			
		||||
      ? storageLocal.getItem("responsive-tags")
 | 
			
		||||
      : [
 | 
			
		||||
          {
 | 
			
		||||
@ -22,7 +21,7 @@ export const useMultiTagsStore = defineStore({
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
    multiTagsCache: getConfig().MultiTagsCache
 | 
			
		||||
    multiTagsCache: storageLocal.getItem("responsive-sets").multiTagsCache
 | 
			
		||||
  }),
 | 
			
		||||
  getters: {
 | 
			
		||||
    getMultiTagsCache() {
 | 
			
		||||
@ -30,6 +29,14 @@ export const useMultiTagsStore = defineStore({
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  actions: {
 | 
			
		||||
    multiTagsCacheChange(multiTagsCache: boolean) {
 | 
			
		||||
      this.multiTagsCache = multiTagsCache;
 | 
			
		||||
      if (multiTagsCache) {
 | 
			
		||||
        storageLocal.setItem("responsive-tags", this.multiTags);
 | 
			
		||||
      } else {
 | 
			
		||||
        storageLocal.removeItem("responsive-tags");
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    tagsCache(multiTags) {
 | 
			
		||||
      this.getMultiTagsCache &&
 | 
			
		||||
        storageLocal.setItem("responsive-tags", multiTags);
 | 
			
		||||
@ -42,6 +49,7 @@ export const useMultiTagsStore = defineStore({
 | 
			
		||||
      switch (mode) {
 | 
			
		||||
        case "equal":
 | 
			
		||||
          this.multiTags = value;
 | 
			
		||||
          this.tagsCache(this.multiTags);
 | 
			
		||||
          break;
 | 
			
		||||
        case "push":
 | 
			
		||||
          {
 | 
			
		||||
 | 
			
		||||
@ -25,7 +25,8 @@ export const injectResponsiveStorage = (app: App, config: ServerConfigs) => {
 | 
			
		||||
        default: Storage.getData(undefined, "sets") ?? {
 | 
			
		||||
          grey: config.Grey ?? false,
 | 
			
		||||
          weak: config.Weak ?? false,
 | 
			
		||||
          hideTabs: config.HideTabs ?? false
 | 
			
		||||
          hideTabs: config.HideTabs ?? false,
 | 
			
		||||
          multiTagsCache: config.MultiTagsCache ?? false
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user