Skip to content

SeRazon/dormitory-assets-manage

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

112 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

宿舍资产扫码入住管理系统

这是一个基于 Next.js + Prisma + PostgreSql 的宿舍床位资产包管理演示系统,覆盖“后台生成二维码 → 学生扫码入住 → 管理员维护资产 → 数据导出与审计”的闭环。

SQLite(已废弃),可修改 Prisma 来重新改用 SQLite ,若要使用请自行修改学校部分等等。

主要能力

  • 学生端扫码登记:二维码携带唯一 asset token,系统自动识别楼栋、寝室和床位资产包。
  • 后台鉴权:管理员登录后才能进入后台页面和后台 API,默认本地超级管理员为 admin / admin123
  • 多级管理员权限:
    • SUPER_ADMIN:维护管理员账号、姓名、手机号、权限和启停状态;
    • ASSET_ADMIN:生成资产包、调整维修状态、办理退宿;
    • AUDITOR:查看后台数据并执行数据导出。
  • 管理员实名信息:每个管理员必须维护姓名和手机号,操作日志记录实际后台账号。
  • 资产与入住管理:支持服务端分页、状态筛选和关键词查询,避免 40000 名学生规模下前端全量扫描。
  • 数据库导出:后台支持完整 .sql 备份导出,以及 StudentCheckinAssetBundleAssetItemOperationLogAdminUser 单表 .csv 导出。SQL 备份包含管理员密码哈希,请按敏感文件保管。
  • 操作审计:学生绑定、退宿、资产状态调整、管理员维护和导出操作都会写入操作日志。
  • 现代化 UI:后台使用半透明玻璃卡片、背景渐变、高斯模糊、阴影和轻量动效。

技术栈

  • Next.js Pages Router
  • React
  • TypeScript
  • Tailwind CSS
  • Prisma
  • SQLite

目录说明

apps/web/
├─ components/       # 页面组件与通用 UI
├─ pages/            # 页面与 API 路由
├─ prisma/           # Prisma schema、种子数据、SQLite 数据库
├─ styles/           # 全局样式
└─ lib/              # 鉴权、Prisma Client 等公共工具

docs/                # 产品/架构规划文档

注意:docs/ 目录中的部分文档更偏向未来规划方案,与当前实现不一定完全一致。请以 README.md 和代码为准。

本地启动

在仓库根目录执行依赖安装:

pnpm install

进入 Web 应用目录:

cd apps/web

改动

以下内容已废弃,改用Neon DB。

生成 Prisma Client:

pnpm db:generate

创建或同步本地 SQLite 数据库:

pnpm db:push

写入演示种子数据和默认超级管理员:

pnpm db:seed

启动开发服务器:

pnpm dev

访问地址

  • 学生统一扫码入口:http://localhost:3000/student
  • 带资产 token 的扫码演示地址:http://localhost:3000/student?asset=JA10101
  • 后台登录:http://localhost:3000/admin/login
  • 后台工作台:http://localhost:3000/admin
  • 资产包管理:http://localhost:3000/admin/assets
  • 入住绑定管理:http://localhost:3000/admin/checkins
  • 操作日志:http://localhost:3000/admin/logs
  • 数据导出:http://localhost:3000/admin/export
  • 管理员与权限:http://localhost:3000/admin/users

管理员账号

本地默认账号来自种子数据和环境变量兜底:

  • 默认账号:admin
  • 默认密码:admin123
  • 默认权限:SUPER_ADMIN
  • 默认姓名:系统管理员
  • 默认手机号:13800000000

生产环境建议通过环境变量覆盖首个默认管理员:

ADMIN_USERNAME=your-admin
ADMIN_PASSWORD=change-me
ADMIN_NAME=管理员姓名
ADMIN_PHONE=手机号
AUTH_SECRET=至少32位随机字符串

登录成功后系统会签发 HttpOnly Cookie。后台页面和后台 API 都会校验会话,资产维护、退宿、管理员维护和数据导出会继续校验权限级别。

演示二维码 token

pnpm db:seed 会创建以下演示床位资产包和二维码 token:

  • JA10101JA-101-01
  • JA10102JA-101-02
  • JA10201JA-102-01
  • JB20304JB-203-04

其中:

  • JA10101JA10102JA10201 默认可绑定;
  • JB20304 默认是“维修中”状态,用于演示不可绑定场景。

API 路由

学生端公开 API

  • GET /api/assets?qrToken=xxx:按二维码 token 获取单个资产包详情;
  • POST /api/checkin:提交学生入住绑定。

后台 API(需要管理员登录)

  • GET /api/dashboard:服务端聚合工作台统计、近期入住和近期日志;
  • GET /api/assets&page=1&pageSize=20&status=ALL&q=关键词:分页查询资产包;
  • POST /api/assets:批量生成床位资产包(需要 SUPER_ADMINASSET_ADMIN);
  • PATCH /api/assets:调整资产包维修 / 可用状态(需要 SUPER_ADMINASSET_ADMIN);
  • GET /api/checkin&page=1&pageSize=20&status=ALL&q=关键词:分页查询入住绑定记录;
  • PATCH /api/checkin:办理退宿(需要 SUPER_ADMINASSET_ADMIN);
  • GET /api/logs&page=1&pageSize=20&q=关键词:分页查询操作日志;
  • GET /api/export?format=sql:导出完整 SQL;
  • GET /api/export?format=csv&table=Student:导出指定表 CSV;
  • GET /api/adminsPOST /api/adminsPATCH /api/admins:维护管理员账号(需要 SUPER_ADMIN)。

大数据量查询优化

为适配约 40000 名学生及其入住记录:

  • 后台列表改为服务端分页,不再一次性把全量资产、学生或日志拉到浏览器;
  • Prisma schema 为资产状态、床位位置、学生姓名/手机号、入住状态/时间、日志时间/类型等字段补充索引;
  • 工作台统计改为 /api/dashboard 服务端聚合计数;
  • 前端搜索输入带 250ms 防抖,减少连续请求。

数据库说明

  • 本地数据库文件位于:apps/web/prisma/dev.db
  • 该文件属于本地运行产物,不建议提交到版本库
  • Schema 更新后请执行:pnpm --filter web db:push

常用检查

pnpm --filter web db:generate
pnpm --filter web db:push
pnpm --filter web typecheck
pnpm --filter web lint

About

学生宿舍入住登记管理系统,推荐使用Vercel部署。

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors