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.

79 lines
2.4 KiB

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