layoutTop.tsx 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. import { defineComponent, ref } from 'vue';
  2. import styles from './index.module.less';
  3. import { NImage, NBadge, NPopover, NIcon, NModal, NTooltip } 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 { storeToRefs } from 'pinia';
  14. import 'animate.css';
  15. import ForgotPassword from '/src/views/setting/modal/forgotPassword';
  16. export default defineComponent({
  17. name: 'layoutTop',
  18. setup() {
  19. const router = useRouter();
  20. const showHeadFlag = ref(false);
  21. const users = useUserStore();
  22. const showWord = ref(false);
  23. const { info } = storeToRefs(users);
  24. console.log(info.value, 'info');
  25. const gotoPerson = () => {
  26. router.push({ path: '/setting', query: { activeTab: 'person' } });
  27. };
  28. const gotoSchool = () => {
  29. router.push({ path: '/setting', query: { activeTab: 'school' } });
  30. };
  31. const resetPwd = () => {
  32. showWord.value = true;
  33. console.log('resetPwd');
  34. };
  35. return () => (
  36. <>
  37. <div class={styles.layoutTop}>
  38. <div class={styles.layoutLeft}>
  39. <NImage
  40. src={schoolIcon}
  41. class={styles.schoolIcon}
  42. previewDisabled></NImage>
  43. <p>
  44. {info.value.schoolInfos[0].tenantName} |{' '}
  45. {info.value.schoolInfos[0].name}
  46. </p>
  47. </div>
  48. <div class={styles.layoutRight}>
  49. <NBadge
  50. value={8}
  51. max={99}
  52. class={styles.messageBadge}
  53. {...{id:"home-2"}}
  54. color={'#FF1036'}>
  55. <NImage
  56. class={[styles.messageIcon]}
  57. preview-disabled
  58. src={messageIcon}></NImage>
  59. </NBadge>
  60. <div class={styles.line}></div>
  61. <NPopover
  62. show-arrow={false}
  63. trigger="click"
  64. onUpdate:show={val => {
  65. showHeadFlag.value = val;
  66. }}
  67. class={styles.popoverHeader}
  68. placement="bottom-end"
  69. raw={true}
  70. v-slots={{
  71. trigger: () => (
  72. <div class={styles.mesgWrap}>
  73. <NImage
  74. preview-disabled
  75. class={styles.teacherIcon}
  76. src={
  77. info.value.avatar ? info.value.avatar : teacherIcon
  78. }></NImage>
  79. <NIcon
  80. class={
  81. showHeadFlag.value
  82. ? styles.rotueLeft
  83. : styles.rotueRight
  84. }>
  85. <svg
  86. xmlns="http://www.w3.org/2000/svg"
  87. viewBox="0 0 24 24">
  88. <path
  89. 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"
  90. fill="currentColor"></path>
  91. </svg>
  92. </NIcon>
  93. </div>
  94. )
  95. }}>
  96. <div class={styles.propWrap}>
  97. <div class={styles.teacherInfo}>
  98. <NImage
  99. class={styles.teacherIcon}
  100. src={info.value.avatar ? info.value.avatar : teacherIcon}
  101. previewDisabled></NImage>
  102. <NTooltip class={styles.nameTool}>
  103. {{
  104. trigger: () => (
  105. <p class={styles.teacherName}>{info.value.nickname}</p>
  106. ),
  107. default: () => info.value.nickname
  108. }}
  109. </NTooltip>
  110. </div>
  111. <div class={styles.propWrapList}>
  112. <div class={styles.propWrapItem} onClick={() => gotoPerson()}>
  113. {' '}
  114. <NImage
  115. class={styles.smallIcon}
  116. src={personIcon}
  117. previewDisabled></NImage>
  118. <p class={styles.smallTitle}>个人信息</p>
  119. </div>
  120. {info.value.isSuperAdmin ? (
  121. <div
  122. class={styles.propWrapItem}
  123. onClick={() => {
  124. gotoSchool();
  125. }}>
  126. {' '}
  127. <NImage
  128. class={styles.smallIcon}
  129. src={schoolDot}
  130. previewDisabled></NImage>
  131. <p class={styles.smallTitle}>学校信息</p>
  132. </div>
  133. ) : null}
  134. <div class={styles.propWrapItem} onClick={() => resetPwd()}>
  135. {' '}
  136. <NImage
  137. class={styles.smallIcon}
  138. src={clockIcon}
  139. previewDisabled></NImage>
  140. <p class={styles.smallTitle}>修改密码</p>
  141. </div>
  142. </div>
  143. <div
  144. class={styles.logoutInfo}
  145. onClick={() => {
  146. users.logout();
  147. router.replace('/login');
  148. }}>
  149. <div class={styles.propWrapItem}>
  150. <NImage
  151. class={styles.smallIcon}
  152. src={closeIcon}
  153. previewDisabled></NImage>
  154. <p class={styles.smallTitle}>退出登录</p>
  155. </div>
  156. </div>
  157. </div>
  158. </NPopover>
  159. </div>
  160. <NModal
  161. class={styles.changePwdModal}
  162. v-model:show={showWord.value}
  163. preset="dialog"
  164. showIcon={false}
  165. title="修改密码">
  166. <ForgotPassword
  167. phone={info.value.phone}
  168. onClose={() => {
  169. showWord.value = false;
  170. }}
  171. />
  172. </NModal>
  173. </div>
  174. </>
  175. );
  176. }
  177. });