前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >uni-app+vue3+pinia小程序/App/H5端chatgpt实例

uni-app+vue3+pinia小程序/App/H5端chatgpt实例

原创
作者头像
andy2018
发布于 2023-06-28 01:06:10
发布于 2023-06-28 01:06:10
1.7K10
代码可运行
举报
文章被收录于专栏:h5h5
运行总次数:0
代码可运行

给大家分享一个最新研发的uniapp+vue3跨多个平台仿制chatGPT会话应用项目。

uni-chatgpt 运用跨端技术uniapp和vite4全家桶技术构建的多平台AI会话模板案例。支持渲染markdown语法及代码层高亮显示、可编译至H5+小程序+APP端。

技术栈

  • 开发工具:HbuilderX 3.8.4
  • 框架技术:Uniapp+Vite4+Vue3+Pinia
  • UI组件库:uView-plus^3.1.31
  • markdown渲染:markdown-it
  • 代码高亮:highlight.js
  • 会话缓存:pinia-plugin-unistorage
  • 弹框组件:ua-popup(基于uniapp封装跨端弹层组件)
  • 自定义组件:导航条ua-navbar+菜单栏ua-tabbar+编辑框ua-input
  • 构建编译:小程序+H5+APP端

项目结构图

使用hbuilderx创建项目,全部采用vue3 setup语法开发。

main.js

初始化vue3,引入uview组件库及pinia状态管理。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 主入口配置
  */

import App from './App'
import { createSSRApp } from 'vue'

// 引入pinia状态管理
import pinia from '@/store'

// 引入uview-plus组件库
import uviewplus from '@/uview-plus'

export function createApp() {
    const app = createSSRApp(App)
    app.use(pinia)
    app.use(uviewplus)
    return {
        app,
        pinia
    }
}

App.vue

vue3 setup引入uniapp生命周期,获取statusBar高度处理。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script setup>
    import { provide } from 'vue'
    import { onLaunch, onShow, onHide, onPageNotFound } from '@dcloudio/uni-app'
    
    onLaunch(() => {
        console.log('App Launch')
        
        // 隐藏tabBar
        uni.hideTabBar()
        // 初始化
        initSysInfo()
    })
    
    onShow(() => {
        console.log('App Show')
    })
    
    onHide(() => {
        console.log('App Hide')
    })
    
    onPageNotFound((e) => {
        console.warn('Router Error>>', ` No match path "${e.path}" `);
        uni.redirectTo({
            url: '/pages/404/index'
        })
    })
    
    const initSysInfo = () => {
        uni.getSystemInfo({
            success: (e) => {
                // 获取手机状态栏高度
                let statusBar = e.statusBarHeight
                let customBar
                
                // #ifndef MP
                customBar = statusBar + (e.platform == 'android' ? 50 : 45)
                // #endif
                
                // #ifdef MP-WEIXIN
                // 获取胶囊按钮的布局位置信息
                let menu = wx.getMenuButtonBoundingClientRect()
                // 导航栏高度 = 胶囊下距离 + 胶囊上距离 - 状态栏高度
                customBar = menu.bottom + menu.top - statusBar
                // #endif
                
                // #ifdef MP-ALIPAY
                customBar = statusBar + e.titleBarHeight
                // #endif
                
                // 目前globalData在vue3 setup支持性不好,改为provide/inject方式
                provide('globalData', {
                    statusBarH: statusBar,
                    customBarH: customBar,
                    platform: e.platform
                })
            }
        })
    }
</script>

uniapp vue3 markdown语法解析

项目已经支持在h5/小程序/App端解析markdown语法结构及代码高亮显示了。

使用了markdown-ithighlight.js两个插件实现功能。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 引入uniapp markdown插件
import MarkdownIt from '@/plugins/markdown-it.min.js'
import hljs from '@/plugins/highlight/highlight.min.js'
// import '@/plugins/highlight/github-dark.min.css'
import '@/plugins/highlight/atom-one-light.css'
import parseHtml from '@/plugins/html-parser.js'
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const markdown = MarkdownIt({
	 html: true,
	 highlight: function(str, lang) {
		let preCode = ""
		try {
			preCode = hljs.highlightAuto(str).value
		} catch (err) {
			preCode = markdown.utils.escapeHtml(str);
		}
		// 自定义行号
		const lines = preCode.split(/\n/).slice(0, -1)
		let html = lines.map((item, index) => {
			// 去掉空行
			if( item == ''){
				return ''
			}
			return '<li><span class="line-num" data-line="' + (index + 1) + '"></span>' + item +'</li>'
		}).join('')
		html = '<ol style="padding: 0px 30px;">' + html + '</ol>'
		
		// 代码复制
		copyCode.push(str)
		let htmlCode = `<div class="markdown-wrap">`
			// #ifndef MP-WEIXIN
				htmlCode += `<div style="color: #aaa;text-align: right;font-size: 12px;padding:8px;">`
					htmlCode += `${lang}<a class="copy-btn" code-data-index="${copyCode.length - 1}" style="margin-left: 8px;">复制代码</a>`
				htmlCode += `</div>`
			// #endif
				htmlCode += `<pre class="hljs" style="padding:0 8px;margin-bottom:5px;overflow: auto;display: block;border-radius: 5px;"><code>${html}</code></pre>`;
			htmlCode += '</div>'
		return htmlCode
	}
})

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const parseNodes = (value) => {
	 if(!value) return
	 
	 let htmlString = ''
	if (value.split("```").length % 2) {
		let msgContent = value
		if(msgContent[msgContent.length-1] != '\n'){
			msgContent += '\n'
		}
		htmlString = markdown.render(msgContent)
	} else {
		htmlString = markdown.render(msgContent.value)
	}
	
	// #ifndef APP-NVUE
	return htmlString
	// #endif
	
	// nvue模式下将htmlString转成htmlArray,其他情况rich-text内部转
	// 注:本示例项目还没使用nvue编译
	// #ifdef APP-NVUE
	return parseHtml(htmlString)
	// #endif
}

使用uniapp中的rich-text调用parseNodes方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<rich-text space="nbsp" :nodes="parseNodes(item.content)" @itemclick="handleItemClick"></rich-text>

uniapp vue3 uni.createSelectorQuery()

在uniapp vue3中 uni.createSelectorQuery().in(this) 会报错__route__未定义。

this在vue3中指向不一样,所以改为如下getCurrentInstance替代。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const instance = getCurrentInstance()

uni.createSelectorQuery().in(instance).select('#uapopup-' + id).fields({
	size: true,
}, data => {
	resolve(data)
}).exec()

好了,以上就是uniapp+vite4搭建chatgpt实例项目的一些分享。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
1 条评论
热度
最新
uni-app+vue3实战仿微信app聊天 https://cloud.tencent.com/developer/article/2413865
uni-app+vue3实战仿微信app聊天 https://cloud.tencent.com/developer/article/2413865
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
英特尔开发四旋翼无人机,能翻筋斗、滚筒飞
科学家们开发了出一种四旋翼直升机,即四轴飞行器,它可以学习即使对人类驾驶员也有难度的特技飞行动作。
大数据文摘
2020/07/07
3140
击败3位人类世界冠军,登上Nature封面!AI无人机极限竞速开启自动驾驶新纪元
今天Nature的封面论文,内容是AI驾驶系统在无人机竞速领域击败了人类SOTA。
新智元
2023/09/09
3620
击败3位人类世界冠军,登上Nature封面!AI无人机极限竞速开启自动驾驶新纪元
Berkeley共享自主研究:人-机组合应用model-free RL,优化无人机实时辅助控制
想象这样一个场景,无人机驾驶员远程操控一架四旋翼飞行器,用机载摄像头进行导航和着陆。不熟练的飞行动态、陌生的地形和网络延迟都会影响这个系统,使得人很难对其进行控制。解决这个问题的方法之一便是训练自主智能体,使其在没有人工干预的情况下,执行巡查和绘图之类的任务。只有当任务描述明确,且代理能观察到所有它需要的信息时,这种策略才会有效。
AiTechYun
2018/07/27
3680
Berkeley共享自主研究:人-机组合应用model-free RL,优化无人机实时辅助控制
刺激,无人机竞速超越顶级人类玩家,强化学习再登Nature封面
这架自主控制无人机是由来自苏黎世大学的研究团队设计研发的 Swift 系统,研究成果登上了最新一期的《Nature》杂志封面。
机器之心
2023/09/08
2400
刺激,无人机竞速超越顶级人类玩家,强化学习再登Nature封面
编队飞行、竹林穿梭,浙大微型无人机蜂群登Science Robotics封面
机器之心报道 机器之心编辑部 只需几年的时间,我们就会看到这种无人机被部署在现实生活的任务中。 这是第一次有一群无人机在自然非结构化环境中成功编队飞行,「我们向未来又迈出了一步,」研究人员写道。 在科幻电影中,我们经常看到无人机的身影,例如在《普罗米修斯》(2012)中,宇航员在决定走哪条路之前释放了几个微型机载装置来探索一艘未知的外星飞船;在《安德的游戏》(2013 年)中,无人机群包围了飞船,形成了抵御外星人攻击的盾牌,后来为人类赢得战斗扫清了道路;在《星球大战 III》(2005 年)和《银翼杀手 2
机器之心
2022/05/23
7920
编队飞行、竹林穿梭,浙大微型无人机蜂群登Science Robotics封面
前沿 | BAIR提出人机合作新范式:教你如何高效安全地在月球着陆
选自BAIR 作者:Siddharth Reddy 机器之心编译 参与:Pedro、刘晓坤 人机合作可以提高很多现实高危任务的成功率和安全性,特别是对于视野受限的飞机着陆甚至飞船登月任务。以前的方法通常依赖于大量的先验知识(基于模型)。为此,伯克利 AI 研究院提出了基于深度强化学习的共享自治系统(无模型),不需要先验知识就可以辅助任务的执行,并在有先验知识的条件下能进一步利用并提升性能。该系统对于存在非结构化、不可预测因素的任务很有优势。在登月游戏和真实无人机着陆的任务中它都取得了优越的成果,显著优于人机
机器之心
2018/05/08
1.1K0
前沿 | BAIR提出人机合作新范式:教你如何高效安全地在月球着陆
新算法利用深度学习赋予无人机导航功能
瑞士苏黎世大学(University of Zurich,UZH)研发出了一种DroNet算法,使无人机能够沿着城市街道或在建筑物内飞行,该算法还需要通过骑行者及汽车驾驶员学习驾驶用例及相关的交通法规。 由瑞士苏黎世大学研究人员开发的DroNet算法使无人机能够在城市街道上和室内环境中完全自主飞行。另外,该算法必须学习交通规则,通过骑行者及汽车驾驶员学习驾驶用例。 今天所有的商用无人机都使用GPS,它在建筑屋顶和高海拔地区表现很好。但是,当无人机必须在高楼之间或密集、无组织的城市街道上,有汽车、骑自行车的
人工智能快报
2018/03/30
9833
稳当扛住强风的无人机你见过吗?加州理工用12分钟飞行数据教会无人机御风飞行
机器之心报道 编辑:陈萍、杜伟 能抗下强大阵风的无人机,你见过没?加州理工学院的研究者用深度神经网络让无人机不再怕风。 当风大到可以把伞吹坏的程度,无人机却稳稳当当,就像这样: 御风飞行是空中飞行的一部分,从大的层面来讲,当飞行员驾驶飞机着陆时,风速可能会给他们带来挑战;从小的层面来讲,阵风也会影响无人机的飞行。 目前来看,无人机要么在受控条件下飞行,无风;要么由人类使用遥控器操作。无人机被研究者控制在开阔的天空中编队飞行,但这些飞行通常是在理想的条件和环境下进行的。 然而,要想让无人机自主执行必要但
机器之心
2022/05/27
5260
稳当扛住强风的无人机你见过吗?加州理工用12分钟飞行数据教会无人机御风飞行
美国队长3里居然藏了8大无人机黑科技
美国队长3作为一部谍战悬疑动作科幻爱情搞基片,让部分超级英雄迷认识到了这帮人不靠谱的一面,甚至有人开始怀疑超级英雄们的三观是否正常了,乌有博士今天不去讨论三观,毕竟咱们生活的世界还不太需要超级英雄来维护和平,我们要讨论的是那架一出场就让很多观众惊呼“这才是无人机啊”的无人机——红翼。 或许是因为近年来无人机越来越为公众所熟悉和接受,漫威电影也将原著中猎鹰的游隼改编成了一架无人机,而且戏份还不少,下面就来分析一下红翼无人机所具有的高超的黑科技吧。 1、矢量推力 电影中的红翼可见的发动机喷口则只有一个,但
机器人网
2018/04/23
9660
美国队长3里居然藏了8大无人机黑科技
细数无人机的幕后功臣:开源飞控流派全揭秘
无人机能被快速普及,很大程度上是得益于开源飞控的发展,因为困扰着无人机发展的关键设备是自动驾驶仪。那么,开源飞控是什么?又是如何发展过来的? 在纷繁复杂的无人机产品中,四旋翼飞行器以其结构简单、使用方
机器人网
2018/04/24
5.1K0
细数无人机的幕后功臣:开源飞控流派全揭秘
BBC:无人机的“蜂群”时代
英国BBC新闻网刊登了David Hambling的文章,题目为“蜂群:无人机的下一个时代”。 你想象中的无人机是什么形象?是带螺旋桨的独立遥控玩具,还是大型的军用无人驾驶机?这些形象可能很快会发生重大变化:无人机将变得越来越小,制造成本更低,可以自动缩放,成百上千个无人机聚集在一起,像鸟群一样飞翔。 它们被称为蜂群——只要将足够多的无人机组合在一起,就可以在很多方面超越人类;它们可以拯救你的生命,或在战场上成为一个致命的协同作战力量。 为什么无人机蜂群如此重要? 首先,在战场上,它们将胜过军方
人工智能快报
2018/03/14
1.3K0
BBC:无人机的“蜂群”时代
下一次火星任务,中国要放飞自己的无人机
来源:机器之心  本文约2000字,建议阅读5分钟 无人机将成为火星车的「导游」。 火星只有地球 1% 的大气密度,但以后火星车要是不带个无人机可能就显得不够先进了。 提到火星无人机,你可能会想起搭乘「毅力号」前往火星的「机智号」无人机。今年四月,在世人瞩目下,机智号完成了持续约 40 秒的火星首飞,在垂直上升 3 米后,执行了悬停、下降和着陆等所有设定动作。机智号创造了人类在火星上的「莱特兄弟时刻」。 在地球以外的行星放飞无人机除了工程技术方面的意义,还会对探索带来很大帮助,实际上国内关于火星无人机的研
数据派THU
2023/03/29
2260
下一次火星任务,中国要放飞自己的无人机
用算法解决炸机问题,让大疆也服气的无人机公司
场景介绍:对于四旋翼无人机常见的推进系统故障, 无人机制造公司 Verity Stdios,推出了一种低成本,方便且易于集成的算法,能够在动力故障发生时,保持无人机的运行,避免炸机事件。
HyperAI超神经
2019/11/29
5870
用算法解决炸机问题,让大疆也服气的无人机公司
无人机竞赛联盟将为自动无人机启动200万美元奖金
无人机竞速联盟(DRL)将举办一系列比赛和竞赛,自动无人机将尝试击败专业无人机飞行员。大学生和其他无人机爱好者团队将被邀请参加超过200万美元的比赛。
AiTechYun
2018/09/26
4620
无人机竞赛联盟将为自动无人机启动200万美元奖金
奔向可控的智能化!无人机人机交互的挑战与前沿 | ICRA 2018
在ICRA 2018上举行了一场关于「无人机人机交互:挑战与前沿」的研讨会,与机器人领域的其他研究领域相比,针对无人机的人机交互主题颇为新颖。
AI科技评论
2018/07/26
9610
奔向可控的智能化!无人机人机交互的挑战与前沿 | ICRA 2018
AI无人机竞速击败人类冠军,Nature封面:将AlphaGo成果带到物理世界
与上一次AlphaGo下围棋不同,这次不是脑力运动,而是在真实物理环境中的竞技体育项目——“空中F1”无人机竞速。
量子位
2023/09/08
2350
AI无人机竞速击败人类冠军,Nature封面:将AlphaGo成果带到物理世界
高速无人机独立穿越森林,全程自己规划路线,时速高达40公里
如此高超的避障飞行走位,可不是人类用手柄操作出来的,全靠无人机的“自我管理意识”。
量子位
2023/03/01
3120
高速无人机独立穿越森林,全程自己规划路线,时速高达40公里
上海交通大学设计无人机新算法,可控制无人机瞄准移动车辆并吸附,未来大有可为!
大数据文摘出品 无人机在这几年大放异彩:监视、运送任务、搜索和救援工作。 但是,随着这些便携式飞行器承担更多独特和困难的任务,他们需要能够在越来越具有挑战性的情况下降落。 上海交通大学机械工程学院开发的一种新设计的名为“搭便车”(Hitchhiker)的无人机不仅能够在倾斜的表面着陆,还能在运动中的倾斜表面着陆,比如行驶中的汽车的侧面。 论文发表在 IEEE 自动化科学与工程学报上: https://ieeexplore.ieee.org/document/10092478 这款“搭便车”是Sensen
大数据文摘
2023/05/09
2730
上海交通大学设计无人机新算法,可控制无人机瞄准移动车辆并吸附,未来大有可为!
深圳凭什么可以打造“无人机之都”?
“我宣布,第十七届高交会无人系统展分会场——中国(深圳)国际无人系统技术成果交易展览会开幕”(以下简称“CIUVS展会”)。17日上午11时15分许,随着深圳市委常委杨洪的朗声宣布,“CIUVS展会”成功拉开帷幕。 由易瓦特无人机公司组成代表深圳的S型编队,20余架无人机平稳升空,在空中翩翩起舞,拼出了深圳的首字母“SZ”,代表着无人系统展在深圳这座无人机之都盛大开幕,也预示着深圳无人机之都的辉煌腾飞! 龙岗区区长吕玉印代表高交会无人系统展分会场组委会致辞,深圳市贸促委副主任黄史昉主持了开幕式活动。据悉
机器人网
2018/04/20
8590
深圳凭什么可以打造“无人机之都”?
详解多旋翼飞行器/无人机的传感器技术
两年来,大疆精灵系列更新了两代,飞控技术更新了两代,智能导航技术从无到有,诸多新的软件和硬件产品陆续发布。同时我们也多了很多友商,现在多旋翼飞行器市场火爆,诸多产品琳琅满目,价格千差万别。为了理解这些飞行器的区别,首先要理解这些飞行器上使用的传感器技术。我觉得现在很有必要再发一篇科普文章,定义“智能导航”这个概念,顺便字里行间介绍一下两年来大疆在传感器技术方面的努力。 1. 飞行器的状态 客机、多旋翼飞行器等很多载人不载人的飞行器要想稳定飞行,首先最基础的问题是确定自己在空间中的位置和相关的状态。测量这些状
机器人网
2018/04/12
2.4K0
详解多旋翼飞行器/无人机的传感器技术
推荐阅读
英特尔开发四旋翼无人机,能翻筋斗、滚筒飞
3140
击败3位人类世界冠军,登上Nature封面!AI无人机极限竞速开启自动驾驶新纪元
3620
Berkeley共享自主研究:人-机组合应用model-free RL,优化无人机实时辅助控制
3680
刺激,无人机竞速超越顶级人类玩家,强化学习再登Nature封面
2400
编队飞行、竹林穿梭,浙大微型无人机蜂群登Science Robotics封面
7920
前沿 | BAIR提出人机合作新范式:教你如何高效安全地在月球着陆
1.1K0
新算法利用深度学习赋予无人机导航功能
9833
稳当扛住强风的无人机你见过吗?加州理工用12分钟飞行数据教会无人机御风飞行
5260
美国队长3里居然藏了8大无人机黑科技
9660
细数无人机的幕后功臣:开源飞控流派全揭秘
5.1K0
BBC:无人机的“蜂群”时代
1.3K0
下一次火星任务,中国要放飞自己的无人机
2260
用算法解决炸机问题,让大疆也服气的无人机公司
5870
无人机竞赛联盟将为自动无人机启动200万美元奖金
4620
奔向可控的智能化!无人机人机交互的挑战与前沿 | ICRA 2018
9610
AI无人机竞速击败人类冠军,Nature封面:将AlphaGo成果带到物理世界
2350
高速无人机独立穿越森林,全程自己规划路线,时速高达40公里
3120
上海交通大学设计无人机新算法,可控制无人机瞄准移动车辆并吸附,未来大有可为!
2730
深圳凭什么可以打造“无人机之都”?
8590
详解多旋翼飞行器/无人机的传感器技术
2.4K0
相关推荐
英特尔开发四旋翼无人机,能翻筋斗、滚筒飞
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验