index.vue 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <template>
  2. <view class="page_container">
  3. <custom-nav-bar :title="storeCurrentConversation.showName" />
  4. <u-list
  5. @scrolltolower="scrolltolower"
  6. lowerThreshold="100"
  7. class="notify_list"
  8. height="1">
  9. <u-list-item v-for="message in getRenderList" :key="message.clientMsgID">
  10. <notify-message-render :source="message" />
  11. </u-list-item>
  12. </u-list>
  13. </view>
  14. </template>
  15. <script>
  16. import { mapGetters, mapActions } from "vuex";
  17. import CustomNavBar from "../../../components/CustomNavBar/index.vue";
  18. import NotifyMessageRender from "./NotifyMessageRender.vue";
  19. export default {
  20. components: {
  21. CustomNavBar,
  22. NotifyMessageRender,
  23. },
  24. data() {
  25. return {
  26. loading: false,
  27. };
  28. },
  29. computed: {
  30. ...mapGetters([
  31. "storeCurrentConversation",
  32. "storeHistoryMessageList",
  33. "storeHasMoreMessage",
  34. "storeCurrentUserID",
  35. ]),
  36. getRenderList() {
  37. return this.storeHistoryMessageList.reverse();
  38. },
  39. },
  40. onLoad() {
  41. this.loadMessageList();
  42. },
  43. onUnload() {
  44. this.resetConversationState();
  45. this.resetMessageState();
  46. },
  47. methods: {
  48. ...mapActions("conversation", ["resetConversationState"]),
  49. ...mapActions("message", ["getHistoryMesageList", "resetMessageState"]),
  50. scrolltolower() {
  51. if (!this.loading && this.storeHasMoreMessage) {
  52. this.loadMessageList(true);
  53. }
  54. },
  55. async loadMessageList(isLoadMore = false) {
  56. this.loading = true;
  57. const options = {
  58. conversationID: this.storeCurrentConversation.conversationID,
  59. count: 20,
  60. startClientMsgID: this.storeHistoryMessageList[0]?.clientMsgID ?? "",
  61. viewType: 0,
  62. };
  63. try {
  64. const { emptyFlag } = await this.getHistoryMesageList(options);
  65. } catch (e) {
  66. console.log(e);
  67. }
  68. this.loading = false;
  69. },
  70. },
  71. };
  72. </script>
  73. <style lang="scss" scoped>
  74. .page_container {
  75. @include colBox(false);
  76. height: 100vh;
  77. background-color: #f8f8f8;
  78. .notify_list {
  79. flex: 1;
  80. margin-top: 24rpx;
  81. }
  82. }
  83. </style>