提交 d6d134d1 编写于 作者: DCloud_JSON's avatar DCloud_JSON

1.0.11

- 修复 流式响应模式,微信小程序端,部分情况下:消息内容突然变空白的问题
- 优化 uni-ai问题回复完成后,消息输入框自动获取焦点
- 修复 Vue3-web-pc端 敲完回车会先执行换行再发送消息的问题
上级 4feae8a8
## 1.0.11(2023-05-17)
- 修复 流式响应模式,微信小程序端,部分情况下:消息内容突然变空白的问题
- 优化 uni-ai问题回复完成后,消息输入框自动获取焦点
- 修复 Vue3-web-pc端 敲完回车会先执行换行再发送消息的问题
## 1.0.10(2023-05-15) ## 1.0.10(2023-05-15)
- 修复 Vue3-web-pc端 回车不能发送消息的问题(临时兼容方案,后续textarea组件不支持@keydown的问题修复后会调整) - 修复 Vue3-web-pc端 回车不能发送消息的问题(临时兼容方案,后续textarea组件不支持@keydown的问题修复后会调整)
## 1.0.9(2023-05-15) ## 1.0.9(2023-05-15)
......
<template> <template>
<view class="rich-text-box" :class="{'show-cursor':showCursor}" ref="rich-text-box"> <view class="rich-text-box" :class="{'show-cursor':showCursor}" ref="rich-text-box">
<rich-text v-if="nodes&&nodes.length" space="nbsp" :nodes="nodes"></rich-text> <rich-text v-if="nodes&&nodes.length" space="nbsp" :nodes="nodes"></rich-text>
<!-- #ifdef H5 --> <!-- #ifdef H5 -->
<view class="copy-box" :style="{left,top}"> <view class="copy-box" :style="{left,top}">
...@@ -47,9 +47,9 @@ ...@@ -47,9 +47,9 @@
return '<pre class="hljs" style="padding: 5px 8px;margin: 5px 0;overflow: auto;"><code>' + return '<pre class="hljs" style="padding: 5px 8px;margin: 5px 0;overflow: auto;"><code>' +
markdownIt.utils.escapeHtml(str) + '</code></pre>'; markdownIt.utils.escapeHtml(str) + '</code></pre>';
} }
}) })
export default { export default {
name: "msg", name: "msg",
data() { data() {
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
// 悬浮的复制按钮的左边距 // 悬浮的复制按钮的左边距
left: "-100px", left: "-100px",
// 悬浮的复制按钮的上边距 // 悬浮的复制按钮的上边距
top: "-100px" top: "-100px"
}; };
}, },
mounted() { mounted() {
...@@ -104,29 +104,29 @@ ...@@ -104,29 +104,29 @@
} }
}, },
computed: { computed: {
// 修改转换结果的html值 用于正确给界面增加鼠标闪烁的效果 nodes() {
html() { let htmlString = ''
// 判断markdown中代码块标识符的数量是否为偶数 // 修改转换结果的htmlString值 用于正确给界面增加鼠标闪烁的效果
// 判断markdown中代码块标识符的数量是否为偶数
if(this.md.split("```").length%2){ if(this.md.split("```").length%2){
return markdownIt.render(this.md + ' \n <span class="cursor">|</span>'); htmlString = markdownIt.render(this.md + ' \n <span class="cursor">|</span>');
}else{ }else{
return markdownIt.render(this.md) + ' \n <span class="cursor">|</span>'; htmlString = markdownIt.render(this.md) + ' \n <span class="cursor">|</span>';
} }
},
nodes() {
// 为兼容 微信小程序端部分未知情况转换失败的情况,临时方案 先返回 string html
// #ifdef MP-WEIXIN // #ifndef APP-NVUE
return this.html return htmlString
// #endif // #endif
// #ifndef MP-WEIXIN // nvue模式下将htmlString转成htmlArray,其他情况rich-text内部转
// HTML String 类型转换 避免内部转换导致的性能下降。 // 注:本示例项目还没使用nvue编译
return parseHtml(this.html)
// #ifdef APP-NVUE
return parseHtml(htmlString)
// #endif // #endif
} }
}, },
methods: { methods: {
// #ifdef H5 // #ifdef H5
// 复制文本内容到系统剪切板 // 复制文本内容到系统剪切板
copy() { copy() {
......
{ {
"id": "uni-ai-chat", "id": "uni-ai-chat",
"name": "uni-ai-chat", "name": "uni-ai-chat",
"version": "1.0.10", "version": "1.0.11",
"description": "基于uni-ai的聊天示例项目,支持流式、支持前文总结,云端一体", "description": "基于uni-ai的聊天示例项目,支持流式、支持前文总结,云端一体",
"main": "main.js", "main": "main.js",
"scripts": { "scripts": {
......
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
<view class="textarea-box"> <view class="textarea-box">
<textarea v-model="content" :cursor-spacing="15" class="textarea" :auto-height="!isWidescreen" <textarea v-model="content" :cursor-spacing="15" class="textarea" :auto-height="!isWidescreen"
@keyup.shift="onKeyup('shift')" @keydown.shift="onKeydown('shift')" @keydown.enter="onKeydown('enter')" @keyup.shift="onKeyup('shift')" @keydown.shift="onKeydown('shift')" @keydown.enter="onKeydown('enter')"
:disabled="inputBoxDisabled" :placeholder="placeholderText" :maxlength="-1" :disabled="inputBoxDisabled" :placeholder="placeholderText" :maxlength="-1" :focus="focus"
placeholder-class="input-placeholder"></textarea> placeholder-class="input-placeholder"></textarea>
</view> </view>
<view class="send-btn-box"> <view class="send-btn-box">
...@@ -57,13 +57,13 @@ ...@@ -57,13 +57,13 @@
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</template> </template>
<script> <script>
// 引入配置文件 // 引入配置文件
import config from '@/config.js'; import config from '@/config.js';
// 获取广告id // 获取广告id
const { const {
adpid adpid
...@@ -92,7 +92,8 @@ ...@@ -92,7 +92,8 @@
// 当前屏幕是否为宽屏 // 当前屏幕是否为宽屏
isWidescreen: false, isWidescreen: false,
// 广告位id // 广告位id
adpid adpid,
focus:false
} }
}, },
computed: { computed: {
...@@ -124,11 +125,22 @@ ...@@ -124,11 +125,22 @@
} }
}, },
// 监听msgList变化,将其存储到本地缓存中 // 监听msgList变化,将其存储到本地缓存中
watch: { watch: {
// #ifdef H5
inputBoxDisabled(val){
this.$nextTick(()=>{
this.focus = !val
console.log('this.focus',this.focus);
})
},
// #endif
msgList: { msgList: {
handler(msgList) { handler(msgList) {
// 将msgList存储到本地缓存中 // 将msgList存储到本地缓存中
uni.setStorageSync('uni-ai-msg', msgList) uni.setStorage({
"key":"uni-ai-msg",
"data":msgList
})
}, },
// 深度监听msgList变化 // 深度监听msgList变化
deep: true deep: true
...@@ -153,7 +165,7 @@ ...@@ -153,7 +165,7 @@
.get() .get()
// 输出当前用户积分 // 输出当前用户积分
console.log('当前用户有多少积分:', res.data[0] && res.data[0].score); console.log('当前用户有多少积分:', res.data[0] && res.data[0].score);
} }
// for (let i = 0; i < 15; i++) { // for (let i = 0; i < 15; i++) {
// this.msgList.push({ // this.msgList.push({
...@@ -208,9 +220,9 @@ ...@@ -208,9 +220,9 @@
} }
if (e.keyCode == 13 && !adjunctKeydown) { if (e.keyCode == 13 && !adjunctKeydown) {
// 延迟兼容 v-model的时机小于onkeydown的问题 // 延迟兼容 v-model的时机小于onkeydown的问题
setTimeout(()=> { this.content = textareaDom.value
this.beforeSendMsg(); // 执行发送
}, 100); this.beforeSendMsg();
} }
}; };
textareaDom.onkeyup = e => { textareaDom.onkeyup = e => {
...@@ -220,7 +232,7 @@ ...@@ -220,7 +232,7 @@
} }
}; };
} }
// #endif // #endif
}, },
methods: { methods: {
// #ifdef H5 && VUE2 // #ifdef H5 && VUE2
...@@ -384,7 +396,6 @@ ...@@ -384,7 +396,6 @@
} }
} }
// 检查是否开通uni-push;决定是否启用enableStream // 检查是否开通uni-push;决定是否启用enableStream
await this.checkIsOpenPush() await this.checkIsOpenPush()
...@@ -465,7 +476,7 @@ ...@@ -465,7 +476,7 @@
// console.log('sseChannel',sseChannel); // console.log('sseChannel',sseChannel);
// 监听message事件 // 监听message事件
sseChannel.on('message', (message) => { sseChannel.on('message',(message) => {
// console.log('on message', message); // console.log('on message', message);
// 将从云端接收到的消息添加到消息列表中 // 将从云端接收到的消息添加到消息列表中
...@@ -728,7 +739,8 @@ ...@@ -728,7 +739,8 @@
/* #ifndef APP-NVUE */ /* #ifndef APP-NVUE */
overflow: auto; overflow: auto;
/* #endif */ /* #endif */
width: 450rpx; width: 450rpx;
font-size: 14px;
} }
/* #ifdef H5 */ /* #ifdef H5 */
...@@ -736,11 +748,11 @@ ...@@ -736,11 +748,11 @@
.textarea-box .textarea::-webkit-scrollbar { .textarea-box .textarea::-webkit-scrollbar {
width: 0; width: 0;
} }
/* #endif */ /* #endif */
.input-placeholder { .input-placeholder {
color: #bbb; color: #bbb;
line-height: 18px;
} }
.trash, .trash,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册