HeaderLayout.vue 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <script setup lang="ts">
  2. import { message } from 'ant-design-vue'
  3. import { HomeOutlined, LogoutOutlined, MenuUnfoldOutlined } from '@ant-design/icons-vue'
  4. import { useRouter } from 'vue-router'
  5. import SetLanguage from '@/components/SetLanguage/SetLanguage.vue'
  6. import gettext from '@/gettext'
  7. import auth from '@/api/auth'
  8. import NginxControl from '@/components/NginxControl/NginxControl.vue'
  9. import SwitchAppearance from '@/components/SwitchAppearance/SwitchAppearance.vue'
  10. const emit = defineEmits<{
  11. clickUnFold: [void]
  12. }>()
  13. const { $gettext } = gettext
  14. const router = useRouter()
  15. function logout() {
  16. auth.logout().then(() => {
  17. message.success($gettext('Logout successful'))
  18. }).then(() => {
  19. router.push('/login')
  20. })
  21. }
  22. </script>
  23. <template>
  24. <div class="header">
  25. <div class="tool">
  26. <MenuUnfoldOutlined @click="emit('clickUnFold')" />
  27. </div>
  28. <ASpace
  29. class="user-wrapper"
  30. :size="24"
  31. >
  32. <SetLanguage class="set_lang" />
  33. <SwitchAppearance />
  34. <a href="/">
  35. <HomeOutlined />
  36. </a>
  37. <NginxControl />
  38. <a @click="logout">
  39. <LogoutOutlined />
  40. </a>
  41. </ASpace>
  42. </div>
  43. </template>
  44. <style lang="less" scoped>
  45. .header {
  46. height: 64px;
  47. padding: 0 20px 0 0;
  48. background: transparent;
  49. box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.05);
  50. width: 100%;
  51. a {
  52. color: #000000;
  53. }
  54. }
  55. .dark {
  56. .header {
  57. box-shadow: 1px 1px 0 0 #404040;
  58. a {
  59. color: #fafafa;
  60. }
  61. }
  62. }
  63. .tool {
  64. position: absolute;
  65. left: 20px;
  66. @media (min-width: 600px) {
  67. display: none;
  68. }
  69. }
  70. .user-wrapper {
  71. position: absolute;
  72. right: 28px;
  73. }
  74. .set_lang {
  75. display: inline;
  76. }
  77. </style>