当前位置: 首页 > news >正文

HarmonyOS ArkTS 实战:实现一个校园爱心捐赠物资登记应用

HarmonyOS ArkTS 实战:实现一个校园爱心捐赠物资登记应用

项目效果

本文使用 HarmonyOS 和 ArkTS 实现一个校园爱心捐赠物资登记应用。

应用可以发布学习用品、生活用品、衣物鞋帽和运动器材等爱心物资,记录捐赠人和物资数量,并提供审核上架、领取确认、状态筛选和物资统计功能。

项目使用 DevEco Studio 开发,适配 API 23 及以上版本。

功能介绍

本项目实现了以下功能:

  • 登记校园爱心捐赠物资
  • 填写物资名称、捐赠人和数量
  • 选择物资分类
  • 审核捐赠物资
  • 将物资上架为可领取状态
  • 确认物资已经领取
  • 按待审核、可领取和已领取筛选
  • 统计物资总数、待审核和可领取数量
  • 删除无效物资记录

定义数据结构

首先定义爱心物资的数据结构:

interfaceDonationRecord{id:number;itemName:string;donor:string;quantity:number;category:string;status:string;}

字段说明如下:

  • id:物资记录的唯一编号
  • itemName:物资名称
  • donor:捐赠人
  • quantity:物资数量
  • category:物资分类
  • status:物资流转状态

初始化页面状态

使用@State保存输入内容、物资分类和筛选条件:

@StateprivateitemText:string='';@StateprivatedonorText:string='';@StateprivatequantityText:string='';@Stateprivatecategory:string='学习用品';@StateprivatefilterType:string='全部';@StateprivatenextId:number=6;

准备一些初始数据,让应用运行后可以直接展示完整效果:

@Stateprivaterecords:DonationRecord[]=[{id:1,itemName:'考研英语复习资料',donor:'林同学',quantity:6,category:'学习用品',status:'待审核'},{id:2,itemName:'保温水杯',donor:'周同学',quantity:3,category:'生活用品',status:'可领取'},{id:3,itemName:'闲置运动服',donor:'校园跑团',quantity:12,category:'衣物鞋帽',status:'已领取'},{id:4,itemName:'羽毛球拍',donor:'王同学',quantity:2,category:'运动器材',status:'可领取'}];

添加捐赠物资

用户填写物资名称、捐赠人和数量后,可以提交新的爱心物资:

privateaddRecord():void{constitemName:string=this.itemText.trim();constdonor:string=this.donorText.trim();constquantity:number=Number(this.quantityText);if(itemName.length===0||donor.length===0||Number.isNaN(quantity)||quantity<=0){return;}constrecord:DonationRecord={id:this.nextId,itemName,donor,quantity,category:this.category,status:'待审核'};this.records=[record,...this.records];this.nextId+=1;this.itemText='';this.donorText='';this.quantityText='';}

新提交的物资默认处于“待审核”状态。

物资状态流转

物资状态按照以下流程变化:

待审核 -> 可领取 -> 已领取

使用下面的方法更新物资状态:

privateadvanceStatus(id:number):void{this.records=this.records.map((item:DonationRecord)=>{if(item.id===id){conststatus:string=item.status==='待审核'?'可领取':'已领取';return{id:item.id,itemName:item.itemName,donor:item.donor,quantity:item.quantity,category:item.category,status};}returnitem;});}

待审核物资点击“审核上架”后变为可领取状态;可领取物资点击“确认领取”后变为已领取状态。

筛选物资记录

页面支持按物资状态筛选:

privategetFilteredRecords():DonationRecord[]{if(this.filterType==='待审核'){returnthis.records.filter((item:DonationRecord)=>item.status==='待审核');}if(this.filterType==='可领取'){returnthis.records.filter((item:DonationRecord)=>item.status==='可领取');}if(this.filterType==='已领取'){returnthis.records.filter((item:DonationRecord)=>item.status==='已领取');}returnthis.records;}

筛选按钮可以封装为一个@Builder组件:

@BuilderFilterButton(text:string){Button(text).height(34).layoutWeight(1).fontSize(12).fontColor(this.filterType===text?Color.White:'#344054').backgroundColor(this.filterType===text?'#BE123C':'#E8EEF7').borderRadius(8).onClick(()=>{this.filterType=text;});}

统计物资总数

统计全部物资数量:

privategetTotalQuantity():number{lettotal:number=0;this.records.forEach((item:DonationRecord)=>{total+=item.quantity;});returntotal;}

统计指定状态的物资数量:

privategetCount(status:string):number{returnthis.records.filter((item:DonationRecord)=>item.status===status).length;}

页面顶部展示物资总数、待审核和可领取数量:

this.StatCard('物资总数',`${this.getTotalQuantity()}`,'#BE123C','#FFF1F2');this.StatCard('等待审核',`${this.getCount('待审核')}`,'#D97706','#FFF7E8');this.StatCard('可领取',`${this.getCount('可领取')}`,'#2563EB','#EFF6FF');

设置分类颜色

不同物资分类使用不同颜色:

privategetCategoryColor(category:string):ResourceColor{if(category==='学习用品'){return'#2563EB';}if(category==='生活用品'){return'#0891B2';}if(category==='衣物鞋帽'){return'#7C3AED';}return'#D97706';}

颜色含义如下:

  • 蓝色:学习用品
  • 青色:生活用品
  • 紫色:衣物鞋帽
  • 橙色:运动器材
  • 红色:爱心驿站主题色

删除物资记录

不再需要的物资记录可以从列表中删除:

privatedeleteRecord(id:number):void{this.records=this.records.filter((item:DonationRecord)=>item.id!==id);}

删除后,物资列表和顶部统计数据会自动刷新。

使用列表展示物资

使用ListForEach渲染筛选后的物资记录:

List({space:10}){ForEach(this.getFilteredRecords(),(item:DonationRecord)=>{ListItem(){this.DonationCard(item)}},(item:DonationRecord)=>item.id.toString());}.width('100%').layoutWeight(1).scrollBar(BarState.Off);

每条物资记录使用独立卡片展示,卡片中包含物资名称、捐赠人、物资分类、数量、状态和操作按钮。

页面设计说明

应用采用暖红色作为主题色,表达校园公益和爱心传递的主题。

页面主要分为以下区域:

  1. 顶部标题和爱心物资总数
  2. 物资数据统计区域
  3. 新物资登记区域
  4. 物资状态筛选区域
  5. 爱心物资记录列表

页面使用浅灰色背景和白色卡片,不同物资类别和状态使用不同颜色,便于快速查看物资进度。

SDK 配置

本项目使用 HarmonyOS API 24,满足 API 23 及以上要求:

{ "name": "default", "compatibleSdkVersion": "6.1.1(24)", "runtimeOS": "HarmonyOS", "targetSdkVersion": "6.1.1(24)", "compileSdkVersion": "6.1.1(24)" }

entry 模块中的运行系统也要保持一致:

{ "apiType": "stageMode", "targets": [ { "name": "default", "runtimeOS": "HarmonyOS" } ] }

运行项目

使用 DevEco Studio 打开项目,然后找到:

entry/src/main/ets/pages/Index.ets

等待项目同步完成,点击右侧的Preview按钮即可查看应用效果。

项目总结

本文使用 HarmonyOS 和 ArkTS 实现了一个校园爱心捐赠物资登记应用。

项目实现了物资登记、分类选择、审核上架、领取确认、状态筛选、数量统计和删除等功能。

通过这个项目可以掌握:

  • ArkTS 接口定义
  • @State状态管理
  • TextInput输入组件
  • 数值输入校验
  • ListForEach列表渲染
  • mapfilter数组操作
  • 状态流转设计
  • 自定义@Builder组件
  • HarmonyOS 页面布局

后续还可以加入领取人信息、物资图片、爱心积分、消息提醒、公益活动报名和本地数据持久化等功能。

http://www.cnnetsun.cn/news/3473237.html

相关文章:

  • 具身智能十五大落地方向:制造业、医疗与物流的物理世界实战指南
  • Airflow ETL管道实战:可调试、可扩展、可交付的生产级实现
  • Flutter行为录制器:用户操作录制与回放技术解析
  • Java基础语法入门与核心概念详解
  • 局中人的谢幕:当AI完成最后1%的合围,普通人如何赚到最后的“肉身红利”?
  • PCB设计中槽孔的高压隔离与安全规范
  • DLSS Swapper终极指南:免费提升游戏性能45%的智能优化神器
  • Laravel Echo实现Web实时通信的完整指南
  • Python+Selenium实现大麦网自动化抢票技术解析
  • 大疆低空巡检私有化无人机系统 无人机巡检效率低?这套政企级管控平台,让低空作业一键高效协同
  • Java资源识别机制:解决系统异常处理与资源管理难题
  • C++性能优化实战:从算法到硬件,全方位提升代码效率
  • Windows磁盘清理进阶指南:从存储感知到自动化策略
  • Android注解驱动与IOC模块化架构实践
  • 光刻机:芯片制造的精密画笔与技术壁垒
  • M4版Mac mini开发环境配置与性能优化全攻略
  • Unity机械臂流水线事件通信系统:从硬编码到事件驱动架构
  • PCA幻影振荡:规则采样引发的周期性假象
  • (论文速读)Salience DETR:采用分层显著过滤精化增强检测变换
  • Next.js核心功能与实战:React全栈开发指南
  • Spring Cloud 2025版本演进与微服务架构实践指南
  • 智能制造革命:DFMEA如何重塑工业安全未来
  • TM4C123 ADC采样序列与数字比较器联动配置实战
  • Linux C语言进度条实现:从终端I/O原理到多线程封装
  • Vue nextTick原理与应用场景详解
  • 基于LLM与语音识别的机器人自然语言控制:从架构设计到工程实践
  • 人形机器人技术瓶颈解析:从感知控制到硬件集成的挑战与突破
  • Python实现AOE网络关键路径算法:从图论到项目管理实战
  • Flutter深度链接实现与GoRouter集成指南
  • OCR 在C语言中使用Tesseract API