NewChatView.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <template>
  2. <div class="chat-container">
  3. <aside class="sidebar">
  4. <header class="app-title">应用标题</header>
  5. <ul class="contact-list">
  6. <li v-for="contact in contacts" :key="contact.id" @click="selectContact(contact)">
  7. {{ contact.name }}
  8. </li>
  9. </ul>
  10. </aside>
  11. <main class="chat-area">
  12. <div class="messages">
  13. <div v-for="message in messages" :key="message.id" :class="{ 'user-message': message.sender === 'user', 'bot-message': message.sender === 'bot' }">
  14. {{ message.text }}
  15. </div>
  16. </div>
  17. <footer>
  18. <input type="file" class="file-upload" @change="handleFileUpload" />
  19. <input type="text" v-model="messageText" @keyup.enter="sendMessage" class="message-input" />
  20. <button @click="sendMessage" class="send-button">发送</button>
  21. </footer>
  22. </main>
  23. </div>
  24. </template>
  25. <script>
  26. export default {
  27. data() {
  28. return {
  29. contacts: [
  30. { id: 1, name: '联系人1' },
  31. { id: 2, name: '联系人2' },
  32. // Add more contacts as needed
  33. ],
  34. selectedContact: null,
  35. messages: [],
  36. messageText: ''
  37. };
  38. },
  39. methods: {
  40. selectContact(contact) {
  41. this.selectedContact = contact;
  42. // Fetch and display messages for the selected contact
  43. this.messages = [
  44. { id: 1, sender: 'bot', text: '你好!' },
  45. { id: 2, sender: 'user', text: '这是我的消息。' },
  46. // Add more messages as needed
  47. ];
  48. },
  49. sendMessage() {
  50. if (this.messageText.trim()) {
  51. this.messages.push({ id: this.messages.length + 1, sender: 'user', text: this.messageText });
  52. this.messageText = '';
  53. }
  54. },
  55. handleFileUpload(event) {
  56. // Handle file upload logic here
  57. }
  58. }
  59. };
  60. </script>
  61. <style scoped>
  62. .chat-container {
  63. display: flex;
  64. height: 100vh;
  65. }
  66. .sidebar {
  67. width: 250px;
  68. background-color: #f0f2f5;
  69. padding: 1rem;
  70. }
  71. .app-title {
  72. font-size: 18px;
  73. font-weight: bold;
  74. background-color: darkslateblue;
  75. color: white;
  76. text-align: center;
  77. padding: 0.5rem;
  78. }
  79. .contact-list {
  80. list-style-type: none;
  81. padding: 0;
  82. }
  83. .contact-list li {
  84. cursor: pointer;
  85. padding: 0.5rem;
  86. border-bottom: 1px solid #ddd;
  87. }
  88. .contact-list li:hover {
  89. background-color: #e0e0e0;
  90. }
  91. .chat-area {
  92. flex-grow: 1;
  93. display: flex;
  94. flex-direction: column;
  95. }
  96. .messages {
  97. flex-grow: 1;
  98. overflow-y: auto;
  99. padding: 1rem;
  100. }
  101. .message-input {
  102. flex-grow: 1;
  103. border: 1px solid #ccc;
  104. border-radius: 3px;
  105. padding: 0.5rem;
  106. margin-right: 0.5rem;
  107. }
  108. .send-button {
  109. background-color: darkslateblue;
  110. color: white;
  111. border: none;
  112. border-radius: 3px;
  113. padding: 0.5rem 1rem;
  114. cursor: pointer;
  115. }
  116. .file-upload {
  117. background-color: #f0f0f0;
  118. border: 1px solid #ccc;
  119. border-radius: 3px;
  120. padding: 0.5rem;
  121. cursor: pointer;
  122. transition: background-color 0.3s ease;
  123. }
  124. .file-upload:hover {
  125. background-color: #e0e0e0;
  126. }
  127. .user-message {
  128. background-color: #72a0c1;
  129. color: white;
  130. align-self: flex-end;
  131. border-radius: 10px;
  132. padding: 0.5rem;
  133. max-width: 75%;
  134. word-wrap: break-word;
  135. }
  136. .bot-message {
  137. background-color: #f9f9f9;
  138. color: black;
  139. align-self: flex-start;
  140. border-radius: 10px;
  141. padding: 0.5rem;
  142. max-width: 75%;
  143. word-wrap: break-word;
  144. }
  145. </style>