expand.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <script lang="ts">
  2. import SvgIcon from "@/components/base/svg-icon";
  3. import baseService from "@/service/baseService";
  4. import { useFullscreen } from "@vueuse/core";
  5. import { defineComponent } from "vue";
  6. import { useRouter } from "vue-router";
  7. import { useAppStore } from "@/store";
  8. import userLogo from "@/assets/images/user.png";
  9. import "@/assets/css/header.less";
  10. import { ElMessageBox } from "element-plus";
  11. interface IExpand {
  12. userName?: string;
  13. }
  14. /**
  15. * 顶部右侧扩展区域
  16. */
  17. export default defineComponent({
  18. name: "Expand",
  19. components: { SvgIcon },
  20. props: {
  21. userName: String
  22. },
  23. setup(props: IExpand) {
  24. const router = useRouter();
  25. const store = useAppStore();
  26. const { isFullscreen, toggle } = useFullscreen();
  27. const onClickUserMenus = (path: string) => {
  28. if (path === "/login") {
  29. ElMessageBox.confirm("确定进行[退出]操作?", "提示", {
  30. confirmButtonText: "确定",
  31. cancelButtonText: "取消",
  32. type: "warning"
  33. })
  34. .then(() => {
  35. baseService.post("/logout").finally(() => {
  36. router.push(path);
  37. });
  38. })
  39. .catch(() => {
  40. //
  41. });
  42. } else {
  43. router.push(path);
  44. }
  45. };
  46. return {
  47. props,
  48. store,
  49. isFullscreen,
  50. userLogo,
  51. onClickUserMenus,
  52. toggle
  53. };
  54. }
  55. });
  56. </script>
  57. <template>
  58. <div class="rr-header-right-items">
  59. <div>
  60. <a href="" target="_blank">
  61. <svg-icon name="icon-earth"></svg-icon>
  62. </a>
  63. </div>
  64. <div>
  65. <a href="" target="_blank">
  66. <svg-icon name="icon-gitee"></svg-icon>
  67. </a>
  68. </div>
  69. <div @click="toggle" class="hidden-xs-only">
  70. <span>
  71. <svg-icon :name="isFullscreen ? 'tuichuquanping' : 'fullscreen2'"></svg-icon>
  72. </span>
  73. </div>
  74. <div style="display: flex; justify-content: center; align-items: center">
  75. <img :src="userLogo" :alt="props.userName" style="width: 30px; height: 30px; border-radius: 50%; margin-top: 3px; margin-right: 5px" />
  76. <el-dropdown @command="onClickUserMenus">
  77. <template #dropdown>
  78. <el-dropdown-menu>
  79. <el-dropdown-item icon="lock" command="/user/password"> 修改密码 </el-dropdown-item>
  80. <el-dropdown-item icon="switch-button" divided command="/login"> 退出登录 </el-dropdown-item>
  81. </el-dropdown-menu>
  82. </template>
  83. <span class="el-dropdown-link" style="display: flex">
  84. {{ props.userName }}
  85. <el-icon class="el-icon--right" style="font-size: 14px"><arrow-down /></el-icon>
  86. </span>
  87. </el-dropdown>
  88. </div>
  89. </div>
  90. </template>