index.vue 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <template>
  2. <div class="appNav">
  3. <div class="rowBC">
  4. <div class="appNav-left">
  5. <el-avatar class="appNav-avatar" :size="25" :src="imgUrl" @error="errorHandler">
  6. <img src="../../../assets/home/pc_err.png" />
  7. </el-avatar>
  8. <span class="appNav-name">深圳机场货运一个码系统-管理端</span>
  9. </div>
  10. <div class="appNav-right">
  11. <el-avatar class="appNav-avatar" :size="25" :src="imgUrl" @error="errorHandler">
  12. <img src="../../../assets/home/pc_err.png" />
  13. </el-avatar>
  14. <el-dropdown trigger="click" size="default">
  15. <div class="avatar-wrapper">
  16. <span class="name">{{name}}</span>
  17. <ArrowDownBold style="width: 1.2em; height: 1.3em;" />
  18. </div>
  19. <template #dropdown>
  20. <el-dropdown-menu>
  21. <router-link to="/">
  22. <el-dropdown-item>首页</el-dropdown-item>
  23. </router-link>
  24. <el-dropdown-item divided @click="loginOut">退出登录</el-dropdown-item>
  25. </el-dropdown-menu>
  26. </template>
  27. </el-dropdown>
  28. </div>
  29. </div>
  30. </div>
  31. </template>
  32. <script setup lang="ts">
  33. import { ref } from "vue";
  34. import { ElMessage } from "element-plus";
  35. import { ArrowDownBold } from "@element-plus/icons-vue";
  36. import { useUserStore } from "@/store/user";
  37. import imgUrl from "../../../assets/home/pic_logo.png";
  38. const store = useUserStore();
  39. const name = store.$state.username;
  40. const errorHandler = () => true;
  41. /*
  42. * 退出登录
  43. * */
  44. const router = useRouter();
  45. const route = useRoute();
  46. const loginOut = async () => {
  47. const userStore = useUserStore();
  48. const result: any = await userStore.logout();
  49. if (result.code == 0) {
  50. ElMessage({
  51. message: "退出成功",
  52. type: "success",
  53. duration: 2 * 1000,
  54. onClose: () => {
  55. useUserStore().resetState();
  56. router.push(`/login`);
  57. location.reload();
  58. },
  59. });
  60. } else {
  61. ElMessage.error(result.message);
  62. }
  63. };
  64. </script>
  65. <style lang="scss" scoped>
  66. .appNav {
  67. height: 48px;
  68. line-height: 48px;
  69. background: #ac014d;
  70. padding: 0 42px 0 16px;
  71. &-avatar {
  72. margin-top: 11.5px;
  73. }
  74. &-name {
  75. font-size: 14px;
  76. font-weight: 400;
  77. color: #ffffff;
  78. margin-left: 13px;
  79. top: -5px;
  80. position: relative;
  81. }
  82. .avatar-wrapper {
  83. font-size: 14px;
  84. font-family: Helvetica;
  85. font-weight: bold;
  86. color: #ffffff;
  87. cursor: pointer;
  88. margin-top: 15px;
  89. .name {
  90. margin: 0px 10px;
  91. position: relative;
  92. top: -3px;
  93. }
  94. }
  95. }
  96. </style>