暂无描述
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

tabsbar.js 1.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import {
  2. defineStore
  3. } from 'pinia'
  4. import {
  5. ref,
  6. computed
  7. } from 'vue'
  8. import router from '@/router'
  9. export const useTabsBarStore = defineStore('tabsBar', () => {
  10. const openedPageList = ref([])
  11. const activePage = ref({
  12. 'name': '',
  13. 'path': ''
  14. })
  15. function addTab(data) {
  16. //添加到当前活动页后面
  17. let index = 1
  18. for (let openedPage of openedPageList.value) {
  19. if (openedPage.path === activePage.value.path) {
  20. break
  21. }
  22. index++
  23. }
  24. openedPageList.value.splice(index, 0, {
  25. 'name': data.name,
  26. 'path': data.path
  27. })
  28. //删除刷新时产生的空白
  29. let indexRemove = 0
  30. for (let openedPage of openedPageList.value) {
  31. if (openedPage.name === null || openedPage.name === '') {
  32. break
  33. }
  34. indexRemove++
  35. }
  36. openedPageList.value.splice(indexRemove, 1)
  37. }
  38. function removeTab(path) {
  39. let index = 0
  40. for (let openedPage of openedPageList.value) {
  41. if (openedPage.path === path) {
  42. break
  43. }
  44. index++
  45. }
  46. openedPageList.value.splice(index, 1)
  47. if (openedPageList.value.length == 0) {
  48. openedPageList.value.push({
  49. 'name': '主页',
  50. 'path': '/main'
  51. })
  52. activePage.value = {
  53. 'name': '主页',
  54. 'path': '/main'
  55. }
  56. router.push({
  57. 'path': '/main'
  58. })
  59. }
  60. }
  61. function setActive(data) {
  62. activePage.value = {
  63. name: data.name,
  64. path: data.path
  65. }
  66. }
  67. function setOpenedPageList(list) {
  68. openedPageList.value = list
  69. }
  70. return {
  71. openedPageList,
  72. activePage,
  73. addTab,
  74. removeTab,
  75. setActive,
  76. setOpenedPageList
  77. }
  78. }, {
  79. persist: true,
  80. }
  81. )