赞
踩
1.安装
npm i vue-beautiful-chat
2.main.js中引入
- import Chat from 'vue-beautiful-chat'
- Vue.use(Chat)
3.对接接口的完整代码(复制过去就可以用)
- <template>
- <div>
- <beautiful-chat
- :participants="participants"
- :titleImageUrl="titleImageUrl"
- :onMessageWasSent="onMessageWasSent"
- :messageList="messageList"
- :newMessagesCount="newMessagesCount"
- :isOpen="isChatOpen"
- :close="closeChat"
- :icons="icons"
- :open="openChat"
- :showEmoji="true"
- :showFile="true"
- :showEdition="true"
- :showDeletion="true"
- :showTypingIndicator="showTypingIndicator"
- :showLauncher="true"
- :showCloseButton="true"
- :colors="colors"
- :alwaysScrollToBottom="alwaysScrollToBottom"
- :messageStyling="messageStyling"
- @onType="handleOnType"
- @edit="editMessage"
- />
- </div>
- </template>
- <script>
- import CloseIcon from "@/assets/logo.png";
- import OpenIcon from "@/assets/logo.png";
- import FileIcon from "@/assets/logo.png";
- import CloseIconSvg from "@/assets/logo.png";
- import io from "socket.io-client";
- export default {
- name: "app",
- data() {
- return {
- // 创建一个 socket 对象
- socket: null,
- icons: {
- open: {
- img: OpenIcon,
- name: "default",
- },
- close: {
- img: CloseIcon,
- name: "default",
- },
- file: {
- img: FileIcon,
- name: "default",
- },
- closeSvg: {
- img: CloseIconSvg,
- name: "default",
- },
- },
- participants: [
- {
- id: "user1",
- name: "Matteo",
- imageUrl:
- "https://avatars3.githubusercontent.com/u/1915989?s=230&v=4",
- },
- {
- id: "user2",
- name: "Support",
- imageUrl:
- "https://avatars3.githubusercontent.com/u/37018832?s=200&v=4",
- },
- ], // the list of all the participant of the conversation. `name` is the user name, `id` is used to establish the author of a message, `imageUrl` is supposed to be the user avatar.
- titleImageUrl:
- "https://a.slack-edge.com/66f9/img/avatars-teams/ava_0001-34.png",
- messageList: [
- { type: "text", author: `me`, data: { text: `Say yes!` } },
- { type: "text", author: `user1`, data: { text: `No.` } },
- ], // the list of the messages to show, can be paginated and adjusted dynamically
- newMessagesCount: 0,
- isChatOpen: false, // to determine whether the chat window should be open or closed
- showTypingIndicator: "", // when set to a value matching the participant.id it shows the typing indicator for the specific user
- colors: {
- header: {
- bg: "#4e8cff",
- text: "#ffffff",
- },
- launcher: {
- bg: "#4e8cff",
- },
- messageList: {
- bg: "#ffffff",
- },
- sentMessage: {
- bg: "#4e8cff",
- text: "#ffffff",
- },
- receivedMessage: {
- bg: "#eaeaea",
- text: "#222222",
- },
- userInput: {
- bg: "#f4f7f9",
- text: "#565867",
- },
- }, // specifies the color scheme for the component
- alwaysScrollToBottom: false, // when set to true always scrolls the chat to the bottom when new events are in (new message, user starts typing...)
- messageStyling: true, // enables *bold* /emph/ _underline_ and such (more info at github.com/mattezza/msgdown)
- };
- },
- created() {
- // 建立服务器的连接
- console.log("连接");
- this.socket = io("http://toutiao.itheima.net", {
- query: {
- token: "8d6b045d-a15f-4d4a-9841-340ddf27a283",
- },
- transports: ["websocket"],
- });
- console.log("socket", this.socket);
- // 收消息
- this.socket.on("message", (data) => {
- console.log("收到消息", data);
- // 将内容添加到聊天列表中
- const item = {
- type: "text",
- author: `user1`,
- data: { text: `${data.msg}` },
- };
- this.messageList.push(item);
- // this.chatList.push({
- // isme: false,
- // t: data.msg,
- // });
- // 自动滚动到底部
- // this.$nextTick(() => {
- // // 滚动到最后面
- // this.$refs.chat.scrollTop = this.$refs.chat.scrollHeight;
- // });
- });
- },
- methods: {
- sendMessage(text) {
- if (text.length > 0) {
- this.newMessagesCount = this.isChatOpen
- ? this.newMessagesCount
- : this.newMessagesCount + 1;
- this.onMessageWasSent({
- author: "support",
- type: "text",
- data: { text },
- });
- }
- },
- // 发送消息
- onMessageWasSent(message) {
- // called when the user sends a message
- console.log("限制性这个", message);
- this.messageList = [...this.messageList, message];
- // 将消息发送到服务器
- this.socket.emit("message", {
- msg: message.data.text,
- timestamp: Date.now(),
- });
- console.log("发送到服务器");
- },
- openChat() {
- // called when the user clicks on the fab button to open the chat
- this.isChatOpen = true;
- this.newMessagesCount = 0;
- },
- closeChat() {
- // called when the user clicks on the botton to close the chat
- this.isChatOpen = false;
- },
- handleScrollToTop() {
- // called when the user scrolls message list to top
- // leverage pagination for loading another page of messages
- },
- handleOnType() {
- console.log("Emit typing event");
- },
- editMessage(message) {
- const m = this.messageList.find((m) => m.id === message.id);
- m.isEdited = true;
- m.data.text = message.data.text;
- },
- },
- };
- </script>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。