index.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <template>
  2. <page-meta :root-font-size="$store.getters.storeRootFontSize"></page-meta>
  3. <view class="page_container">
  4. <custom-nav-bar :title="navTitle" />
  5. <u-list @scrolltolower="scrolltolower" lowerThreshold="100" class="notify_list" height="1">
  6. <u-list-item v-for="(message, index) in getRenderList" :key="message.clientMsgID+index">
  7. <view v-if="getTimeLine" class="time_gap_line">
  8. {{ getTimeLine(message, getRenderList[index - 1]) }}
  9. </view>
  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. import dayjs from 'dayjs';
  20. export default {
  21. components: {
  22. CustomNavBar,
  23. NotifyMessageRender
  24. },
  25. data() {
  26. return {
  27. loading: false,
  28. navTitle:"系统通知"
  29. };
  30. },
  31. computed: {
  32. ...mapGetters(['storeCurrentConversation', 'storeHistoryMessageList', 'storeHasMoreMessage', 'storeCurrentUserID']),
  33. getRenderList() {
  34. return this.storeHistoryMessageList.reverse();
  35. },
  36. getTimeLine() {
  37. return (message, preMessage) => {
  38. const sendTime = message.sendTime;
  39. const preSendTime = preMessage?.sendTime;
  40. console.log("qxj sendTime:"+sendTime+" preSendTime:"+preSendTime);
  41. // 只在时间间隔大于10分钟时才显示时间线
  42. if ((preSendTime && sendTime - preSendTime > 600000) || preSendTime==undefined) {
  43. const now = dayjs();
  44. const messageDate = dayjs(sendTime);
  45. // 检查是否在今天
  46. if (messageDate.isSame(now, 'day')) {
  47. // 检查是否在几秒内
  48. if (now.diff(messageDate, 'second') < 60) {
  49. return '刚刚';
  50. }
  51. // 今天且大于一分钟,显示小时:分钟
  52. return messageDate.format('HH:mm');
  53. }
  54. // 检查是否是昨天
  55. if (messageDate.isSame(now.subtract(1, 'day'), 'day')) {
  56. return '昨天 ' + messageDate.format('HH:mm');
  57. }
  58. // 检查是否在今年
  59. if (messageDate.isSame(now, 'year')) {
  60. // 今年但不是今天或昨天,显示月日 小时:分钟
  61. return messageDate.format('MM-DD HH:mm');
  62. }
  63. // 今年以前,显示年月日 小时:分钟
  64. return messageDate.format('YYYY-MM-DD HH:mm');
  65. }
  66. return null;
  67. };
  68. }
  69. },
  70. onLoad() {
  71. this.loadMessageList();
  72. },
  73. onUnload() {
  74. this.resetConversationState();
  75. this.resetMessageState();
  76. },
  77. methods: {
  78. ...mapActions('conversation', ['resetConversationState']),
  79. ...mapActions('message', ['getHistoryMesageList', 'resetMessageState']),
  80. scrolltolower() {
  81. if (!this.loading && this.storeHasMoreMessage) {
  82. this.loadMessageList(true);
  83. }
  84. },
  85. async loadMessageList(isLoadMore = false) {
  86. this.loading = true;
  87. const options = {
  88. conversationID: this.storeCurrentConversation.conversationID,
  89. count: 20,
  90. startClientMsgID: this.storeHistoryMessageList[0]?.clientMsgID ?? '',
  91. viewType: 0
  92. };
  93. try {
  94. const { emptyFlag } = await this.getHistoryMesageList(options);
  95. } catch (e) {
  96. console.log(e);
  97. }
  98. this.loading = false;
  99. }
  100. }
  101. };
  102. </script>
  103. <style lang="scss" scoped>
  104. .page_container {
  105. @include colBox(false);
  106. height: 100vh;
  107. background-color: #f8f8f8;
  108. .notify_list {
  109. flex: 1;
  110. padding-top: 14rpx;
  111. padding-bottom: 20rpx;
  112. }
  113. }
  114. .time_gap_line {
  115. position: relative;
  116. padding: 0 10vw 0rpx;
  117. text-align: center;
  118. font-size: 13px;
  119. color: #A5A5A5;
  120. }
  121. </style>