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.

98 lines
3.0 KiB

  1. <template>
  2. <div>
  3. <el-button-group>
  4. <el-button
  5. :type="activeTab === 'addBeanRecharge' ? 'primary' : 'default'"
  6. @click="navigateTo('addBeanRecharge')"
  7. :disabled="!hasAdd"
  8. style="width: 120px;"
  9. >
  10. 新增充值
  11. </el-button>
  12. <el-button
  13. :type="activeTab === 'beanSystemRecharge' ? 'primary' : 'default'"
  14. @click="navigateTo('beanSystemRecharge')"
  15. :disabled="!hasSystem"
  16. style="width: 120px;"
  17. >
  18. 系统充值
  19. </el-button>
  20. <el-button
  21. :type="activeTab === 'beanOnlineRecharge' ? 'primary' : 'default'"
  22. @click="navigateTo('beanOnlineRecharge')"
  23. :disabled="!hasOnline"
  24. style="width: 120px;"
  25. >
  26. 线上充值
  27. </el-button>
  28. </el-button-group>
  29. <router-view></router-view>
  30. </div>
  31. </template>
  32. <script setup>
  33. import {ref, watch, onMounted} from 'vue';
  34. import {useRouter, useRoute} from 'vue-router';
  35. import {storeToRefs} from 'pinia';
  36. import {useAdminStore} from '@/store/index.js';
  37. import {hasMenuPermission, permissionMapping} from "@/utils/menuTreePermission.js";
  38. const router = useRouter();
  39. const route = useRoute();
  40. const adminStore = useAdminStore();
  41. const {menuTree} = storeToRefs(adminStore);
  42. const activeTab = ref('');
  43. const hasAdd = ref(false);
  44. const hasSystem = ref(false);
  45. const hasOnline = ref(false);
  46. // 导航方法
  47. const navigateTo = (name) => {
  48. activeTab.value = name;
  49. router.push({name});
  50. };
  51. // 初始化权限状态
  52. const initPermissions = () => {
  53. if (!menuTree.value || !menuTree.value.length) return;
  54. hasAdd.value = hasMenuPermission(menuTree.value, permissionMapping.Submit_Golden_Bean_Recharge);
  55. hasSystem.value = hasMenuPermission(menuTree.value, permissionMapping.View_Golden_Bean_System_Recharge_Details);
  56. hasOnline.value = hasMenuPermission(menuTree.value, permissionMapping.View_Golden_Bean_Online_Recharge_Details);
  57. };
  58. // 默认跳转逻辑
  59. const getDefaultAuditRoute = () => {
  60. initPermissions();
  61. if (hasAdd.value) return 'addBeanRecharge';
  62. if (hasSystem.value) return 'beanSystemRecharge';
  63. if (hasOnline.value) return 'beanOnlineRecharge';
  64. return 'addBeanRecharge';
  65. };
  66. // 监听路由变化更新标签状态
  67. watch(() => route.name, (newName) => {
  68. initPermissions()
  69. if (newName=== 'addBeanRecharge' || newName === 'beanSystemRecharge' || newName === 'beanOnlineRecharge') {
  70. activeTab.value = newName;
  71. } else if (newName === 'beanRecharge') {
  72. // 每次访问 /beanConsume 都进行默认跳转
  73. const defaultRoute = getDefaultAuditRoute();
  74. navigateTo(defaultRoute);
  75. }
  76. });
  77. // 初始化逻辑
  78. onMounted(() => {
  79. initPermissions()
  80. if (route.name === 'beanRecharge') {
  81. const defaultRoute = getDefaultAuditRoute();
  82. navigateTo(defaultRoute);
  83. } else {
  84. // 非父路由初始化当前标签状态
  85. if (route.name=== 'addBeanRecharge' || route.name === 'beanSystemRecharge' || route.name === 'beanOnlineRecharge') {
  86. activeTab.value = route.name;
  87. }
  88. }
  89. });
  90. </script>