uniApp项目总结

news2024/9/21 7:41:55

前言

大半年的时间,项目从秋天到春天,从管理后台到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发布及更新

后续单独更新一篇文章

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

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

相关文章

树与二叉树的学习笔记

树与二叉树 在之前的学习中&#xff0c;我们一直学习的是一个线性表&#xff0c;数组和链表这两种都是一对一的线性表&#xff0c;而在生活中的更多情况我们要考虑一对多的情况&#xff0c;这时候就引申出了我的新的数据结构那就是树&#xff0c;而树经过一些规矩的指定也就成为…

秒懂图神经网络(GNN)

​ 图神经网络&#xff08;GNN&#xff09;是一种深度学习模型&#xff0c;专门为处理图结构数据而设计。在现实世界中&#xff0c;许多数据都可以通过图来表示&#xff0c;比如社交网络中人与人之间的联系、分子结构中的原子连接等。图由顶点&#xff08;或称为节点&#xff0…

LLM使用方法介绍,持续更新

LLM使用方法介绍&#xff0c;持续更新 1. LLM本地搭建与运行 1. Ollama的安装 网址&#xff1a;https://ollama.com/点击Download选择对应的操作系统下载安装软件&#xff0c;软件默认安装在C盘无法选择路径&#xff1b; 安装完成后&#xff0c;WinR进入终端执行&#xff1a…

推荐一个在线stable-diffusion-webui,通过文字生成动画视频的网站-Ai白日梦

推荐一个可以通过文字生成动画视频的网站&#xff0c;目前网站处于公测中&#xff0c;应该是免费的。 点击新建作品 使用kimi或者gpt生成一个故事脚本 输入故事正文 新建作品&#xff0c;选择风格 我这里显示了六个风格&#xff0c;可以根据自己需要选一个 选择配音&…

54、图论-实现Trie前缀树

思路&#xff1a; 主要是构建一个trie前缀树结构。如果构建呢&#xff1f;看题意&#xff0c;应该当前节点对象下有几个属性&#xff1a; 1、next节点数组 2、是否为结尾 3、当前值 代码如下&#xff1a; class Trie {class Node {boolean end;Node[] nexts;public Node(…

Java——三层架构

在我们进行程序设计以及程序开发时&#xff0c;尽可能让每一个接口、类、方法的职责更单一些&#xff08;单一职责原则&#xff09;。 单一职责原则&#xff1a;一个类或一个方法&#xff0c;就只做一件事情&#xff0c;只管一块功能。 这样就可以让类、接口、方法的复杂度更低…

centos7上搭建mongodb数据库

1.添加MongoDB的YUM仓库&#xff1a; 打开终端&#xff0c;执行以下命令来添加MongoDB的YUM仓库&#xff1a; sudo vi /etc/yum.repos.d/mongodb-org-4.4.repo 在打开的文件中&#xff0c;输入以下内容&#xff1a; [mongodb-org-4.4] nameMongoDB Repository baseurlh…

黑马程序员Docker快速入门到项目部署笔记

视频来源&#xff1a; 01.Docker课程介绍_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1HP4118797?p1 Docker官网&#xff1a; docker build | Docker Docshttps://docs.docker.com/reference/cli/docker/image/build/ 一、Docker的安装和配置 1.卸载旧版Docker…

利用STM32的定时器和中断实现精准时间控制

⬇帮大家整理了单片机的资料 包括stm32的项目合集【源码开发文档】 点击下方蓝字即可领取&#xff0c;感谢支持&#xff01;⬇ 点击领取更多嵌入式详细资料 问题讨论&#xff0c;stm32的资料领取可以私信&#xff01; 在嵌入式系统开发中&#xff0c;精确的时间控制是许多应用的…

软考 系统架构设计师系列知识点之大数据设计理论与实践(13)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之大数据设计理论与实践&#xff08;12&#xff09; 所属章节&#xff1a; 第19章. 大数据架构设计理论与实践 第4节 Kappa架构 19.4.2 Kappa架构介绍 Kappa架构由Jay Kreps提出&#xff08;Lambda由Storm之父Nayhan M…

Qt 集成OSG

Qt 你好 | 专注于Qt的技术分享平台 一&#xff0c;新建一个 QOsgWidget 类&#xff0c;继承自osgQOpenGLWidget #ifndef QOSGWIDGET_H #define QOSGWIDGET_H#include <QObject> #include <osgViewer/Viewer> #include <osgQOpenGL/osgQOpenGLWidget> class…

ubuntu16安装docker及docker-compose

ubuntu16安装docker及docker-compose 一、环境前期准备 检查系统版本 系统版本最好在16及以上&#xff0c;可以确保系统的兼容性 lsb_release -a查看内核版本及系统架构 建议用 x86_64的系统架构&#xff0c;安装是比较顺利的 uname -a32的系统不支持docker&#xff0c;安…

【面试八股总结】Linux系统下的I/O多路复用

参考资料 &#xff1a;小林Coding、阿秀、代码随想录 I/O多路复用是⼀种在单个线程或进程中处理多个输入和输出操作的机制。它允许单个进程同时监视多个文件描述符(通常是套接字)&#xff0c;一旦某个描述符就绪&#xff08;一般是读就绪或者写就绪&#xff09;&#xff0c;能够…

【精简改造版】大型多人在线游戏BrowserQuest服务器Golang框架解析(2)——服务端架构

1.架构选型 B/S架构&#xff1a;支持PC、平板、手机等多个平台 2.技术选型 &#xff08;1&#xff09;客户端web技术&#xff1a; HTML5 Canvas&#xff1a;支持基于2D平铺的图形引擎 Web workers&#xff1a;允许在不减慢主页UI的情况下初始化大型世界地图。 localStorag…

C++——类和对象练习(日期类)

日期类 1. 构造函数和析构函数2. 拷贝构造和赋值运算符重载3. 运算符重载3.1 日期的比较3.2 日期加减天数3.3 日期减日期3.4 流插入和流提取 4. 取地址和const取地址重载5. 完整代码Date.hDate.c 对日期类进行一个完善&#xff0c;可以帮助我们理解六个默认成员函数&#xff0c…

30V-STM32设计项目

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

机器学习之sklearn基础教程

目录 前言 一、安装 Sklearn 二、导入 Sklearn 三、加载数据集 四、划分数据集 五、数据预处理 六、选择模型并训练 七、模型评估 八、实验不同的模型 九、调整模型参数 十、实例&#xff1a;使用Sklearn库来进行鸢尾花&#xff08;Iris&#xff09;数据集的分类 #s…

微信小程序 讯飞录音 点击按钮录音内容转文字

<page-meta page-style"{{ showPolish ? overflow: hidden; : }}" /> <view class"wrap"> <view class"header-tab" style"justify-content: {{typeList.length > 2 ? start : center}}"><view class&quo…

加速大数据分析:Apache Kylin使用心得与最佳实践详解

Apache Kylin 是一个开源的分布式分析引擎&#xff0c;提供了Hadoop之上的SQL接口和多维分析&#xff08;OLAP&#xff09;能力以支持大规模数据。它擅长处理互联网级别的超大规模数据集&#xff0c;并能够进行亚秒级的查询响应时间。Kylin 的主要使用场景包括大数据分析、交互…

【基础算法】双指针

1.移动零 移动零 思路&#xff1a; 利用双指针算法 cur&#xff1a;从左往右扫描数组&#xff0c;遍历数组 dest&#xff1a;处理好的区间包括dest dest初始化为-1&#xff0c;因为刚开始dest前应该没有非零元素。 即将非零元素移到dest之前即可 class Solution { public…