鸿蒙项目云捐助第二十九讲云捐助项目云数据库商品的批量增加功能实现

news2025/2/8 14:49:28

鸿蒙项目云捐助第二十九讲云捐助项目云数据库商品的批量增加功能实现

关于鸿蒙云捐助项目,前面的内容已使用云函数,云数据库分别实现云捐助项目首页中的项分类导航,底部导航,轮播图功能,这里继续实现云数据库加载捐赠商品的模块。

一、云捐助商品模块中的云数据获取

首先云捐助助的商品模块也需要云数据库的使用,这里需要参考离线项目中模拟数据的字段内容,如下所示。

courseId:1,
name:"爱满彭城慈善助医",
total_price:"260万",
used_price:"130万",
start_time:"2024-07-01",
end_time:"2024-08-30",
company:"乡村发展基金会",
isObject:true,
object_content:"书本,笔,手机,电脑等学习用品",
pic:$r("app.media.cisan1")

以上是模拟显示商品时必备的数据字段。

虽然对于数据库来说,数据库关键的查询是多表查询,华为云数据库还做不到多表查询中的一对多等情况,这样在上面的商品数据中还有结合分类数据的内容,如下图所示。

由图所示,不能建立关联表,在创建数据库时只能为每个商品添加classifyId属性,才可以知道分类程序中调用的className的名称分类,由于分类的数据在云捐助首页中使用云函数加载,这里的云数据库就不显示分类的名称。 由于在捐赠成功后会显示当前项目的爱心捐赠颗数,这里使用love_numbers字段表示爱心捐赠的颗数。因此华为云数据库创建的商品表字段描述如下。

courseId:1,
name:"爱满彭城慈善助医",
total_price:"260万",
used_price:"130万",
start_time:"2024-07-01",
end_time:"2024-08-30",
company:"乡村发展基金会",
isObject:true,
object_content:"书本,笔,手机,电脑等学习用品",
pic:$r("app.media.cisan1")
love_numbers:30

这里有了数据库的定义方法,就可以进入华为应用市场AppGallery Connect界面中,建立对应的云数据库,但是,在创建云数据库时需要注意,上面分析的字段中,确定一条记录需要两个关键字,华为云端数据库使用双关键字在调用时有很大的问题。因此这里创建华为云端数据库时使用单关键字,把categoryId分类id和courseId商品id需要合并在一起形成主键,这里使用cate_couse_id。这样输入的数据库字段和类型的对应关系,如下图所示。

点击“下一步”时进入索引页面,这里的索引可以选择cate_course_id,再点击“下一步”进入到权限选择的页面,这里的权限是所有的权限。如下图所示。

完成数据库捐赠商品表的建立后,这里在云数据库的“存储区”标签中新建一个存储区“three”。如下图所示。

接下来需要对云数据库中添加数据,这里实现批量增加功能。首先使用云数据库的导出功能,分别导出js格式的文件和json格式的文件。然后把js格式的文件放在项目的model文件夹中,把json格式的文件放在项目的rawfile文件夹中。具体做法如下图所示。

实现批量添加这里引入一个新的组件,为商品的批量添加设置入口地址,对于批量添加的文字显示可以通过模拟后台的商品表相关操作来完成。这里在mockjs目录下建立backend.js的模拟数据,如下图所示。

建立后台商品添加模拟数据的具体内容如下图所示。

有了模拟数据后,就可以把之前分类页的左右联动导航组件MyNewSiderBar复制成BackendSideBar.ets 组件,加载这个模拟数据进行后台界面BackendSideBar组件的左右列表显示,其代码如下图所示。

这里实现的是云捐助后端界面中商品,订单,用户增删改查的导航页面。布局上面在build方法中分为左右两个Scroll的滚动,也可以用左右两个List列表,左边的Scroll滚动元素里面使用ForEach遍历之前模拟的后端商品,订单,用户增删改查的模拟数据分类选项,右边的Scroll滚动元素里面ForEach遍历之前模拟的后端商品,订单,用户增删改查的模拟数据的各个子类选项。左侧的Scroll元素内部ForEach循环体中使用组件SideBar,其只是显示左侧的导航数据,“商品管理”,“用户管理”,“订单管理”等条目,当每个条目被点击时,在SideBar组件中将其的背景颜色进行修改。右侧的Scroll元素内部ForEach循环体中使用组件BackendSideBar,在BackendSideBar组件中是对“商品管理”,“用户管理”,“订单管理”等具体条目的显示。这里的SideBar组件中需要显示一个增删改查的图片及一个文字性的描述。布局代码如下图所示。

在这个组件中,首先通过@Prop单向传递接收myitem的子项数据,然后在build()方法中使用Row()将元素放在一行,在元素中有Image图片和Text文字,Image图片显示传入myitem子项数据中的图片内容,Text文本显示传入myitem子项数据中的文字内容,Image图片设置width宽度属性和height高度属性,Text组件设置fontSize的文字大小,fontWeight的粗体显示及textAlign的文字对齐方式等。

在点击这个SideBar其中的组件时,如果发现Text组件中的this.myitem.name的文字是“商品添加”,就会实现批量增加的逻辑。具体代码逻辑如下图所示。

代码中在onClick方法中首先判断this.myitem.name的名字中是否含有“商品添加”,当含有“商品添加”时首先使用cloud.database定义数据库,定义数据库时使用的存储区是“three”,使用的objectTypeInfo对象类型是GoodsInfo的商品信息,接下来定义了一个上传的捐赠商品空列表goods_arr,其类型是mydonation[],第一重遍历模拟数据goods,第二重遍历模拟数据goods中每一个商品的courseList,这里使用双重遍都是为了提取goods模拟数据中的不同字段,在二重循环的循环体中,实例化一个mydunation()的导出数据类型,对这个云数据库的每个数据类型进行set方法的赋值操作,赋值结束后通过push方法加入到goods_arr的mydonation云数据类型的数组中。

当所有的模拟商品加入到goods_arr的mydonation云数据类型的数组中时,通过定义的database获取collection集合,再执行collection集合的upsert方法进行数据的插入。其返回结果通过异步await获取。获取后的结果result如果其值大于0,则通过AlertDialog.show方法弹出警示框“所有全部数据插入数据库,可以登录前台查看”,如果获取结果后其值不大于0,就证明在插入数据中发生错误,则通过AlertDialog.show方法弹出警示框“数据插入失败,请查看原因”。

后台程序写好后,可以修改模拟器程序的启动页,这样运行模拟器,再运行程序,点击“商品添加”就可以执行商品的批量添加了。修改程序启动页的文件在entryAbility文件夹下的EntryAbility.ets文件中,如下图所示。

执行时,也需要注意在resources资源目录下的base文件夹下profile目录中的main_pages文件中的设置,项目pages文件夹下的BackendSideBar.ets组件也需要在这个文件中引用一下。代码如下所示。

模拟器运行后,再运行程序,在出现的页面中点击“商品添加”后,在日志中可以查到插入数据的具体条数信息。如下图所示。

这里显示已经插入了80条数据,这样就使用鸿蒙前端实现了华为云数据库中数据的批量插入。后续还会带来鸿蒙云捐助项目云功能上面的不同的精彩,欢迎关注。

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

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

相关文章

Confluent Cloud Kafka 可观测性最佳实践

Confluent Cloud 介绍 Confluent Cloud 是一个完全托管的 Apache Kafka 服务,提供高可用性和可扩展性,旨在简化数据流处理和实时数据集成。用户可以轻松创建和管理 Kafka 集群,而无需担心基础设施的维护和管理。Confluent Cloud 支持多种数据…

SpringCloudAlibaba升级手册-nacos问题记录

目录 一、前言 二、升级过程 1.问题 2.原因 3.出处 4.理论解决 5.测试环境问题 6.Spring Cloud Alibaba版本对比 7. Spring Cloud Alibaba适配组件版本对比 8.降低Spring Cloud版本 9.SpringCloud与SpringBoot兼容对比表 10.naocs-client版本对比 三、最终解决 一…

15、【OS】【Nuttx】OS裁剪,运行指定程序,周期打印当前任务

背景 接之前wiki【Nsh中运行第一个程序】https://blog.csdn.net/nobigdeal00/article/details/144728771 OS还是比较庞大,且上面搭载了Nsh(Nuttx Shell),需要接入串口才能正常工作,一般调试的时候用,非调试…

C# 窗体应用程序嵌套web网页,基于谷歌浏览器内核(含源码)

有一个winform项目,需要借助一个web项目来显示,并且对web做一些操作,web页目是需要用谷歌内核,基于谷歌 Chromium项目的开源Web Browser控件来开发写了一个demo。 安装步骤 第一步:右键项目,点击 管理NuGet程序包 , 输…

通过远程控制软件实现企业高效协作

在这个信息技术迅猛发展的时代,远程办公已经成为一种趋势,而远程控制软件则是连接分散团队的重要工具。技术的革新不仅推动了远程控制软件的广泛应用,也为现代办公带来了高效的协作体验。本文将探讨远程控制软件的发展,并以RayLin…

赋能开发者 | 麒麟信安受邀参加2024开放原子开发者大会,以技术为引领,以人才创发展

12月20至21日,以“一切为了开发者”为主题的“2024开放原子开发者大会暨首届开源技术学术大会”在湖北武汉举办。本届大会由开放原子开源基金会、中国通信学会联合主办,旨在贯彻落实国家软件发展战略,加速培育壮大我国开源生态。工业和信息化…

每天40分玩转Django:Django国际化

Django国际化 一、今日学习内容概述 学习模块重要程度主要内容国际化基础⭐⭐⭐⭐⭐基本概念、配置设置字符串翻译⭐⭐⭐⭐⭐翻译标记、消息文件模板国际化⭐⭐⭐⭐模板标签、过滤器动态内容翻译⭐⭐⭐⭐模型字段、表单翻译 二、国际化基础配置 # settings.py# 启用国际化 …

Elasticsearch 国产化替代方案之一 Easysearch 的介绍与部署指南

一、前言 在国内数字化转型浪潮和 信创 大背景下,“替代进口”成为许多企业级应用所需要面对的重要课题,搜索领域也不例外。 Elasticsearch(简称 ES)作为一款业界领先的全文搜索和分析引擎,虽然功能强大,但…

Ubuntu 24.04.1 LTS 配置静态固定IP地址

查看网络配置信息 ip addr使用该命令查看网卡名字,一般是ens33或者ens32 修改配置文件 打开 /etc/netplan/下面的yaml配置文件 根据自己的需要配置 network:ethernets:ens33: # 配置的网卡的名称addresses: [192.168.23.140/24] # 配置的静态ip地址和掩码d…

Deep Deterministic Policy Gradient (DDPG)算法

代码 import torch import torch.nn as nn import torch.optim as optim import numpy as np import gym import random from collections import deque# 定义 Actor 网络 class Actor(nn.Module):def __init__(self, state_dim, action_dim, max_action):super(Actor, self).…

C++ OCR 文字识别

一.引言 文字识别,也称为光学字符识别(Optical Character Recognition, OCR),是一种将不同形式的文档(如扫描的纸质文档、PDF文件或数字相机拍摄的图片)中的文字转换成可编辑和可搜索的数据的技术。随着技…

【解决报错】AttributeError: ‘NoneType‘ object has no attribute ‘group‘

学习爬虫时,遇到如下报错: 报错原因: 正则表达式的 search 或 finditer 方法没有找到任何匹配项,可能是换行符处理不当等。 解决方法如下: 在正则表达式末尾加上re.S即可,re.S是一个编译标志&#xff0c…

JVM实战—3.JVM垃圾回收的算法和全流程

大纲 1.JVM内存中的对象何时会被垃圾回收 2.JVM中的垃圾回收算法及各算法的优劣 3.新生代和老年代的垃圾回收算法 4.避免本应进入S区的对象直接升入老年代 5.Stop the World问题分析 6.JVM垃圾回收的原理核心流程 7.问题汇总 1.JVM内存中的对象何时会被垃圾回收 (1)什么…

基于SpringBoot在线音乐系统平台功能实现十八

一、前言介绍: 1.1 项目摘要 随着互联网技术的迅猛发展和普及,人们对音乐的获取和欣赏方式发生了巨大改变。传统的音乐播放方式,如CD、磁带或本地下载的音乐文件,已经不能满足用户日益增长的需求。用户更希望通过网络直接获取各…

RouYi-Vue框架,环境搭建以及使用

使用若以框架需要配置node.js,如果不了解可以去看node.js安装,uni-app的配置使用_uniapp使用nodejs类库-CSDN博客 安装若依 首先是去若以官网下载自己所需要的框架类型 RuoYi-Vue: 🎉 基于SpringBoot,Spring Security&#xff…

XL系列433芯片、2.4G收发芯片 通讯对码说明

XL系列433芯片对码说明: 发射芯片 XL4456 通过数据脚接收高低电平然后经过调制将波形发出,而接收芯片 XL520 通过接收波形后进行解调,数据脚输出高低电平。至于具体的通信协议,需要用户自定义,一般而言,使…

蓝牙BLE开发——解决iOS设备获取MAC方式

解决iOS设备获取MAC方式 uniapp 解决 iOS 获取 MAC地址,在Android、iOS不同端中互通,根据MAC 地址处理相关的业务场景; 文章目录 解决iOS设备获取MAC方式监听寻找到新设备的事件BLE工具效果图APP监听设备返回数据解决方式ArrayBuffer转16进制…

期权懂|如何计算期权卖方平仓后的盈利?

锦鲤三三每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯! 如何计算期权卖方平仓后的盈利? 期权卖方平仓后的盈利计算涉及多个因素,包括期权的交易价格、平仓价格以及权利金的变动等。 交易价格:期权卖…

QT:一个TCP客户端自动连接的测试模型

版本 1:没有取消按钮 测试效果: 缺陷: 无法手动停止 测试代码 CMakeLists.txt cmake_minimum_required(VERSION 3.19) project(AutoConnect LANGUAGES CXX)find_package(Qt6 6.5 REQUIRED COMPONENTS Core Widgets Network)qt_standard_project_setup(…

uniapp中wx.getFuzzyLocation报错如何解决

一、用wx.getLocation接口审核不通过 用uniapp开发小程序时难免需要获取当前地理位置。 代码如下: uni.getLocation({type: wgs84,success: function (res) {console.log(当前位置的经度: res.longitude);console.log(当前位置的纬度: r…