div class="talkShow"> div :class="[(item.person=='mechanical')?'mechanicalTalk':'mineTalk']" v-for="(item,index)..."/>

vue聊天对话ai流式输出

14,123次阅读
没有评论

共计 1733 个字符,预计需要花费 5 分钟才能阅读完成。

vue 聊天对话 ai 流式输出


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 流式输出

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-10-29发表,共计1733字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)