基于vue3+pinia2仿ChatGPT聊天实例|vite4.x仿chatgpt界面

使用vue3+pinia2开发仿制chatgpt界面聊天实例Vue3-Chatgpt

基于Vue3.x+Pinia2+VueRouter+Vue3-Markdown等技术构建仿ChatGPT网页端聊天程序。支持经典+分栏界面布局、light/dark模式、全屏+半屏显示、Markdown语法解析、侧边栏隐藏等功能。

在这里插入图片描述
在这里插入图片描述

技术框架

  • 编辑工具:Cursor
  • 框架技术:Vue3+Vite4.x+Pinia2
  • 组件库:VEPlus (基于vue3桌面端组件库)
  • 国际化多语言:vue-i18n^9.2.2
  • 代码高亮:highlight.js^11.7.0
  • 本地存储:pinia-plugin-persistedstate^3.1.0
  • markdown解析:vue3-markdown-it

在这里插入图片描述
在这里插入图片描述

项目目录结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

vite.config.js配置

import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path'
import { parseEnv } from './src/utils/env'// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {const viteEnv = loadEnv(mode, process.cwd())const env = parseEnv(viteEnv)return {plugins: [vue()],// base: '/',// mode: 'development', // development|production/*构建选项*/build: {// minify: 'esbuild', // 打包方式 esbuild(打包快)|terser// chunkSizeWarningLimit: 2000, // 打包大小警告// rollupOptions: {// 	output: {// 		chunkFileNames: 'assets/js/[name]-[hash].js',// 		entryFileNames: 'assets/js/[name]-[hash].js',// 		assetFileNames: 'assets/[ext]/[name]-[hash].[ext]',// 	}// }},esbuild: {// 打包去除 console.log 和 debuggerdrop: env.VITE_DROP_CONSOLE ? ['console', 'debugger'] : []},/*开发服务器选项*/server: {// 端口port: env.VITE_PORT,// 是否浏览器自动打开open: env.VITE_OPEN,// 开启httpshttps: env.VITE_HTTPS,// 代理配置proxy: {// ...}},resolve: {// 设置别名alias: {'@': resolve(__dirname, 'src'),'@assets': resolve(__dirname, 'src/assets'),'@components': resolve(__dirname, 'src/components'),'@views': resolve(__dirname, 'src/views'),// 解决vue-i18n警告提示:You are running the esm-bundler build of vue-i18n.'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js'}}}
})

main.js主入口

import { createApp } from 'vue'
import App from './App.vue'// 引入Router和Store
import Router from './router'
import Store from './store'// 引入插件配置
import Plugins from './plugins'const app = createApp(App)app
.use(Router)
.use(Store)
.use(Plugins)
.mount('#app')

vue3.x组件库

项目中使用的组件库是基于vue3自定义UI组件库Ve-plus。一个支持40+组件的轻量级组件库。
在这里插入图片描述

在这里插入图片描述
安装组件

yarn add ve-plus
npm i ve-plus --save

https://blog.csdn.net/yanxinyun1990/article/details/129312570

整体布局

项目支持2种布局模式,整体分为顶栏+侧边栏+主体内容三大模块构成。
在这里插入图片描述

在这里插入图片描述

<div class="ve__layout-body flex1 flexbox"><!-- //中间栏 --><div class="ve__layout-menus flexbox" :class="{'hidden': store.config.collapse}"><aside class="ve__layout-aside flexbox flex-col"><ChatNew /><Scrollbar class="flex1" autohide size="4" gap="1"><ChatList /></Scrollbar><ExtraLink /><Collapse /></aside></div><!-- //右边栏 --><div class="ve__layout-main flex1 flexbox flex-col"><!-- 主内容区 --><Main /></div>
</div>
<template><div class="vegpt__editor"><div class="vegpt__editor-inner"><Flex :gap="0"><Popover placement="top" trigger="click" width="150"><Button class="btn" type="link" icon="ve-icon-yuyin1" v-tooltip="{content: '发送语音', theme: 'light', arrow: false}"></Button><template #content><div class="flexbox flex-alignc flex-col" style="padding: 15px 0;"><Icon name="ve-icon-yuyin" size="40" color="#0fa27e" /><p class="fs-12 mb-15 c-999">网络不给力</p><Button size="small"><i style="background:#f00;border-radius:50%;box-shadow:0 1px 2px #999;margin-right:5px;height:8px;width:8px;"></i>开始讲话</Button></div></template></Popover><Button class="btn" type="link" v-tooltip="{content: '发送图片', theme: 'light', arrow: false}"><Icon name="ve-icon-photo" size="16" cursor /><input ref="uploadImgRef" type="file" title="" accept="image/*" @change="handleUploadImage" /></Button><Inputclass="flex1"ref="editorRef"v-model="editorText"type="textarea":autosize="{maxRows: 4}"clearableplaceholder="Prompt..."@keydown="handleKeydown"@clear="handleClear"style="margin: 0 5px;"/><Button class="btn" type="link" icon="ve-icon-submit" @click="handleSubmit"></Button></Flex></div></div>
</template>
import { ref, watch } from 'vue'
import { guid } from '@/utils'
import { chatStore } from '@/store/modules/chat'const props = defineProps({value: { type: [String, Number] }
})
const emit = defineEmits(['clear'])const chatState = chatStore()const uploadImgRef = ref()
const editorRef = ref()
const editorText = ref(props.value)// ...// 发送会话
const handleSubmit = () => {editorRef.value.focus()if(!editorText.value) returnlet data = {type: 'text',role: 'User',key: guid(),content: editorText.value}chatState.addSession(data)// 清空editorText.value = ''
}
const handleKeydown = (e) => {// ctrl+enterif(e.ctrlKey && e.keyCode == 13) {handleSubmit()}
}
const handleClear = () => {emit('clear')
}
// 选择图片
const handleUploadImage = () => {let file = uploadImgRef.value.files[0]if(!file) returnlet size = Math.floor(file.size / 1024)console.log(size)if(size > 2*1024) {Message.danger('图片大小不能超过2M')uploadImgRef.value.value = ''return false}let reader = new FileReader()reader.readAsDataURL(file)reader.onload = function() {let img = this.resultlet data = {type: 'image',role: 'User',key: guid(),content: img}chatState.addSession(data)}
}

在这里插入图片描述

/*** 聊天状态管理* @author YXY  Q:282310962*/import { defineStore } from 'pinia'
import { guid, isEmpty } from '@/utils'export const chatStore = defineStore('chat', {state: () => ({// 聊天会话记录sessionId: '',session: []}),getters: {},actions: {// 创建新会话createSession(ssid) {this.sessionId = ssidthis.session.push({sessionId: ssid,title: '',data: []})},// 新增会话addSession(message) {// 判断当前会话uuid是否存在,不存在创建新会话if(!this.sessionId) {const ssid = guid()this.createSession(ssid)}this.session.map(item => {if(item.sessionId == this.sessionId) {if(!item.title) {item.title = message.content}item.data.push(message)}})// ...},// 获取会话getSession() {return this.session.find(item => item.sessionId == this.sessionId)},// 移除会话removeSession(ssid) {const index = this.session.findIndex(item => item?.sessionId === ssid)if(index > -1) {this.session.splice(index, 1)}this.sessionId = ''},// 删除某一条会话deleteSession(ssid) {// ...},// 清空会话clearSession() {this.session = []this.sessionId = ''}},// 本地持久化存储(默认存储localStorage)persist: true/* persist: {// key: 'chatStore', // 不设置则是默认appstorage: localStorage,paths: ['aa', 'bb'] // 设置缓存键} */
})

好了,基于vue3+vite4+pinia2开发模仿chatgpt聊天就分享到这里。

Tauri-Vue3聊天实例|Tauri跨端聊天
uniapp-ttlive短视频聊天|uniapp+uview仿抖音实例

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT聊天app(基于autojs)

这是一个调用ChatGPT的例子 在安卓上运行&#xff0c;我已经打包好了的 下面是测试功能 我已经打包好了&#xff0c;图方便用的是auto.js写的,你也可以用原生安卓写 我用蓝奏浏览器分享了[ChatGPT测试_1.0.0], 下载链接:https://wwp.lanzoup.com/iL8Q50nab43c 提取码 : wumi…

和ChatGPT聊天,你会了吗?

​前段时间发了一篇关于ChatGPT的帖子&#xff0c;很多网友问我&#xff0c;为什么他们跟ChatGPT的聊天得不到他们想要的答案。今天就聊聊如何跟ChatGPT沟通这件事。 首先我们先了解下ChatGPT有那些功能&#xff0c;可以做哪些事情。ChatGPT基于 OpenAI 的大型语言模型。被训练…

在pycharm运行chatGPT聊天机器人

1.准备一个OPENAI的API_KEY。 2.在pycharm中新建一个GPT-3.5.py&#xff1a; import openai # 填入你的api_key openai.api_key ""models openai.Model.list()# 定义API参数 params {role: "user", "content": }# 定义循环 while True:# 获…

Chatgpt聊天界面H5软件定制开发

要进行ChatGPT聊天界面H5软件定制开发&#xff0c;需要考虑以下几个方向&#xff1a; UI设计和交互体验&#xff1a;根据需求和用户特点&#xff0c;进行界面设计&#xff0c;包括颜色、字体、图标等方面的调整&#xff0c;以提供更符合用户习惯和审美的交互界面&#xff0…

java及python调用ChatGPT聊天接口示例

一、接口信息 接口地址&#xff1a;https://www.1bit.asia/openai/api/ask 类型&#xff1a;POST 参数&#xff1a;{"prompt":"写一个修仙小说目录","userName":"apiuser002","token":"链接页面获取" } 说明&am…

初识Python -- 使用Python完成chatgpt聊天功能

运行前需设置环境变量&#xff1a; export OPENAI_API_ORIGANorg-你的组织id export OPENAI_API_KEYsk-IlhlSea你的apikey更多参数说明&#xff1a;https://platform.openai.com/docs/api-reference/chat 运行效果&#xff1a; 基于stream流式返回&#xff0c;逐字打印回答内…

chatgpt聊天 谷歌chatGpt

ChatGPT作品展示&#xff1a; 由于足球冠军的获得是由多个国家参与的&#xff0c;因此中国队夺得足球冠军的概率是不可预测的。 最近发现很多科技公司都在搞ChatGPT&#xff0c;我们普通网民没有技术也想体验一下当下比较火的ChatGPT的人工智能&#xff0c;没有开发的我们有什么…

chatgpt聊天机器人程序开发

ChatGPT聊天机器人具有以下主要功能&#xff1a; 自然语言交互&#xff1a;用户可以使用自然语言与聊天机器人进行交互&#xff0c;例如提问、反馈等。 问题回答&#xff1a;聊天机器人可以通过自然语言处理技术&#xff0c;对用户的问题进行理解和分析&#xff0c;并给…

全开源chatGPT聊天机器人商业版源码 支持魔改 完全开放源代码

正文&#xff1a; 全开源chatGPT聊天机器人商业版源码 支持魔改 完全开放源代码CHATGPT商业源码 支持魔改 全开源 无后门 全开源 随意改! 云盘地址&#xff1a; http://zijieyunpan.cn/PEpjOyeLuuK 图片&#xff1a;

vue 模拟 chatgpt 聊天效果:js 实现逐字显示、延时函数模拟对话

vue 模拟 chatgpt 聊天效果&#xff1a;js 实现逐字显示、延时函数模拟对话 模拟 chatgpt 聊天功能&#xff0c;展示对话效果。其中比较有意义的技术点是&#xff1a;js 实现逐字显示、延时函数&#xff0c;同步遍历。 <template><div class"chat-gpt">…

3分钟自定义你的chatGPT聊天微信机器人

背景 最近chatGPT实在太火了&#xff0c;不谈下都不好意思说自己在技术圈混了&#xff0c;刚好前段时间公司里面在举办一个企业微信机器人比赛&#xff0c;然后就用注册了openai的一个账号&#xff0c;用python写了一个玩玩&#xff0c;但是想想不过瘾只能公司内部体验&#x…

全开源chatGPT聊天机器人商业版源码

下载&#xff1a;https://download.csdn.net/download/qq_45102995/87772789 全开源chatGPT聊天机器人商业版源码完全开放源代码 CHATGPT商业源码 全开源 全开源 随意改!

ChatGPT聊天机器人程序

ChatGPT聊天机器人程序是一种基于人工智能技术的智能对话程序&#xff0c;利用ChatGPT等自然语言处理模型和算法实现与用户的交互&#xff0c;回答问题、提供服务等。 ChatGPT聊天机器人程序通常包括以下模块&#xff1a; 输入模块&#xff1a;用于接收用户输入的信息&…

ChatGPT聊天软件开发

ChatGPT聊天软件是一款基于OpenAI技术训练的智能AI对话软件&#xff0c;具有自然语言处理、问答系统、语音交互等多种功能。用户可以通过输入文字或语音与ChatGPT进行互动&#xff0c;询问问题&#xff0c;获取信息以及进行娱乐和休闲。ChatGPT聊天软件支持多语言&#xff0c;为…

2023 ChatGPT聊天网站html源码

聊天GPT-Web ChatGPT&#xff0c;页面与官方页面的 API 独立。基于ChatGPT API的ChatGPT网页版&#xff0c;无登录障碍&#xff0c;功能丰富。 2023 ChatGPT聊天网站html源码

一百行代码实现搭建简易版 ChatGPT 聊天机器人,网页搭建

最近&#xff0c;OpenAI 的一款聊天机器人模型 ChatGPT 爆火。本篇文章旨在为大家提供一款简易的聊天机器人&#xff0c;只需一百行代码即可制作。话不多说&#xff0c;先上效果&#xff1a; 一百行代码实现简易版chatgpt聊天机器人 CSS代码&#xff1a; .container-fluid {p…

一键导出ChatGPT聊天记录:让备份更简单

重要性&#xff1a; 备份ChatGPT的聊天记录同样非常重要&#xff0c;因为这些记录可能包含了您与ChatGPT的交互记录&#xff0c;这些记录可能包含了您的个人信息、兴趣爱好、偏好和其他敏感信息。以下是备份ChatGPT聊天记录的一些重要性&#xff1a; 防止数据丢失&#xff1a;…

基于小程序制作一个ChatGPT聊天机器人

在AI技术日新月异的浪潮中,将ChatGPT与实战开发相结合,制作一个随身携带的聊天机器人,紧贴前沿的同时稳固基础。 一、前言1.1、什么是ChatGPT1.2、什么是文本完成二、API2.1、ChatGPT官网申请API所需要的key2.2、搭建API2.3、创建控制器及动作方法三、小程序3.1、页面创建3.…

chatGPT聊天记录消失如何找回

言归正传 记录并没有消失&#xff0c;只是无法显示到侧面列表&#xff0c;搜索浏览器历史记录就可以找回了 每次聊天都有一个独特的地址&#xff1a;/chat/xxxx-xxx-xxxxx-xx 查看浏览器历史记录&#xff0c;搜索以上关键字&#xff0c;找到旧的网址 打开旧的网址&#xff…

史诗级聊天AI ChatGPT来啦!

羿阁 发自 凹非寺量子位 | 公众号 QbitAI 一款新的聊天AI被网友们玩疯了。 能直接生成代码、会自动修复bug、在线问诊、模仿莎士比亚风格写作……各种话题都能hold住&#xff0c;它就是OpenAI刚刚推出的——ChatGPT。 有脑洞大开的网友甚至用它来设计游戏&#xff1a;先用ChatG…