|
|
9cc9ed09df
|
refactor(admin): EditableCell 跨单元格协调状态迁入 zustand,替代模块级单例并补单测
|
2026-08-08 17:04:42 +08:00 |
|
|
|
260a7517d2
|
feat(admin): RouteDock 页签增强——pathname 唯一 key、20 上限 LRU、关闭其他/左/右/全部、登出清理、持久化校验收紧
|
2026-08-08 17:00:49 +08:00 |
|
|
|
d27f10eb84
|
chore: admin 构建稳定 vendor 分包,消除 chunk 告警;更新 .env.example 品牌文案与端口
|
2026-08-08 16:46:16 +08:00 |
|
|
|
00cdb322d2
|
fix: 修复 QA 巡检发现的 console 告警——useForm 未连接、RangePicker 空值禁用、dashboard 占用率类型
|
2026-08-08 16:36:58 +08:00 |
|
|
|
6c11fd7e16
|
refactor(server): 待办统计日期懒计算,aislop 豁免注释与文档纠错
|
2026-08-08 16:03:05 +08:00 |
|
|
|
e50f660811
|
chore: 移除 aislop 质量门禁工作流
|
2026-08-08 15:29:13 +08:00 |
|
|
|
bb8228bd0f
|
docs: 同步 A2UI 契约与 AI 工作流文档至统一 artifact/向导流程
|
2026-08-08 15:06:03 +08:00 |
|
|
|
f03f22c605
|
docs: 更新项目结构与部署说明(apps/* 布局、monorepo 命令)
|
2026-08-08 15:06:03 +08:00 |
|
|
|
b73ac5e3e4
|
ci: 新增 aislop 质量门禁工作流
|
2026-08-08 15:06:03 +08:00 |
|
|
|
f160256865
|
chore(server): 移除 e2e 测试配置与 supertest 依赖
|
2026-08-08 15:05:52 +08:00 |
|
|
|
f96c1c26c3
|
fix(server): 考勤自动结算支持空班级直接完成,补充自动匹配测试
|
2026-08-08 15:05:42 +08:00 |
|
|
|
a0829f17ce
|
feat(admin): 管理端 UI/UX 深度优化——错误/加载/空状态、表单快捷键、移动端适配与无障碍
|
2026-08-08 15:05:33 +08:00 |
|
|
|
57639a3869
|
refactor(admin): AI 对话收敛为统一 ui.artifact 协议,移除 legacy 事件处理
|
2026-08-08 15:05:20 +08:00 |
|
|
|
b37ae9471e
|
refactor(server): A2UI 收敛——移除 legacy SSE 双发与 render_review 工具,提取公共校验
|
2026-08-08 15:05:10 +08:00 |
|
|
|
1e3d6ee20f
|
refactor(server): 收敛类型边界工具,aislop AI Slop 10 → 1
- 新增 common/buffer.ts bufferToArrayBuffer:9 处
'as unknown as ArrayBuffer' 收敛为精确切片(含 byteOffset),
消除潜在 Buffer 池偏移隐患,类型断言集中到单一实现
- 新增 common/stringify.ts:4 处重复的 stringify 助手收敛为共享实现
- aislop: AI Slop 10→1(仅剩 1 处有理由的 stringify 薄包装,
eslint no-base-to-string 绕过所需);Code Quality 剩余
4 重复块(声明式 SQL 配置)+ 2 文件过大(既有规模)均保留
- 测试 142 套件/1065 用例通过
|
2026-08-08 09:48:03 +08:00 |
|
|
|
4b60e0c018
|
fix: code-review 审查问题修复 + A2UI 测试补齐
Standards 轴:
- 移除 uiArtifacts.ts 的 payloadOf 死代码残留
- AttendanceDevices 残留 any 类型化(补 ClassroomOption.status 字段)
- 批量考勤纠错区分业务失败(已结算/无权限)与系统错误,
前端提示精确到两类数量
- Dashboard queryFn 六段重复校验块收敛为 safeValidate 助手
Spec 轴:
- 补齐阶段 3.4 A2UI 测试:图表空数据占位、ArtifactErrorBoundary
降级隔离、useSubmissionState/useXCardSurface 单测(7 用例)
- 阶段 2.2 补两处引导:教师工作台区分「今日无课」与「未分配班级」、
班级花名册空态带「添加学员」动作
- 契约文档修正 DynamicReview 状态管理描述(多提交点如实说明)
aislop 剩余 16 警告均为必要豁免(类型边界/声明式 SQL 配置/既有文件规模)
|
2026-08-08 09:43:48 +08:00 |
|
|
|
bcd2d1a559
|
refactor(admin): A2UI 双轨收敛,统一 artifact 协议
- mergeArtifactIntoMessage 不再派发 legacy 列表,只维护 uiArtifacts
- 渲染层从 uiArtifacts 派生 forms/reviews/charts,为空时回退 legacy
(历史消息兼容,老 metadata 仅 a2uiForm/a2uiReview/a2uiChart)
- sseReducer 删除 ui.form/ui.review/ui.chart 旧事件分支,只消费
ui.artifact(后端过渡期双发,旧事件将被忽略)
- types.ts legacy 字段标注 deprecated;契约文档同步现状
- 测试更新:旧事件忽略 + uiArtifacts 合并/恢复断言
aislop scan: 5 引擎 0 issues
|
2026-08-08 09:33:53 +08:00 |
|
|
|
a644a8de42
|
refactor(server): 清理全量 any 类型安全警告 (692 → 0)
- 全模块类型化:controller 的 req: any → AuthenticatedRequest/RequestUser,
聚合查询 getRawMany 泛型标注、导入行/响应体定义具体 interface、
catch (e: any) → unknown + 收窄、no-base-to-string 用 String() 显式转换
- 第三方无类型库边界(pdfkit/exceljs)文件级或单行 disable 并注明理由
- 顺带修复:get-business-context.tool 两个 require-await error、
bills.controller 参数顺序隐患、main.ts compression 调用
- 运行时逻辑零改动;测试 142 套件 / 1065 用例全部通过
|
2026-08-08 09:28:23 +08:00 |
|
|
|
8b5fa98028
|
feat(admin): 管理端考勤明细批量纠错
- 原始考勤明细表支持行选择(跨页保留),选中后出现
「标记正常/标记请假/标记缺勤」批量操作条
- 批量提交前确认,成功后按 updated/failed 数量反馈,
失败记录(如已结算)提示原因;筛选条件变化自动清空选择
- 复用 PUT /attendance-records/batch-status 接口
aislop scan: 5 引擎 0 issues
|
2026-08-07 18:03:22 +08:00 |
|
|
|
1b4ba893fd
|
feat: 空状态引导全面应用与考勤批量标记
admin:
- 17 个列表页空态统一为 QueryEmpty 引导:学生/账单/入住/费用/押金/
教室/房间/班级/考试/排课/机构/考勤机/钱包/租赁/通知/角色等,
有创建权限的页面附带主操作按钮,无权限时纯展示
- 教师端课堂点名新增「全部已打卡/全部未打卡」批量按钮:
仅作用于状态不一致的记录,确认后调用批量接口,展示成功/失败数量
server:
- 新增 PUT /attendance-records/batch-status 批量改状态接口
(ids ≤200,逐条权限校验与会话锁,部分失败返回 failedIds,
审计日志记录批量结果;路由声明在 :id 之前避免被捕获)
aislop scan: 5 引擎 0 issues
|
2026-08-07 18:00:29 +08:00 |
|
|
|
c10476d203
|
feat(admin): 弹窗未保存内容保护与空状态引导扩展
- 新增 useDirtyGuard hook:关闭弹窗时若表单被修改,先确认再关闭
- 接入 17 个弹窗:账号/密码/档案、角色、教室、宿舍/床位/柜子、
考勤机、机构、班级、教师、考试、排课、入住/退宿/换房、费用
(子组件弹窗用 useEffect 在回填后快照,时序正确)
- 学生列表空状态带「添加学生」引导动作
- 排课创建成功提示「同步钉钉」,考试创建成功提示「去详情录成绩」
aislop scan: 5 引擎 0 issues
|
2026-08-07 17:56:13 +08:00 |
|
|
|
bcbf3c8b2e
|
refactor(admin): 按 aislop 质量门禁修复两个代码质量警告
- RoleTour: buildSteps 拆分为各角色的声明式步骤常量,函数从 91 行降至组装逻辑
- ImportWizardModal: 抽取 uploadRun 共享 helper,消除 handleUpload/handleReupload
之间重复的上传进度与 loading 状态处理
aislop scan --changes: 99/100 → 100/100 (5 引擎 0 issues)
|
2026-08-07 17:43:00 +08:00 |
|
|
|
ff3b6cdfde
|
style(admin): 清理 AI slop 痕迹
- 移除教师端 hero 的英文眉标(TEACHING DAY),日期并入正文描述
- 删除不再使用的 attendance-eyebrow 样式
- Dashboard 的 ══ 装饰注释改为普通注释
kill-ai-slop 扫描: 18 处命中 → 7 处(剩余均为合理用法:
链接 hover 下划线、头像圆形角)
|
2026-08-07 17:41:01 +08:00 |
|
|
|
8dc72d6e1b
|
fix(admin): 编辑消息/切换会话保护、行内编辑撤销与上传进度反馈
- 编辑旧消息会删除其后全部消息时,先弹确认告知影响范围
- 有待发送附件时切换会话,先确认再丢弃(避免静默删除已上传文件)
- EditableCell 保存成功后提供 6 秒内"撤销"入口(把旧值重新保存),
重新编辑时自动清除
- 导入向导/重新上传显示上传进度条与百分比,不再"假死"
- AI 附件上传透传进度给附件列表
- 租赁合同上传显示按钮 loading 与上传百分比
|
2026-08-07 17:38:21 +08:00 |
|
|
|
00e2bc5acf
|
fix(admin): 通知分页、登录过期提示、附件打开反馈与导出统一 loading
- 通知中心改为游标分页 + 加载更多,历史通知不再被 50 条上限截断;
加载失败显示错误态与重试
- AI 流式请求 401 被登出时,登录页提示"登录已过期",不再无声踢出
- AI 附件/引用来源打开失败时给出明确错误提示,不再"点了没反应"
- 新增 useDownload hook:统一导出/下载的防重复、loading 与成功/失败反馈;
接入学生/账单/房间/入住/费用五个页面的模板下载与导出按钮
- 学生页移除不检查响应状态的私有下载实现,统一走 downloadBlob
|
2026-08-07 17:33:58 +08:00 |
|
|
|
67435e46ca
|
feat(admin): 用户体验体系化提升与高危缺陷修复
UX 缺陷修复:
- 校验失败不再卡死弹窗按钮(Users/Roles/Bills)
- 押金收取/批量收取/添加分期防重复提交;切换房型重置勾选
- AI 表单/批量确认不再出现"假成功"
- Dashboard 各数据模块独立加载,单接口失败不再整页清零
- 房间可视化加载失败显示错误态而非永久转圈
- 学生编辑表单回填前重置,避免字段残留污染
- 覆盖式导入增加二次确认;恢复默认考勤时段确认并同步表单
- 金数据匹配关闭前确认,同步中禁止误关
体验提升:
- 新增统一 QueryErrorState/QueryEmpty,20+ 页面加载失败显示错误态与重试
- 全局 ErrorBoundary + RouteKeeper 逐页兜底
- 新增 usePageVisible/useVisibleRefetch,保活页面切回自动刷新数据
- 新增首次登录角色引导 RoleTour 与业务闭环 NextStepHint 引导卡
- 重构 A2UI:useSubmissionState/useXCardSurface 收敛状态与命令生命周期,
ArtifactErrorBoundary 渲染降级,图表空数据占位
- AI 助手欢迎语与建议话术按角色定制,会话列表空态引导
- 更新 a2ui-contract.md 契约文档说明实现现状
|
2026-08-07 17:23:23 +08:00 |
|
|
|
db0d972633
|
Merge pull request 'fix: 上传与路由校验加固、甘特图时间线修复' (#63) from fix/quick-wins-and-gantt into main
|
2026-08-07 08:38:45 +00:00 |
|
|
|
8d4ebcf9c0
|
fix(admin,server): 修复 Dashboard 甘特图时间线与数据校验
CI / check (pull_request) Failing after 1m54s
|
2026-08-07 16:38:16 +08:00 |
|
|
|
5f9566e26d
|
fix(server): 修正档案成绩趋势图 y 轴坐标字符串拼接
|
2026-08-07 16:38:09 +08:00 |
|
|
|
5b5ffb5b9e
|
fix(server): 路由 id 使用 ParseIntPipe,限制分页与批量数组上限
|
2026-08-07 16:38:03 +08:00 |
|
|
|
899d2dde5b
|
fix(admin,server): 上传改用 file.buffer 并移除手写 multipart 头
|
2026-08-07 16:37:55 +08:00 |
|
|
|
54b002455f
|
chore(admin): 声明 react-syntax-highlighter 运行时依赖
|
2026-08-07 16:37:47 +08:00 |
|
|
|
b032890b4f
|
style(admin): 清理考勤页与排课表的冗余装饰与标签
|
2026-08-07 09:50:52 +08:00 |
|
|
|
f560b046a4
|
Merge pull request 'fix(admin): 账号管理用户名过长溢出' (#62) from fix/users-username-overflow into main
|
2026-08-06 09:11:44 +00:00 |
|
|
|
549a3ff14b
|
fix(admin): 账号管理用户名过长溢出
CI / check (pull_request) Failing after 1m48s
|
2026-08-06 17:10:06 +08:00 |
|
|
|
7fdfdbc717
|
Merge pull request 'fix(admin): 钱包列表隐藏学号显示' (#61) from fix/wallet-hide-student-no into main
|
2026-08-06 09:07:50 +00:00 |
|
|
|
edb798b752
|
fix(admin): 钱包列表隐藏学号显示
CI / check (pull_request) Failing after 3m30s
|
2026-08-06 17:06:24 +08:00 |
|
|
|
a436d9aa38
|
Merge branch 'feat/ai-a2ui-context' into main
|
2026-08-06 08:27:24 +00:00 |
|
|
|
bbeea440f9
|
fix(admin): dashboard 待办卡片点击导航去重与防抖
CI / check (pull_request) Failing after 3m19s
- 同一目标路径不再重复 navigate,避免历史记录堆叠
- 400ms 冷却期内忽略重复/幽灵点击,防止来回跳转
- 新增 shouldNavigateTodoCard 守卫单元测试
|
2026-08-06 16:11:13 +08:00 |
|
|
|
9048816abc
|
feat(ai): 移除 Excel 导入预检链路
- 删除 preflight_import 工具、预检卡、resolve 接口与 ui.import_preflight 事件
- 删除 imports.preflight 解析器与 PreflightReport 类型
- SYSTEM_PROMPT 改为上传 Excel 后直接确认列映射/策略并调用 start_import_wizard
- 前端同步移除预检类型/组件/测试,保留导入向导
|
2026-08-06 15:50:38 +08:00 |
|
|
|
14db28afc6
|
fix(ai): 修复 Nest DI 启动失败
- A2uiSubmissionsService/DataSource/BusinessContextService 等构造参数
由 import type 改为值导入,确保 Nest 能解析依赖
- 验证:dev 模式后端正常启动,相关 243 个测试通过
|
2026-08-06 15:39:33 +08:00 |
|
|
|
c72ff2cb8a
|
fix(ai): 清理 aislop 扫描告警
- 拆分 SSE reducer 到 sseReducer.ts,provider.ts 降至 220 行
- artifact 合并工具抽到 uiArtifacts.ts,去除双重类型断言
- 业务上下文注册表改用 field/relation/entity 构建器收敛重复
- aislop 分数 71 → 81(Healthy),AI Slop 0 告警
|
2026-08-06 15:35:12 +08:00 |
|
|
|
24e0ecbdaf
|
feat(ai): 业务上下文感知与 A2UI 链路统一
- 新增代码内业务上下文元数据层(实体字典 + 三大闭环工作流)
- 新增 get_business_context / get_entity_schema / get_pending_tasks 运行时工具
- SYSTEM_PROMPT 与技能目录改为先查业务流程/待办再执行
- A2UI 增加 ai_a2ui_submissions 幂等表、表单过期、ui.artifact 事件
- 提交回灌携带 submissionId / fieldErrors / 下一步建议
- 前端 uiArtifacts 归一化与过期表单禁用
|
2026-08-06 15:23:23 +08:00 |
|
|
|
d9c541dacc
|
fix(admin): 跨标签页权限写入不再整页刷新
storage 事件里 permissions 变更改为原地写入权限 store,
仅 gongxue-auth token 实际变化(登录/退出/切换账号)才 reload,
避免多标签页相互触发刷新风暴
|
2026-08-06 14:53:22 +08:00 |
|
|
|
ae88372ef8
|
fix(imports): 修复 AI 导入向导多工作表与表头误判
- AI resolve 生成向导时按阶段携带全部 sheetNames,不再只取第一张表
- ImportStageRequest 支持 sheets 数组并兼容旧 sheet;手动重传同步修复
- headerMatches 收窄为单向包含,避免宿舍号被原/新宿舍号反向匹配
- suggestStep 增加入住/换宿显式表头信号,修复入住表误判为换宿
- 预检与预览按工作表逐表解析列映射,兼容异构表头
- 修复预检卡生成向导成功后按钮未复位 loading 的问题
- 补充 mapping/预检/run/ai-chat 多工作表测试
|
2026-08-06 14:46:33 +08:00 |
|
|
|
259271f56c
|
fix(admin): Alert message 弃用 API 全部迁移为 title
|
2026-08-06 12:20:24 +08:00 |
|
|
|
824c33a71c
|
refactor(ai-chat): 拆分超大文件并通过 aislop 100 分门槛
- AiChatService 拆出抽象基类,职责不变
- submissions 按提交内容/评审确认/运行时/流程拆为 4 个模块并保持导出兼容
- 导入工具执行器抽取共享 runner,消除重复签名块
- 全仓 aislop 扫描 100/100,0 警告
|
2026-08-06 12:13:37 +08:00 |
|
|
|
7f09d5271e
|
feat(imports): 导入向导兼容旧版工作簿并完善执行/预览
- 新增 xls 工作簿回退解析与测试
- 执行/预览/权限校验逻辑完善
|
2026-08-06 11:59:51 +08:00 |
|
|
|
7f3e30ba38
|
fix(archive): 档案聚合接口 null 字段归一化为空串
避免可选列缺省返回 null 导致前端响应校验报「字段格式异常」
|
2026-08-06 11:59:43 +08:00 |
|
|
|
d0ab8da01b
|
feat(admin): AI 预检卡片交互与消息组件完善
- 预检卡支持列映射、导入策略确认与生成导入向导
- 消息组件/API 契约配套更新,含集成测试
|
2026-08-06 11:59:36 +08:00 |
|