message-video.vue 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <template>
  2. <div class="message-video">
  3. <div
  4. class="message-video-box"
  5. @click="handlerVideoPlay"
  6. >
  7. <image
  8. :src="props.content.snapshotUrl"
  9. class="message-video-box"
  10. />
  11. <Icon
  12. v-if="props.messageItem.status === 'success' || props.messageItem.progress === 1"
  13. class="video-play"
  14. :file="playIcon"
  15. />
  16. </div>
  17. </div>
  18. </template>
  19. <script lang="ts" setup>
  20. import { withDefaults } from '../../../../adapter-vue';
  21. import type { IMessageModel } from '@tencentcloud/chat-uikit-engine';
  22. import Icon from '../../../common/Icon.vue';
  23. import playIcon from '../../../../assets/icon/video-play.png';
  24. import type { IVideoMessageContent } from '../../../../interface';
  25. const props = withDefaults(
  26. defineProps<{
  27. content: IVideoMessageContent;
  28. messageItem: IMessageModel;
  29. }>(),
  30. {
  31. content: () => ({} as IVideoMessageContent),
  32. messageItem: () => ({} as IMessageModel),
  33. },
  34. );
  35. function handlerVideoPlay() {
  36. const encodedUrl = encodeURIComponent(props.content.url);
  37. uni.navigateTo({
  38. url: `/TUIKit/components/TUIChat/video-play?videoUrl=${encodedUrl}`,
  39. });
  40. }
  41. </script>
  42. <style lang="scss" scoped>
  43. .message-video {
  44. position: relative;
  45. &-box {
  46. width: 120px;
  47. max-width: 120px;
  48. background-color: rgba(#000, 0.3);
  49. border-radius: 6px;
  50. height: 200px; // todo 优化高度动态获取
  51. font-size: 0;
  52. }
  53. .video-play {
  54. position: absolute;
  55. top: 50%;
  56. left: 50%;
  57. transform: translate(-50%, -50%);
  58. }
  59. }
  60. </style>