index.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <template>
  2. <div class="appNav">
  3. <div class="rowBC">
  4. <div class="appNav-left">
  5. <el-avatar
  6. class="appNav-avatar"
  7. :size="25"
  8. :src="imgUrl"
  9. @error="errorHandler"
  10. >
  11. <img src="../../../assets/home/pc_err.png" />
  12. </el-avatar>
  13. <span class="appNav-name">深圳机场货运一个码系统-管理端</span>
  14. </div>
  15. <div class="appNav-right">
  16. <div class="help" style="float: left" @click="downFile">帮助</div>
  17. <el-avatar
  18. class="appNav-avatar"
  19. :size="25"
  20. :src="imgUrl"
  21. @error="errorHandler"
  22. >
  23. <img src="../../../assets/home/pc_err.png" />
  24. </el-avatar>
  25. <el-dropdown trigger="click" size="default">
  26. <div class="avatar-wrapper">
  27. <span class="name">{{ name }}</span>
  28. <ArrowDownBold style="width: 1.2em; height: 1.3em" />
  29. </div>
  30. <template #dropdown>
  31. <el-dropdown-menu>
  32. <router-link to="/">
  33. <el-dropdown-item>首页</el-dropdown-item>
  34. </router-link>
  35. <el-dropdown-item divided @click="changePassword"
  36. >修改密码</el-dropdown-item
  37. >
  38. <el-dropdown-item divided @click="loginOut"
  39. >退出登录</el-dropdown-item
  40. >
  41. </el-dropdown-menu>
  42. </template>
  43. </el-dropdown>
  44. </div>
  45. </div>
  46. <ChangePassword @logout="loginOut" />
  47. </div>
  48. </template>
  49. <script setup lang="ts">
  50. import { ElMessage } from "element-plus";
  51. import { ArrowDownBold } from "@element-plus/icons-vue";
  52. import { useUserStore } from "@/store/user";
  53. import imgUrl from "../../../assets/home/pic_logo.png";
  54. import ChangePassword from "@/layout/components/ChangePassword/index.vue";
  55. const userStore = useUserStore();
  56. const { username: name } = storeToRefs(userStore);
  57. const errorHandler = () => true;
  58. /*
  59. * 退出登录
  60. * */
  61. const router = useRouter();
  62. const loginOut = async () => {
  63. const result: any = await userStore.logout();
  64. if (result.code == 0) {
  65. ElMessage({
  66. message: "退出成功",
  67. type: "success",
  68. duration: 2 * 1000,
  69. onClose: () => {
  70. userStore.resetState();
  71. router.push(`/login`);
  72. location.reload();
  73. },
  74. });
  75. } else {
  76. ElMessage.error(result.message);
  77. }
  78. };
  79. //下载
  80. const downFile = () => {
  81. const a = document.createElement("a");
  82. // 给a标签的href属性值加上地址,注意:这里是绝对路径,不用加 点.
  83. a.href = "./管理端 深圳机场航空货运一个码项目-操作手册v4.0.pdf";
  84. // 设置下载文件文件名,这里加上.xlsx指定文件类型,pdf文件就指定.fpd即可
  85. a.download = "管理端 深圳机场航空货运一个码项目-操作手册v4.0.pdf";
  86. // 障眼法藏起来a标签
  87. a.style.display = "none";
  88. // 将a标签追加到文档对象中
  89. document.body.appendChild(a);
  90. // 模拟点击了<a>标签,会触发<a>标签的href的读取,浏览器就会自动下载了
  91. a.click();
  92. // 一次性的,用完就删除a标签
  93. a.remove();
  94. };
  95. const changePassword = () => {
  96. userStore.togglePasswordDialog(true);
  97. };
  98. </script>
  99. <style lang="scss" scoped>
  100. .appNav {
  101. height: 48px;
  102. line-height: 48px;
  103. background: #ac014d;
  104. padding: 0 42px 0 16px;
  105. &-avatar {
  106. margin-top: 11.5px;
  107. }
  108. &-name {
  109. font-size: 14px;
  110. font-weight: 400;
  111. color: #ffffff;
  112. margin-left: 13px;
  113. top: -5px;
  114. position: relative;
  115. }
  116. .avatar-wrapper {
  117. font-size: 14px;
  118. font-family: Microsoft YaHei;
  119. font-weight: bold;
  120. color: #ffffff;
  121. cursor: pointer;
  122. margin-top: 15px;
  123. .name {
  124. margin: 0px 10px;
  125. position: relative;
  126. top: -3px;
  127. }
  128. }
  129. .help {
  130. padding: 2px 2px;
  131. display: flex;
  132. font-size: 14px;
  133. font-family: Microsoft YaHei;
  134. font-weight: bold;
  135. color: #ffffff;
  136. cursor: pointer;
  137. margin-right: 10px;
  138. }
  139. }
  140. </style>