message-model.tsx 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import { defineComponent } from "vue";
  2. import { ElTag } from "element-plus";
  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. messageList: [] as any[], // 回复学生列表
  18. loadingMessage: false, // 观看列表状态
  19. }
  20. },
  21. mounted() {
  22. this.loadingMessage = true
  23. event.on(LIVE_EVENT_MESSAGE["RC:TxtMsg"], this.onMessage);
  24. setTimeout(() => {
  25. this.loadingMessage = false;
  26. }, 2000);
  27. },
  28. beforeUnmount() {
  29. event.off(LIVE_EVENT_MESSAGE["RC:TxtMsg"], this.onMessage);
  30. },
  31. methods: {
  32. onMessage(value: any) {
  33. if (value && value.user) {
  34. console.log(state.user)
  35. console.log(value)
  36. const sendTime = dayjs(value.$EventMessage.sentTime || new Date()).format('HH:mm:ss')
  37. let tempObj = {
  38. name: value.user?.name,
  39. id: value.user.id,
  40. isSelf: false,
  41. content: value.content,
  42. sendTime
  43. }
  44. // 判断是否是主播
  45. if (value.user.id === state.user.id) {
  46. tempObj.isSelf = true
  47. }
  48. this.messageList.push(tempObj);
  49. this.loadingMessage = false
  50. }
  51. console.log(this.messageList)
  52. }
  53. },
  54. render() {
  55. return (
  56. <div style={{ minHeight: '100%', position: 'relative' }}>
  57. {this.messageList.length > 0 ? this.messageList.map((item : any) => (
  58. <div class={styles.itemContent}>
  59. <img src="/src/assets/home/placehorder-icon.png" alt="" />
  60. <div class={styles.itemInfo}>
  61. <div class={styles.itemName}>
  62. <p class={styles.userName}>{item.name} {item.isSelf ? <ElTag>主播</ElTag> : null}</p>
  63. <p class={styles.rightTime}>{ item.sendTime }</p>
  64. </div>
  65. <div class={[styles.itemText, item.isSelf ? styles.active : null]}>
  66. { item.content }
  67. </div>
  68. </div>
  69. </div>
  70. )) : this.loadingMessage ? <div class={styles.loadingStyle} v-loading={this.loadingMessage} element-loading-background="rgba(0, 0, 0, 0.8)"></div> : <Empty text="暂无学员互动!" icon="noData-no-message" />}
  71. </div>
  72. )
  73. }
  74. })