tab.js 2.2 KB

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