index.tsx 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import { defineComponent } from "vue";
  2. import { ElDropdownMenu, ElDropdown, ElDropdownItem, ElMessage } from "element-plus";
  3. import router from "/src/router";
  4. import styles from './index.module.less';
  5. import request from '/src/helpers/request';
  6. import runtime, * as RuntimeUtils from "/src/components/live-broadcast/runtime";
  7. import { removeToken } from "/src/utils/auth";
  8. import { removeMedia } from '/src/components/live-broadcast/helpers'
  9. import { state } from '/src/state'
  10. import userLogo from '/src/assets/home/placehorder-icon.png'
  11. export default defineComponent({
  12. methods: {
  13. async loginOut() {
  14. try {
  15. await RuntimeUtils.leaveIMRoom()
  16. try {
  17. await request.post('/api-auth/exit', { data: {} });
  18. } catch {}
  19. RuntimeUtils.closeDevice('camera')
  20. RuntimeUtils.closeDevice('microphone')
  21. state.user = null
  22. runtime.syncLikeTimer && clearTimeout(runtime.syncLikeTimer)
  23. ElMessage.success('退出成功');
  24. removeToken();
  25. (this as any).$router.push({
  26. path: '/login',
  27. query: {
  28. ...this.$route.query
  29. }
  30. });
  31. } catch(e) {
  32. // TODO: handle error
  33. }
  34. }
  35. },
  36. render() {
  37. return (
  38. <div class={styles.liveHeader}>
  39. <div class={styles.liveHeaderLeft}>
  40. <div class={styles.liveHeaderLeftIcon}>
  41. <img class={styles.liveLogo} src={state.user?.tenantLogo} alt=""/>
  42. {state.user?.tenantName}
  43. </div>
  44. <div class={styles.liveHeaderLeftText}>
  45. 《{state.user?.roomTitle}》
  46. </div>
  47. </div>
  48. <ElDropdown trigger={'hover'}
  49. // @ts-ignore
  50. vSlots={{
  51. dropdown: () => (
  52. <ElDropdownMenu>
  53. <ElDropdownItem command="1" onClick={this.loginOut}>
  54. <span>安全退出</span>
  55. </ElDropdownItem>
  56. </ElDropdownMenu>
  57. )
  58. }}>
  59. <div class={styles.avatarWrapper}>
  60. {state.user?.speakerPic ? <img class={styles.userAvatar} src={state.user?.speakerPic} /> : <img class={styles.userAvatar} src={userLogo} />}
  61. <span>{ state.user?.speakerName }</span>
  62. </div>
  63. </ElDropdown>
  64. </div>
  65. )
  66. }
  67. })