QuoteMessage.vue 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <template>
  2. <view v-if="quoteMessage && user" class="message-box" @click='scrollTo'>
  3. <view v-if="quoteMessage.messageType === MessageType.text" class="message">
  4. {{ user.name }}:{{ quoteMessage.content }}
  5. </view>
  6. <view v-if="quoteMessage.messageType === MessageType.image" class="message-img">
  7. <text>{{ user.name }}:</text>
  8. <image alt="图片" :src="quoteMessage.extend?.url" style="height: 60rpx;width: 60rpx" />
  9. </view>
  10. <view v-if="quoteMessage.messageType === MessageType.file" class="message">
  11. <text>{{ user.name }}:</text>{{ getFileName(quoteMessage.extend?.fileName) }}
  12. </view>
  13. <view v-if="quoteMessage.messageType === MessageType.video" class="message-img">
  14. <text>{{ user.name }}:</text>
  15. <video style="height: 100%">
  16. <source :src="quoteMessage.extend?.url" type="video/mp4" />
  17. </video>
  18. </view>
  19. <view v-if="quoteMessage.messageType === MessageType.voice" class="message">
  20. <view>
  21. <text>{{ user.name }}:</text>
  22. <text class="cuIcon-sound text-xxl" :class="{ 'icon-v-voice-right': quoteMessage.mine }"></text>
  23. </view>
  24. </view>
  25. </view>
  26. </template>
  27. <script setup lang="ts">
  28. import {ref} from 'vue'
  29. import MessageType from '../utils/MessageType'
  30. import {storeToRefs} from 'pinia'
  31. import {useUserStore} from '@/store/userStore'
  32. import {getFileName} from '@/utils/FileUtils'
  33. import type Message from "@/mode/Message";
  34. import {last} from "@/hooks/useMessageImageLoad";
  35. import type UserSimple from "@/mode/UserSimple";
  36. const { userMap } = storeToRefs(useUserStore())
  37. interface IProps{
  38. message:Message
  39. }
  40. const props = defineProps<IProps>();
  41. const quoteMessage = ref<Message|undefined>(props.message.extend?.quoteMessage)
  42. const user = ref<UserSimple>()
  43. if(quoteMessage.value){
  44. user.value = userMap.value.get(quoteMessage.value?.fromId)
  45. }
  46. const scrollTo = () => {
  47. last.value = 'm-' + props.message.extend?.quoteMessage?.id
  48. }
  49. </script>
  50. <style scoped lang="scss">
  51. .message-box {
  52. cursor: pointer;
  53. flex: 1;
  54. overflow: hidden;
  55. background-color: #e9e9e9;
  56. margin-top: 10px;
  57. padding: 5px 11px;
  58. color: #999999;
  59. font-size: 24rpx;
  60. .message {
  61. overflow: hidden;
  62. text-overflow: ellipsis;
  63. white-space: nowrap;
  64. display: inline-block;
  65. max-width: 100%;
  66. }
  67. .message-img {
  68. line-height: 30px;
  69. white-space: nowrap;
  70. display: inline-flex;
  71. padding: 0 11px;
  72. max-width: 620px;
  73. }
  74. }
  75. </style>