fix(components): 页面跳转被拦截, 则会出现 tab 页签与页面不一致的问题
This commit is contained in:
parent
da521b35e6
commit
bd5dd2cf28
@ -19,9 +19,9 @@ export function useRouterPush(inSetup = true) {
|
|||||||
if (newTab) {
|
if (newTab) {
|
||||||
const routerData = router.resolve(to);
|
const routerData = router.resolve(to);
|
||||||
window.open(routerData.href, '_blank');
|
window.open(routerData.href, '_blank');
|
||||||
} else {
|
return Promise.resolve();
|
||||||
router.push(to);
|
|
||||||
}
|
}
|
||||||
|
return router.push(to);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 返回上一级路由 */
|
/** 返回上一级路由 */
|
||||||
|
@ -114,34 +114,42 @@ export const useTabStore = defineStore('tab-store', {
|
|||||||
* 删除多页签
|
* 删除多页签
|
||||||
* @param fullPath - 路由fullPath
|
* @param fullPath - 路由fullPath
|
||||||
*/
|
*/
|
||||||
removeTab(fullPath: string) {
|
async removeTab(fullPath: string) {
|
||||||
const { routerPush } = useRouterPush(false);
|
const { routerPush } = useRouterPush(false);
|
||||||
|
|
||||||
const isActive = this.activeTab === fullPath;
|
const isActive = this.activeTab === fullPath;
|
||||||
const updateTabs = this.tabs.filter(tab => tab.fullPath !== fullPath);
|
const updateTabs = this.tabs.filter(tab => tab.fullPath !== fullPath);
|
||||||
this.tabs = updateTabs;
|
if (!isActive) {
|
||||||
|
this.tabs = updateTabs;
|
||||||
|
}
|
||||||
if (isActive && updateTabs.length) {
|
if (isActive && updateTabs.length) {
|
||||||
const activePath = updateTabs[updateTabs.length - 1].fullPath;
|
const activePath = updateTabs[updateTabs.length - 1].fullPath;
|
||||||
this.setActiveTab(activePath);
|
const navigationFailure = await routerPush(activePath);
|
||||||
routerPush(activePath);
|
if (!navigationFailure) {
|
||||||
|
this.tabs = updateTabs;
|
||||||
|
this.setActiveTab(activePath);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* 清空多页签(多页签首页保留)
|
* 清空多页签(多页签首页保留)
|
||||||
* @param excludes - 保留的多页签path
|
* @param excludes - 保留的多页签path
|
||||||
*/
|
*/
|
||||||
clearTab(excludes: string[] = []) {
|
async clearTab(excludes: string[] = []) {
|
||||||
const { routerPush } = useRouterPush(false);
|
const { routerPush } = useRouterPush(false);
|
||||||
|
|
||||||
const homePath = this.homeTab.fullPath;
|
const homePath = this.homeTab.fullPath;
|
||||||
const remain = [homePath, ...excludes];
|
const remain = [homePath, ...excludes];
|
||||||
const hasActive = remain.includes(this.activeTab);
|
const hasActive = remain.includes(this.activeTab);
|
||||||
const updateTabs = this.tabs.filter(tab => remain.includes(tab.fullPath));
|
const updateTabs = this.tabs.filter(tab => remain.includes(tab.fullPath));
|
||||||
this.tabs = updateTabs;
|
if (hasActive) this.tabs = updateTabs;
|
||||||
if (!hasActive && updateTabs.length) {
|
if (!hasActive && updateTabs.length) {
|
||||||
const activePath = updateTabs[updateTabs.length - 1].fullPath;
|
const activePath = updateTabs[updateTabs.length - 1].fullPath;
|
||||||
this.setActiveTab(activePath);
|
const navigationFailure = await routerPush(activePath);
|
||||||
routerPush(activePath);
|
if (!navigationFailure) {
|
||||||
|
this.tabs = updateTabs;
|
||||||
|
this.setActiveTab(activePath);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
@ -174,13 +182,13 @@ export const useTabStore = defineStore('tab-store', {
|
|||||||
* 点击单个tab
|
* 点击单个tab
|
||||||
* @param fullPath - 路由fullPath
|
* @param fullPath - 路由fullPath
|
||||||
*/
|
*/
|
||||||
handleClickTab(fullPath: string) {
|
async handleClickTab(fullPath: string) {
|
||||||
const { routerPush } = useRouterPush(false);
|
const { routerPush } = useRouterPush(false);
|
||||||
|
|
||||||
const isActive = this.activeTab === fullPath;
|
const isActive = this.activeTab === fullPath;
|
||||||
if (!isActive) {
|
if (!isActive) {
|
||||||
this.setActiveTab(fullPath);
|
const navigationFailure = await routerPush(fullPath);
|
||||||
routerPush(fullPath);
|
if (!navigationFailure) this.setActiveTab(fullPath);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user