ui.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. /**
  2. * 用户处理消息的收发UI更新
  3. */
  4. export default class UI {
  5. constructor(page) {
  6. this._page = page;
  7. }
  8. /**
  9. * 接收到消息时,更新UI
  10. * @param msg
  11. */
  12. updateViewWhenReceive(msg) {
  13. this._page.data.chatItems.push(msg);
  14. this._page.setData({
  15. chatItems: this._page.data.chatItems.sort(UI._sortMsgListByTimestamp),
  16. scrollTopVal: this._page.data.chatItems.length * 999,
  17. });
  18. }
  19. /**
  20. * 发送消息时,渲染消息的发送状态为 发送中
  21. * @param sendMsg
  22. */
  23. async showItemForMoment(sendMsg) {
  24. if (!sendMsg) return;
  25. this.updateDataWhenStartSending(sendMsg);
  26. return {itemIndex: this._page.data.chatItems.length - 1};
  27. }
  28. /**
  29. * 设置消息发送状态为 发送中
  30. * @param sendMsg
  31. * @param addToArr
  32. * @param needScroll
  33. */
  34. updateDataWhenStartSending(sendMsg, addToArr = true, needScroll = true) {
  35. this._page.chatInput.closeExtraView();
  36. sendMsg.sendStatus = 'sending';
  37. addToArr && this._page.data.chatItems.push(sendMsg);
  38. let obj = {};
  39. obj['textMessage'] = '';
  40. obj['chatItems'] = this._page.data.chatItems;
  41. needScroll && (obj['scrollTopVal'] = this._page.data.chatItems.length * 999);
  42. this._page.setData(obj);
  43. }
  44. /**
  45. * 设置消息发送状态为 发送成功
  46. * @param sendMsg
  47. * @param itemIndex
  48. */
  49. updateViewWhenSendSuccess(sendMsg, itemIndex) {
  50. console.log('发送成功', sendMsg);
  51. let that = this._page;
  52. let item = that.data.chatItems[itemIndex];
  53. item.timestamp = sendMsg.timestamp;
  54. this.updateSendStatusView('success', itemIndex);
  55. }
  56. updateListViewBySort() {
  57. this._page.setData({
  58. chatItems: this._page.data.chatItems.sort(UI._sortMsgListByTimestamp)
  59. })
  60. }
  61. /**
  62. * 设置消息发送状态为 发送失败
  63. * @param itemIndex
  64. */
  65. updateViewWhenSendFailed(itemIndex) {
  66. this.updateSendStatusView('failed', itemIndex);
  67. }
  68. updateSendStatusView(status, itemIndex) {
  69. let that = this._page;
  70. that.data.chatItems[itemIndex].sendStatus = status;
  71. let obj = {};
  72. obj[`chatItems[${itemIndex}].sendStatus`] = status;
  73. that.setData(obj);
  74. }
  75. updateChatStatus(content, open = true) {
  76. this._page.setData({
  77. chatStatue: open ? 'open' : 'close',
  78. chatStatusContent: content
  79. })
  80. }
  81. static _sortMsgListByTimestamp(item1, item2) {
  82. return item1.timestamp - item2.timestamp;
  83. }
  84. }