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.

93 lines
2.5 KiB

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