message-header.vue 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <template>
  2. <div class="base" :class="[ isMine ? 'right' : 'left']">
  3. <div class="name text-ellipsis">{{ from }}</div>
  4. <div class="date">{{ date }}</div>
  5. </div>
  6. </template>
  7. <script>
  8. import { mapState } from 'vuex'
  9. import { getFullDate } from '../../utils/date'
  10. import { imUserIdEqual } from '@/utils/common'
  11. export default {
  12. name: 'MessageHeader',
  13. props: {
  14. message: {
  15. type: Object,
  16. required: true
  17. }
  18. },
  19. computed: {
  20. ...mapState({
  21. currentConversation: state => state.conversation.currentConversation,
  22. currentUserProfile: state => state.imuser.currentUserProfile,
  23. currentMemberList: state => state.group.currentMemberList
  24. }),
  25. date() {
  26. return getFullDate(new Date(this.message.sendTime))
  27. },
  28. from() {
  29. const isC2C = this.currentConversation.conversationType === 3
  30. // 自己发送的用昵称渲染
  31. if (this.isMine) {
  32. return this.message.senderNickname || this.currentUserProfile.userID
  33. }
  34. if (isC2C && !imUserIdEqual(this.message.sendID, this.$store.getters.userID) && this.message.sendID !== 'imAdmin') {
  35. return (
  36. this.message.senderNickname ||
  37. this.message.sendID
  38. )
  39. } else {
  40. return this.message.sessionType === 3
  41. ? '群系统通知'
  42. : '系统通知'
  43. }
  44. // 2. 群组消息,用消息体中的 nick 渲染。nameCard暂时支持不完善
  45. return this.message.nameCard || this.message.nick || this.message.from
  46. },
  47. isMine() {
  48. return imUserIdEqual(this.message.sendID, this.$store.getters.userID)
  49. }
  50. }
  51. }
  52. </script>
  53. <style lang="stylus" scoped>
  54. .right {
  55. display: flex;
  56. flex-direction: row-reverse;
  57. }
  58. .left {
  59. display: flex;
  60. flex-direction: row;
  61. }
  62. .base {
  63. color: $secondary;
  64. font-size: 12px;
  65. }
  66. .name {
  67. padding: 0 4px;
  68. max-width: 100px;
  69. overflow: hidden;
  70. text-overflow: ellipsis;
  71. white-space: nowrap;
  72. }
  73. </style>