index.tsx 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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. export default defineComponent({
  11. methods: {
  12. async loginOut() {
  13. try {
  14. await request.post('/api-auth/exit', { data: {} });
  15. RuntimeUtils.closeDevice('camera')
  16. RuntimeUtils.closeDevice('microphone')
  17. ElMessage.success('退出成功');
  18. removeToken();
  19. (this as any).$router.push({
  20. path: '/login',
  21. query: {
  22. ...this.$route.query
  23. }
  24. });
  25. } catch(e) {
  26. // TODO: handle error
  27. }
  28. }
  29. },
  30. render() {
  31. return (
  32. <div class={styles.liveHeader}>
  33. <div class={styles.liveHeaderLeft}>
  34. <div class={styles.liveHeaderLeftIcon}>
  35. <img class={styles.liveLogo} src={state.user?.tenantLogo} alt=""/>
  36. {state.user?.tenantName}
  37. </div>
  38. <div class={styles.liveHeaderLeftText}>
  39. 《{state.user?.roomTitle}》
  40. </div>
  41. </div>
  42. <ElDropdown trigger={'hover'}
  43. // @ts-ignore
  44. vSlots={{
  45. dropdown: () => (
  46. <ElDropdownMenu>
  47. <ElDropdownItem command="1" onClick={this.loginOut}>
  48. <span>安全退出</span>
  49. </ElDropdownItem>
  50. </ElDropdownMenu>
  51. )
  52. }}>
  53. <div class={styles.avatarWrapper}>
  54. <img class={styles.userAvatar} src="/src/assets/home/placehorder-icon.png" />
  55. <span>{ state.user?.speakerName }</span>
  56. </div>
  57. </ElDropdown>
  58. </div>
  59. )
  60. }
  61. })