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.

85 lines
2.3 KiB

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