<template> <div class="talkContent"> <div class="talkShow"> <div :class="[(item.person=='mechanical')?'mechanicalTalk':'mineTalk']" v-for="(item,index) in talkList" :key="index"> <span>{{item.say}}</span> </div> </div> <div class="talkInput"> <form @submit.prevent="getQuestion" class="userSearch"> <el-input placeholder="请输入内容" v-model="contentVal" size="small"> <i slot="suffix" class="el-input__icon el-icon-position" style="cursor: pointer;" @click="getQuestion"></i> </el-input> </form> </div> </div> </template> <script> export default { data() { return { talkList: [ { id:"1", person: 'mechanical', say: '你好,有什么可以帮到你呢?' }, ], isMine: 1, contentVal: '', }; }, methods: { getQuestion() { if (this.contentVal == '') { this.$message.error('请输入内容'); return; } // admin提问数据push() this.talkList.push({ id: Date.now(), person:'admin', say: this.contentVal }); // 清空输入栏数据 this.contentVal = ''; this.getAnswer(); }, async getAnswer() { // 调用API获取回答, 模拟后端返回的数据流式输出 const data ='文字逐个展示,文字逐个展示,文字逐个展示文字逐个展示文字逐个展示文字逐个展示文字逐个展示文字逐个展示文字逐个展示文字逐个展示文字逐个展示'; // mechanical 模拟回答 this.talkList.push({ id: Date.now(), person:'mechanical', say: '...' }); // 流式输出文字逐个展示 let text = ""; const length = this.talkList.length; for (let i = 0; i < data.length; i++) { text += data.charAt(i); await new Promise((resolve) => { setTimeout(resolve, 50) }); this.talkList[length - 1].say= text; } } }, }; </script> <style scoped> .talkContent { margin: 50px auto 0; font-size: 14px; } .talkShow { height: 400px; margin: 10px auto 0; overflow: auto; } .talkInput { margin: 10px auto 0; display: flex; } .mechanicalTalk { margin: 10px; } .mechanicalTalk span { display: inline-block; background: white; border-radius: 10px; padding: 5px 10px; border: 1px solid rgb(214, 216, 219); border-top-left-radius: 0px; word-break: break-all; text-align: left; } .mineTalk { margin: 10px; text-align: right; } .mineTalk span { display: inline-block; border-radius: 10px; border-top-right-radius: 0px; background: #409eff; color: #fff; padding: 5px 10px; word-break: break-all; text-align: left; } </style>
复制
vue聊天对话ai流式输出
转载请注明出处或者链接地址:https://www.qianduange.cn//article/11353.html
相关文章
-
【SpringMVC】_SpringMVC项目返回HTML与JSON
-
2024年前端最新Nodejs基础之包管理工具npm(二)(2),微软面试题及答案
-
解决全局安装pnpm后无法使用的问题
-
安装Nodejs后,npm无法使用
-
npm使用淘宝镜像下载依赖包
-
搭建Nexus前端npm私服,上传发布npm包和下载依赖
-
npm install包提示安装成功,但项目目录中没有出现node_modules的解决方案
-
解决VUE3 Vite打包后动态图片资源不显示问题
-
vue基于sockjs-client stompjs实现websocket客户端
-
Vue 3 项目中导入外部的 <link> 和 <script> 资源
发布的文章
C#解析JSON的常用库--Newtonsoft.Json
2024-11-30 11:11:42
jsonfield 项目常见问题解决方案
2024-11-30 11:11:42
【SpringMVC】_SpringMVC项目返回HTML与JSON
2024-11-30 11:11:41
BugJson因为json格式问题OOM怎么办
2024-11-30 11:11:41
python 解读JSON文件,一文搞懂!
2024-11-30 11:11:40
Redisson同时使用jackson、fastjson、kryo、protostuff序列化(含效率对比)
2024-11-30 11:11:40
开源项目“Pretty JSON”安装与配置完全指南
2024-11-30 11:11:39
2024年前端最新Nodejs基础之包管理工具npm(二)(2),微软面试题及答案
2024-11-30 11:11:39
解决全局安装pnpm后无法使用的问题
2024-11-30 11:11:39
安装Nodejs后,npm无法使用
2024-11-30 11:11:38
大家推荐的文章