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/10/15 13:21:47 阅读更多 →
TwitterMediaHarvest贡献指南:如何参与开源项目并提交你的第一个PR

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

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

2026/10/15 8:47:26 阅读更多 →
如何免费创建个性化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/10/7 3:35:37 阅读更多 →

最新新闻

技术趋同时代,代码之外如何保留个人风格?

技术趋同时代,代码之外如何保留个人风格?

最近在整理这一期周刊素材的时候,我注意到一个有点微妙的现象:身边几个做开发的朋友,聊起技术栈来几乎一个模子——前端框架选型一致、接口设计风格趋同、甚至连“业余爱好”都开始撞车。有人调侃说,现在简历拿出来,把…

2026/10/16 9:26:22 阅读更多 →
磁悬浮球线性自抗扰控制:从模型到实物的完整调试指南

磁悬浮球线性自抗扰控制:从模型到实物的完整调试指南

简介:磁悬浮球系统的线性自抗扰控制(LADRC)资源,面向自动控制、机电一体化方向的研究者与工程师,可用于理解先进控制策略在非线性、欠驱动系统中的抗扰设计与仿真验证。压缩包内共3个文件,包含一篇关于磁悬…

2026/10/16 9:26:22 阅读更多 →
Recovery文字定制进阶:minui点阵字体、中文字库与刷机适配全解析

Recovery文字定制进阶:minui点阵字体、中文字库与刷机适配全解析

修改Recovery中的文字提示(二)上一篇我们把Recovery界面上那些"死文字"逐个翻了个底朝天,讲了怎么在资源文件里找到文案、替换成自己想要的说法,也提了一句"改完刷不进去多半是签名问题"。但说实话&#xff0…

2026/10/16 9:26:22 阅读更多 →
BeatEdit 2.1 节拍检测全解析:从原理到实战,让剪辑精准卡点

BeatEdit 2.1 节拍检测全解析:从原理到实战,让剪辑精准卡点

简介:BeatEdit Pr 2.1是一款专为Adobe Premiere Pro设计的智能音乐节拍编辑插件,面向视频剪辑师、自媒体创作者与节奏卡点需求较高的后期人员,可自动检测音乐节拍并在时间线上生成节拍标记,大幅减少手动对齐音画节奏的时间&#x…

2026/10/16 9:26:22 阅读更多 →
C/C++经典算法题31-40:字符串、查找、排序与链表避坑指南

C/C++经典算法题31-40:字符串、查找、排序与链表避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 9:26:22 阅读更多 →
资源整合的核心不是整理,而是构建一套快速取用体系

资源整合的核心不是整理,而是构建一套快速取用体系

昨天我帮一位朋友收拾他那个已经挂了三个备份盘、塞了两万多份文件的工作资料库,从上午九点一直弄到晚上七点。本来按我的预期,这一整天下来怎么也能把文件夹层级理得清清楚楚,结果最后的局面是:文件不但没变少,反而还…

2026/10/16 9:25:20 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →