1. 06 Mar, 2026 10 commits
  2. 05 Mar, 2026 6 commits
    • 375242562@qq.com's avatar
      feat: 删除确认框改为 MUI Dialog 风格,与系统 UI 一致 · fd295ed7
      375242562@qq.com authored
      将批次数据、同步任务、连接配置三处删除操作的 window.confirm()
      替换为统一的 MUI Dialog 确认弹窗,包含警告高亮区、详情信息展示
      和"确认删除"/"取消"操作按钮。
      Co-Authored-By: default avatarClaude Sonnet 4.6 <noreply@anthropic.com>
      fd295ed7
    • 375242562@qq.com's avatar
      fix: DataSyncPage 修复 loadData TDZ 错误 — 将轮询 useEffect 移至 useCallback 定义之后 · e7e90b1d
      375242562@qq.com authored
      将引用 loadData 的轮询 useEffect 从 useCallback 定义之前移至之后,
      消除 JavaScript 暂时死区(TDZ)导致的 ReferenceError。
      Co-Authored-By: default avatarClaude Sonnet 4.6 <noreply@anthropic.com>
      e7e90b1d
    • 375242562@qq.com's avatar
      feat: 同步运行状态持久化 — 刷新/切换页面后按钮仍保持禁用 · 269c9325
      375242562@qq.com authored
      - SyncSource 模型新增 is_running 字段(SQLite 已迁移)
      - sync_service: 同步开始前设 is_running=True,try/finally 确保完成或报错后置 False
      - SyncSourceResponse 返回 is_running 字段
      - 前端: 按钮禁用以 source.is_running(后端状态)为准,而非本地临时状态
        有任务运行时每3秒自动轮询刷新,完成后停止轮询
        禁用状态下 Tooltip 提示「同步中,请等待完成...」
      269c9325
    • 375242562@qq.com's avatar
      feat: 同步批次号 — 每次同步生成批次记录,支持按批次删除患者数据 · 92ccc7c8
      375242562@qq.com authored
      后端:
      - 新增 SyncBatch 模型(sync_batches 表): 记录每次同步的来源、模式、新增/更新数量
      - Patient 模型增加 sync_batch_id 字段,打上每次同步的批次号
      - sync_service: 每次同步生成 UUID 批次号,新增/更新患者均标记,结束后写入批次记录
      - GET /sync/batches: 列出所有批次(含当前存活患者数)
      - DELETE /sync/batches/{id}: 删除该批次所有患者数据及批次记录
      - SQLite 迁移: patients.sync_batch_id 列 + sync_batches 表
      
      前端:
      - DataSyncPage 底部新增「同步批次记录」表格
        展示批次号(hover显示完整UUID)、来源任务、模式、获取/新增/更新/当前患者数、时间
        删除按钮: 当前患者数=0时禁用,点击弹确认框后批量删除
      - syncService 新增 listBatches / deleteBatch 方法
      - 同步成功提示带上批次号前8位
      92ccc7c8
    • 375242562@qq.com's avatar
      fix/feat: Oracle thick mode 错误提示优化 + 向导步骤加载动画 · b6692c94
      375242562@qq.com authored
      - sync_adapters: thick mode 失败时抛出明确错误(含路径提示和操作指引)
        路径不存在时提前检测并打印日志,不再静默吞异常
      - main.py: 应用启动时提前初始化 Oracle thick mode 并输出日志
      - DataSyncPage: 新建任务向导步骤间加载动画
        Step0→1 获取表列表时显示半透明覆盖层 + 转圈 + 提示文字
        Step1→2 切换时显示过渡动画
        预览数据时右侧区域显示加载状态(转圈 + 说明文字)
        下一步/上一步按钮加载期间自动禁用防重复触发
      b6692c94
    • 375242562@qq.com's avatar
      feat: 数据同步、批量匹配、Dashboard 等核心功能 · 98876adf
      375242562@qq.com authored
      后端新增:
      - 数据同步模块: SyncSource/ConnectionProfile 模型, sync_adapters/sync_service
        支持 MySQL/PostgreSQL/Oracle/MSSQL, Oracle thick mode, SID/ServiceName
        3步向导式同步任务配置, 表发现(list-tables), 增量同步
      - 批量匹配模块: BatchMatchingJob 模型, 按试验筛选, 进度追踪, 取消支持
        操作日志 trial_title 字段, 分页接口
      - Dashboard 统计接口: 患者/试验/匹配/批量任务/通知 聚合数据
      
      前端新增:
      - DashboardPage: KPI卡片, 匹配状态分布, 最近批量记录, 系统概况
      - DataSyncPage: 连接管理(支持Oracle SID/ServiceName), 3步向导同步任务
      - 批量自动匹配: 必须选择试验项目, 操作日志分页(每页10条)
      - AI匹配页面: Tab分离手动/批量匹配, 批量为默认
      - 侧边栏新增数据概览入口, 首页跳转至 /dashboard
      98876adf
  3. 02 Mar, 2026 1 commit
    • 375242562@qq.com's avatar
      feat: 实现 RBAC 登录权限系统 · 21eca8c8
      375242562@qq.com authored
      后端:
      - 新增用户、科室、角色、权限数据模型(SQLAlchemy)
      - 实现 JWT 认证(PBKDF2-SHA256 密码加密)
      - 新增 auth/users/roles/permissions/departments REST API
      - 用户-角色、角色-权限通过关联表直接操作(避免异步懒加载问题)
      - 新增 init_auth_data 初始化脚本(默认科室/角色/权限/管理员)
      
      前端:
      - 新增登录页(LoginPage)与 AuthContext 认证上下文
      - 新增 PrivateRoute 路由守卫、PermissionButton/PermissionGuard 权限组件
      - Sidebar 根据用户菜单权限动态过滤,TopBar 展示用户信息与退出登录
      - 新增系统管理页(用户管理、角色管理含权限树、科室管理)
      - 所有业务页面的新增/编辑/删除按钮接入权限控制,无权限时自动隐藏
      Co-Authored-By: default avatarClaude Sonnet 4.6 <noreply@anthropic.com>
      21eca8c8
  4. 27 Feb, 2026 3 commits