layoutTop.tsx 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  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. const info = users.getUserInfo;
  21. const gotoPerson = () => {
  22. router.push({ path: '/setting', query: { activeTab: 'person' } });
  23. };
  24. const gotoSchool = () => {
  25. router.push({ path: '/setting', query: { activeTab: 'school' } });
  26. };
  27. const resetPwd = () => {
  28. console.log('resetPwd');
  29. };
  30. return () => (
  31. <>
  32. <div class={styles.layoutTop}>
  33. <div class={styles.layoutLeft}>
  34. <NImage
  35. src={schoolIcon}
  36. class={styles.schoolIcon}
  37. previewDisabled></NImage>
  38. <p>
  39. {info.schoolInfos[0].tenantName} | {info.schoolInfos[0].name}
  40. </p>
  41. </div>
  42. <div class={styles.layoutRight}>
  43. <NBadge
  44. value={8}
  45. max={99}
  46. class={styles.messageBadge}
  47. color={'#FF1036'}>
  48. <NImage
  49. class={[styles.messageIcon]}
  50. preview-disabled
  51. src={messageIcon}></NImage>
  52. </NBadge>
  53. <div class={styles.line}></div>
  54. <NPopover
  55. show-arrow={false}
  56. trigger="hover"
  57. onUpdate:show={val => {
  58. showHeadFlag.value = val;
  59. }}
  60. class={styles.popoverHeader}
  61. placement="bottom-end"
  62. raw={true}
  63. v-slots={{
  64. trigger: () => (
  65. <div class={styles.mesgWrap}>
  66. <NImage
  67. preview-disabled
  68. class={styles.teacherIcon}
  69. src={info.avatar ? info.avatar : teacherIcon}></NImage>
  70. <NIcon
  71. class={
  72. showHeadFlag.value
  73. ? styles.rotueLeft
  74. : styles.rotueRight
  75. }>
  76. <svg
  77. xmlns="http://www.w3.org/2000/svg"
  78. viewBox="0 0 24 24">
  79. <path
  80. 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"
  81. fill="currentColor"></path>
  82. </svg>
  83. </NIcon>
  84. </div>
  85. )
  86. }}>
  87. <div class={styles.propWrap}>
  88. <div class={styles.teacherInfo}>
  89. <NImage
  90. class={styles.teacherIcon}
  91. src={info.avatar ? info.avatar : teacherIcon}
  92. previewDisabled></NImage>
  93. <p class={styles.teacherName}>{info.nickname}</p>
  94. </div>
  95. <div class={styles.propWrapList}>
  96. <div class={styles.propWrapItem} onClick={() => gotoPerson()}>
  97. {' '}
  98. <NImage
  99. class={styles.smallIcon}
  100. src={personIcon}
  101. previewDisabled></NImage>
  102. <p class={styles.smallTitle}>个人信息</p>
  103. </div>
  104. {info.isSuperAdmin ? (
  105. <div
  106. class={styles.propWrapItem}
  107. onClick={() => {
  108. gotoSchool();
  109. }}>
  110. {' '}
  111. <NImage
  112. class={styles.smallIcon}
  113. src={schoolDot}
  114. previewDisabled></NImage>
  115. <p class={styles.smallTitle}>学校信息</p>
  116. </div>
  117. ) : null}
  118. <div class={styles.propWrapItem} onClick={() => resetPwd()}>
  119. {' '}
  120. <NImage
  121. class={styles.smallIcon}
  122. src={clockIcon}
  123. previewDisabled></NImage>
  124. <p class={styles.smallTitle}>修改密码</p>
  125. </div>
  126. </div>
  127. <div
  128. class={styles.logoutInfo}
  129. onClick={() => {
  130. users.logout();
  131. router.replace('/login');
  132. }}>
  133. <div class={styles.propWrapItem}>
  134. <NImage
  135. class={styles.smallIcon}
  136. src={closeIcon}
  137. previewDisabled></NImage>
  138. <p class={styles.smallTitle}>退出登录</p>
  139. </div>
  140. </div>
  141. </div>
  142. </NPopover>
  143. </div>
  144. </div>
  145. </>
  146. );
  147. }
  148. });