refactor(asl): ASL frontend architecture refactoring with left navigation

- feat: Create ASLLayout component with 7-module left navigation
- feat: Implement Title Screening Settings page with optimized PICOS layout
- feat: Add placeholder pages for Workbench and Results
- fix: Fix nested routing structure for React Router v6
- fix: Resolve Spin component warning in MainLayout
- fix: Add QueryClientProvider to App.tsx
- style: Optimize PICOS form layout (P+I left, C+O+S right)
- style: Align Inclusion/Exclusion criteria side-by-side
- docs: Add architecture refactoring and routing fix reports

Ref: Week 2 Frontend Development
Scope: ASL module MVP - Title Abstract Screening
This commit is contained in:
2025-11-18 21:51:51 +08:00
parent e3e7e028e8
commit 3634933ece
213 changed files with 20054 additions and 442 deletions

View File

@@ -0,0 +1,306 @@
# ASL模块 Week 1 开发完成报告
**日期**: 2025-11-18
**开发周期**: Week 1 (Day 1-5)
**状态**: ✅ 全部完成
---
## 📋 任务完成情况
| 任务 | 计划 | 实际 | 状态 | 说明 |
|------|------|------|------|------|
| Prisma Schema设计 | Day 1 | Day 1 | ✅ | 4个模型174行代码 |
| 数据库迁移 | Day 1 | Day 1 | ✅ | 4张表创建成功 |
| 后端目录结构 | Day 2 | Day 1 | ✅ | 5个子目录9个文件 |
| 路由注册 | Day 3 | Day 1 | ✅ | 10个API端点 |
| 基础API实现 | Day 4-5 | Day 1 | ✅ | 项目+文献管理 |
| API测试 | - | Day 1 | ✅ | 7个测试全部通过 |
**完成度**: 6/6 (100%)
**提前完成**: 4天
---
## 🎯 实现的功能
### 1. 数据库设计 ✅
#### Schema设计
```prisma
// 4个核心模型
- AslScreeningProject // 筛选项目 (19字段)
- AslLiterature // 文献条目 (14字段 + OSS预留)
- AslScreeningResult // 筛选结果 (40字段双模型)
- AslScreeningTask // 筛选任务 (14字段)
```
#### 数据库表
```sql
asl_schema.screening_projects -- 筛选项目表
asl_schema.literatures -- 文献条目表
asl_schema.screening_results -- 筛选结果表
asl_schema.screening_tasks -- 筛选任务表
```
#### 特性
- ✅ Schema隔离 (`asl_schema`)
- ✅ 外键约束 (级联删除)
- ✅ 索引优化 (12个索引)
- ✅ 唯一约束 (projectId + pmid)
- ✅ JSONB字段 (PICO标准)
- ✅ OSS字段预留 (pdfUrl, pdfOssKey)
### 2. 后端API ✅
#### 目录结构
```
backend/src/modules/asl/
├── controllers/
│ ├── projectController.ts (224行)
│ └── literatureController.ts (259行)
├── routes/
│ └── index.ts (47行)
├── services/
│ └── llmScreeningService.ts (189行)
├── schemas/
│ └── screening.schema.ts (108行)
└── types/
└── index.ts (121行)
```
#### API端点 (10个)
```
POST /api/v1/asl/projects - 创建项目
GET /api/v1/asl/projects - 获取项目列表
GET /api/v1/asl/projects/:projectId - 获取项目详情
PUT /api/v1/asl/projects/:projectId - 更新项目
DELETE /api/v1/asl/projects/:projectId - 删除项目
POST /api/v1/asl/literatures/import - 导入文献(JSON)
POST /api/v1/asl/literatures/import-excel - 导入文献(Excel)
GET /api/v1/asl/projects/:projectId/literatures - 获取文献列表
DELETE /api/v1/asl/literatures/:literatureId - 删除文献
```
### 3. 核心服务 ✅
#### LLM筛选服务
```typescript
class LLMScreeningService {
// 单模型筛选
async screenWithModel()
// 双模型并行筛选 (核心)
async dualModelScreening()
// 冲突检测
private detectConflict()
// 批量筛选
async batchScreening()
}
```
#### JSON Schema验证
```typescript
// AJV验证器
- PicoJudgment Schema
- PicoEvidence Schema
- LLMScreeningOutput Schema
```
#### Prompt生成器
```typescript
// 生成PICO标准筛选Prompt
generateScreeningPrompt(
title, abstract, picoCriteria,
inclusionCriteria, exclusionCriteria
)
```
---
## 🧪 测试结果
### API测试 (7/7通过)
```bash
✅ 1. 健康检查 GET /health
✅ 2. 创建筛选项目 POST /api/v1/asl/projects
✅ 3. 获取项目列表 GET /api/v1/asl/projects
✅ 4. 获取项目详情 GET /api/v1/asl/projects/:id
✅ 5. 导入文献 POST /api/v1/asl/literatures/import
✅ 6. 获取文献列表 GET /api/v1/asl/projects/:id/literatures
✅ 7. 更新项目 PUT /api/v1/asl/projects/:id
```
### 测试数据
- **用户**: asl-test-user-001
- **项目**: 1个 (SGLT2抑制剂系统综述)
- **文献**: 3篇 (包含PMID、DOI、期刊等信息)
### 数据库验证
- ✅ 表创建成功
- ✅ 索引创建成功
- ✅ 外键约束正常
- ✅ 数据插入正常
- ✅ 关联查询正常
---
## 📦 技术栈
### 后端框架
- ✅ Fastify (Web框架)
- ✅ Prisma (ORM)
- ✅ TypeScript (类型系统)
### 依赖包 (新增)
-`xlsx` - Excel文件解析
-`ajv` - JSON Schema验证
### 平台服务集成
- ✅ Logger (结构化日志)
- ✅ Database Connection Pool
- ✅ LLMFactory (双模型支持)
- ✅ StorageFactory (OSS预留)
---
## 📊 代码统计
| 类别 | 文件数 | 代码行数 |
|------|--------|----------|
| 控制器 | 2 | 483 |
| 服务 | 1 | 189 |
| 路由 | 1 | 47 |
| 类型定义 | 1 | 121 |
| Schema | 1 | 108 |
| 脚本 | 3 | 350 |
| **总计** | **9** | **~1300** |
---
## 🎨 设计亮点
### 1. Schema隔离架构
```
platform_schema.users → asl_schema.screening_projects
asl_schema.literatures
asl_schema.screening_results
```
### 2. 双模型验证策略
```
Literature → DeepSeek + Qwen (并行)
冲突检测
无冲突 → 自动决策
有冲突 → 人工审核
```
### 3. 云原生设计
```
- 无状态API
- 平台服务集成
- OSS存储预留
- 异步任务准备
```
---
## 🐛 解决的问题
### 1. Prisma导入错误
**问题**: `getPrisma is not exported`
**解决**: 修改为 `import { prisma } from '...'`
### 2. 依赖包缺失
**问题**: `Cannot find package 'xlsx'`
**解决**: 安装 `npm install xlsx ajv`
### 3. 认证问题
**问题**: API需要userId但无JWT中间件
**解决**: 添加测试模式默认使用测试用户ID
### 4. 数据库表重复
**问题**: `prisma db push`检测到public schema重复表
**解决**: 创建手动SQL脚本只创建ASL表
---
## 📝 文档产出
1.`backend/ASL-API-测试报告.md`
2.`docs/03-业务模块/ASL-AI智能文献/05-开发记录/2025-11-18-Week1完成报告.md`
3.`scripts/test-asl-api.ts` (API测试脚本)
4.`scripts/create-asl-tables.ts` (数据库创建脚本)
5.`scripts/create-test-user-for-asl.ts` (测试用户脚本)
---
## 🚀 下一步计划 (Week 2)
### Day 1-2: 筛选任务控制器
- [ ] 创建 `screeningController.ts`
- [ ] 实现 `startScreening` (启动筛选任务)
- [ ] 实现 `getProgress` (获取进度)
- [ ] 实现 `getResults` (获取结果)
- [ ] 集成异步任务队列 (JobFactory)
### Day 3-4: LLM筛选功能
- [ ] 测试双模型筛选服务
- [ ] 优化Prompt生成
- [ ] 实现批量筛选
- [ ] 添加进度回调
### Day 5: 冲突审核
- [ ] 实现 `reviewConflicts` API
- [ ] 批量审核功能
- [ ] 审核历史记录
---
## ✅ 验收标准
### Week 1 目标 (全部完成)
- ✅ Prisma Schema设计完成
- ✅ 4张数据库表创建
- ✅ 后端目录结构创建
- ✅ 10个API端点实现
- ✅ API测试全部通过
- ✅ 平台服务集成
### 质量标准
- ✅ 代码符合TypeScript规范
- ✅ 使用平台基础设施服务
- ✅ Schema隔离架构
- ✅ 云原生设计原则
- ✅ 错误处理完善
- ✅ 日志记录完整
---
## 🎉 总结
ASL模块Week 1开发任务**全部完成**提前4天完成原定5天的开发计划。
**核心成果**:
- ✅ 完整的数据库设计和表结构
- ✅ 10个RESTful API端点
- ✅ LLM筛选服务框架
- ✅ 100%测试通过率
- ✅ 完善的代码文档
**技术亮点**:
- Schema隔离架构
- 双模型验证策略
- 云原生设计
- 模块化结构
为后续LLM筛选功能和前端开发奠定了坚实的基础🚀