HomeHeader.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <template>
  2. <div id="header_main">
  3. <div id="logo">
  4. <span style="padding-left: 20px;">PMail</span>
  5. </div>
  6. <div id="settings" @click="settings" v-if="$isLogin">
  7. <el-icon style="font-size: 25px;">
  8. <Setting style="color:#FFFFFF" />
  9. </el-icon>
  10. </div>
  11. <el-drawer v-model="openSettings" size="80%" :title="lang.settings">
  12. <el-tabs tab-position="left">
  13. <el-tab-pane :label="lang.security">
  14. <SecuritySettings />
  15. </el-tab-pane>
  16. <el-tab-pane :label="lang.group_settings">
  17. <GroupSettings />
  18. </el-tab-pane>
  19. <el-tab-pane :label="lang.rule_setting">
  20. <RuleSettings />
  21. </el-tab-pane>
  22. <el-tab-pane v-if="$userInfos.is_admin" :label="lang.user_management">
  23. <UserManagement />
  24. </el-tab-pane>
  25. </el-tabs>
  26. </el-drawer>
  27. </div>
  28. </template>
  29. <script setup>
  30. import { Setting } from '@element-plus/icons-vue';
  31. import { ref } from 'vue'
  32. import { ElMessage } from 'element-plus'
  33. import SecuritySettings from '@/components/SecuritySettings.vue'
  34. import lang from '../i18n/i18n';
  35. import GroupSettings from './GroupSettings.vue';
  36. import RuleSettings from './RuleSettings.vue';
  37. import UserManagement from './UserManagement.vue';
  38. import { getCurrentInstance } from 'vue'
  39. const app = getCurrentInstance()
  40. const $http = app.appContext.config.globalProperties.$http
  41. const $isLogin = app.appContext.config.globalProperties.$isLogin
  42. const $userInfos = app.appContext.config.globalProperties.$userInfos
  43. const openSettings = ref(false)
  44. const settings = function () {
  45. if (Object.keys($userInfos.value).length == 0) {
  46. $http.post("/api/user/info", {}).then(res => {
  47. if (res.errorNo == 0) {
  48. $userInfos.value = res.data
  49. openSettings.value = true;
  50. } else {
  51. ElMessage({
  52. type: 'error',
  53. message: res.errorMsg,
  54. })
  55. }
  56. })
  57. }else{
  58. openSettings.value = true;
  59. }
  60. }
  61. </script>
  62. <style scoped>
  63. #header_main {
  64. height: 50px;
  65. background-color: #000;
  66. display: flex;
  67. padding: 0;
  68. }
  69. #logo {
  70. height: 3rem;
  71. line-height: 3rem;
  72. font-size: 2.3rem;
  73. flex-grow: 1;
  74. width: 200px;
  75. color: #FFF;
  76. text-align: left;
  77. }
  78. #search {
  79. height: 3rem;
  80. width: 100%;
  81. }
  82. #settings {
  83. display: flex;
  84. justify-content: center;
  85. align-items: center;
  86. padding-right: 20px;
  87. }
  88. </style>