news 2026/7/18 4:40:37

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 页面布局

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/18 4:40:34

具身智能十五大落地方向:制造业、医疗与物流的物理世界实战指南

1. 项目概述&#xff1a;这不是概念炒作&#xff0c;而是制造业、医疗、物流一线正在发生的“身体革命”“具身智能”这四个字最近在工业展会、医院设备采购清单和港口调度中心的内部简报里出现频率越来越高&#xff0c;但它绝不是又一个被资本包装的AI新名词。我过去三年跑过2…

作者头像 李华
网站建设 2026/7/18 4:39:46

Airflow ETL管道实战:可调试、可扩展、可交付的生产级实现

1. 项目概述&#xff1a;为什么一个能跑通的 Airflow ETL 管道&#xff0c;比十篇理论文章更有价值你手上正拿着一份“Building an ETL Pipeline with Airflow”的教程草稿——它讲了 Polygon API、SQLite、TaskFlow API、DAG 依赖&#xff0c;甚至提到了astro dev start和连接…

作者头像 李华
网站建设 2026/7/18 4:38:20

Flutter行为录制器:用户操作录制与回放技术解析

1. 项目概述&#xff1a;Flutter行为录制器的核心价值在移动应用开发领域&#xff0c;如何高效复现用户操作行为一直是个痛点。Behavior Recorder作为Flutter生态中的开源工具包&#xff0c;通过hook技术实现了用户手势和输入行为的完整录制与回放功能。我在实际项目中使用这个…

作者头像 李华
网站建设 2026/7/18 4:36:41

Java基础语法入门与核心概念详解

1. Java基础语法入门指南作为一门面向对象的编程语言&#xff0c;Java的基础语法是每个开发者必须掌握的基石。记得我刚开始学习Java时&#xff0c;常常因为大小写问题导致编译失败&#xff0c;或者在变量命名上犯各种低级错误。这些看似简单的语法规则&#xff0c;实际上决定了…

作者头像 李华
网站建设 2026/7/18 4:35:29

PCB设计中槽孔的高压隔离与安全规范

1. 槽孔在PCB设计中的核心作用在高压电源PCB板上&#xff0c;那些看似随意的槽孔绝非装饰元素&#xff0c;而是工程师精心设计的"安全阀"。这些槽孔的核心使命是解决高压电路中的两大致命威胁&#xff1a;爬电&#xff08;creepage&#xff09;和飞弧&#xff08;arc…

作者头像 李华