HarmonyOS ArkTS 实战:实现一个校园迎新与报到注册应用
HarmonyOS ArkTS 实战实现一个校园迎新与报到注册应用项目效果本文使用 HarmonyOS 和 ArkTS 实现一个校园迎新与报到注册应用。应用可以帮助新生完成线上报到填写个人信息缴纳学费查看报到流程分配宿舍并提供迎新志愿者对接、报到统计和流程进度跟踪等功能。项目使用 DevEco Studio 开发适配 API 23 及以上版本。运行效果功能介绍本项目实现了以下功能新生信息填写报到流程指引学费缴纳宿舍分配查询班级和辅导员信息迎新志愿者对接报到进度跟踪绿色通道申请报到统计校园地图导航常见问题解答定义数据结构首先定义报到流程和新生信息的数据结构interfaceReportStep{id:number;name:string;description:string;location:string;status:string;completeTime:string;}interfaceNewStudent{id:number;studentId:string;name:string;gender:string;idCard:string;college:string;major:string;className:string;counselor:string;counselorPhone:string;dormBuilding:string;dormRoom:string;volunteer:string;volunteerPhone:string;totalFee:number;paidFee:number;reportStatus:string;reportTime:string;steps:ReportStep[];}字段说明如下ReportStep报到步骤id步骤编号name步骤名称description步骤说明location办理地点status状态未开始/进行中/已完成completeTime完成时间NewStudent新生信息id编号studentId学号name姓名gender性别idCard身份证号college学院major专业className班级counselor辅导员counselorPhone辅导员电话dormBuilding宿舍楼dormRoom宿舍号volunteer对接志愿者volunteerPhone志愿者电话totalFee应缴费用paidFee已缴费用reportStatus报到状态未报到/报到中/已报到reportTime报到时间steps报到步骤列表初始化页面状态使用State保存新生信息、当前步骤StateprivatenameText:string;StateprivatestudentIdText:string;StateprivateidCardText:string;StateprivatephoneText:string;StateprivatecurrentStep:number0;StateprivategreenChannel:booleanfalse;StateprivatenextStudentId:number2;准备一些初始新生数据Stateprivatestudents:NewStudent[][{id:1,studentId:20260001,name:张新生,gender:男,idCard:310***********1234,college:计算机学院,major:计算机科学与技术,className:计科2601班,counselor:李老师,counselorPhone:138****1001,dormBuilding:12号楼,dormRoom:302室,volunteer:王学长,volunteerPhone:139****2002,totalFee:7800,paidFee:7800,reportStatus:已报到,reportTime:2026-09-01 09:30,steps:[{id:1,name:身份验证,description:核验录取通知书和身份证,location:正门迎新点,status:已完成,completeTime:2026-09-01 08:30},{id:2,name:学院报到,description:到学院迎新点登记,location:计算机学院楼,status:已完成,completeTime:2026-09-01 08:50},{id:3,name:费用缴纳,description:缴纳学费住宿费,location:财务处,status:已完成,completeTime:2026-09-01 09:00},{id:4,name:宿舍入住,description:领取钥匙入住宿舍,location:12号楼,status:已完成,completeTime:2026-09-01 09:20},{id:5,name:领取物资,description:领取军训服和校园卡,location:大学生活动中心,status:已完成,completeTime:2026-09-01 09:30}]}];新生报到注册新生填写信息完成报到privatesubmitReport():void{constnamethis.nameText.trim();conststudentIdthis.studentIdText.trim();constidCardthis.idCardText.trim();if(name.length0||studentId.length0||idCard.length0){return;}conststeps:ReportStep[][{id:1,name:身份验证,description:核验录取通知书和身份证,location:正门迎新点,status:进行中,completeTime:},{id:2,name:学院报到,description:到学院迎新点登记,location:各学院楼,status:未开始,completeTime:},{id:3,name:费用缴纳,description:缴纳学费住宿费,location:财务处/线上,status:未开始,completeTime:},{id:4,name:宿舍入住,description:领取钥匙入住宿舍,location:各宿舍楼,status:未开始,completeTime:},{id:5,name:领取物资,description:领取军训服和校园卡,location:大学生活动中心,status:未开始,completeTime:}];conststudent:NewStudent{id:this.nextStudentId,studentId,name,gender:男,idCard,college:计算机学院,major:计算机科学与技术,className:计科2601班,counselor:李老师,counselorPhone:138****1001,dormBuilding:12号楼,dormRoom:305室,volunteer:王学长,volunteerPhone:139****2002,totalFee:this.greenChannel?0:7800,paidFee:0,reportStatus:报到中,reportTime:,steps};this.students[student,...this.students];this.nextStudentId1;this.nameText;this.studentIdText;this.idCardText;this.phoneText;}完成报到步骤逐步完成报到流程privatecompleteStep(studentId:number,stepId:number):void{constnownewDate();consttimeStr${now.getFullYear()}-${String(now.getMonth()1).padStart(2,0)}-${String(now.getDate()).padStart(2,0)}${String(now.getHours()).padStart(2,0)}:${String(now.getMinutes()).padStart(2,0)};this.studentsthis.students.map((student:NewStudent){if(student.studentIdstudentId){constupdatedStepsstudent.steps.map((step:ReportStep,index:number){if(step.idstepId){return{...step,status:已完成,completeTime:timeStr};}if(step.status未开始student.steps[index-1]?.idstepId){return{...step,status:进行中};}returnstep;});constallCompletedupdatedSteps.every(ss.status已完成);constallPaidstudent.paidFeestudent.totalFee;return{...student,steps:updatedSteps,reportStatus:allCompletedallPaid?已报到:报到中,reportTime:allCompletedallPaid?timeStr:};}returnstudent;});}缴纳学费privatepayFee(studentId:number,amount:number):void{this.studentsthis.students.map((student:NewStudent){if(student.studentIdstudentId){constnewPaidMath.min(student.paidFeeamount,student.totalFee);return{...student,paidFee:newPaid};}returnstudent;});}绿色通道申请家庭经济困难学生可以申请绿色通道privateapplyGreenChannel(studentId:number):void{this.studentsthis.students.map((student:NewStudent){if(student.studentIdstudentId){return{...student,totalFee:0,greenChannel:true};}returnstudent;});}报到进度计算privategetProgress(student:NewStudent):number{constcompletedstudent.steps.filter(ss.status已完成).length;returnMath.round((completed/student.steps.length)*100);}统计数据privategetTotalStudents():number{returnthis.students.length;}privategetReportedCount():number{returnthis.students.filter(ss.reportStatus已报到).length;}privategetReportingCount():number{returnthis.students.filter(ss.reportStatus报到中).length;}privategetTotalFeePaid():number{returnthis.students.reduce((sum,s)sums.paidFee,0);}顶部统计区域展示总人数、已报到、报到中、已缴费用this.StatCard(新生总数,${this.getTotalStudents()},#0EA5E9,#F0F9FF);this.StatCard(已报到,${this.getReportedCount()},#059669,#ECFDF5);this.StatCard(报到中,${this.getReportingCount()},#F59E0B,#FFFBEB);this.StatCard(已缴费用,¥${this.getTotalFeePaid()},#2563EB,#EFF6FF);设置状态颜色privategetStepStatusColor(status:string):ResourceColor{if(status已完成)return#059669;if(status进行中)return#0EA5E9;return#9CA3AF;}privategetReportStatusColor(status:string):ResourceColor{if(status已报到)return#059669;if(status报到中)return#F59E0B;return#DC2626;}privategetReportStatusBgColor(status:string):ResourceColor{if(status已报到)return#DCFCE7;if(status报到中)return#FEF3C7;return#FEE2E2;}绿色已完成/已报到天蓝色进行中橙色报到中红色未报到灰色未开始天蓝色系页面主题色报到流程时间线使用垂直时间线展示报到步骤Column(){ForEach(student.steps,(step:ReportStep,index:number){Row(){Column(){Circle().width(24).height(24).fill(this.getStepStatusColor(step.status))if(indexstudent.steps.length-1){Divider().vertical(true).height(40).color(#E5E7EB)}}.width(30).alignItems(HorizontalAlign.Center)Column(){Text(step.name).fontSize(15).fontWeight(FontWeight.Medium).fontColor(#111827)Text(step.description).fontSize(12).fontColor(#6B7280).margin({top:4})Text(地点${step.location}).fontSize(12).fontColor(#0EA5E9).margin({top:2})}.alignItems(HorizontalAlign.Start).layoutWeight(1).margin({left:12})}.width(100%).alignItems(VerticalAlign.Top)},(step:ReportStep)step.id.toString())}.width(100%)页面设计说明应用使用天蓝色作为主题色体现青春、欢迎、希望的迎新氛围。页面主要分为以下区域顶部欢迎横幅报到数据统计新生报到表单我的报到信息卡片报到流程时间线缴费和绿色通道入口志愿者和辅导员联系信息页面采用浅灰色背景和白色卡片。报到进度使用进度条展示流程步骤使用时间线样式已完成步骤使用绿色对勾标记进行中步骤使用天蓝色高亮联系电话使用可点击样式。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状态管理流程进度跟踪时间线组件布局List和ForEach列表渲染进度条计算自定义Builder组件HarmonyOS 迎新类应用布局后续还可以加入人脸识别报到、扫码签到、校园导航、新生群聊、迎新直播、家长端、行李托运、军训服装尺码选择和报到预约时段等功能。

相关新闻

Montserrat字体:如何为你的设计项目找到完美免费字体解决方案

Montserrat字体:如何为你的设计项目找到完美免费字体解决方案

Montserrat字体:如何为你的设计项目找到完美免费字体解决方案 【免费下载链接】Montserrat 项目地址: https://gitcode.com/gh_mirrors/mo/Montserrat 寻找既美观又免费的字体?Montserrat字体家族正是你需要的终极开源字体解决方案。这款完全免费…

2026/9/22 13:36:23 阅读更多 →
TwitterMediaHarvest贡献指南:如何参与开源项目并提交你的第一个PR

TwitterMediaHarvest贡献指南:如何参与开源项目并提交你的第一个PR

TwitterMediaHarvest贡献指南:如何参与开源项目并提交你的第一个PR 【免费下载链接】TwitterMediaHarvest Download twitter media with only one-click. 项目地址: https://gitcode.com/gh_mirrors/tw/TwitterMediaHarvest 想要为流行的Twitter媒体下载器Tw…

2026/9/23 12:36:04 阅读更多 →
如何免费创建个性化Project Sekai贴纸:Discord社区的终极表情包制作指南

如何免费创建个性化Project Sekai贴纸:Discord社区的终极表情包制作指南

如何免费创建个性化Project Sekai贴纸:Discord社区的终极表情包制作指南 【免费下载链接】sekai-stickers Project Sekai sticker maker 项目地址: https://gitcode.com/gh_mirrors/se/sekai-stickers Project Sekai贴纸生成器是一个开源工具,让你…

2026/9/22 12:10:28 阅读更多 →

最新新闻

JavaWeb购物车系统实现:基于Session存储的完整工程示例

JavaWeb购物车系统实现:基于Session存储的完整工程示例

简介:这是一份面向Java Web初学者的简易购物车系统案例,完整演示了基于Servlet与Tomcat的商品选购流程;案例来自课程设计或实验场景,需求中要求设计商品展示页面,点击“添加到购物车”超链接后进入Servlet记录选购信息…

2026/9/24 0:02:36 阅读更多 →
图联邦学习毕设实战:GCN拆解、结构感知聚合与灾难性遗忘防护

图联邦学习毕设实战:GCN拆解、结构感知聚合与灾难性遗忘防护

简介:本资源是一套面向本科毕业设计与人工智能课程实践的图联邦学习系统实现方案,聚焦社交网络、知识图谱与推荐系统等典型图数据场景,为算法工程师与高校研究者提供可复现的联邦化GNN开发范例。压缩包共149个文件,含32个核心Pyth…

2026/9/24 0:02:35 阅读更多 →
Flutter数值映射库num_remap在鸿蒙开发中的应用与优化

Flutter数值映射库num_remap在鸿蒙开发中的应用与优化

1. Flutter 三方库 num_remap 鸿蒙适配实战指南在 OpenHarmony 生态中开发动态交互应用时,数值范围映射是个高频需求场景。无论是处理传感器数据、手势操作还是动画效果,都需要将原始数据转换为适合 UI 展示的数值范围。传统的手写映射代码不仅冗长难维护…

2026/9/24 0:01:25 阅读更多 →
Lss-bev IndexPut插件:前端高效索引操作实践

Lss-bev IndexPut插件:前端高效索引操作实践

1. 项目背景与核心价值Lss-bev系列插件作为现代前端工程化体系中的重要组成部分,其IndexPut模块的部署实践直接影响着数据索引操作的性能表现。在实际项目中,我们经常遇到需要高效处理大规模索引更新的场景,而传统方案往往面临以下痛点&#…

2026/9/24 0:01:25 阅读更多 →
JSP+JDBC+MySQL+Servlet图书管理系统实战:从源码部署到性能优化

JSP+JDBC+MySQL+Servlet图书管理系统实战:从源码部署到性能优化

简介:面向Java Web初学者,这份图书管理项目源码以图书信息增删改查为主线,完整整合了JSP、JDBC、MySQL与Servlet技术栈,演示了从页面展示、请求处理到数据库读写的基本路径,适合用来理解MVC分层与原生Web开发流程。压缩…

2026/9/24 0:01:25 阅读更多 →
Lombok与JDK版本冲突引发NoSuchFieldError:根因排查与修复指南

Lombok与JDK版本冲突引发NoSuchFieldError:根因排查与修复指南

如果你在某个平平无奇的下午执行mvn clean package,看到编译进度条卡在注解处理阶段,随之蹦出这么一行:java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field ...基本可以确认一件事&…

2026/9/24 0:01:25 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →