Btn.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <template>
  2. <PageWrapper contentBackground title="按钮权限控制" contentClass="p-4">
  3. <CurrentPermissionMode />
  4. <p>
  5. 当前拥有的code列表: <a> {{ permissionStore.getPermCodeList }} </a>
  6. </p>
  7. <Divider />
  8. <Alert
  9. class="mt-4"
  10. type="info"
  11. message="点击后请查看按钮变化(必须处于后台权限模式才可测试此页面所展示的功能)"
  12. show-icon
  13. />
  14. <Divider />
  15. <a-button type="primary" class="mr-2" @click="switchToken(2)" :disabled="!isBackPremissionMode">
  16. 点击切换按钮权限(用户id为2)
  17. </a-button>
  18. <a-button type="primary" @click="switchToken(1)" :disabled="!isBackPremissionMode">
  19. 点击切换按钮权限(用户id为1,默认)
  20. </a-button>
  21. <template v-if="isBackPremissionMode">
  22. <Divider>组件方式判断权限</Divider>
  23. <Authority :value="'1000'">
  24. <a-button type="primary" class="mx-4"> 拥有code ['1000']权限可见 </a-button>
  25. </Authority>
  26. <Authority :value="'2000'">
  27. <a-button color="success" class="mx-4"> 拥有code ['2000']权限可见 </a-button>
  28. </Authority>
  29. <Authority :value="['1000', '2000']">
  30. <a-button color="error" class="mx-4"> 拥有code ['1000','2000']角色权限可见 </a-button>
  31. </Authority>
  32. <Divider>函数方式方式判断权限</Divider>
  33. <a-button v-if="hasPermission('1000')" type="primary" class="mx-4">
  34. 拥有code ['1000']权限可见
  35. </a-button>
  36. <a-button v-if="hasPermission('2000')" color="success" class="mx-4">
  37. 拥有code ['2000']权限可见
  38. </a-button>
  39. <a-button v-if="hasPermission(['1000', '2000'])" color="error" class="mx-4">
  40. 拥有code ['1000','2000']角色权限可见
  41. </a-button>
  42. <Divider>指令方式方式判断权限(该方式不能动态修改权限.)</Divider>
  43. <a-button v-auth="'1000'" type="primary" class="mx-4"> 拥有code ['1000']权限可见 </a-button>
  44. <a-button v-auth="'2000'" color="success" class="mx-4"> 拥有code ['2000']权限可见 </a-button>
  45. <a-button v-auth="['1000', '2000']" color="error" class="mx-4">
  46. 拥有code ['1000','2000']角色权限可见
  47. </a-button>
  48. </template>
  49. </PageWrapper>
  50. </template>
  51. <script lang="ts">
  52. import { defineComponent, computed } from 'vue';
  53. import { Alert, Divider } from 'ant-design-vue';
  54. import CurrentPermissionMode from '../CurrentPermissionMode.vue';
  55. import { usePermission } from '/@/hooks/web/usePermission';
  56. import { Authority } from '/@/components/Authority';
  57. import { usePermissionStore } from '/@/store/modules/permission';
  58. import { PermissionModeEnum } from '/@/enums/appEnum';
  59. import { PageWrapper } from '/@/components/Page';
  60. import { useAppStore } from '/@/store/modules/app';
  61. import { useUserStore } from '/@/store/modules/user';
  62. export default defineComponent({
  63. components: { Alert, PageWrapper, CurrentPermissionMode, Divider, Authority },
  64. setup() {
  65. const { hasPermission } = usePermission();
  66. const permissionStore = usePermissionStore();
  67. const appStore = useAppStore();
  68. const userStore = useUserStore();
  69. const isBackPremissionMode = computed(
  70. () => appStore.getProjectConfig.permissionMode === PermissionModeEnum.BACK
  71. );
  72. async function switchToken(userId: number) {
  73. // 本函数切换用户登录Token的部分仅用于演示,实际生产时切换身份应当重新登录
  74. const token = 'fakeToken' + userId;
  75. userStore.setToken(token);
  76. // 重新获取用户信息和菜单
  77. userStore.getUserInfoAction();
  78. permissionStore.changePermissionCode();
  79. }
  80. return {
  81. hasPermission,
  82. permissionStore,
  83. switchToken,
  84. isBackPremissionMode,
  85. };
  86. },
  87. });
  88. </script>
  89. <style lang="less" scoped>
  90. .demo {
  91. background-color: @component-background;
  92. }
  93. </style>