mirror of
https://github.com/pure-admin/vue-pure-admin.git
synced 2025-11-03 13:44:47 +08:00
Compare commits
3 Commits
880963c683
...
6b179e6ff1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6b179e6ff1 | ||
|
|
e1fde7d386 | ||
|
|
fc30039a40 |
@ -356,7 +356,7 @@ function onClickDrop(key, item, selectRoute?: RouteConfigs) {
|
||||
break;
|
||||
}
|
||||
setTimeout(() => {
|
||||
showMenuModel(route.fullPath, route.query);
|
||||
showMenuModel(route.fullPath, route.query, route.params);
|
||||
});
|
||||
}
|
||||
|
||||
@ -391,15 +391,18 @@ function disabledMenus(value: boolean, fixedTag = false) {
|
||||
function showMenuModel(
|
||||
currentPath: string,
|
||||
query: object = {},
|
||||
params: object = {},
|
||||
refresh = false
|
||||
) {
|
||||
const allRoute = multiTags.value;
|
||||
const routeLength = multiTags.value.length;
|
||||
let currentIndex = -1;
|
||||
if (isAllEmpty(query)) {
|
||||
currentIndex = allRoute.findIndex(v => v.path === currentPath);
|
||||
} else {
|
||||
if (!isAllEmpty(params)) {
|
||||
currentIndex = allRoute.findIndex(v => isEqual(v.params, params));
|
||||
} else if (!isAllEmpty(query)) {
|
||||
currentIndex = allRoute.findIndex(v => isEqual(v.query, query));
|
||||
} else {
|
||||
currentIndex = allRoute.findIndex(v => v.path === currentPath);
|
||||
}
|
||||
function fixedTagDisabled() {
|
||||
if (allRoute[currentIndex]?.meta?.fixedTag) {
|
||||
@ -465,14 +468,14 @@ function openMenu(tag, e) {
|
||||
} else if (route.path !== tag.path && route.name !== tag.name) {
|
||||
// 右键菜单不匹配当前路由,隐藏刷新
|
||||
tagsViews[0].show = false;
|
||||
showMenuModel(tag.path, tag.query);
|
||||
showMenuModel(tag.path, tag.query, tag.params);
|
||||
} else if (multiTags.value.length === 2 && route.path !== tag.path) {
|
||||
showMenus(true);
|
||||
// 只有两个标签时不显示关闭其他标签页
|
||||
tagsViews[4].show = false;
|
||||
} else if (route.path === tag.path) {
|
||||
// 右键当前激活的菜单
|
||||
showMenuModel(tag.path, tag.query, true);
|
||||
showMenuModel(tag.path, tag.query, tag.params);
|
||||
} else {
|
||||
showMenuModel(tag.path, tag.query, tag.params, true);
|
||||
}
|
||||
|
||||
currentSelect.value = tag;
|
||||
|
||||
@ -114,14 +114,21 @@ export function useTags() {
|
||||
]);
|
||||
|
||||
function conditionHandle(item, previous, next) {
|
||||
const currentName = route.name || "";
|
||||
const itemName = item.name || "";
|
||||
|
||||
if (isBoolean(route?.meta?.showLink) && route?.meta?.showLink === false) {
|
||||
if (Object.keys(route.query).length > 0) {
|
||||
return isEqual(route.query, item.query) ? previous : next;
|
||||
return currentName === itemName && isEqual(route.query, item.query)
|
||||
? previous
|
||||
: next;
|
||||
} else {
|
||||
return isEqual(route.params, item.params) ? previous : next;
|
||||
return currentName === itemName && isEqual(route.params, item.params)
|
||||
? previous
|
||||
: next;
|
||||
}
|
||||
} else {
|
||||
return route.path === item.path ? previous : next;
|
||||
return currentName === itemName ? previous : next;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -80,22 +80,15 @@ export const useMultiTagsStore = defineStore("pure-multiTags", {
|
||||
if (isBoolean(tagVal?.meta?.showLink) && !tagVal?.meta?.showLink)
|
||||
return;
|
||||
const tagPath = tagVal.path;
|
||||
// 判断tag是否已存在
|
||||
const tagHasExits = this.multiTags.some(tag => {
|
||||
return tag.path === tagPath;
|
||||
return (
|
||||
tag.path === tagPath &&
|
||||
isEqual(tag?.query, tagVal?.query) &&
|
||||
isEqual(tag?.params, tagVal?.params)
|
||||
);
|
||||
});
|
||||
|
||||
// 判断tag中的query键值是否相等
|
||||
const tagQueryHasExits = this.multiTags.some(tag => {
|
||||
return isEqual(tag?.query, tagVal?.query);
|
||||
});
|
||||
|
||||
// 判断tag中的params键值是否相等
|
||||
const tagParamsHasExits = this.multiTags.some(tag => {
|
||||
return isEqual(tag?.params, tagVal?.params);
|
||||
});
|
||||
|
||||
if (tagHasExits && tagQueryHasExits && tagParamsHasExits) return;
|
||||
if (tagHasExits) return;
|
||||
|
||||
// 动态路由可打开的最大数量
|
||||
const dynamicLevel = tagVal?.meta?.dynamicLevel ?? -1;
|
||||
|
||||
@ -2,7 +2,6 @@ import { defineStore } from "pinia";
|
||||
import {
|
||||
type cacheType,
|
||||
store,
|
||||
debounce,
|
||||
ascending,
|
||||
getKeyList,
|
||||
filterTree,
|
||||
@ -33,33 +32,35 @@ export const usePermissionStore = defineStore("pure-permission", {
|
||||
this.constantMenus.concat(routes) as any
|
||||
);
|
||||
},
|
||||
/** 监听缓存页面是否存在于标签页,不存在则删除 */
|
||||
clearCache() {
|
||||
let cacheLength = this.cachePageList.length;
|
||||
const nameList = getKeyList(useMultiTagsStoreHook().multiTags, "name");
|
||||
while (cacheLength > 0) {
|
||||
nameList.findIndex(v => v === this.cachePageList[cacheLength - 1]) ===
|
||||
-1 &&
|
||||
this.cachePageList.splice(
|
||||
this.cachePageList.indexOf(this.cachePageList[cacheLength - 1]),
|
||||
1
|
||||
);
|
||||
cacheLength--;
|
||||
}
|
||||
},
|
||||
cacheOperate({ mode, name }: cacheType) {
|
||||
const delIndex = this.cachePageList.findIndex(v => v === name);
|
||||
switch (mode) {
|
||||
case "refresh":
|
||||
this.cachePageList = this.cachePageList.filter(v => v !== name);
|
||||
this.clearCache();
|
||||
break;
|
||||
case "add":
|
||||
this.cachePageList.push(name);
|
||||
break;
|
||||
case "delete":
|
||||
delIndex !== -1 && this.cachePageList.splice(delIndex, 1);
|
||||
this.clearCache();
|
||||
break;
|
||||
}
|
||||
/** 监听缓存页面是否存在于标签页,不存在则删除 */
|
||||
debounce(() => {
|
||||
let cacheLength = this.cachePageList.length;
|
||||
const nameList = getKeyList(useMultiTagsStoreHook().multiTags, "name");
|
||||
while (cacheLength > 0) {
|
||||
nameList.findIndex(v => v === this.cachePageList[cacheLength - 1]) ===
|
||||
-1 &&
|
||||
this.cachePageList.splice(
|
||||
this.cachePageList.indexOf(this.cachePageList[cacheLength - 1]),
|
||||
1
|
||||
);
|
||||
cacheLength--;
|
||||
}
|
||||
})();
|
||||
},
|
||||
/** 清空缓存页面 */
|
||||
clearAllCachePage() {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user