mirror of
https://github.com/pure-admin/vue-pure-admin.git
synced 2025-12-15 14:50:29 +08:00
Merge branch 'main' into pages
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -19,13 +19,22 @@ const loading = ref(true);
|
||||
const currentRoute = useRoute();
|
||||
const frameSrc = ref<string>("");
|
||||
const frameRef = ref<HTMLElement | null>(null);
|
||||
const fallbackTimer = ref<number | null>(null);
|
||||
|
||||
if (unref(currentRoute.meta)?.frameSrc) {
|
||||
frameSrc.value = unref(currentRoute.meta)?.frameSrc as string;
|
||||
}
|
||||
unref(currentRoute.meta)?.frameLoading === false && hideLoading();
|
||||
|
||||
function clearFallbackTimer() {
|
||||
if (fallbackTimer.value !== null) {
|
||||
clearTimeout(fallbackTimer.value);
|
||||
fallbackTimer.value = null;
|
||||
}
|
||||
}
|
||||
|
||||
function hideLoading() {
|
||||
loading.value = false;
|
||||
clearFallbackTimer();
|
||||
}
|
||||
|
||||
function init() {
|
||||
@@ -34,32 +43,42 @@ function init() {
|
||||
if (!iframe) return;
|
||||
const _frame = iframe as any;
|
||||
if (_frame.attachEvent) {
|
||||
_frame.attachEvent("onload", () => {
|
||||
hideLoading();
|
||||
});
|
||||
_frame.attachEvent("onload", hideLoading);
|
||||
} else {
|
||||
iframe.onload = () => {
|
||||
hideLoading();
|
||||
};
|
||||
iframe.onload = hideLoading;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
let isRedirect = false;
|
||||
|
||||
watch(
|
||||
() => currentRoute.fullPath,
|
||||
path => {
|
||||
if (
|
||||
currentRoute.name === "Redirect" &&
|
||||
path.includes(props.frameInfo?.fullPath)
|
||||
props.frameInfo?.fullPath &&
|
||||
path.includes(props.frameInfo.fullPath)
|
||||
) {
|
||||
frameSrc.value = path; // redirect时,置换成任意值,待重定向后 重新赋值
|
||||
isRedirect = true;
|
||||
loading.value = true;
|
||||
return;
|
||||
}
|
||||
// 重新赋值
|
||||
if (props.frameInfo?.fullPath === path) {
|
||||
frameSrc.value = props.frameInfo?.frameSrc;
|
||||
if (props.frameInfo?.fullPath === path && isRedirect) {
|
||||
loading.value = true;
|
||||
clearFallbackTimer();
|
||||
const url = new URL(props.frameInfo.frameSrc, window.location.origin);
|
||||
const joinChar = url.search ? "&" : "?";
|
||||
frameSrc.value = `${props.frameInfo.frameSrc}${joinChar}t=${Date.now()}`;
|
||||
fallbackTimer.value = window.setTimeout(() => {
|
||||
if (loading.value) {
|
||||
hideLoading();
|
||||
}
|
||||
}, 1500);
|
||||
isRedirect = false;
|
||||
}
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
);
|
||||
|
||||
onMounted(() => {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user