You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. import {
  2. createStore
  3. } from "vuex";
  4. export default createStore<any>({
  5. state: {
  6. "tabArray": [{
  7. title: '首页', //标题
  8. name: '0',
  9. start: false, //是否可删除
  10. path: 'home', //路径
  11. }], //默认首页进行展示
  12. "editableTabsValue": {
  13. index: '0',
  14. menuIndex: '首页,home'
  15. } //默认选中菜单值
  16. },
  17. getters: { //计算属性
  18. //判断是否存在tab
  19. contains(state) {
  20. let tabIndex = -1;
  21. return function (value: any) {
  22. if (value && JSON.stringify(value) !== "{}") {
  23. const tabData = value.split(',');
  24. state.tabArray.forEach((tab: any, tagI: any) => {
  25. if (tab.title === tabData[0] && tab.path === tabData[1]) {
  26. tabIndex = tagI;
  27. }
  28. });
  29. return tabIndex;
  30. } else {
  31. return tabIndex;
  32. }
  33. };
  34. }
  35. },
  36. actions: {
  37. //添加tab
  38. addTab: function (context, value) {
  39. if (value.type === 1) {
  40. context.commit('AddTab', value.data);
  41. } else {
  42. const tabSign = context.getters.contains(value.data);
  43. const tabData = value.data.split(',');
  44. if (tabSign !== -1) { //判断标签是否存在,存在则进行跳转
  45. context.commit('UpdateETV', tabSign + '');
  46. } else { //添加tab
  47. const coord = context.state.tabArray.length + '';
  48. const data = {
  49. title: tabData[0],
  50. name: coord,
  51. start: true,
  52. path: tabData[1]
  53. };
  54. sessionStorage.setItem('newTab', JSON.stringify(data));
  55. context.commit('AddTab', data);
  56. context.commit('UpdateETV', coord);
  57. }
  58. }
  59. },
  60. //删除tab
  61. removeTab: function (context, value) {
  62. let arr = context.state.tabArray;
  63. arr.splice(value, 1);
  64. //赋值默认选择最后一项
  65. context.state.editableTabsValue.index = (arr.length - 1) + '';
  66. const data = {
  67. arr: arr,
  68. value: -1
  69. };
  70. context.commit('sort', data);
  71. },
  72. //关闭其他
  73. closeTheOther: function (context, value) {
  74. const arr = context.state.tabArray.filter((item: any, index: number) => {
  75. if (value === -1) { //关闭全部
  76. return item.start !== true;
  77. } else {
  78. return !(item.start === true && index !== value); //关闭其他
  79. }
  80. });
  81. const data = {
  82. arr: arr,
  83. value: value
  84. };
  85. context.commit('sort', data);
  86. },
  87. //更新ETV
  88. updateETV: function (context, value) {
  89. context.commit('UpdateETV', value);
  90. },
  91. //更新MI
  92. updateMI: function (context, value) {
  93. context.commit('UpdateMI', value);
  94. }
  95. },
  96. mutations: {
  97. //添加tab
  98. AddTab(state, value) {
  99. state.tabArray.push(value);
  100. },
  101. //更新ETV
  102. UpdateETV(state, value) {
  103. state.editableTabsValue.index = value;
  104. },
  105. //更新MI
  106. UpdateMI(state, value) {
  107. state.editableTabsValue.menuIndex = value;
  108. },
  109. //排序后重新赋值
  110. sort(state, data) {
  111. data.arr.forEach((item: any, index: number) => {
  112. item.name = index + '';
  113. });
  114. state.tabArray.splice(0, state.tabArray.length, ...data.arr);
  115. //选项赋值
  116. if (data.value === -1) { //删除tab | 删除全部tab
  117. state.editableTabsValue.index = (state.tabArray.length - 1) + '';
  118. } else {
  119. state.editableTabsValue.index = '1';
  120. }
  121. }
  122. },
  123. modules: {}
  124. });