|
|
b6d398b102
|
feat: 导入导出错误信息 Markdown 渲染升级
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
|
2026-07-20 15:25:14 +08:00 |
|
|
|
8494c511b6
|
feat: 学生档案 Excel 批量导入
- 4-Sheet Excel 模板:学生基础+档案+录取 / 报读班型 / 考试成绩 / 课堂回访
- 手机号精确匹配已有学生,不存在则新建
- POST /archive/import 批量导入接口
- GET /archive/import/template 模板下载接口
- 前端:下载模板 + 上传导入 + 结果汇总弹窗
|
2026-07-20 15:05:41 +08:00 |
|
|
|
00e9c5e45a
|
fix: 修复多处边界条件问题
- rooms: parseRoomNumber 未知格式返回默认 capacity=4,防止 undefined 绕过入住容量检查
- rooms: 修复 parseInt() || undefined 导致楼层 0 被吞掉
- rooms: batchImport 中 capacity 使用 ?? 代替 ||,显式 0 不被覆盖
- occupancies: 所有 capacity 比较加 ?? 0 防守兜底,fail closed
- schedules: assertValidScheduleRange 增加 startTime > endTime 校验
- attendance: 时段重叠检查改为按 startTime 排序后再比较,消除漏检
- attendance: 移除 getScheduleOptionsForAttendance 中不可靠的 raw[index] fallback
- expenses: 个人附加费批量导入增加 assertPositiveAmount 校验
- expenses: 水电费导入增加 periodEnd >= periodStart 校验
|
2026-07-20 14:45:53 +08:00 |
|
|
|
990c0c16e6
|
feat: Docker Compose deployment + auto migration on startup
- docker-compose.yml: 移除 MySQL 容器,连宿主机 MySQL
- main.ts: 启动前通过独立 DataSource 执行 runMigrations
- migration-runner.ts: 独立 migration 执行器
- app.module.ts: TypeORM 配置增加 migrations
- 修复 InitialSchema 中 room_expenses 和 financial_operations 重复索引
|
2026-07-20 12:43:13 +08:00 |
|
|
|
4c2192d85e
|
feat: switch to Docker Compose + auto-migration
- docker-compose.yml: 移除 MySQL 容器,后端连宿主机 MySQL
- main.ts: 启动时自动 runMigrations
- 前端 Nginx 反代 /api/ → backend:3000 不变
|
2026-07-20 12:24:51 +08:00 |
|
|
|
2ee8bd47e2
|
feat: add TypeORM CLI migration support
- 新增 datasource.ts 支持 mysql/sqlite 双模式
- 新增 migration 脚本: generate/create/run/revert/show
- 生成 InitialSchema migration (35 张表全量建表)
|
2026-07-20 12:16:48 +08:00 |
|
|
|
ed428c8aa3
|
fix: 修正档案报告品牌名 工学云 → 恭学教育
|
2026-07-20 11:59:51 +08:00 |
|
|
|
c7ba2799b9
|
feat: 拆分学号/身份证字段 + 考勤教师展示 + 代码优化
- 入住导入模板:学号和身份证号拆为独立字段,前后端对齐
- 排课查询关联教师,考勤归档页展示教师姓名
- 抽查时段增加 IsIn 校验
- 抽取 withPessimisticWriteLock 去重悲观锁查询
- import 增加文件空 buffer 校验
- 测试 mock 补全,适配事务 manager
- MySQL init.sql VALUES() 语法兼容修复
|
2026-07-20 11:54:01 +08:00 |
|
|
|
375c7ec60b
|
feat: refine admin forms, attendance and finance workflows
Squash merge PR #23.
Included changes:
- complete occupancy check-in required fields/default payload
- improve responsive admin management pages
- fix attendance edge cases and attendance period config
- refine wallet/finance-related workflow handling
Checks:
- npm run typecheck -w apps/admin
- npm run typecheck -w apps/server
|
2026-07-18 12:54:10 +00:00 |
|
|
|
5836b421d8
|
fix: harden financial transaction boundaries
|
2026-07-18 15:33:41 +08:00 |
|
|
|
c11f6bb614
|
fix: harden DingTalk student synchronization
|
2026-07-18 14:51:53 +08:00 |
|
|
|
7edb4ff853
|
fix: prune unused RBAC permissions
|
2026-07-17 17:43:45 +08:00 |
|
|
|
b3d0bafc22
|
feat: refine deposit room type workflows
|
2026-07-17 17:36:04 +08:00 |
|
|
|
f7328d670d
|
fix: 归档删除改为软删除
|
2026-07-17 14:13:17 +08:00 |
|
|
|
4fbcde48b1
|
test: update attendance service mocks
|
2026-07-16 11:01:24 +08:00 |
|
|
|
c93ac986aa
|
Merge pull request '移除删除账号功能' (#15)
|
2026-07-16 02:55:22 +00:00 |
|
|
|
559b8a56e9
|
feat: add attendance device SN classroom bindings
|
2026-07-16 10:22:23 +08:00 |
|
|
|
d037787346
|
feat: support batch wallet balance changes
|
2026-07-16 10:22:23 +08:00 |
|
|
|
8ba51f48c0
|
fix: map expense type sort order column
|
2026-07-16 10:22:23 +08:00 |
|
|
|
7a62d8962a
|
chore: update production deployment config
|
2026-07-16 10:21:40 +08:00 |
|
|
|
1737563516
|
移除删除账号功能
|
2026-07-16 10:16:56 +08:00 |
|
|
|
d582d641c0
|
feat: improve admin responsive pages and teacher candidates
|
2026-07-15 13:56:58 +08:00 |
|
|
|
8bd445df5a
|
fix student import and profile labels
|
2026-07-15 10:52:43 +08:00 |
|
|
|
fcde6caaaa
|
fix: defer attendance settlement until lesson end
|
2026-07-15 09:39:21 +08:00 |
|
|
|
b1f35f9d1a
|
test: harden business boundary conditions
|
2026-07-15 00:03:55 +08:00 |
|
|
|
e45da7f998
|
feat: improve attendance scheduling and API validation
|
2026-07-14 23:12:14 +08:00 |
|
|
|
c75a08affe
|
feat: add student wallet utility billing
|
2026-07-14 20:42:21 +08:00 |
|
|
|
598b4e8acd
|
feat: link deposits to bill payment
|
2026-07-14 16:38:38 +08:00 |
|
|
|
eac336a54a
|
fix: include contained room expenses in bill generation
|
2026-07-14 14:53:07 +08:00 |
|
|
|
ce5fd1c6cb
|
fix: 修复批量更新账单状态功能
|
2026-07-14 14:24:19 +08:00 |
|
|
|
d84f37e98f
|
feat: streamline occupancy check-in and imports
|
2026-07-14 12:23:53 +08:00 |
|
|
|
5cf6aede1e
|
feat: improve occupancy import template
|
2026-07-14 11:20:41 +08:00 |
|
|
|
811e7ce826
|
feat: show DingTalk punch device details
|
2026-07-14 11:20:41 +08:00 |
|
|
|
a93ba657a8
|
fix: keep room capacity and beds consistent
|
2026-07-14 10:57:13 +08:00 |
|
|
|
e7aa202603
|
fix: 修改 PDFDocument 导入方式以符合 ES6 模块规范
|
2026-07-14 10:45:27 +08:00 |
|
|
|
ceb0e2bf14
|
fix: 添加默认床位生成逻辑并优化床位添加验证
|
2026-07-13 16:50:47 +08:00 |
|
|
|
f98c0ccaa8
|
refactor(rooms): remove dorm gender restrictions
|
2026-07-13 16:12:57 +08:00 |
|
|
|
aa1ed7db56
|
refactor: resolve remaining field audit issues
|
2026-07-13 16:12:57 +08:00 |
|
|
|
0533c30ece
|
refactor(classes): preserve student membership history
|
2026-07-13 16:12:57 +08:00 |
|
|
|
1f32d1285b
|
refactor(deposits): remove refund approval remnants
|
2026-07-13 16:12:56 +08:00 |
|
|
|
04ef5c42d9
|
refactor(deposits): remove inline installment creation
|
2026-07-13 16:12:22 +08:00 |
|
|
|
0515e6ed27
|
fix(integration): simplify manual DingTalk sync setup
|
2026-07-13 16:12:22 +08:00 |
|
|
|
effa34434b
|
refactor(students): remove obsolete class id input
|
2026-07-13 16:12:22 +08:00 |
|
|
|
0377acd33b
|
refactor: remove residual campus and department fields
|
2026-07-13 16:12:22 +08:00 |
|
|
|
6396d3e934
|
fix(schedules): support editable schedule notes
|
2026-07-13 16:12:21 +08:00 |
|
|
|
dfd3cf6772
|
fix(archive): align aggregate result field
|
2026-07-13 16:12:21 +08:00 |
|
|
|
2874ab7bee
|
fix(occupancies): assign room resources during transfers
|
2026-07-13 16:12:21 +08:00 |
|
|
|
7860703672
|
test: update DingTalk token cache fixtures
|
2026-07-13 16:04:05 +08:00 |
|
|
|
910a4263f6
|
fix: refactor notification display logic and add format function
|
2026-07-13 14:52:03 +08:00 |
|
|
|
619b3b22bd
|
fix: use saved dingtalk config for integration calls
|
2026-07-13 11:43:11 +08:00 |
|