HarmonyOS ArkTS 实战:实现一个校园志愿者招募与排班应用
HarmonyOS ArkTS 实战实现一个校园志愿者招募与排班应用项目效果本文使用 HarmonyOS 和 ArkTS 实现一个校园志愿者招募与排班应用。应用可以发布志愿活动在线报名自动排班签到签退时长统计并提供岗位选择、排班日历、时长证明、评价反馈等完整功能。项目使用 DevEco Studio 开发适配 API 23 及以上版本。运行效果功能介绍志愿活动发布在线报名参加岗位选择自动排班分配排班日历查看签到签退服务时长统计时长证明下载志愿者评价星级志愿者评定消息通知志愿团队管理定义数据结构interfaceVolunteerActivity{id:number;title:string;date:string;location:string;positions:{name:string;need:number;joined:number}[];totalNeed:number;totalJoined:number;status:string;cover:string;}interfaceSchedule{id:number;activityId:number;activityTitle:string;date:string;timeSlot:string;position:string;location:string;status:string;}初始化页面状态StateprivatetabIndex:number0;StateprivatetotalHours:number156;StateprivatestarLevel:number5;StateprivateactivityNum:number32;Stateprivateactivities:VolunteerActivity[][{id:1,title:进博会志愿服务,date:2026-11-05,location:国家会展中心,positions:[{name:引导岗,need:20,joined:18},{name:翻译岗,need:10,joined:7}],totalNeed:30,totalJoined:25,status:招募中,cover:},{id:2,title:新生迎新志愿,date:2026-09-01,location:校门口,positions:[{name:引导岗,need:30,joined:30},{name:搬运行李,need:20,joined:20}],totalNeed:50,totalJoined:50,status:已截止,cover:},];Stateprivateschedules:Schedule[][{id:1,activityId:2,activityTitle:新生迎新志愿,date:2026-09-01,timeSlot:08:00-12:00,position:引导岗,location:校门口,status:已完成},];StateprivatenextId:number10;报名活动privatesignUp(activityId:number,positionName:string):void{this.activitiesthis.activities.map(a{if(a.id!activityId)returna;return{...a,totalJoined:a.totalJoined1,positions:a.positions.map(pp.namepositionName?{...p,joined:p.joined1}:p)};});}排班privateassignSchedule(activityId:number,timeSlot:string,position:string):void{constactivitythis.activities.find(aa.idactivityId);if(!activity)return;constschedule:Schedule{id:this.nextId,activityId,activityTitle:activity.title,date:activity.date,timeSlot,position,location:activity.location,status:待服务};this.schedules[schedule,...this.schedules];this.nextId1;}签到完成服务privatefinishService(scheduleId:number):void{this.schedulesthis.schedules.map(ss.idscheduleId?{...s,status:已完成}:s);this.totalHours4;this.activityNum1;}活动卡片组件BuilderActivityCard(activity:VolunteerActivity){Column({space:8}){Text(activity.title).fontSize(16).fontWeight(FontWeight.Medium).fontColor(#1E293B).width(100%)Text(${activity.date}| ${activity.location}).fontSize(12).fontColor(#64748B).width(100%)Row(){Text(已报名${activity.totalJoined}/${activity.totalNeed}).fontSize(12).fontColor(activity.totalJoinedactivity.totalNeed?#EF4444:#10B981)Blank()Text(activity.status).fontSize(12).fontColor(activity.status招募中?#2563EB:#94A3B8)}.width(100%).margin({top:4})if(activity.status招募中){Button(立即报名).width(100%).height(36).fontSize(14).backgroundColor(#1E293B).margin({top:8}).onClick(()this.signUp(activity.id,引导岗))}}.width(100%).padding(16).backgroundColor(#F8FAFC).borderRadius(12)}页面布局build(){Column(){// 顶部个人统计Row({space:12}){Column(){Text(${this.totalHours}).fontSize(28).fontWeight(FontWeight.Bold).fontColor(#1E293B)Text(服务时长(h)).fontSize(12).fontColor(#64748B)}.layoutWeight(1).padding(20).backgroundColor(#F1F5F9).borderRadius(12)Column(){Text(${⭐.repeat(this.starLevel)}).fontSize(20)Text(${this.starLevel}星志愿者).fontSize(12).fontColor(#64748B)}.layoutWeight(1).padding(20).backgroundColor(#F1F5F9).borderRadius(12)}.width(100%).padding(20)// TabRow({space:20}){Text(活动招募).fontSize(16).fontWeight(this.tabIndex0?FontWeight.Bold:FontWeight.Normal).fontColor(this.tabIndex0?#1E293B:#94A3B8).onClick(()this.tabIndex0)Text(我的排班).fontSize(16).fontWeight(this.tabIndex1?FontWeight.Bold:FontWeight.Normal).fontColor(this.tabIndex1?#1E293B:#94A3B8).onClick(()this.tabIndex1)}.width(100%).padding({left:20,right:20})if(this.tabIndex0){List({space:12}){ForEach(this.activities,(a:VolunteerActivity){ListItem(){this.ActivityCard(a)}})}.width(100%).padding(20).layoutWeight(1)}else{List({space:12}){ForEach(this.schedules,(s:Schedule){ListItem(){Row(){Column({space:4}){Text(s.activityTitle).fontSize(14).fontWeight(FontWeight.Medium)Text(${s.date}${s.timeSlot}|${s.position}).fontSize(12).fontColor(#64748B)}.alignItems(HorizontalAlign.Start).layoutWeight(1)if(s.status待服务){Button(签到).fontSize(12).height(32).backgroundColor(#10B981).onClick(()this.finishService(s.id))}else{Text(已完成).fontSize(12).fontColor(#10B981)}}.width(100%).padding(16).backgroundColor(#F8FAFC).borderRadius(12)}})}.width(100%).padding(20).layoutWeight(1)}}.width(100%).height(100%).backgroundColor(Color.White)}页面设计说明主题色采用slate-800#1E293B体现志愿服务的专业、奉献。顶部展示服务时长和星级Tab切换活动和排班卡片式设计清晰展示信息。SDK配置API 24compatibleSdkVersion: “6.1.1(24)”运行项目将代码复制到 entry/src/main/ets/pages/Index.ets 即可运行。项目总结实现了活动招募、报名、排班、签到、时长统计、星级评定等功能。掌握了列表卡片、Tab切换、状态管理、数据统计等。后续可加入自动排班算法、日历视图、电子证书、评价系统、团队管理、培训考核等功能。

相关新闻

HarmonyOS ArkTS 实战:实现一个社团活动签到与时长认证应用

HarmonyOS ArkTS 实战:实现一个社团活动签到与时长认证应用

HarmonyOS ArkTS 实战:实现一个社团活动签到与时长认证应用 项目效果 本文使用 HarmonyOS 和 ArkTS 实现一个社团活动签到与时长认证应用。 应用可以发布社团活动,扫码签到签退,自动计算志愿时长,时长认证审核,并提供活…

2026/7/24 1:35:56 阅读更多 →
【赠书活动】零信任落地难?六步框架打通从规划到持续运营全流程

【赠书活动】零信任落地难?六步框架打通从规划到持续运营全流程

面对日益复杂的网络攻击面,传统的安全架构已独木难支。《零信任安全架构实践指南:以零信任重构数字信任》一书直击企业安全建设的痛点与难点,带你系统掌握零信任架构从理念到实施的全流程。这些方法经过多家企业验证,一旦掌握即可…

2026/7/24 1:35:56 阅读更多 →
【STM32系统】基于STM32设计的SD卡数据读取与上位机显示系统

【STM32系统】基于STM32设计的SD卡数据读取与上位机显示系统

【STM32系统】基于STM32设计的SD卡数据读取与上位机显示系统(SDIO接口驱动、雷龙贴片SD卡) 原文链接:https://www.longsto.com/news/331.html 作者:雷龙发展 基于STM32设计的SD卡数据读取与上位机显示系统 演示视频: …

2026/7/24 1:35:55 阅读更多 →

最新新闻

医疗多模态预训练技术:挑战、原理与实践指南

医疗多模态预训练技术:挑战、原理与实践指南

1. 医疗多模态预训练的核心挑战与突破方向医疗领域的视觉-语言联合建模一直面临着数据稀缺和模态差异的双重困境。传统方法通常需要大量标注数据来训练模型,但在医疗场景中获取高质量标注的成本极高。2022年提出的MAE框架通过多模态掩码自编码器,开创性地…

2026/7/24 1:44:57 阅读更多 →
Simulink深度多智能体强化学习实践指南

Simulink深度多智能体强化学习实践指南

1. 项目背景与核心价值深度多智能体强化学习在工业控制、机器人协同、自动驾驶等领域的应用正变得越来越广泛。不同于传统的单智能体场景,多智能体系统(MAS)中的每个个体都需要在动态环境中与其他智能体进行交互和协作,这使得问题…

2026/7/24 1:44:57 阅读更多 →
TI ADS7851EVM-PDK评估套件深度解析:从硬件设计到性能测试实战

TI ADS7851EVM-PDK评估套件深度解析:从硬件设计到性能测试实战

1. 项目概述与核心价值对于从事精密测量、工业自动化或者医疗成像的硬件工程师来说,选型和评估一款高精度模数转换器(ADC)往往是项目成败的关键一步。数据手册上的参数再漂亮,也不如亲手实测来得踏实。今天要深入拆解的&#xff0…

2026/7/24 1:44:57 阅读更多 →
大模型训练师:AI入行捷径与核心技能解析

大模型训练师:AI入行捷径与核心技能解析

1. 项目背景:AI行业人才需求爆发式增长最近一则关于字节跳动开出500元/天实习薪资的消息在社交平台刷屏,引发广泛讨论。这反映出AI行业对专业人才的渴求已达到前所未有的程度。作为从业多年的AI工程师,我想分享一个被大多数人忽视的入行捷径—…

2026/7/24 1:44:57 阅读更多 →
【智能体安全治理|专栏第0期·启航篇】AI时代的数字宪法:我们该如何约束自主行动的AI智能体

【智能体安全治理|专栏第0期·启航篇】AI时代的数字宪法:我们该如何约束自主行动的AI智能体

【智能体安全治理|专栏第0期启航篇】AI时代的数字宪法:我们该如何约束自主行动的AI智能体作者: AI治理研究组 原创声明: 本文为原创技术博客,基于一线智能体工程实践总结编写。 文末附有相关学术研究的延伸阅读参考。🕒 写作说明&…

2026/7/24 1:44:57 阅读更多 →
信息系统项目管理师论文怎么写真实

信息系统项目管理师论文怎么写真实

很多人准备高项论文,第一反应是找模板。但真正让论文翻车的,往往不是没有模板,而是项目素材太假。高项论文不是写宣传稿,也不是背教材。它要的是:你围绕一个信息系统项目,讲清楚自己怎么做管理、遇到什么问…

2026/7/24 1:43:57 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻