chat-vue v1.0.2-alpha.3
chat-vue
一、使用指南
1.install(安装)
yarn add chat-vue / npm i chat-vue2.import(引入)
在vue项目中main.js写入
import 'chat-vue/dist/chat.css';3.use(使用)
在使用chat-vue的组件中写入
<template>
// ...
<chat :messageList="messageList" @onMessagePost="postHandler" >
<template v-slot:slotName="{message}">
<div>{{message.id}}</div>
</template>
</chat>
// ...
</template>// ...
import chat from "chat-vue";
export default {
components: {
chat
},
data() {
return {
messageList: [{
id: 0,
content: "您好!欢迎使用chat-vue"
}, {
id: 1,
type: 'html',
content: '<div>...</div>
}, {
id: 2,
type: 'guess',
content: '...',
replyList: [{
title: '...',
value: '...'
}]
}, {
id: 3,
type: 'replyList',
replyList: [{
title: '...',
value: '...'
}]
}, {
id: 4,
type: 'img',
src: '...'
}, {
id: 5,
type: 'video',
src: '...'
}, {
id: 6,
type: 'link',
title: '...',
desc: '...',
url: '...'
}, {
id: 7,
slot: 'slotName'
}]
}
},
methods: {
postHandler(userInput) {
this.messageList.push({
id: Math.random(),
role: 'user',
content: userInput
})
setTimeout(() => {
this.messageList.push({
id: Math.random(),
content: `为您找到问题'${userInput}'的解决方案是...`
})
}, 1000);
}
}
}4. 属性和事件补充说明
4.1 属性
| 属性名 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| messageList | 消息数据(详情参考4.1.1) | Array | [] |
| tagList | 推荐标签({value: '标签1', ...) | Array | [] |
| relationList | 输入联想问题列表 | Array | [] |
| config | 配置集合(详情参考4.1.3) | Object | {theme: "modern", placeholder: '请输入'} |
4.1.1 messageList的元素
| 属性名 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| id | 唯一标识 | Number、String | |
| text | 文本内容 | String | |
| html | 带有html的富文本内容 | String | |
| type | 消息类型(可选值:text, html, replyList, guess, img, video, link) | String | text |
| role | 消息所属角色(user(用户, 右侧展示), service(客服,左侧展示))|String | String | |
| replyList | 推荐问题列表{value: '问题1', ...}, ... | Array | |
| feedback | 赞、踩选中记录 | Number | |
| noFeedback | 是否展示‘赞、踩’ | Boolean | |
| metaInfo | 消息元数据(详情参考4.1.1.1) | Object | |
| src | 当type为'img'时才生效,图片地址 | String | |
| src | 当type为'video'时才生效,视频地址 | String | |
| title | 当type为'link'时才生效,链接标题 | String | |
| desc | 当type为'link'时才生效,链接描述 | String | |
| url | 当type为'link'时才生效,链接跳转地址 | String | |
| slot | 当写入slot属性时,该条消息渲染模版会匹配插槽中的内容 | String |
4.1.1.1 metaInfo的属性
| 属性名 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| nickname | 昵称 | String | |
| time | 时间 | String |
4.1.2 config
| 属性名 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| theme | 主题;可选值:modern、basic | String | modern |
| serviceIcon | 客服头像(为真值时展示客服头像) | String | |
| userIcon | 用户头像(为真值时展示用户头像) | String | |
| placeholder | 输入框占位内容 | String | 请输入 |
| noScroll | 是否禁止滚动区自动滚动 | Boolean | |
| pulldownConfig | 下拉加载配置(详情参考4.1.2.1) | Object | |
| pullupConfig | 上拉加载配置(详情参考4.1.2.1) | Object | |
| showFeedback | 是否需要“赞、踩功能” | Boolean |
4.1.2.1 config.pulldownConfig和config.pullupConfig
| 属性名 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| disabled | 是否禁用功能 | Boolean | true |
| loadingIcon | 加载图标 | String | |
| pullText | 拉动时的文字 | String | |
| loadingText | 加载时的文字 | String | |
| noMoreText | 没有更多时的文字 | String | |
| noMoreData | 是否没有更多了 | Boolean | |
| boundaryDistance | 触发加载的边界距离 | Number | |
| callback | 加载时需要处理的回调函数(该函数需返回Promise) | Function: Promise |
4.2 事件
| 事件名 | 说明 | 参数 |
|---|---|---|
| onMessagePost | 用户点击发送按钮或按下回车键后触发 | 用户输入的文本 |
| quickReply | 用户点击推荐问题列表中的问题后触发 | 参数为推荐问题数组(replyList)中对应点击的元素 |
| quickTag | 用户点击推荐标签列表中的标签后触发 | 参数为推荐标签数组(tagList)中对应点击的元素 |
| feedback | 用户点击消息下方的‘赞、踩’按钮 | 参数1,2分别为消息id和反馈类型(0: 赞、1:踩) |
| onInputChanged | 输入框change触发,获取到输入框的value | 参数为输入框的value |
| onAssociationProblemSelect | 点击输入联想问题调用此函数,返回该问题对应的对象 | 参数为联想问题数组(relationList)中对应点击的元素 |
其它示例
1 下拉加载(1. 将config传给chat组件;2. 在config中写入pulldownConfig对象;3. 在pulldownConfig配置callback函数)
<template>
// ...
<chat :messageList="messageList" :config="config" @onMessagePost="postHandler" />
// ...
</template>// ...
import chat from "chat-vue";
export default {
components: {
chat
},
data() {
return {
messageList: [{
id: 0,
content: "您好!欢迎使用chat-vue"
}],
config: {
// 下拉加载的配置
pulldownConfig: {
callback: this.pulldownHandler
}
}
}
},
methods: {
postHandler(userInput) {
this.messageList.push({
role: 'user',
content: userInput
})
setTimeout(() => {
this.messageList.push({
content: `为您找到问题'${userInput}'的解决方案是...`
})
}, 1000);
},
// 下拉加载的回调函数
pulldownHandler() {
return new Promise(reslove => {
setTimeout(() => {
this.messageList.unshift({
content: '下拉消息'
})
reslove()
}, 1000);
})
}
}
}
// ...二、开发指南
规范
- 组件样式统一写入/src/less文件夹中的less文件,每个组件根元素声明一个类名来形成一个命名空间,统一使用cv-作为类名前缀
- 每个主题的样式对应/src/less/theme中的一个文件夹,由一个index.less引入该文件夹下所有子文件夹的index.less。应该最多包含这3个文件夹default、mobile、pc。每个子文件夹中的index.less引入该文件夹下的所有less文件
Project setup(运行、开发本项目)
yarn installCompiles and hot-reloads for development
yarn serveCompiles and minifies for production
yarn buildLints and fixes files
yarn lintCustomize configuration
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago