messages.vue 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <script lang='ts' setup>
  2. import { useMessage } from '@/components/business/account/message/useMessage'
  3. const props = defineProps({
  4. isUseContact: {
  5. type: Boolean,
  6. default: true,
  7. },
  8. refer: {
  9. type: String,
  10. },
  11. option: {
  12. type: Object || null,
  13. },
  14. })
  15. const {
  16. contacts,
  17. selectedContact,
  18. messageList,
  19. getContactList,
  20. getContactMessages,
  21. createBrandConversation,
  22. createServer,
  23. setRoundNewMessage,
  24. timer,
  25. isScrollBottom,
  26. } = useMessage()
  27. async function asyncData() {
  28. if (props.isUseContact) {
  29. isScrollBottom.value = false
  30. if (props.refer === 'contact')
  31. await createServer()
  32. await getContactList()
  33. selectedContact.value = contacts.value[0]
  34. await getContactMessages()
  35. isScrollBottom.value = true
  36. setRoundNewMessage()
  37. }
  38. else {
  39. isScrollBottom.value = false
  40. // 先根据品牌id,创建一个会话
  41. await createBrandConversation(props.option?.id)
  42. selectedContact.value.sessionType = '2'
  43. selectedContact.value.brandInfo = props.option
  44. await getContactMessages()
  45. isScrollBottom.value = true
  46. setRoundNewMessage()
  47. }
  48. }
  49. asyncData()
  50. onUnmounted(() => {
  51. clearInterval(timer.value)
  52. messageList.value = []
  53. })
  54. </script>
  55. <template>
  56. <div>
  57. <div v-if="isUseContact" class="py-18px px-24px bg-#FAFAFA b-rd-10px text-#000 text-20px fw-500 mb-20px">
  58. Messages
  59. </div>
  60. <el-container :class=" isUseContact ? 'h-850px' : 'h-640px' ">
  61. <el-aside v-if="isUseContact" class="w-364px bg-#FAFAFA !overflow-y-hidden">
  62. <business-account-message-contact-list />
  63. </el-aside>
  64. <el-container>
  65. <el-header class=" bg-#C58C64/6 custom-header">
  66. <business-account-message-contact-head />
  67. </el-header>
  68. <el-main class="bg-#C58C64/6 !p-20px !pt-0">
  69. <business-account-message-chat-window :is-use-contact="isUseContact" />
  70. <business-account-message-chat-input />
  71. </el-main>
  72. </el-container>
  73. </el-container>
  74. </div>
  75. </template>
  76. <style lang='less' scoped>
  77. .custom-header {
  78. box-shadow: unset !important;
  79. padding: 20px !important;
  80. }
  81. </style>