共计 1733 个字符,预计需要花费 5 分钟才能阅读完成。
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;
}
this.talkList.push({ id: Date.now(), person:'admin', say: this.contentVal });
this.contentVal = '';
this.getAnswer();
},
async getAnswer() {
const data ='文字逐个展示,文字逐个展示,文字逐个展示文字逐个展示文字逐个展示文字逐个展示文字逐个展示文字逐个展示文字逐个展示文字逐个展示文字逐个展示';
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 流式输出
正文完