index.vue 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <template>
  2. <PageWrapper
  3. title="后台权限示例"
  4. contentBackground
  5. contentClass="p-4"
  6. content="目前mock了两组数据, id为1 和 2 具体返回的菜单可以在mock/sys/menu.ts内查看"
  7. >
  8. <CurrentPermissionMode />
  9. <Alert class="mt-4" type="info" message="点击后请查看左侧菜单变化" show-icon />
  10. <div class="mt-4">
  11. 权限切换(请先切换权限模式为后台权限模式):
  12. <Space>
  13. <a-button @click="switchToken(1)" :disabled="!isBackPremissionMode">
  14. 获取用户id为1的菜单
  15. </a-button>
  16. <a-button @click="switchToken(2)" :disabled="!isBackPremissionMode">
  17. 获取用户id为2的菜单
  18. </a-button>
  19. </Space>
  20. </div>
  21. </PageWrapper>
  22. </template>
  23. <script lang="ts">
  24. import { defineComponent, computed } from 'vue';
  25. import { RoleEnum } from '/@/enums/roleEnum';
  26. import { usePermission } from '/@/hooks/web/usePermission';
  27. import { useUserStore } from '/@/store/modules/user';
  28. import { PageWrapper } from '/@/components/Page';
  29. import { PermissionModeEnum } from '/@/enums/appEnum';
  30. import { useAppStore } from '/@/store/modules/app';
  31. import { Alert, Space } from 'ant-design-vue';
  32. import CurrentPermissionMode from '../CurrentPermissionMode.vue';
  33. export default defineComponent({
  34. components: { Space, Alert, CurrentPermissionMode, PageWrapper },
  35. setup() {
  36. const { refreshMenu } = usePermission();
  37. const userStore = useUserStore();
  38. const appStore = useAppStore();
  39. const isBackPremissionMode = computed(
  40. () => appStore.getProjectConfig.permissionMode === PermissionModeEnum.BACK,
  41. );
  42. async function switchToken(userId: number) {
  43. // 本函数切换用户登录Token的部分仅用于演示,实际生产时切换身份应当重新登录
  44. const token = 'fakeToken' + userId;
  45. userStore.setToken(token);
  46. // 重新获取用户信息和菜单
  47. userStore.getUserInfoAction();
  48. refreshMenu();
  49. }
  50. return {
  51. RoleEnum,
  52. refreshMenu,
  53. switchToken,
  54. isBackPremissionMode,
  55. };
  56. },
  57. });
  58. </script>
  59. <style lang="less" scoped>
  60. .demo {
  61. background-color: @component-background;
  62. }
  63. </style>