message-model.tsx 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import { defineComponent } from "vue";
  2. import { ElTag } from "element-plus";
  3. // import VirtualList from 'vue-virtual-list-v3';
  4. // import VirtualList from 'vue3-virtual-list'
  5. import { RecycleScroller } from 'vue-virtual-scroller'
  6. import styles from './index.module.less'
  7. import event, { LIVE_EVENT_MESSAGE } from '/src/components/live-broadcast/event';
  8. import { state } from '/src/state'
  9. import dayjs from 'dayjs';
  10. import Empty from "/src/components/empty";
  11. export default defineComponent({
  12. props: {
  13. data: {
  14. type: Array,
  15. default: () => ([])
  16. }
  17. },
  18. data() {
  19. return {
  20. messageList: [] as any[], // 回复学生列表
  21. loadingMessage: false, // 观看列表状态
  22. }
  23. },
  24. mounted() {
  25. this.loadingMessage = true
  26. event.on(LIVE_EVENT_MESSAGE["RC:TxtMsg"], this.onMessage);
  27. setTimeout(() => {
  28. this.loadingMessage = false;
  29. }, 2000);
  30. },
  31. beforeUnmount() {
  32. event.off(LIVE_EVENT_MESSAGE["RC:TxtMsg"], this.onMessage);
  33. },
  34. methods: {
  35. onMessage(value: any) {
  36. if (value && value.user) {
  37. console.log(state.user)
  38. console.log(value)
  39. const sendTime = dayjs(value.$EventMessage.sentTime || new Date()).format('HH:mm:ss')
  40. let tempObj = {
  41. name: value.user?.name,
  42. id: value.user.id,
  43. isSelf: false,
  44. content: value.content,
  45. sendTime
  46. }
  47. // 判断是否是主播
  48. if (value.user.id === state.user.id) {
  49. tempObj.isSelf = true
  50. }
  51. this.messageList.push(tempObj);
  52. this.loadingMessage = false
  53. }
  54. console.log(this.messageList)
  55. }
  56. },
  57. render() {
  58. return (
  59. // <RecycleScroller class="virtual-list"
  60. // style="height: 185px"
  61. // item-height={85}
  62. // items={this.messageList}
  63. // key-field="id"
  64. // >
  65. // <div style={{ color: '#fff' }}>showInfo</div>
  66. // </RecycleScroller>
  67. // <VirtualList class="list-dynamic scroll-touch"
  68. // :data-key="'id'"
  69. // :data-sources="items"
  70. // :estimate-size="80"
  71. // :item-class="'list-item-dynamic'"
  72. // ref="virtualList"
  73. // >
  74. // <template #={source}>
  75. // <div class="item-inner">
  76. // <div class="head">
  77. // <span># {{ source.index }}</span>
  78. // <span>{{ source.name }}</span>
  79. // </div>
  80. // <div class="desc">{{ source.desc }}</div>
  81. // </div>
  82. // </template>
  83. // </VirtualList>
  84. // <VirtualList class={styles.itemContent}
  85. // dataKey="id"
  86. // dataSources={this.messageList}
  87. // estimateSize="85"
  88. // itemClass="'itemInfo'"
  89. // ref="virtualList">
  90. // <template v-slot={source}>
  91. // <div style={{ color: 'red' }}>
  92. // { source }
  93. // </div>
  94. // </template>
  95. // </VirtualList>
  96. <div style={{ minHeight: '100%', position: 'relative' }}>
  97. {this.messageList.length > 0 ? this.messageList.map((item : any) => (
  98. <div class={styles.itemContent}>
  99. {/* <img src="/src/assets/home/placeholder-icon.png" alt="" /> */}
  100. <div class={styles.itemInfo}>
  101. <div class={styles.itemName}>
  102. <p class={styles.userName}>{item.name} {item.isSelf ? <ElTag>主播</ElTag> : null}</p>
  103. <p class={styles.rightTime}>{ item.sendTime }</p>
  104. </div>
  105. <div class={[styles.itemText, item.isSelf ? styles.active : null]}>
  106. { item.content }
  107. </div>
  108. </div>
  109. </div>
  110. )) : this.loadingMessage ? <div class={styles.loadingStyle} v-loading={this.loadingMessage} element-loading-background="rgba(0, 0, 0, 0.8)"></div> : <Empty style={{ paddingTop: '120px' }} text="暂无学员互动!" icon="noData-no-message" />}
  111. </div>
  112. )
  113. }
  114. })
  115. function source(source: any) {
  116. throw new Error("Function not implemented.");
  117. }