UserAccountMenu.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <script setup lang="ts">
  2. import appStore from "@/stores"
  3. import apis from "@a"
  4. import VbWorkflow from "@/layouts/main/header/navbar/UserSubMenuWorkflow.vue"
  5. const user = appStore.authStore.user
  6. const dynamic = computed(() => {
  7. return appStore.tenantStore.isDynamic()
  8. })
  9. function clearCache() {
  10. appStore.dictStore.cleanDict().then(() => {
  11. message.msgSuccess("清除成功")
  12. })
  13. }
  14. function refreshConfig() {
  15. apis.system.configApi.refreshCache().then(() => {
  16. message.msgSuccess("刷新成功")
  17. })
  18. }
  19. function signOut() {
  20. appStore.authStore.logout().then(() => {
  21. location.href = import.meta.env.VITE_APP_CONTEXT_PATH + "home"
  22. })
  23. }
  24. </script>
  25. <template>
  26. <div class="app-navbar-item ms-1 ms-md-3">
  27. <div
  28. class="cursor-pointer symbol symbol-30px symbol-md-40px"
  29. data-vb-menu-trigger="{default: 'click', lg: 'hover'}"
  30. data-vb-menu-attach="parent"
  31. data-vb-menu-placement="bottom-end">
  32. <VbSymbol
  33. url="/resource/oss"
  34. :src="user.avatar"
  35. :text="user.userName"
  36. :size="40"
  37. alt="user" />
  38. </div>
  39. <div
  40. class="menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-600 menu-state-bg-light-primary py-4 fs-6 w-275px"
  41. data-vb-menu="true">
  42. <div class="menu-item px-3">
  43. <div class="menu-content d-flex align-items-center px-3">
  44. <div class="symbol symbol-50px me-5">
  45. <VbSymbol url="/resource/oss" :src="user.avatar" :text="user.userName" alt="user" />
  46. </div>
  47. <div class="d-flex flex-column">
  48. <div class="fw-bold d-flex align-items-center fs-5">
  49. {{ user.nickName }}
  50. <span
  51. v-if="user.orgName"
  52. class="badge badge-light-success fw-bold fs-8 px-2 py-1 ms-2">
  53. {{ user.orgName }}
  54. </span>
  55. </div>
  56. <a href="#" class="text-muted text-hover-primary fs-7">{{ user.email }}</a>
  57. </div>
  58. </div>
  59. </div>
  60. <div class="separator my-2"></div>
  61. <div class="menu-item" v-if="!dynamic">
  62. <router-link to="/profile" class="menu-link px-5">
  63. <span class="menu-icon">
  64. <VbIcon icon-name="user" icon-type="duotone" class="me-2 fs-3"></VbIcon>
  65. </span>
  66. <span class="menu-title">个人中心</span>
  67. </router-link>
  68. </div>
  69. <VbWorkflow />
  70. <div class="separator my-2"></div>
  71. <div class="menu-item">
  72. <span @click="clearCache" class="menu-link px-5">
  73. <span class="menu-icon">
  74. <VbIcon icon-name="eraser" icon-type="duotone" class="me-2 fs-3"></VbIcon>
  75. </span>
  76. <span class="menu-title">清除缓存</span>
  77. </span>
  78. </div>
  79. <div class="menu-item">
  80. <span @click="refreshConfig" class="menu-link px-5">
  81. <span class="menu-icon">
  82. <VbIcon icon-name="arrows-circle" icon-type="duotone" class="me-2 fs-3"></VbIcon>
  83. </span>
  84. <span class="menu-title">刷新配置</span>
  85. </span>
  86. </div>
  87. <div class="separator my-2"></div>
  88. <div class="menu-item">
  89. <span @click="signOut()" class="menu-link px-5">
  90. <span class="menu-icon">
  91. <VbIcon icon-name="power" icon-type="duotone" class="me-2 fs-3"></VbIcon>
  92. </span>
  93. <span class="menu-title">退出登录</span>
  94. </span>
  95. </div>
  96. </div>
  97. </div>
  98. </template>