send-message.tsx 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import { defineComponent } from "vue";
  2. import { ElInput, ElButton } from "element-plus";
  3. import runtime, * as RuntimeUtils from "/src/components/live-broadcast/runtime";
  4. import styles from "./send-message.module.less";
  5. import runtimeModel, * as RuntimeModel from './model/runtime'
  6. import dayjs from "dayjs";
  7. export default defineComponent({
  8. data() {
  9. return {
  10. message: ''
  11. }
  12. },
  13. methods: {
  14. onKeyDown(e: any) {
  15. if(e.keyCode === 13 && this.message.trim() !== '') {
  16. this.sendMessage()
  17. }
  18. },
  19. async sendMessage() {
  20. try {
  21. await RuntimeUtils.sendMessage(this.message);
  22. const userInfo = RuntimeUtils.getSendMessageUser();
  23. // 添加一条消息记录
  24. RuntimeModel.addMessage({
  25. id: userInfo.id,
  26. name: userInfo.name,
  27. content: this.message,
  28. isSelf: true,
  29. sendTime: dayjs(new Date()).format('HH:mm:ss')
  30. })
  31. this.message = '';
  32. this.scrollToBottom();
  33. } catch (error) {
  34. }
  35. },
  36. scrollToBottom() {
  37. // 默认滚动到底部
  38. this.$nextTick(() => {
  39. document.querySelector('#tabList')?.scrollTo(0, document.querySelector('#messageList')?.scrollHeight || 0)
  40. })
  41. }
  42. },
  43. render() {
  44. return (
  45. <div class={styles.sendMessage}>
  46. <div class={styles.form}>
  47. <ElInput modelValue={this.message} onKeydown={this.onKeyDown} onInput={val => this.message = val} placeholder="请输入消息" />
  48. <ElButton disabled={!this.message} onClick={this.sendMessage} round type="primary">发送</ElButton>
  49. </div>
  50. </div>
  51. )
  52. }
  53. });