b6d398b102f8b4a5a18c781fb05699c3a1f1cac8
Phase 1: 共用类型定义 - apps/server/src/common/import-result.types.ts — ImportRowError + ImportResult<T> - apps/admin/src/types/import.ts — 前端对应类型 + ImportDisplayConfig Phase 2: 后端增强 - students.service.ts — batchImport/matchImport 改为 ImportResult 格式 · 每行跳过时收集 ImportRowError(code + reason) · reason 支持 markdown 标记(**字段名** / `值`) - archive.service.ts — batchImportArchive 统一用 ImportResult 格式 · 各 Sheet 错误使用标准 error code - archive.controller.ts — 日志使用新的 success 字段 Phase 3: 前端基础 - 安装 react-markdown - ImportResultModal 组件(共用导入结果弹窗) · Statistic 成功统计 + Table 错误明细 · 原因列支持 react-markdown 渲染(粗体字段名、等宽代码值) · 错误类型用 Tag 颜色区分 - api/index.ts — 403 错误从 console.warn 改为 message.warning 用户可见 Phase 4: 前端集成 - Students/index.tsx — 替换硬编码导入结果弹窗 · 删除'后端只返回统计汇总'注释和跳过原因 hardcode · 新格式自动使用 ImportResultModal,旧格式兼容 - StudentProfileContent/index.tsx — 替换内联导入 Modal 为 ImportResultModal
恭学教育基地管理系统
教培公司集训基地宿舍水电费精准计费系统,采用「人天数加权分摊」算法,按每位学生的实际入住天数公平分摊宿舍公共费用。
功能模块
| 模块 | 功能说明 |
|---|---|
| 数据面板 | 统计卡片、费用趋势图、宿舍排行、甘特图 |
| 宿舍总览 | 房态可视化网格,空置/在住/满员颜色区分 |
| 学生管理 | 增删改查、批量导入/删除 |
| 宿舍管理 | 增删改查,删除前检查在住人员 |
| 入住管理 | 入住登记、退宿、换房、一键导入名单 |
| 费用录入 | 宿舍公共费用(水/电/保洁等)+ 个人附加费 |
| 账单管理 | 自动生成、确认、标记已付、删除、批量操作 |
| 账单导出 | Excel(汇总+明细双Sheet)、单条PDF账单 |
| 教室管理 | 教室信息维护、教室租赁记录 |
| 押金管理 | 押金收取与退还 |
| 操作日志 | 所有涉及钱的操作自动审计留痕 |
| 账号管理 | 用户增删改查、角色区分、启用/禁用、重置密码 |
技术架构
前端 (React + Vite) 后端 (NestJS) 数据库
┌─────────────────┐ ┌──────────────────┐ ┌──────────┐
│ React 19 │ │ NestJS 11 │ │ SQLite │
│ Ant Design 6 │────▶│ TypeORM 0.3 │────▶│ (开发) │
│ ECharts │ │ JWT + Passport │ │ MySQL 8 │
│ Vite 8 │ │ ExcelJS + PDFKit │ │ (生产) │
└─────────────────┘ └──────────────────┘ └──────────┘
快速开始
环境要求
- Node.js >= 18
- npm >= 9
后端启动
cd backend
cp .env.example .env # 复制并修改环境配置
npm install
npm run start:dev # 开发模式启动,默认端口 3000
前端启动
cd frontend
npm install
npm run dev # 开发模式启动,默认端口 5173
Docker 部署
docker-compose up -d # 一键启动 MySQL + 后端 + 前端
项目结构
├── backend/ # 后端 NestJS 服务
│ ├── src/
│ │ ├── auth/ # 认证模块 (JWT)
│ │ ├── bills/ # 账单模块
│ │ ├── classrooms/ # 教室管理
│ │ ├── dashboard/ # 数据面板
│ │ ├── deposits/ # 押金管理
│ │ ├── entities/ # 数据实体
│ │ ├── expenses/ # 费用录入
│ │ ├── occupancies/# 入住管理
│ │ ├── rooms/ # 宿舍管理
│ │ ├── students/ # 学生管理
│ │ └── tenants/ # 租户管理
│ └── .env.example # 环境配置模板
├── frontend/ # 前端 React 应用
│ └── src/
│ ├── api/ # API 请求封装
│ ├── layouts/ # 布局组件
│ └── pages/ # 页面组件
├── docker-compose.yml # Docker 编排配置
└── 技术文档.md # 详细技术文档
环境配置
复制 backend/.env.example 为 backend/.env,按需修改:
| 配置项 | 说明 | 默认值 |
|---|---|---|
DB_TYPE |
数据库类型 | mysql |
DB_HOST |
数据库地址 | localhost |
DB_PORT |
数据库端口 | 3306 |
DB_USERNAME |
数据库用户名 | dorm_billing |
DB_PASSWORD |
数据库密码 | - |
DB_DATABASE |
数据库名 | dorm_billing |
JWT_SECRET |
JWT 密钥(务必替换) | - |
JWT_EXPIRES_IN |
Token 有效期 | 24h |
ADMIN_PASSWORD |
初始管理员密码 | - |
PORT |
后端服务端口 | 3000 |
开发规范
- 后端代码使用 Prettier + ESLint 格式化
- 提交前确保
npm run lint无报错 - 敏感配置(密码、密钥等)仅存放在
.env文件,不提交到版本库
Description
Languages
TypeScript
98.5%
CSS
1.3%
JavaScript
0.1%