news 2026/7/18 4:40:43

HarmonyOS ArkTS 实战:实现一个校园学生证挂失与补办进度应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HarmonyOS ArkTS 实战:实现一个校园学生证挂失与补办进度应用

HarmonyOS ArkTS 实战:实现一个校园学生证挂失与补办进度应用

项目效果

本文使用 HarmonyOS 和 ArkTS 实现一个校园学生证挂失与补办进度应用。

应用可以登记学生证挂失、卡片损坏和信息更新申请,展示审核、制卡、领取等办理进度,并支持状态筛选、数据统计和删除记录。

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

功能介绍

本项目实现了以下功能:

  • 新增校园卡补办申请
  • 填写学生姓名和学号
  • 填写申请提交时间
  • 选择遗失挂失、卡片损坏和信息更新原因
  • 审核补办申请
  • 更新制卡状态
  • 更新待领取状态
  • 确认学生已经领取校园卡
  • 按待审核、制卡中和待领取筛选
  • 统计申请总数、待审核数量和待领取数量
  • 删除无效申请记录

定义数据结构

首先定义校园卡申请记录的数据结构:

interfaceCardRecord{id:number;studentName:string;studentNo:string;reportDate:string;reason:string;status:string;}

字段说明如下:

  • id:申请记录的唯一编号
  • studentName:学生姓名
  • studentNo:学生学号
  • reportDate:提交申请的时间
  • reason:补办原因
  • status:当前办理状态

初始化页面状态

使用@State保存输入内容、补办原因和筛选条件:

@StateprivatenameText:string='';@StateprivatenumberText:string='';@StateprivatedateText:string='';@Stateprivatereason:string='遗失挂失';@StateprivatefilterType:string='全部';@StateprivatenextId:number=6;

准备初始数据,让应用运行后可以直接展示完整流程:

@Stateprivaterecords:CardRecord[]=[{id:1,studentName:'李同学',studentNo:'2024010821',reportDate:'07-15 09:20',reason:'遗失挂失',status:'待审核'},{id:2,studentName:'王同学',studentNo:'2023021564',reportDate:'07-14 14:10',reason:'卡片损坏',status:'制卡中'},{id:3,studentName:'张同学',studentNo:'2024010372',reportDate:'07-13 11:40',reason:'遗失挂失',status:'待领取'},{id:4,studentName:'陈同学',studentNo:'2022012908',reportDate:'07-12 16:30',reason:'信息更新',status:'已领取'}];

添加补办申请

用户填写姓名、学号和申请时间后,可以提交新的校园卡补办申请:

privateaddRecord():void{conststudentName:string=this.nameText.trim();conststudentNo:string=this.numberText.trim();constreportDate:string=this.dateText.trim();if(studentName.length===0||studentNo.length===0||reportDate.length===0){return;}constrecord:CardRecord={id:this.nextId,studentName,studentNo,reportDate,reason:this.reason,status:'待审核'};this.records=[record,...this.records];this.nextId+=1;this.nameText='';this.numberText='';this.dateText='';}

新申请默认处于“待审核”状态。

办理状态流转

校园卡补办流程如下:

待审核 -> 制卡中 -> 待领取 -> 已领取

使用以下方法更新办理状态:

privateadvanceStatus(id:number):void{this.records=this.records.map((item:CardRecord)=>{if(item.id===id){letstatus:string='待审核';if(item.status==='待审核'){status='制卡中';}elseif(item.status==='制卡中'){status='待领取';}elseif(item.status==='待领取'){status='已领取';}return{id:item.id,studentName:item.studentName,studentNo:item.studentNo,reportDate:item.reportDate,reason:item.reason,status};}returnitem;});}

不同状态下,页面会显示不同的操作按钮:

Button(item.status==='待审核'?'审核通过':item.status==='制卡中'?'完成制卡':item.status==='待领取'?'确认领取':'已完成');

筛选办理记录

页面支持按办理进度筛选:

privategetFilteredRecords():CardRecord[]{if(this.filterType==='待审核'){returnthis.records.filter((item:CardRecord)=>item.status==='待审核');}if(this.filterType==='制卡中'){returnthis.records.filter((item:CardRecord)=>item.status==='制卡中');}if(this.filterType==='待领取'){returnthis.records.filter((item:CardRecord)=>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?'#B45309':'#E8EEF7').borderRadius(8).onClick(()=>{this.filterType=text;});}

统计申请数量

使用filter统计指定状态的申请数量:

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

顶部统计区域展示申请总数、等待审核和等待领取数量:

this.StatCard('申请总数',`${this.records.length}`,'#B45309','#FFFBEB');this.StatCard('等待审核',`${this.getCount('待审核')}`,'#D97706','#FFF7E8');this.StatCard('等待领取',`${this.getCount('待领取')}`,'#7C3AED','#F4F3FF');

设置状态颜色

不同办理状态使用不同颜色:

privategetStatusColor(status:string):ResourceColor{if(status==='待审核'){return'#D97706';}if(status==='制卡中'){return'#2563EB';}if(status==='待领取'){return'#7C3AED';}return'#059669';}

颜色含义如下:

  • 橙色:等待审核
  • 蓝色:正在制卡
  • 紫色:等待领取
  • 绿色:已经领取
  • 红色:遗失挂失原因

删除申请记录

不再需要的申请记录可以删除:

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

删除后,列表和统计数据会自动更新。

使用列表展示申请

使用ListForEach渲染筛选后的申请记录:

List({space:10}){ForEach(this.getFilteredRecords(),(item:CardRecord)=>{ListItem(){this.CardItem(item)}},(item:CardRecord)=>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:29

Python编程语言入门:从基础到应用全解析

1. Python语言概述Python是一种高级编程语言,由Guido van Rossum于1991年首次发布。它以简洁明了的语法和强大的功能而闻名,已经成为当今最受欢迎的编程语言之一。Python的设计哲学强调代码的可读性和简洁性,这使得它成为初学者和专业开发人员…

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

Flutter iOS编译错误排查与解决方案

1. Flutter iOS编译错误概述Flutter作为跨平台开发框架,在iOS端的编译过程中经常会遇到各种问题。这些问题主要集中在Cocoapods依赖管理、Xcode项目配置和Flutter工具链兼容性三个方面。根据实际项目经验,90%的编译错误都可以通过系统化的排查流程解决。…

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

笔记二:深入理解Transformer核心组件——嵌入、注意力与位置编码

摘要:本文从嵌入层出发,梳理各向异性痛点、自注意力公式及位置编码本质,重点通过“我爱你”三字示例逐层推演矩阵形状演变,直观展示 Q/K/V 的动态扩展、nn 注意力分数的计算过程,并对比绝对位置与 RoPE 在长文本下的行为差异,帮助读者理解权重矩阵与序列长度的解耦关系,…

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

音频杂音诊断与解决方案:从原理到实践

1. 音频杂音问题全景扫描从业十年处理过上千例音频异常案例,我总结出杂音问题呈现明显的"三高"特征:高隐蔽性(32%问题初次排查被误判)、高复现成本(平均需2.8次完整测试流程才能稳定触发)、高解决…

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

SpringBoot集成Sa-Token实现轻量级权限认证实战

1. SpringBoot集成Sa-Token权限认证实战指南在Java企业级应用开发中,权限认证是每个系统都无法绕开的核心模块。传统方案如Shiro、Spring Security虽然功能强大,但配置复杂、学习曲线陡峭。而Sa-Token作为一款轻量级Java权限认证框架,以"…

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

react 原理二解

一、一些问题① React 会先构建完整 Element Tree 吗&#xff1f;不会。但刚开始会执行 <App /> 构建最外层的 Element &#xff0c;然后接下来的 child 组件是在 beginWork 中逐层执行&#xff0c;Element 是逐层产生的。② 两个 alternate 是一个对象吗&#xff1f;不是…

作者头像 李华