HarmonyOS ArkTS 实战:实现一个校园门禁与访客预约应用

HarmonyOS ArkTS 实战:实现一个校园门禁与访客预约应用

项目效果

本文使用 HarmonyOS 和 ArkTS 实现一个校园门禁与访客预约应用。

应用可以生成校园通行码,预约访客入校,查看门禁通行记录,申请晚归权限,并提供访客审批、出入统计和二维码通行等功能。

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

运行效果

功能介绍

本项目实现了以下功能:

  • 校园通行码生成
  • 访客预约登记
  • 访客审批
  • 二维码通行
  • 门禁记录查询
  • 晚归申请
  • 出入统计
  • 通行权限管理
  • 访客二维码
  • 异常记录提醒

定义数据结构

typescript 复制代码
interface AccessRecord {
  id: number;
  personName: string;
  gateName: string;
  direction: string;
  time: string;
  type: string;
  status: string;
}

interface Visitor {
  id: number;
  name: string;
  phone: string;
  idCard: string;
  visitReason: string;
  visitTime: string;
  hostName: string;
  hostDept: string;
  status: string;
  qrCode: string;
  applyTime: string;
}

字段说明:

  • AccessRecord:门禁记录(id/姓名/门禁点/方向/时间/类型/状态)
  • Visitor:访客(id/姓名/电话/身份证/事由/访问时间/被访人/被访部门/状态/二维码/申请时间)

初始化页面状态

typescript 复制代码
@State private visitorNameText: string = '';
@State private visitorPhoneText: string = '';
@State private visitReasonText: string = '';
@State private visitTimeText: string = '';
@State private nextVisitorId: number = 5;
@State private currentUserName: string = '王同学';

初始数据:

typescript 复制代码
@State private visitors: Visitor[] = [
  { id: 1, name: '张家长', phone: '138****1234', idCard: '310***********1234', visitReason: '探望学生', visitTime: '2026-07-20 14:00', hostName: '王同学', hostDept: '计算机学院', status: '已通过', qrCode: 'V20260720001', applyTime: '2026-07-18' }
];

@State private accessRecords: AccessRecord[] = [
  { id: 1, personName: '王同学', gateName: '正门', direction: '进入', time: '2026-07-18 08:30', type: '学生', status: '正常' },
  { id: 2, personName: '王同学', gateName: '图书馆闸机', direction: '进入', time: '2026-07-18 09:15', type: '学生', status: '正常' }
];

预约访客

typescript 复制代码
private applyVisitor(): void {
  const name = this.visitorNameText.trim();
  const phone = this.visitorPhoneText.trim();
  const reason = this.visitReasonText.trim();
  const time = this.visitTimeText.trim();
  if (name.length === 0 || phone.length === 0) return;

  const qrCode = 'V' + new Date().toISOString().slice(0,10).replace(/-/g,'') + String(this.nextVisitorId).padStart(3,'0');
  const visitor: Visitor = {
    id: this.nextVisitorId, name, phone, idCard: '', visitReason: reason,
    visitTime: time, hostName: this.currentUserName, hostDept: '计算机学院',
    status: '待审批', qrCode, applyTime: new Date().toISOString().split('T')[0]
  };
  this.visitors = [visitor, ...this.visitors];
  this.nextVisitorId++;
  this.visitorNameText = ''; this.visitorPhoneText = ''; this.visitReasonText = ''; this.visitTimeText = '';
}

审批访客

typescript 复制代码
private approveVisitor(visitorId: number, approved: boolean): void {
  this.visitors = this.visitors.map((v: Visitor) => {
    if (v.id === visitorId && v.status === '待审批') {
      return { ...v, status: approved ? '已通过' : '已拒绝' };
    }
    return v;
  });
}

统计数据

typescript 复制代码
private getTodayInCount(): number {
  return this.accessRecords.filter(r => r.direction === '进入' && r.time.includes('2026-07-18')).length;
}
private getPendingVisitorCount(): number {
  return this.visitors.filter(v => v.status === '待审批').length;
}
private getApprovedVisitorCount(): number {
  return this.visitors.filter(v => v.status === '已通过').length;
}

设置状态颜色

typescript 复制代码
private getVisitorStatusColor(status: string): ResourceColor {
  if (status === '已通过') return '#059669';
  if (status === '待审批') return '#F59E0B';
  if (status === '已拒绝') return '#DC2626';
  return '#6B7280';
}

主题色:深橙色#C2410C,体现安全、门禁、警示的感觉。

页面设计说明

页面分为:顶部通行码区域、统计卡片、访客预约表单、访客列表、门禁记录列表。通行码使用居中大二维码样式,访客状态使用彩色标签,门禁记录使用时间轴展示。

SDK 配置

统一使用 API 24 配置。

运行项目

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

项目总结

实现了门禁通行码、访客预约审批、出入记录、统计等功能。掌握了二维码展示、审批流程、状态管理、列表渲染等。后续可加入人脸识别、蓝牙开门、车辆通行、外卖人员登记等功能。

相关推荐
EasyGBS1 小时前
终结训推割裂!EasyGBS×EasyAIS×DLTM,实现AI算法训推一体闭环落地!
服务器·深度学习·安全
湘美书院--湘美谈教育1 小时前
湘美书院AI时代的禅悟集:人机智能,反照诸我
大数据·人工智能·深度学习·机器学习·生活
Ivanqhz2 小时前
BM1688 双核架构
python·深度学习·神经网络·cnn·mlir
lqj_本人2 小时前
Flutter_Rust_Bridge:让 Flutter 稳定调用 Rust 的跨语言桥梁
harmonyos
知识分享小能手3 小时前
深度学习学习教程,从入门到精通,深度生成模型 —— 知识点详解与代码实现(20)
人工智能·深度学习·学习
贾伟康3 小时前
【HarmonyOS 7新能力|040】QUIC长连接工程封装:把接入逻辑放进可维护的分层结构
网络编程·harmonyos·arkts·quic·软件架构
hqzing3 小时前
Harmonybrew 仓库中的 gcc(GCC 16)和 llvm(LLVM 23)已经可用
harmonyos
西柚研究生1234563 小时前
论文分析17:YOLOv11_UAVNet:无人机航拍图像专用目标检测算法
人工智能·python·深度学习·算法·目标检测
昇腾知识体系3 小时前
昇腾 torchrec_npu Docker 镜像选择:CANN/PyTorch/torchrec 版本矩阵与启动参数
人工智能·华为·知识图谱
昇腾知识体系4 小时前
K8s 调度昇腾 NPU:device-plugin 部署、Volcano 与 vNPU 切分
人工智能·华为·知识图谱