1
0

HeaderLayout.vue 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <script setup lang="ts">
  2. import SetLanguage from '@/components/SetLanguage/SetLanguage.vue'
  3. import gettext from '@/gettext'
  4. import {message} from 'ant-design-vue'
  5. import auth from '@/api/auth'
  6. import {HomeOutlined, LogoutOutlined, MenuUnfoldOutlined, ReloadOutlined} from '@ant-design/icons-vue'
  7. import {useRouter} from 'vue-router'
  8. import ngx from '@/api/ngx'
  9. const {$gettext} = gettext
  10. const router = useRouter()
  11. function logout() {
  12. auth.logout().then(() => {
  13. message.success($gettext('Logout successful'))
  14. }).then(() => {
  15. router.push('/login')
  16. })
  17. }
  18. function reload_nginx() {
  19. ngx.reload().then(r => {
  20. message.success($gettext('Nginx reloaded successfully'))
  21. }).catch(e => {
  22. message.error($gettext('Server error') + ' ' + e?.message)
  23. })
  24. }
  25. </script>
  26. <template>
  27. <div class="header">
  28. <div class="tool">
  29. <MenuUnfoldOutlined @click="$emit('clickUnFold')"/>
  30. </div>
  31. <a-space class="user-wrapper" :size="24">
  32. <set-language class="set_lang"/>
  33. <a href="/">
  34. <HomeOutlined/>
  35. </a>
  36. <a-popconfirm
  37. :title="$gettext('Do you want to reload Nginx?')"
  38. :ok-text="$gettext('Yes')"
  39. :cancel-text="$gettext('No')"
  40. @confirm="reload_nginx"
  41. placement="bottomRight"
  42. >
  43. <a>
  44. <ReloadOutlined/>
  45. </a>
  46. </a-popconfirm>
  47. <a @click="logout">
  48. <LogoutOutlined/>
  49. </a>
  50. </a-space>
  51. </div>
  52. </template>
  53. <style lang="less" scoped>
  54. .header {
  55. height: 64px;
  56. padding: 0 20px 0 0;
  57. background: transparent;
  58. box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.05);
  59. position: fixed;
  60. width: 100%;
  61. a {
  62. color: #000000;
  63. }
  64. }
  65. .dark {
  66. .header {
  67. box-shadow: 1px 1px 0 0 #404040;
  68. a {
  69. color: #fafafa;
  70. }
  71. }
  72. }
  73. .tool {
  74. position: fixed;
  75. left: 20px;
  76. @media (min-width: 600px) {
  77. display: none;
  78. }
  79. }
  80. .user-wrapper {
  81. position: fixed;
  82. right: 28px;
  83. }
  84. .set_lang {
  85. display: inline;
  86. }
  87. </style>