NomalMessageItem.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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 { mapGetters } from "vuex";
  27. import {
  28. formatConversionTime,
  29. parseMessageByType,
  30. } from "../../../util/imCommon";
  31. export default {
  32. name: "",
  33. components: {
  34. MyAvatar,
  35. MediaMessageRender,
  36. QuoteMessageRender
  37. },
  38. props: {
  39. source: Object,
  40. },
  41. data() {
  42. return {};
  43. },
  44. computed: {
  45. ...mapGetters(["storeCurrentUserID"]),
  46. getSendTime() {
  47. return formatConversionTime(this.source.sendTime);
  48. },
  49. getContent() {
  50. return parseMessageByType(this.source, this.storeCurrentUserID);
  51. },
  52. isMedia() {
  53. return this.source.contentType === MessageType.PictureMessage || this.source.contentType === MessageType.VideoMessage
  54. },
  55. isQuoto() {
  56. return this.source.contentType === MessageType.QuoteMessage
  57. }
  58. },
  59. methods: {
  60. click() {
  61. this.$emit("click", this.source);
  62. },
  63. },
  64. };
  65. </script>
  66. <style lang="scss">
  67. .merge_item {
  68. display: flex;
  69. flex-direction: row;
  70. padding: 24rpx 44rpx;
  71. .merge_details {
  72. @include colBox(false);
  73. flex: 1;
  74. margin-left: 24rpx;
  75. border-bottom: 1px solid #dfdfdf;
  76. padding-bottom: 24rpx;
  77. .top_desc {
  78. display: flex;
  79. justify-content: space-between;
  80. font-size: 28rpx;
  81. .send_name {
  82. @include nomalEllipsis();
  83. max-width: 240rpx;
  84. margin-bottom: 6rpx;
  85. color: $uni-text-color;
  86. }
  87. .send_timer {
  88. color: #999;
  89. }
  90. }
  91. .message_row {
  92. @include colBox(false);
  93. flex-grow: 0;
  94. width: fit-content;
  95. .message_content {
  96. font-size: 28rpx;
  97. color: #666;
  98. }
  99. .quote_content {
  100. width: fit-content;
  101. padding: 6rpx 12rpx;
  102. border-radius: 4rpx;
  103. background-color: #f0f0f0;
  104. margin-top: 12rpx;
  105. }
  106. }
  107. }
  108. }
  109. </style>