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

HarmonyOS ArkTS 实战:实现一个校园自动售货机库存与补货记录应用

HarmonyOS ArkTS 实战:实现一个校园自动售货机库存与补货记录应用

项目效果

本文使用 HarmonyOS 和 ArkTS 实现一个校园自动售货机库存与补货记录应用。

应用可以登记校园售货机,记录设备名称、所在位置、设备类型、商品库存和运行状态,并提供库存预警、快速补货、故障上报、维修完成、状态筛选和数据统计等功能。

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

功能介绍

本项目实现了以下功能:

  • 登记新的校园自动售货机
  • 记录设备名称和所在位置
  • 选择饮料机、零食机或综合机类型
  • 设置设备初始库存
  • 自动识别低库存设备
  • 一键为售货机补充库存
  • 上报设备故障
  • 标记设备维修完成
  • 按库存和运行状态筛选设备
  • 统计设备总数、缺货数量和故障数量
  • 删除不再使用的设备记录

定义数据结构

首先定义自动售货机的数据结构:

interfaceVendingRecord{id:number;name:string;location:string;stock:number;type:string;status:string;}

字段说明如下:

  • id:设备记录的唯一编号
  • name:售货机名称或编号
  • location:设备所在位置
  • stock:当前商品库存
  • type:售货机类型
  • status:设备运行状态

初始化页面状态

使用@State保存输入内容和筛选条件:

@StateprivatenameText:string='';@StateprivatelocationText:string='';@StateprivatestockText:string='';@StateprivatemachineType:string='饮料机';@StateprivatefilterType:string='全部';@StateprivatenextId:number=6;

准备一些初始设备数据:

@Stateprivaterecords:VendingRecord[]=[{id:1,name:'A-01 售货机',location:'图书馆一楼',stock:42,type:'饮料机',status:'正常'},{id:2,name:'B-03 售货机',location:'第二教学楼',stock:8,type:'综合机',status:'缺货'},{id:3,name:'C-02 售货机',location:'南区宿舍大厅',stock:25,type:'零食机',status:'正常'},{id:4,name:'D-01 售货机',location:'东区体育馆',stock:16,type:'饮料机',status:'故障'}];

初始数据包含正常、缺货和故障三种状态,可以让 Preview 直接展示完整页面效果。

添加售货机

用户填写设备名称、位置和初始库存后,可以登记新的售货机:

privateaddRecord():void{constname:string=this.nameText.trim();constlocation:string=this.locationText.trim();conststock:number=Number(this.stockText);if(name.length===0||location.length===0||Number.isNaN(stock)||stock<0){return;}constrecord:VendingRecord={id:this.nextId,name,location,stock,type:this.machineType,status:stock<=10?'缺货':'正常'};this.records=[record,...this.records];this.nextId+=1;this.nameText='';this.locationText='';this.stockText='';}

如果初始库存小于或等于 10,系统会自动将设备标记为“缺货”。

实现快速补货

点击“补货 +20”按钮后,设备库存增加 20,同时将状态恢复为正常:

privaterestock(id:number):void{this.records=this.records.map((item:VendingRecord)=>{if(item.id===id){return{id:item.id,name:item.name,location:item.location,stock:item.stock+20,type:item.type,status:'正常'};}returnitem;});}

这里使用map创建新数组,使 ArkUI 能够自动刷新设备卡片和统计数据。

上报故障和完成维修

点击“上报故障”可以将设备标记为故障。维修完成后,再次点击按钮即可恢复设备状态:

privatetoggleFault(id:number):void{this.records=this.records.map((item:VendingRecord)=>{if(item.id===id){conststatus:string=item.status==='故障'?(item.stock<=10?'缺货':'正常'):'故障';return{id:item.id,name:item.name,location:item.location,stock:item.stock,type:item.type,status};}returnitem;});}

维修完成后,系统还会检查库存。如果库存不足,设备恢复为缺货状态;否则恢复为正常状态。

筛选设备记录

页面可以按运行状态筛选售货机:

privategetFilteredRecords():VendingRecord[]{if(this.filterType==='库存不足'){returnthis.records.filter((item:VendingRecord)=>item.status==='缺货');}if(this.filterType==='设备故障'){returnthis.records.filter((item:VendingRecord)=>item.status==='故障');}if(this.filterType==='运行正常'){returnthis.records.filter((item:VendingRecord)=>item.status==='正常');}returnthis.records;}

筛选按钮封装如下:

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

在页面中调用:

Row({space:8}){this.FilterButton('全部');this.FilterButton('库存不足');this.FilterButton('设备故障');this.FilterButton('运行正常');}.width('100%');

统计设备状态

使用filter统计指定状态的设备数量:

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

页面顶部展示设备总数、库存不足和设备故障数量:

this.StatCard('设备总数',`${this.records.length}`,'#0891B2','#ECFEFF');this.StatCard('库存不足',`${this.getCount('缺货')}`,'#D97706','#FFF7E8');this.StatCard('设备故障',`${this.getCount('故障')}`,'#D92D20','#FEE4E2');

计算设备在线率

设备在线率可以根据故障设备数量动态计算:

constonlineRate:number=this.records.length===0?0:Math.round((this.records.length-this.getCount('故障'))/this.records.length*100);

在页面顶部显示在线率,可以让管理人员快速了解校园售货机的整体运行情况。

设置状态颜色

不同状态使用不同颜色进行区分:

privategetStatusColor(status:string):ResourceColor{if(status==='正常'){return'#059669';}if(status==='缺货'){return'#D97706';}return'#D92D20';}

颜色含义如下:

  • 绿色:设备运行正常
  • 橙色:库存不足,需要补货
  • 红色:设备发生故障
  • 青色:页面主要操作和统计信息

删除设备记录

不再使用的售货机可以从列表中删除:

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

删除后,设备列表和顶部统计数据会同时更新。

使用列表渲染设备

使用ListForEach渲染筛选后的设备记录:

List({space:10}){ForEach(this.getFilteredRecords(),(item:VendingRecord)=>{ListItem(){this.MachineCard(item)}},(item:VendingRecord)=>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 模块中的runtimeOS也需要保持一致:

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

运行项目

使用 DevEco Studio 打开项目,然后找到页面文件:

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

等待项目同步完成,点击右侧Preview按钮即可查看页面运行效果。

如果修改代码后预览页面没有变化,可以点击 Preview 窗口中的刷新按钮。

项目总结

本文使用 HarmonyOS 和 ArkTS 实现了一个校园自动售货机库存与补货记录应用。

项目实现了设备登记、类型选择、库存预警、快速补货、故障上报、维修完成、状态筛选、数据统计和删除等功能。

通过这个项目可以掌握:

  • ArkTS 接口定义
  • @State状态管理
  • TextInput输入组件
  • ListForEach列表渲染
  • mapfilter数组操作
  • 条件判断和状态切换
  • 自定义@Builder组件
  • HarmonyOS 页面布局
  • 简单的库存与设备状态管理

后续还可以加入商品明细、库存消耗记录、自动补货提醒、设备地图、销售额统计和本地数据持久化等功能。

http://www.jsqmd.com/news/1190474/

相关文章:

  • 跨省寄大件怎么称重?避开体积重坑,慧寄侠帮你省更多 - 快递物流资讯
  • 万国回收价格查询和靠谱回收平台实测排行(2026年7月最新) - 尊奢回收二奢平台
  • 喀麦隆BESC办理机构排行 资质效率及服务对比解析 - 互联网科技品牌测评
  • 套用 NIST 框架做风控,五步搞定企业安全体系
  • 今日开源[第33期] Home Assistant Core - zhang
  • 2026年7月寄大件哪家又便宜又快?主流平台优缺点深度测评 - 快递物流资讯
  • 广州江诗丹顿回收价格查询与靠谱平台实测排行(2026年7月最新) - 收的高名表回收平台
  • 抖大侠和其他软件哪个好?功能收费、优缺点及抖音小店工具风险解析 - 抖大侠
  • 全国深国交备考机构实力盘点:2026 深圳梯队榜单 + 选型速配指南 - 互联网科技品牌测评
  • yaml-cpp库:C++中的YAML解析与生成实战指南
  • 2026年7月最新唐山欧米茄官方售后服务网点地址及客服电话一览 - 欧米茄服务中心
  • 港澳台联考择校难?2026天河机构真实测评:新民师稳坐头把交椅 - 互联网科技品牌测评
  • 信息学奥赛一本通 1219:马走日 | OpenJudge NOI 2.5 8465:马走日
  • 为什么自建房优先选曳引式电梯?30年行业人讲透底层逻辑 - U渠道
  • 2026 上海虹口区台面更换:3 家服务商深度对比指南 - 匠心24小时快修
  • 2026年电磁加热器十大品牌/厂家推荐排行榜,反应釜/管道/大功率/防爆电磁加热器源头厂商深度测评与选购指南 - 甄选服务推荐
  • 2026年 抽绳束口袋/塑料拉绳收口袋/防尘打包束口袋生产厂家:服装礼品与五金立体彩印LOGO印刷加厚定制实力工厂 - 甄选服务推荐
  • 【Dify企业级Agent部署白皮书】:基于127家客户实践提炼的4层配置验证体系(附自动化校验脚本)
  • (2026最新)三亚漏水检测维修师傅上门-正规防水补漏公司本地居民实测推荐五家-卫生间/屋顶/厨房/阳台/外墙/地下室专业仪器精准检测漏水点 - 安佳防水
  • 成都爱彼回收价格查询及靠谱回收平台实测排行(2026年7月最新数据) - 诚收名表回收平台
  • 2026涪陵除甲醛公司强烈推荐及联系方式 - 空气捍卫者
  • 欧米茄中国官方售后服务中心|官方地址与售后电话权威信息公告(2026年7月最新) - 欧米茄官方服务中心
  • 自建房曳引电梯怎么选?龙门架/背包/强驱/平台梯全场景对比 - 产业观察报
  • 长春二道区荣光街道亨得利官方名表服务中心电话公示(2026年7月最新) - 亨得利官方博客
  • 乍得BESC办理机构排行:合规效率双维度评测 - 互联网科技品牌测评
  • Android Gradle - 一些 Gradle 的碎片知识(Android Gradle Plugin、namespace、package 属性、模块打包)
  • 操作系统笔记之临界区
  • 百达翡丽中国官方售后服务中心|全新官方电话和维修地址权威信息公告(2026年7月更新) - 百达翡丽服务中心
  • 2026家用电梯新国标实施,自建房选哪种电梯更合规安全? - 产业观察报
  • 跨省寄大件怎么选最划算?主流物流避坑与比价攻略 - 生活情报姬