NomalMessageItem.vue 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <template>
  2. <view @click="click" class="merge_item">
  3. <my-avatar :src="source.faceURL" :desc="source.senderNickname" size="42" />
  4. <view class="merge_details">
  5. <view class="top_desc">
  6. <text class="send_name">{{ source.senderNickname }}</text>
  7. <text class="send_timer">{{ getSendTime }}</text>
  8. </view>
  9. <view class="message_row">
  10. <view v-if="isMedia">
  11. <MediaMessageRender :message="source" />
  12. </view>
  13. <text v-else class="message_content">{{ getContent }}</text>
  14. <view v-if="isQuoto">
  15. <QuoteMessageRender :message="source" />
  16. </view>
  17. </view>
  18. </view>
  19. </view>
  20. </template>
  21. <script>
  22. import MyAvatar from '../../../components/MyAvatar/index.vue';
  23. import { MessageType } from 'openim-uniapp-polyfill';
  24. import MediaMessageRender from '../chating/components/MessageItem/MediaMessageRender.vue';
  25. import QuoteMessageRender from '../chating/components/MessageItem/QuoteMessageRender.vue';
  26. import { formatConversionTime, parseMessageByType } from '../../../util/imCommon';
  27. export default {
  28. name: '',
  29. components: {
  30. MyAvatar,
  31. MediaMessageRender,
  32. QuoteMessageRender
  33. },
  34. props: {
  35. source: Object
  36. },
  37. data() {
  38. return {};
  39. },
  40. computed: {
  41. getSendTime() {
  42. return formatConversionTime(this.source.sendTime);
  43. },
  44. getContent() {
  45. return parseMessageByType(this.source);
  46. },
  47. isMedia() {
  48. return this.source.contentType === MessageType.PictureMessage || this.source.contentType === MessageType.VideoMessage;
  49. },
  50. isQuoto() {
  51. return this.source.contentType === MessageType.QuoteMessage;
  52. }
  53. },
  54. methods: {
  55. click() {
  56. this.$emit('click', this.source);
  57. }
  58. }
  59. };
  60. </script>
  61. <style lang="scss">
  62. .merge_item {
  63. display: flex;
  64. flex-direction: row;
  65. padding: 24rpx 44rpx;
  66. .merge_details {
  67. @include colBox(false);
  68. flex: 1;
  69. margin-left: 24rpx;
  70. border-bottom: 1px solid #dfdfdf;
  71. padding-bottom: 24rpx;
  72. .top_desc {
  73. display: flex;
  74. justify-content: space-between;
  75. font-size: 28rpx;
  76. .send_name {
  77. @include nomalEllipsis();
  78. max-width: 240rpx;
  79. margin-bottom: 6rpx;
  80. color: $uni-text-color;
  81. }
  82. .send_timer {
  83. color: #999;
  84. }
  85. }
  86. .message_row {
  87. @include colBox(false);
  88. flex-grow: 0;
  89. width: fit-content;
  90. .message_content {
  91. font-size: 28rpx;
  92. color: #666;
  93. }
  94. .quote_content {
  95. width: fit-content;
  96. padding: 6rpx 12rpx;
  97. border-radius: 4rpx;
  98. background-color: #f0f0f0;
  99. margin-top: 12rpx;
  100. }
  101. }
  102. }
  103. }
  104. </style>