loganInfo.tsx 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. import {
  2. defineComponent,
  3. toRefs,
  4. reactive,
  5. onMounted,
  6. ref,
  7. nextTick
  8. } from 'vue'
  9. import {
  10. ElTag,
  11. ElDropdown,
  12. ElDropdownItem,
  13. ElDropdownMenu,
  14. ElMessageBox
  15. } from 'element-plus'
  16. import classes from './index.module.less'
  17. import teacherHeader from '@/common/images/icon_teacher.png'
  18. import { state } from '@/state'
  19. import userBanner from '../images/userBanner.png'
  20. import changeIcon from '../images/changeIcon.png'
  21. import backIcon from '../images/backIcon.png'
  22. import peopleIcon from '../images/peopleIcon.png'
  23. import planIcon from '../images/planIcon.png'
  24. import { getUserInfo, getUserType, getAuth, setAuth } from '@/helpers/utils'
  25. import { useRouter } from 'vue-router'
  26. import request from '@/helpers/request'
  27. import mitt from '@/helpers/mitt'
  28. export default defineComponent({
  29. name: 'loganInfo',
  30. props: {
  31. title: {
  32. type: String,
  33. default: ''
  34. }
  35. },
  36. setup(props, conent) {
  37. const states = reactive({
  38. title: props.title,
  39. user: {} as any,
  40. userType: '',
  41. showChange: false
  42. })
  43. mitt.on('mittFn',()=>{
  44. console.log('mittFn')
  45. setUser()
  46. })
  47. const router = useRouter()
  48. onMounted(() => {
  49. nextTick(() => {
  50. setUser()
  51. })
  52. })
  53. const setUser = ()=>{
  54. states.user = getUserInfo()
  55. states.userType = getUserType()
  56. if (states.user.userType) {
  57. if (
  58. states.user.userType.indexOf('TEACHER') != -1 &&
  59. states.user.userType.indexOf('STUDENT') != -1
  60. ) {
  61. states.showChange = true
  62. } else {
  63. states.showChange = false
  64. }
  65. }
  66. }
  67. const gotoPage = (val: string) => {
  68. router.push({ path: val })
  69. }
  70. const changeRoute = () => {
  71. const token = getAuth()
  72. let userType = ''
  73. let str = ''
  74. if (states.userType == 'TEACHER') {
  75. userType = 'STUDENT'
  76. str = '学生'
  77. } else {
  78. userType = 'TEACHER'
  79. str = '老师'
  80. }
  81. ElMessageBox.confirm(`是否确定切换到${str}?`, '提示', {
  82. type: 'warning'
  83. }).then(() => {
  84. setAuth(
  85. JSON.stringify({
  86. token,
  87. loginUserType: userType
  88. })
  89. )
  90. router.push({ path: '/' })
  91. window.location.reload()
  92. })
  93. }
  94. const logout = async () => {
  95. try {
  96. const res = await request.get('/api-auth/exit', {})
  97. router.push({ path: '/' })
  98. window.location.reload()
  99. } catch (e) {
  100. console.log(e)
  101. }
  102. }
  103. const changeState = (val: string) => {
  104. if (val == 'strudent') {
  105. gotoPage('/studentInfo')
  106. } else if (val == 'teacher') {
  107. gotoPage('/userInfo')
  108. } else if (val == 'change') {
  109. changeRoute()
  110. } else if (val == 'back') {
  111. logout()
  112. }
  113. }
  114. return {
  115. ...toRefs(states),
  116. gotoPage,
  117. changeRoute,
  118. logout,
  119. changeState
  120. }
  121. },
  122. render() {
  123. return (
  124. <>
  125. <ElDropdown
  126. onCommand={val => this.changeState(val)}
  127. v-slots={{
  128. dropdown: () => (
  129. <>
  130. <div class={classes.dropdownWrap}>
  131. <div class={classes.dropdownWrapUser}>
  132. <div class={classes.userInfoWrap}>
  133. <img
  134. src={
  135. this.user.heardUrl
  136. ? this.user.heardUrl
  137. : teacherHeader
  138. }
  139. class={classes.userHeader}
  140. alt=""
  141. />
  142. <p class={classes.title}>{this.user.username}</p>
  143. </div>
  144. <img src={userBanner} alt="" />
  145. </div>
  146. {this.userType == 'TEACHER' ? (
  147. <div class={classes.dropdownInfo}>
  148. <div class={classes.dropdownItem}>
  149. <p class={classes.dropdownItemTitle}>
  150. {this.user.fansNum || 0}
  151. </p>
  152. <p class={classes.dropdownItemsubTitle}>粉丝</p>
  153. </div>
  154. <div class={classes.dropdownItem}>
  155. <p class={classes.dropdownItemTitle}>
  156. {this.user.musicSheetNum || 0}
  157. </p>
  158. <p class={classes.dropdownItemsubTitle}>乐谱</p>
  159. </div>
  160. {/* <div class={classes.dropdownItem}>
  161. <p class={classes.dropdownItemTitle}>134</p>
  162. <p class={classes.dropdownItemsubTitle}>帖子</p>
  163. </div> */}
  164. </div>
  165. ) : null}
  166. <ElDropdownMenu>
  167. {this.userType == 'TEACHER' ? (
  168. <ElDropdownItem command="teacher">
  169. <img
  170. class={classes.dropdownImg}
  171. src={peopleIcon}
  172. alt=""
  173. />{' '}
  174. 个人中心
  175. </ElDropdownItem>
  176. ) : (
  177. <ElDropdownItem command="strudent">
  178. <img
  179. class={classes.dropdownImg}
  180. src={peopleIcon}
  181. alt=""
  182. />{' '}
  183. 个人中心
  184. </ElDropdownItem>
  185. )}
  186. {/* <ElDropdownItem onClick={gotoPage('')}><img class={classes.dropdownImg} src={planIcon} alt="" /> 创作中心</ElDropdownItem> */}
  187. {this.showChange ? (
  188. <ElDropdownItem command="change">
  189. <img
  190. class={classes.dropdownImg}
  191. src={changeIcon}
  192. alt=""
  193. />{' '}
  194. 角色切换
  195. </ElDropdownItem>
  196. ) : null}
  197. <ElDropdownItem command="back" class="backItem">
  198. <div class="backWrap">
  199. <img
  200. class={classes.dropdownImg}
  201. src={backIcon}
  202. alt=""
  203. />{' '}
  204. 退出登录
  205. </div>
  206. </ElDropdownItem>
  207. </ElDropdownMenu>
  208. </div>
  209. </>
  210. )
  211. }}
  212. >
  213. <div class={classes.userInfoWrap}>
  214. <p class={classes.title}>{this.user.username}</p>
  215. <img
  216. src={this.user.heardUrl ? this.user.heardUrl : teacherHeader}
  217. class={classes.userHeader}
  218. alt=""
  219. />
  220. </div>
  221. </ElDropdown>
  222. </>
  223. )
  224. }
  225. })