ChatGpt-2 对话单页功能实现vue3+elementplus

news2024/11/15 19:49:42

 

 

接口可参照CHATGPT.NET自行实现

<script setup>

import { RouterLink, RouterView } from "vue-router";

import HelloWorld from "./components/HelloWorld.vue";

import { MoreFilled ,CircleCheck} from "@element-plus/icons-vue";

import { ref,shallowReactive,shallowRef } from "vue";

import { chat } from "./api/chat";

import { ElMessage } from 'element-plus'

const textarea =ref("");

const buttonText =ref("Send");

const sendDisabled =shallowRef(false);

const sendChat = (data) => {

  let prompt = textarea.value;

  if(prompt!=''){

    textarea.value='';

    ElMessage({

    message: '已发送请等待.',

    type: 'success',

  })

    sendDisabled.value = true;

    activities.splice(0,0,

      {

    content: "Robot: 正在努力思考。。。,受网络影响可能会需要一会",

    timestamp: new Date(),

    userType:'1',

    size: "large",

    type: "primary",

    icon: MoreFilled

  }, {

    content: `You: ${prompt}`,

    timestamp: new Date(),

    userType:'2',

    size: "large",

    color: "#0bbd87",

    icon: CircleCheck,

  }

    );

    console.log('数组', activities);

  chat({q:prompt}).then(res=>{

    if(res.status){

      textarea.value = '';

      let content = res.response.replace(/\\n/g, '<br/>');

    console.log(res.response);

   

    activities[0] =   {

    content: content,

    timestamp: new Date(),

    size: "large",

    type: "primary",

    icon: CircleCheck,

  };

    }else{

      ElMessage.error(`Oops, error ${res.response}.`)

    }

    sendDisabled.value = false;

  }).catch(res=>{

    sendDisabled.value = false;

    activities[0] =   {

    content: '回答已超时,可以尝试更详细的对话',

    timestamp: new Date(),

    size: "large",

    type: "primary",

    icon: CircleCheck,

  };

  })

}

}


 

let activities = shallowReactive([

  {

    content: "Robot: 你可以开始跟我对话了",

    timestamp: new Date(),

    size: "large",

    userType:'1',

    type: "primary",

    icon: CircleCheck,

  },

]);

</script>

<template>

  <div class="common-layout">

    <el-container>

      <el-header height="60px"

        ><div

        class="mainH" style=" width: 100%;text-align: center;  background-color: #409eff; color: #fff;font-size: 2rem; margin: 0 auto;"

        >

        <el-icon><IceTea /></el-icon>

          ChatGpt在线体验

        </div></el-header

      >

      <el-main

        ><div class=".mainContent" style="height: 80vh; overflow: hidden; ">

       

     

          <div style="overflow-y: scroll; height: calc(80vh - 260px);">

          <el-timeline style="font-size:large">

            <el-timeline-item

              v-for="(activity, index) in activities"

              :key="index"

              :icon="activity.icon"

              :type="activity.type"

              :color="activity.color"

              :size="activity.size"

              :hollow="activity.hollow"

              :timestamp="activity.timestamp"

            >

            <el-icon v-if="activity.userType==2"><User /></el-icon>  

            <el-icon v-if="activity.userType==1"><Bell /></el-icon>  

              <span v-html="activity.content"></span>

            </el-timeline-item>

          </el-timeline>

        </div>

        <el-card class="box-card">

          <template #header>

            <div class="card-header">

              <span>输入对话</span>

            </div>

          </template>

          <el-input

            v-model="textarea"

            :rows="4"

            type="textarea"

            placeholder="Please input"

          />

          <el-button

            type="primary"

            :disabled="sendDisabled"

            @click="sendChat"

            style="width: 100%; height: 50px; margin-top: 10px"

            >Send</el-button

          >

        </el-card>

        </div></el-main

      >

      <el-footer height="5vh"><el-icon><Sunny /></el-icon>体验版(网络问题 回复时间会长,耐心等待) power by zhoufc</el-footer>

    </el-container>

  </div>

  <!-- <header>

    <img alt="Vue logo" class="logo" src="@/assets/logo.svg" width="125" height="125" />

    <div class="wrapper">

      <HelloWorld msg="You did it!" />

      <nav>

        <RouterLink to="/">Home</RouterLink>

        <RouterLink to="/about">About</RouterLink>

      </nav>

    </div>

  </header> -->

  <!-- <RouterView /> -->

</template>

<style scoped>

header {

  line-height: 1.5;

  max-height: 100vh;

}

.logo {

  display: block;

  margin: 0 auto 2rem;

}

nav {

  width: 100%;

  font-size: 12px;

  text-align: center;

  margin-top: 2rem;

}

nav a.router-link-exact-active {

  color: var(--color-text);

}

nav a.router-link-exact-active:hover {

  background-color: transparent;

}

nav a {

  display: inline-block;

  padding: 0 1rem;

  border-left: 1px solid var(--color-border);

}

nav a:first-of-type {

  border: 0;

}

/* @media (min-width: 1024px) {

  header {

    display: flex;

    place-items: center;

    padding-right: calc(var(--section-gap) / 2);

  }

  .logo {

    margin: 0 2rem 0 0;

  }

  header .wrapper {

    display: flex;

    place-items: flex-start;

    flex-wrap: wrap;

  }

  nav {

    text-align: left;

    margin-left: -1rem;

    font-size: 1rem;

    padding: 1rem 0;

    margin-top: 1rem;

  }

} */

</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/340153.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GIS数据格式坐标转换(地球坐标WGS84、GCJ-02、火星坐标、百度坐标BD-09、国家大地坐标系CGCS2000)

文章目录前言一、坐标系1.地球坐标 (WGS84)2.国测局坐标系(GCJ-02、火星坐标系)3.百度坐标(BD-09)4.国家大地2000坐标系(CGCS2000)二、百度坐标系(BD-09) 与火星坐标系(GCJ-02)的转换1.核心代码2.转换验证百度地图高德地图腾讯地图三、火星坐标系 (GCJ-02) 与百度坐标系 (BD-09…

【青训营】RPC框架分层设计简述

远程函数调用&#xff0c;Remote Procedute Calls&#xff0c;简称RPC。RPC需要解决的问题有&#xff1a;完成远程函数的映射&#xff0c;并且将数据转化为字节流&#xff0c;使用网络进行传输 RPC基本概念 IDL文件&#xff1a;IDL通过一种中立的方式来描述接口&#xff0c;使…

OpenCV 图像梯度算子

本文是OpenCV图像视觉入门之路的第12篇文章&#xff0c;本文详细的介绍了图像梯度算子的各种操作&#xff0c;例如&#xff1a;Sobel算子Scharr算子laplacian算子等操作。 OpenCV 图像梯度算子目录 1 Sobel算子 2 Scharr算子 3 laplacian算子 1 Sobel算子 Sobel算子是一种图…

.Net Core对于`RabbitMQ`封装分布式事件总线

首先我们需要了解到分布式事件总线是什么&#xff1b;分布式事件总线是一种在分布式系统中提供事件通知、订阅和发布机制的技术。它允许多个组件或微服务之间的协作和通信&#xff0c;而无需直接耦合或了解彼此的实现细节。通过事件总线&#xff0c;组件或微服务可以通过发布或…

基于STM32的虚拟示波器

仓库地址 https://github.com/shuai132/ScopeMCU ScopeMCU Oscilloscope for MCU MCU: STM32F103C8Tx 需配合ScopeGUI使用 截图说明见wiki 最新版Releases Introduction 用最少的硬件成本&#xff0c;做一个实用的虚拟示波器。 这是硬件部分&#xff0c;基于STM32最小…

提取DataFrame中每一行的DataFrame.itertuples()方法

【小白从小学Python、C、Java】【计算机等级考试500强双证书】【Python-数据分析】提取DataFrame中的每一行DataFrame.itertuples()选择题关于以下python代码说法错误的一项是?import pandas as pddf pd.DataFrame({A:[a1,a2],B:[b1,b2]},index[i1,i2])print("【显示】d…

基于SpringBoot实现ChatGPT-QQ机器人

概述 近期ChatGPT火爆全球&#xff0c;在其官方网站上也列举了非常全面的应用案例&#xff0c;仅仅上线两个月活跃用户数已经达到1亿&#xff0c;成为历史上用户数增长最快的面向消费者的应用 快速体验 OpenAI官网对外提供了标准的 API 接口&#xff0c;可以通过HTTP请求进行…

SignalR注册成Windows后台服务,并实现web前端断线重连

注意下文里面的 SignalR 不是 Core 版本&#xff0c;而是 Framework 下的 本文使用的方式是把 SignalR 写在控制台项目里&#xff0c;再用 Topshelf 注册成 Windows 服务 这样做有两点好处 传统 Window 服务项目调试时需要“附加到进程”&#xff0c;开发体验比较差&#xf…

RibbitMQ 入门到应用 ( 二 ) 安装

3.安装基本操作 3.1.下载安装 3.1.1.官网 下载地址 https://rabbitmq.com/download.html 与Erlang语言对应版本 https://rabbitmq.com/which-erlang.html 3.1.2.安装 Erlang 在确定了RabbitMQ版本号后&#xff0c;先下载安装Erlang环境 Erlang下载链接 https://packa…

vue通用后台管理系统

用到的js库 遇到的问题 vuex和 localStorage区别 vuex在内存中&#xff0c;localStorage存在本地localStorage只能存储字符串类型数据&#xff0c;存储对象需要JSON.stringify() 和 parse()…读取内存比读取硬盘速度要快刷新页面vuex数据丢失&#xff0c;localStorage不会vuex…

图的基本介绍和表示方式

图的基本介绍 为什么要有图这个基本数据结构? 我们还学习过线性表&#xff08;数组、队列、链表和栈&#xff09;和树&#xff0c;但是我们可以发现&#xff0c;线性表局限于一个直接前驱&#xff08;就是只能有唯一一个前面的结点&#xff09;和一个直接后继的&#xff08;…

Python+dilb 简单实现人脸检测(附代码)

如果dilb和face_recognition第三方包安装失败&#xff0c;请移步到Python 解决dilb和face_recognition第三方包安装失败_水w的博客-CSDN博客 目录 一、环境配置 二、前期知识 1 读取图片 2 灰度转换 解决报错cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\o…

【前端vue2面试题】2023前端最新版vue模块,高频17问(上)

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;博主收集的关于vue2面试题(上) 目录 vue2面试题 1、$route 和 $router的区别 2、一个…

【Spark分布式内存计算框架——Spark Core】9. Spark 内核调度(上)

第八章 Spark 内核调度 Spark的核心是根据RDD来实现的&#xff0c;Spark Scheduler则为Spark核心实现的重要一环&#xff0c;其作用就是任务调度。Spark的任务调度就是如何组织任务去处理RDD中每个分区的数据&#xff0c;根据RDD的依赖关系构建DAG&#xff0c;基于DAG划分Stag…

PVE虚拟机篇-PVE虚拟机安装

安装包下载 前往Proxmox Virtual Environment下载ISO镜像文件&#xff0c;可以直接选择最新版本。 但是如果没有海外线路一般下载十分缓慢&#xff0c;甚至下不动&#xff0c;所以可以去中科大镜像源&#xff1a;中科大Proxmox Virtual Environment 制作U盘启动盘 可以使用…

SpringMVC:拦截器(12)

拦截器1. 拦截器概念2. 拦截器入门案例2.1 环境准备2.2 拦截器开发步骤1: 创建拦截器类步骤2: 配置拦截器类步骤3: SpringMVC添加SpringMvcSupport包扫描和interceptor包扫描步骤4: 简化SpringMvcSupport的编写5 测试3. 拦截器参数解析&#xff08;了解&#xff09;3.1 前置处理…

字节一面:在浏览器地址栏输入一个 URL 后回车,背后发生了什么?

近段时间&#xff0c;有小伙伴面试字节&#xff0c;说遇到一个面试题&#xff1a; 在浏览器地址栏输入一个 URL 后回车&#xff0c;背后发生了什么&#xff1f; 这里尼恩给大家做一下系统化、体系化的梳理&#xff0c;使得大家可以充分展示一下大家雄厚的 “技术肌肉”&#xf…

c# 自定义隐式转换与运算符重载

用户定义的显式和隐式转换运算符 参考代码 用户定义的显式和隐式转换运算符 - 提供对不同类型的转换 | Microsoft Learn 代码例程 using System;public readonly struct Digit {private readonly byte digit;public Digit(byte digit){if (digit > 9){throw new Argumen…

电子科技大学操作系统期末复习笔记(一):操作系统概述

目录 前言 操作系统概述 操作系统的目标与功能 操作系统的定义 目标 功能 操作系统的历史 单用户系统 简单批处理系统 多道批处理系统 分时系统 个人电脑 → 分布式系统 → 互联网时代 → 移动计算时代 → ...... 实时系统 操作系统的基本特征 并发 共享 虚拟…

第一章 PDF语法

第一章 PDF语法PDF ObjectsNull ObjectsBoolean ObjectsNumeric ObjectsName ObjectsString ObjectsArray ObjectsDictionary ObjectsName treesNumber treesStream ObjectsDirect versus Indirect ObjectsFile StructureWhite-SpaceThe Four Sections of a PDFHeaderTrailerBo…