uniApp项目总结

前言

大半年的时间,项目从秋天到春天,从管理后台到APP再到数据大屏,技术栈从vue3到uniApp再到nuxt3,需求不停的改,注释掉代码都快到项目总体的三分之一。

一,项目技术栈分析

1.1 项目框架

当前,我正参与的项目框架采用uniApp Vue2,这是一个建立在vue.js之上的前端框架,它使开发者能够通过编写一套代码即可兼容多个平台。在项目的初期阶段,主要涉及一些基础页面的复现,这时候框架没有显著的不足之处。然而,随着项目的深入,特别是在需要引入更多原生功能的阶段,uniApp Vue的局限性开始显现,存在许多不支持的功能。如果此时你不熟悉如何在vue中引入nvue文件,你可能就会像我一般,不得不求助于HTML5+的API来实现对安卓原生能力的调用。基于我的有限经验,如果你的项目需求涉及到较多的原生功能,我建议采用uniApp Nvue来构建你的项目,它更加适合这类需求。

1.2 UI组件库

项目使用UI组件库是 uView

多平台快速开发的UI框架
uView UI,是全面兼容nvue的uni-app生态框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水

1.3 可视化库

项目使用的可视化库是 秋云

uCharts是一款基于canvas API开发的适用于所有前端应用的图表库,开发者编写一套代码,可运行到 Web、iOS、Android(基于 uni-app / taro )、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝/京东/360)、快应用等更多支持 canvas API 的平台。

二,一些问题的解决和API的使用

2.1 如何请求两个不同的后端服务器

拦截器: 项目使用uView封装好的拦截器
请求拦截器通过uni.$u.http.interceptors.request.use实现,可以进行如下配置

uni.$u.http.interceptors.request.use((config) => { // 可使用async await 做异步操作
	config.header = {
		...config.header,
		a: 1 // 演示拦截器header加参
	}
	return config
}, config => { // 可使用async await 做异步操作
	return Promise.reject(config)
})

响应拦截器则通过uni.$u.http.interceptors.response.use进行配置,如下所示:

uni.$u.http.interceptors.response.use((response) => {
	console.log(response)
	return response
}, (response) => {
	/*  对响应错误做点什么 (statusCode !== 200)*/
	console.log(response)
	return Promise.reject(response)
})

在本项目中,由于整合了第三方技术解决方案,需要前端在进行请求时对不同的API地址引导至不同的后端服务器处理。解决方法如下,在请求拦截器中,根据请求地址匹配相应的代理服务器地址以实现请求的分流处理。

if (config.url.includes('/api/') ) {
	  consloe.log("111")
      config.baseURL = service; // 设置代理服务器1的地址
    } else {
      console.log("222")
      config.baseURL = service1; // 设置代理服务器2的地址
      // 根据custom参数中配置的是否需要token,添加对应的请求头
      if (config?.custom?.auth) {
        if (!getToLocalSync('token')) { // 如果token不存在,return Promise.reject(config) 会取消本次请求
          return Promise.reject(config)
        }
        config.header['Authorization-Token'] = getToLocalSync('token')
      }
    }

此方法使得前端能够灵活地控制请求分派至合适的后端服务,从而确保数据处理的正确归属和流畅的服务体验。

2.2 ucharts引入及使用

ucharts的官方文档中提供了两种引入方式:npm i @qiun/ucharts和组件引入。在本项目中,我采用的是第二种组件引入方法,在uniApp插件市场下载并导入ucharts到项目中uni_modules文件夹下,完成以后的目录结构如下:
目录结构
完成上述步骤以后,就可以直接在项目中使用ucharts了,使用示例:

<view class="content-f3" v-if="qiunShow">
			<qiun-data-charts type="line" :opts="opts" :chartData="chartData" :ontouch="true" />
		</view>

其中type表示图表类型,这里使用的是折线图(line),opts图表配置,与Echarts的option相似,在这里因为手机屏幕比较窄,如果是竖屏展示图表的话,建议在xAxis的配置中开启滚动scrollShow: truechartData就是图表的数据源。

2.3 调用相机能力

2.3.1 uni.chooseImage

从本地相册选择图片或使用相机拍照。 官方文档

2.3.2 plus.camera

Camera模块管理设备的摄像头,可用于拍照、摄像操作,通过plus.camera获取摄像头管理对象。

getCamera() {
				let _that = this;
				camera = plus.camera.getCamera(); // 获取摄像头管理对象
				camera.captureImage(
					function(p) {
						plus.io.resolveLocalFileSystemURL(
							p,
							function(entry) {
								// 获取到摄像头返回数据
								consle.log(entry.toLocalURL())
							},
							function(e) {
								plus.nativeUI.toast('读取拍照文件错误:' + e.message);
							}
						);
					}
				);
			},

2.4 扫码

在本项目中集成扫码功能,用户可以通过扫一扫即刻获取信息,大大提高交互的便捷性,减少填写的操作。

2.4.1 uni.scanCode

调起客户端扫码界面,扫码成功后返回对应的结果。

uniApp的官方API,功能比较完善,但是不能自定义扫码界面。官方推荐使用H5 Plus的API:plus.barcode

2.4.2 plus.barcode

Barcode模块管理条码(一维码和二维码)扫描识别,支持常见的一维码(如EAN13码)及二维码(如QR码)。通过调用设备的摄像头对条码进行扫描识别,扫描到条码后进行解码并返回码数据内容及码类型。
Barcode模块可使得Web开发人员能快速方便调用设备的摄像头进行条码扫描识别,而不需要安装额外的扫描插件。规范建议条码识别引擎的支持规范定义的所有条码常量类型。

plus.barcode.create用于创建扫码识别控件对象;[plus.barcode.QR, ...]这里表示用于识别什么类型的码,QR表示用于识别二维码。

barcode = plus.barcode.create('barcode', [plus.barcode.QR, plus.barcode.EAN13, plus.barcode.EAN8, plus.barcode
					.CODE128
				], {
					top: '0',
					left: '0',
					width: '100%',
					height: '100%',
					scanbarColor: '#46B81E',
					position: 'static',
					frameColor: '#46B81E',
					display: 'flex',
					justifyContent: 'center',
					alignItems: 'center'
				});

2.5 海康SDK使用

在接入海康摄像头视频的过程中,我遇到了多个阶段的挑战。第一个阶段,依照海康提供的文档,我成功通过其接口获取了视频流,并试图在我们的系统中进行播放。然而,这里涉及到两种视频协议:RTSP协议RTMP协议,这两者都不能直接在我们的系统上播放。为了解决这一问题,我们首先考虑的方案是在服务器端搭建一个转码服务,将RTSP和RTMP视频流转换为FLV格式,随后利用Fly.js库来在系统中播放视频。这样的处理方式,会导致视频会存在延时,并且对web服务器造成极大的压力。在项目的第二阶段,我们寻求了海康的技术支持,并采用了官方提供的SDK包。根据官方开发指南,我们较为轻松地实现了视频在系统中的集成。然而,在App打包发布后,我们遇到了视频无法正常播放的问题。经过仔细排查,我们发现问题源于SDK仅支持Android浏览器的限制,我们采取了将视频播放功能转移到一个单独的网页应用的解决办法,并通过iframe及webView技术将视频嵌入到系统中,以确保视频能在不同环境下顺畅播放。
在这里插入图片描述
插件推荐
海康视频H5播放器组件

2.6 webView

后续单独更新一篇文章

2.7 组件递归调用

用于展示项目中的树形数据,在组件中合适的节点调用组件本身。下面是一个简单的示例:

<!--treeNode.vue-->
<template>
  <li>
    {{ node.name }}
    <ul v-if="node.children && node.children.length">
      <tree-node
        v-for="(child, index) in node.children"
        :key="index"
        :node="child">
      </tree-node>
    </ul>
  </li>
</template>

2.8 APP发布及更新

后续单独更新一篇文章

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

30V-STM32设计项目

30V-STM32设计 一、项目描述 (已验证) 基于STM32c8t6芯片设计的开发板&#xff0c;支持4-30V宽电压输入&#xff0c;串口模式自动下载功能&#xff0c;支持串口和STlink&#xff0c;方式下载程序 二、原理图介绍 电源电路采用了DCDCLDO电路&#xff0c;如果是外接DC头供电的话&…

坚蛋运动新质生产力实践——“AI健康”战略引领产品和服务创新

进入AI时代&#xff0c;全球互联网企业均开启了以大模型及其应用为代表的第四次工业革命的激烈竞赛。坚蛋运动已在全国范围内布局300门店&#xff0c;预计实现2024年500、2025年1000门店&#xff0c;作为国内运动健康产业的头部品牌&#xff0c;坚蛋运动率先提出并推动“AI健康…

广州大学《软件工程》实验报告三软件设计

广州大学学生实验报告&#xff08;三&#xff09; 开课学院及实验室&#xff1a; 学院 年级/专业/班 姓名 学号 实验课程名称 软件工程导论实验 成绩 实验项目名称 软件设计 指导老师 一、实验目的 掌握软件设计建模技术&#xff0c;能够撰写软件设计文…

判断经济形势最常用的统计指标有哪些

分析判断经济形势常常围绕以下四大目标进行&#xff1a;经济增长、充分就业、物价稳定、国际收支平衡。这四大目标相互联系、相互影响、相互制约&#xff0c;宏观调控的目的在于恰当处理这四方面的关系&#xff0c;寻求一个最佳平衡点。通过全面观察这四大指标&#xff0c;可以…

postCss基本介绍

&#x1f31f;什么是postCss&#xff1f; 我个人的理解postCss就是css界的babel&#xff0c;它提供一个过程&#xff0c;而在这个过程中&#xff0c;去干什么就是你自己的事情&#xff0c;所以很多人写插件&#xff0c;去做代码转换&#xff0c;或者兼容等等。 babel 提供过程 …

新的全息技术突破计算障碍

一种突破性的方法利用基于Lohmann透镜的衍射模型实时创建计算机生成全息图&#xff08;CGH&#xff09;&#xff0c;在保持3D可视化质量的同时&#xff0c;大大降低了计算负荷要求。 全息显示为制作逼真的三维图像提供了一条令人兴奋的途径&#xff0c;这种图像给人以连续深度…

Pytest精通指南(26)钩子函数-依赖执行(pytest-dependency)

文章目录 前言应用场景插件安装注意事项参数分析函数名称依赖实现方式类下函数路径实现方式通过设置别名指定依赖定义依赖范围作用于类作用于模块作用于包作用于会话拓展-非常重要 前言 pytest-dependency的主要用途是确保测试用例按照指定的依赖关系顺序执行。 在一个复杂的测…

R语言绘制动态网络图Network教程WGCNA

今天分享的笔记是使用NetworkD3对WGCNA的共表达网络进行可视化&#xff0c;创建交互式动态网络图&#xff0c;展示基因之间的相互关系&#xff0c;可以用于转录组或者其他调控网络展示。 加权基因共表达网络分析 (WGCNA, Weighted correlation network analysis)是用来描述不同…

数值分析复习:Richardson外推和Romberg算法

文章目录 Richardson外推Romberg&#xff08;龙贝格&#xff09;算法 本篇文章适合个人复习翻阅&#xff0c;不建议新手入门使用 本专栏&#xff1a;数值分析复习 的前置知识主要有&#xff1a;数学分析、高等代数、泛函分析 本节继续考虑数值积分问题 Richardson外推 命题&a…

Python环境找不到解决方法

Python环境找不到 打开设置&#xff1a;Ctrl Alt S 添加Local Interpreter... 打开System Interpreter&#xff0c;找到本地安装的Python.exe路径&#xff0c;然后一路点OK Trust Project 如果打开工程时&#xff0c;出现如下对话框&#xff0c;请勾选 Trust projects in ...&…

CDN技术:全球化的数字内容快速分发系统

CDN技术&#xff1a;全球化的数字内容快速分发系统 在今天的互联网世界中&#xff0c;内容分发网络&#xff08;CDN&#xff09;技术起着至关重要的作用。它通过全球分布的服务器网络&#xff0c;快速、安全地将内容送达世界各地的用户&#xff0c;极大地提升了网页加载速度和…

使用 ollama 部署最新的Llama 3 70B本地模型

一、ollama是什么? 在本地启动并运行大型语言模型。运行Llama 3&#xff0c;Mistral, Gemma, Code Llama和其他模型。自定义并创建您自己的。 综合优点&#xff1a; 快速下载容器自动运行大模型&#xff0c;现在下载&#xff0c;马上上手。本地利用 cpu 运行大模型&#xff0c…

java:Java中的异常处理

目录 异常的概念与体系结构 异常的概念&#xff1a; 异常的体系结构&#xff1a; 异常的处理方式 防御式编程&#xff1a; 异常的抛出&#xff1a; 异常的捕获&#xff1a; finally&#xff1a; 代码示例&#xff1a; 异常的处理流程 自定义异常类 举例&#xff1a…

【Hadoop3.3.6】数据块副本放置策略及解析EditLog和FsImage

目录 一、摘要二、正文2.1 环境说明2.2 网络拓扑2.3 Hadoop副本放置策略介绍2.4 解析EditLog和Fsimage镜像文件三、小结一、摘要 通过解析存储于NameNode节点上的日志文件EditLog和镜像文件(元数据)Fsimage来反向验证HDFS的数据块副本存放策略,其目的是希望加深对Hadoop的数…

2024HVV在即| 最新漏洞CVE库(1.5W)与历史漏洞POC总结分享!

前言 也快到护网的时间了,每年的护网都是一场攻防实战的盛宴,那么漏洞库就是攻防红蓝双方人员的弹药库,红队人员可以通过工具进行监测是否存在历史漏洞方便快速打点,而蓝队则可以对资产进行梳理和监测历史漏洞,及时处理和修复,做好准备. 下面分享的…

【电控笔记5.4】pwm延迟

PWM延迟 1标准采样法 Td=MCU计算延迟+输出延迟 Tcon=电流控制周期 Ts=PWM载波周期 Td=1.5Ts(6.3节 ) 电流环跟PWM采样周期同步 2修改采样法

YOLOv5改进 | Conv篇 | 利用CVPR2024-DynamicConv提出的GhostModule改进C3(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是CVPR2024的最新改进机制DynamicConv其是CVPR2024的最新改进机制&#xff0c;这个论文中介绍了一个名为ParameterNet的新型设计原则&#xff0c;它旨在在大规模视觉预训练模型中增加参数数量&#xff0c;同时尽量不增加浮点运算&#x…

如何使用 ArcGIS Pro 快速为黑白地图配色

对于某些拍摄时间比较久远的地图&#xff0c;限于当时的技术水平只有黑白的地图&#xff0c;针对这种情况&#xff0c;我们可以通过现在的地图为该地图进行配色&#xff0c;这里为大家讲解一下操作方法&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微…

kafka 命令行使用 消息的写入和读取 quickstart

文章目录 Intro命令日志zookeeper serverkafka servercreate topic && describe topic Intro Kafka在大型系统中可用作消息通道&#xff0c;一般是用程序语言作为客户端去调用kafka服务。 不过在这之前&#xff0c;可以先用下载kafka之后就包含的脚本文件等&#xff0…

ChromaDB教程

使用 Chroma DB&#xff0c;管理文本文档、将文本嵌入以及进行相似度搜索。 随着大型语言模型 &#xff08;LLM&#xff09; 及其应用的兴起&#xff0c;我们看到向量数据库越来越受欢迎。这是因为使用 LLM 需要一种与传统机器学习模型不同的方法。 LLM 的核心支持技术之一是…