tab.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import { useTagsViewStore } from '@/store/modules/tagsView';
  2. import router from '@/router';
  3. import { TagView, RouteLocationRaw } from 'vue-router';
  4. export default {
  5. // 刷新当前tab页签
  6. async refreshPage(obj: TagView): Promise<void> {
  7. const { path, query, matched } = router.currentRoute.value;
  8. if (obj === undefined) {
  9. matched.forEach((m) => {
  10. if (m.components && m.components.default && m.components.default.name) {
  11. if (!['Layout', 'ParentView'].includes(m.components.default.name)) {
  12. obj = { name: m.components.default.name, path: path, query: query };
  13. }
  14. }
  15. });
  16. }
  17. // prettier-ignore
  18. await useTagsViewStore().delCachedView(obj)
  19. router.replace({
  20. path: '/redirect' + obj.path,
  21. query: obj.query
  22. });
  23. },
  24. // 关闭当前tab页签,打开新页签
  25. closeOpenPage(obj: RouteLocationRaw): void {
  26. useTagsViewStore().delView(router.currentRoute.value);
  27. if (obj !== undefined) {
  28. router.push(obj);
  29. }
  30. },
  31. // 关闭指定tab页签
  32. async closePage(obj?: TagView): Promise<{ visitedViews: TagView[]; cachedViews: string[] } | any> {
  33. if (obj === undefined) {
  34. // prettier-ignore
  35. const { visitedViews } = await useTagsViewStore().delView(router.currentRoute.value) as any
  36. const latestView = visitedViews.slice(-1)[0]
  37. if (latestView) {
  38. return router.push(latestView.fullPath)
  39. }
  40. return router.push('/');
  41. }
  42. return useTagsViewStore().delView(obj);
  43. },
  44. // 关闭所有tab页签
  45. closeAllPage() {
  46. return useTagsViewStore().delAllViews();
  47. },
  48. // 关闭左侧tab页签
  49. closeLeftPage(obj: TagView) {
  50. return useTagsViewStore().delLeftTags(obj || router.currentRoute.value);
  51. },
  52. // 关闭右侧tab页签
  53. closeRightPage(obj: TagView) {
  54. return useTagsViewStore().delRightTags(obj || router.currentRoute.value);
  55. },
  56. // 关闭其他tab页签
  57. closeOtherPage(obj: TagView) {
  58. return useTagsViewStore().delOthersViews(obj || router.currentRoute.value);
  59. },
  60. // 打开tab页签
  61. openPage(url: RouteLocationRaw) {
  62. return router.push(url);
  63. },
  64. // 修改tab页签
  65. updatePage(obj: TagView) {
  66. return useTagsViewStore().updateVisitedView(obj);
  67. }
  68. };