index.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <script lang="ts" setup>
  2. import type { LoginAndRegisterParams } from '@vben/common-ui';
  3. import { useRouter } from 'vue-router';
  4. import { useAccess } from '@vben/access';
  5. import { Button } from 'ant-design-vue';
  6. import { resetAllStores, useAccessStore } from '#/store';
  7. const accounts: Record<string, LoginAndRegisterParams> = {
  8. admin: {
  9. password: '123456',
  10. username: 'admin',
  11. },
  12. super: {
  13. password: '123456',
  14. username: 'vben',
  15. },
  16. user: {
  17. password: '123456',
  18. username: 'jack',
  19. },
  20. };
  21. const { accessMode, toggleAccessMode } = useAccess();
  22. const accessStore = useAccessStore();
  23. const router = useRouter();
  24. function roleButtonType(role: string) {
  25. return accessStore.userRoles.includes(role) ? 'primary' : 'default';
  26. }
  27. async function changeAccount(role: string) {
  28. if (accessStore.userRoles.includes(role)) {
  29. return;
  30. }
  31. const account = accounts[role];
  32. resetAllStores();
  33. await accessStore.authLogin(account, async () => {
  34. router.go(0);
  35. });
  36. }
  37. async function handleToggleAccessMode() {
  38. await toggleAccessMode();
  39. resetAllStores();
  40. await accessStore.authLogin(accounts.super, async () => {
  41. setTimeout(() => {
  42. router.go(0);
  43. }, 150);
  44. });
  45. }
  46. </script>
  47. <template>
  48. <div class="p-5">
  49. <div class="card-box p-5">
  50. <h1 class="text-xl font-semibold">
  51. {{ accessMode === 'frontend' ? '前端' : '后端' }}页面访问权限演示
  52. </h1>
  53. <div class="text-foreground/80 mt-2">
  54. 切换不同的账号,观察左侧菜单变化。
  55. </div>
  56. </div>
  57. <div class="card-box mt-5 p-5">
  58. <span class="text-lg font-semibold">当前权限模式:</span>
  59. <span class="text-primary mx-4">{{
  60. accessMode === 'frontend' ? '前端权限控制' : '后端权限控制'
  61. }}</span>
  62. <Button type="primary" @click="handleToggleAccessMode">
  63. 切换为{{ accessMode === 'frontend' ? '后端' : '前端' }}权限模式
  64. </Button>
  65. </div>
  66. <div class="card-box mt-5 p-5">
  67. <div class="mb-3">
  68. <span class="text-lg font-semibold">当前账号:</span>
  69. <span class="text-primary mx-4 text-lg">
  70. {{ accessStore.userRoles?.[0] }}
  71. </span>
  72. </div>
  73. <Button :type="roleButtonType('super')" @click="changeAccount('super')">
  74. 切换为 Super 账号
  75. </Button>
  76. <Button
  77. :type="roleButtonType('admin')"
  78. class="mx-4"
  79. @click="changeAccount('admin')"
  80. >
  81. 切换为 Admin 账号
  82. </Button>
  83. <Button :type="roleButtonType('user')" @click="changeAccount('user')">
  84. 切换为 User 账号
  85. </Button>
  86. </div>
  87. </div>
  88. </template>