look-model.tsx 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import { defineComponent } from "vue";
  2. import * as RuntimeUtils from '/src/components/live-broadcast/runtime'
  3. import styles from './index.module.less'
  4. import event, { LIVE_EVENT_MESSAGE } from '/src/components/live-broadcast/event';
  5. import { state } from '/src/state'
  6. import dayjs from 'dayjs';
  7. import Empty from "/src/components/empty";
  8. export default defineComponent({
  9. props: {
  10. data: {
  11. type: Array,
  12. default: () => ([])
  13. }
  14. },
  15. data() {
  16. return {
  17. lookList: [] as any[], // 观看学生列表
  18. loadingLook: false, // 观看列表状态
  19. }
  20. },
  21. mounted() {
  22. this.loadingLook = true
  23. event.on(LIVE_EVENT_MESSAGE["RC:Chatroom:Welcome"], this.onWelcome);
  24. setTimeout(() => {
  25. this.loadingLook = false;
  26. }, 2000);
  27. },
  28. methods: {
  29. onWelcome(value: any) {
  30. console.log(value)
  31. if (value && value.user) {
  32. const sendTime = dayjs(value.$EventMessage.sentTime || new Date()).format('HH:mm:ss')
  33. let tempObj = {
  34. name: value.user.name,
  35. id: value.user.id,
  36. sendTime
  37. }
  38. // 判断是否有同一个人
  39. let isExist = false;
  40. this.lookList.forEach((item: any) => {
  41. if (item.id === tempObj.id) {
  42. isExist = true
  43. }
  44. })
  45. if (!isExist) {
  46. this.lookList.push(tempObj);
  47. }
  48. this.loadingLook = false
  49. }
  50. }
  51. },
  52. render() {
  53. return (
  54. <div>
  55. {this.lookList.length > 0 ? this.lookList.map((item : any) => (
  56. <div class={styles.itemContent}>
  57. <img src="/src/assets/home/placehorder-icon.png" alt="" />
  58. <div class={styles.itemInfo} >
  59. <div class={styles.itemName}>
  60. <p class={styles.userName}>{item.name}</p>
  61. <a href="javascript:;" onClick={() => RuntimeUtils.sendMessage(
  62. {seatBan:false, ...RuntimeUtils.getSendMessageUser()},
  63. 'SeatsCtrl'
  64. )}>上麦</a>
  65. </div>
  66. </div>
  67. </div>
  68. )) : this.loadingLook ? <div class={styles.loadingStyle} v-loading={this.loadingLook} element-loading-background="rgba(0, 0, 0, 0.8)"></div> : <Empty text="暂无学员观看!" icon="noData-no-user" />}
  69. </div>
  70. )
  71. }
  72. })