layoutTop.tsx 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. import { defineComponent, ref } from 'vue';
  2. import styles from './index.module.less';
  3. import { NImage, NBadge, NPopover, NIcon } from 'naive-ui';
  4. import schoolIcon from './images/schoolIcon.png';
  5. import teacherIcon from './images/teacherIcon.png';
  6. import messageIcon from './images/messageIcon.png';
  7. import closeIcon from './images/closeIcon.png';
  8. import clockIcon from './images/clockIcon.png';
  9. import schoolDot from './images/schoolDot.png';
  10. import personIcon from './images/personIcon.png';
  11. import { useUserStore } from '@/store/modules/users';
  12. import { useRouter } from 'vue-router';
  13. import 'animate.css';
  14. export default defineComponent({
  15. name: 'layoutTop',
  16. setup() {
  17. const router = useRouter();
  18. const showHeadFlag = ref(false);
  19. const users = useUserStore();
  20. return () => (
  21. <>
  22. <div class={styles.layoutTop}>
  23. <div class={styles.layoutLeft}>
  24. <NImage src={schoolIcon} class={styles.schoolIcon}></NImage>
  25. <p>武汉市武昌区教育局 | 武汉小学</p>
  26. </div>
  27. <div class={styles.layoutRight}>
  28. <NBadge
  29. value={8}
  30. max={99}
  31. class={styles.messageBadge}
  32. color={'#FF1036'}>
  33. <NImage
  34. class={[styles.messageIcon]}
  35. preview-disabled
  36. src={messageIcon}></NImage>
  37. </NBadge>
  38. <div class={styles.line}></div>
  39. <NPopover
  40. show-arrow={false}
  41. trigger="hover"
  42. onUpdate:show={val => {
  43. showHeadFlag.value = val;
  44. }}
  45. class={styles.popoverHeader}
  46. placement="bottom-end"
  47. raw={true}
  48. v-slots={{
  49. trigger: () => (
  50. <div class={styles.mesgWrap}>
  51. <NImage
  52. preview-disabled
  53. class={styles.teacherIcon}
  54. src={teacherIcon}></NImage>
  55. <NIcon
  56. class={
  57. showHeadFlag.value
  58. ? styles.rotueLeft
  59. : styles.rotueRight
  60. }>
  61. <svg
  62. xmlns="http://www.w3.org/2000/svg"
  63. viewBox="0 0 24 24">
  64. <path
  65. d="M7.38 21.01c.49.49 1.28.49 1.77 0l8.31-8.31a.996.996 0 0 0 0-1.41L9.15 2.98c-.49-.49-1.28-.49-1.77 0s-.49 1.28 0 1.77L14.62 12l-7.25 7.25c-.48.48-.48 1.28.01 1.76z"
  66. fill="currentColor"></path>
  67. </svg>
  68. </NIcon>
  69. </div>
  70. )
  71. }}>
  72. <div class={styles.propWrap}>
  73. <div class={styles.teacherInfo}>
  74. <NImage
  75. class={styles.teacherIcon}
  76. src={teacherIcon}
  77. previewDisabled></NImage>
  78. <p class={styles.teacherName}>张晚意</p>
  79. </div>
  80. <div class={styles.propWrapList}>
  81. <div class={styles.propWrapItem}>
  82. {' '}
  83. <NImage
  84. class={styles.smallIcon}
  85. src={personIcon}
  86. previewDisabled></NImage>
  87. <p class={styles.smallTitle}>个人信息</p>
  88. </div>
  89. <div class={styles.propWrapItem}>
  90. {' '}
  91. <NImage
  92. class={styles.smallIcon}
  93. src={schoolDot}
  94. previewDisabled></NImage>
  95. <p class={styles.smallTitle}>学校信息</p>
  96. </div>
  97. <div class={styles.propWrapItem}>
  98. {' '}
  99. <NImage
  100. class={styles.smallIcon}
  101. src={clockIcon}
  102. previewDisabled></NImage>
  103. <p class={styles.smallTitle}>修改密码</p>
  104. </div>
  105. </div>
  106. <div
  107. class={styles.logoutInfo}
  108. onClick={() => {
  109. users.logout();
  110. router.replace('/login');
  111. }}>
  112. <div class={styles.propWrapItem}>
  113. <NImage
  114. class={styles.smallIcon}
  115. src={closeIcon}
  116. previewDisabled></NImage>
  117. <p class={styles.smallTitle}>退出登录</p>
  118. </div>
  119. </div>
  120. </div>
  121. </NPopover>
  122. </div>
  123. </div>
  124. </>
  125. );
  126. }
  127. });