Index.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <script setup>
  2. import {ref} from 'vue'
  3. import {Base64} from 'js-base64'
  4. let userInfo=ref(null)
  5. let showUserInfo=ref(false)
  6. function getUserInfo(){
  7. const val=localStorage.getItem('userInfo')?JSON.parse(Base64.decode(localStorage.getItem('userInfo'))):null
  8. userInfo.value=val
  9. console.log(val);
  10. }
  11. getUserInfo()
  12. function handleLoginOut(){
  13. localStorage.removeItem('token')
  14. localStorage.removeItem('userInfo')
  15. router.replace('/login')
  16. }
  17. </script>
  18. <template>
  19. <div class="layout-wrap">
  20. <div class="pad-header-box">
  21. <div></div>
  22. <van-popover v-model:show="showUserInfo" placement="bottom-end">
  23. <div class="userinfo-box_pad" v-if="userInfo">
  24. <div class="info-item">
  25. <span>姓名:</span>
  26. <span>{{userInfo.RealName}}</span>
  27. </div>
  28. <div class="info-item">
  29. <span>ID:</span>
  30. <span>{{userInfo.AdminName}}</span>
  31. </div>
  32. <div class="info-item">
  33. <span>公司名称:</span>
  34. <span>弘则弥道(上海)投资咨询有限公司</span>
  35. </div>
  36. <div class="info-item">
  37. <span>所属部门:</span>
  38. <span>产品技术部</span>
  39. </div>
  40. <div class="info-item">
  41. <span>角色:</span>
  42. <span>{{userInfo.RoleName}}</span>
  43. </div>
  44. <van-button class="login_out_btn" block type="primary" round @click="handleLoginOut">退出登录</van-button>
  45. </div>
  46. <template #reference>
  47. <div class="user-box" v-if="userInfo">
  48. <img class="avatar" src="@/assets/imgs/userLogo.png" alt="">
  49. <span>{{userInfo.RealName}},欢迎您!</span>
  50. </div>
  51. </template>
  52. </van-popover>
  53. </div>
  54. <router-view />
  55. </div>
  56. </template>
  57. <style lang="scss">
  58. @media screen and (min-width:650px){
  59. .userinfo-box_pad{
  60. padding: 20px;
  61. .info-item{
  62. padding: 5px 0;
  63. }
  64. .login_out_btn{
  65. width: 50%;
  66. margin-top: 20px;
  67. margin-left: auto;
  68. margin-right: auto;
  69. }
  70. }
  71. }
  72. </style>
  73. <style lang="scss" scoped>
  74. .pad-header-box{
  75. display: none;
  76. }
  77. @media screen and (min-width:650px){
  78. .pad-header-box{
  79. display: block;
  80. height: 60px;
  81. position: sticky;
  82. top: 0;
  83. width: 100%;
  84. padding:0 30px;
  85. border-bottom: 1px solid $border-color;
  86. display: flex;
  87. align-items: center;
  88. justify-content: space-between;
  89. .user-box{
  90. display: flex;
  91. align-items: center;
  92. justify-content: flex-end;
  93. font-size: 16px;
  94. width: 350px;
  95. .avatar{
  96. width: 40px;
  97. margin-right: 5px;
  98. }
  99. }
  100. }
  101. }
  102. </style>