feat(admin): Add user management and upgrade to module permission system

Features - User Management (Phase 4.1):
- Database: Add user_modules table for fine-grained module permissions
- Database: Add 4 user permissions (view/create/edit/delete) to role_permissions
- Backend: UserService (780 lines) - CRUD with tenant isolation
- Backend: UserController + UserRoutes (648 lines) - 13 API endpoints
- Backend: Batch import users from Excel
- Frontend: UserListPage (412 lines) - list/filter/search/pagination
- Frontend: UserFormPage (341 lines) - create/edit with module config
- Frontend: UserDetailPage (393 lines) - details/tenant/module management
- Frontend: 3 modal components (592 lines) - import/assign/configure
- API: GET/POST/PUT/DELETE /api/admin/users/* endpoints

Architecture Upgrade - Module Permission System:
- Backend: Add getUserModules() method in auth.service
- Backend: Login API returns modules array in user object
- Frontend: AuthContext adds hasModule() method
- Frontend: Navigation filters modules based on user.modules
- Frontend: RouteGuard checks requiredModule instead of requiredVersion
- Frontend: Remove deprecated version-based permission system
- UX: Only show accessible modules in navigation (clean UI)
- UX: Smart redirect after login (avoid 403 for regular users)

Fixes:
- Fix UTF-8 encoding corruption in ~100 docs files
- Fix pageSize type conversion in userService (String to Number)
- Fix authUser undefined error in TopNavigation
- Fix login redirect logic with role-based access check
- Update Git commit guidelines v1.2 with UTF-8 safety rules

Database Changes:
- CREATE TABLE user_modules (user_id, tenant_id, module_code, is_enabled)
- ADD UNIQUE CONSTRAINT (user_id, tenant_id, module_code)
- INSERT 4 permissions + role assignments
- UPDATE PUBLIC tenant with 8 module subscriptions

Technical:
- Backend: 5 new files (~2400 lines)
- Frontend: 10 new files (~2500 lines)
- Docs: 1 development record + 2 status updates + 1 guideline update
- Total: ~4900 lines of code

Status: User management 100% complete, module permission system operational
This commit is contained in:
2026-01-16 13:42:10 +08:00
parent 98d862dbd4
commit 66255368b7
560 changed files with 70424 additions and 52353 deletions

View File

@@ -1,7 +1,7 @@
# ASL<EFBFBD><EFBFBD><EFBFBD>?- <20>蚊I鈭斗𦻖<E69697><F0A6BB96>
# ASL模块开发 - 新AI交接文档
**日期**: 2025-11-18
**敶枏<EFBFBD><EFBFBD>嗆挾**: Week 2 - <EFBFBD>滨垢UI撘<EFBFBD><EFBFBD>?
**当前阶段**: Week 2 - 前端UI开发
**阅读时间**: 5分钟
---
@@ -12,66 +12,66 @@
**AIclinicalresearch** - 医学临床研究AI平台
<EFBFBD>銝芾<EFBFBD><EFBFBD>硋龫摮衣<EFBFBD>蝛嗅<EFBFBD><EFBFBD>笔𦶢<EFBFBD><EFBFBD><EFBFBD><EFBFBD>I颲<EFBFBD>𨭌撟喳蝱嚗<EFBFBD><EFBFBD><EFBFBD>?憭找<E686AD><E689BE>⊥芋<E28AA5>𨰜<EFBFBD>?*敶枏<E695B6><EFBFBD>銁撘<E98A81><E69298>飊SL璅<E79285>**嚗㇁I<E38781><EFBFBD><E7AE84><EFBFBD>讃蝑偦<E89D91><EFBFBD><E39A81>?
一个覆盖医学研究全生命周期的AI辅助平台包括7大业务模块。**当前正在开发ASL模块**AI智能文献筛选
---
### 系统架构(三层)
```
<EFBFBD>𢞖<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
<EFBFBD>? 銝𡁜𦛚璅<E79285>撅?(Business Layer) <EFBFBD>?
<EFBFBD>? - ASL (AI<EFBFBD><EFBFBD><EFBFBD><EFBFBD>讃) <20>?敶枏<E695B6><EFBFBD><E69298>睲葉 <EFBFBD>?
<EFBFBD>? - AIA, PKB, DC, SSA, ST, RVW <EFBFBD>?
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
<EFBFBD>?靘肽<E99D98>
<EFBFBD>𢞖<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
<EFBFBD>? <20><EFBFBD>撅?(Capability Layer) <EFBFBD>?
<EFBFBD>? - LLM Gateway (5銝芣芋<EFBFBD>见歇<EFBFBD><EFBFBD><EFBFBD>) <20>? <EFBFBD>?
<EFBFBD>? - Document Processing Engine <EFBFBD>?
<EFBFBD>? - RAG Engine, ETL, Medical NLP <EFBFBD>?
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
<EFBFBD>?靘肽<E99D98>
<EFBFBD>𢞖<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
<EFBFBD>? 撟喳蝱<E596B3><EFBFBD>霈暹鴌撅?(Platform Layer) <EFBFBD>?
<EFBFBD>? 8銝芣瓲敹<E793B2><EFBFBD>?- 撌脣<E6928C><E884A3>?<3F>? <EFBFBD>?
<EFBFBD>? Storage, Logging, Caching, Jobs, etc. <EFBFBD>?
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
┌─────────────────────────────────────────┐
│ 业务模块层 (Business Layer)
- ASL (AI智能文献) ← 当前开发中
- AIA, PKB, DC, SSA, ST, RVW
└─────────────────────────────────────────┘
↓ 依赖
┌─────────────────────────────────────────┐
│ 能力层 (Capability Layer)
- LLM Gateway (5个模型已集成) ✅
- Document Processing Engine
- RAG Engine, ETL, Medical NLP
└─────────────────────────────────────────┘
↓ 依赖
┌─────────────────────────────────────────┐
│ 平台基础设施层 (Platform Layer)
│ 8个核心模块 - 已完成 ✅
Storage, Logging, Caching, Jobs, etc.
└─────────────────────────────────────────┘
```
**<EFBFBD>喲睸<EFBFBD><EFBFBD>?*:
**关键特性**:
- **Schema隔离**: 10个独立PostgreSQL Schema
- **<EFBFBD><EFBFBD>?*: 瘥譍葵銝𡁜𦛚璅<E79285><E288AA><EFBFBD><EFBFBD><E69298><EFBFBD><E3BBAB><EFBFBD>蝵脯<E89DB5><E884AF><EFBFBD><EFBFBD>?
- **鈭穃<EFBFBD><EFBFBD>?*: 隡睃<E99AA1>Alibaba Cloud SAE<EFBFBD>函蔡
- **模块化**: 每个业务模块独立开发、部署、销售
- **云原生**: 优化Alibaba Cloud SAE部署
---
## <EFBFBD><EFBFBD> 敶枏<E695B6><E69E8F><EFBFBD><E59786><EFBFBD>2025-11-18嚗?
## 📍 当前状态(2025-11-18
### <EFBFBD>?Week 1 撌脣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𣂼<EFBFBD>4憭抬<EFBFBD>
### Week 1 已完成提前4天
**<EFBFBD>𡒊垢撘<EFBFBD><EFBFBD>?* (100%):
- <EFBFBD>?<3F>唳旿摨廍chema霈曇恣嚗?銝芾”嚗蘏sl_schema嚗?
- <EFBFBD>?<3F>𡒊垢API獢<49>沲嚗?0銝芣𦻖<E88AA3><F0A6BB96><EFBFBD>
- <EFBFBD>?LLM<EFBFBD>峕芋<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
- <EFBFBD>?銝厩<E98A9D>蝑偦<E89D91><EFBFBD><E58EB0><EFBFBD>摰賣𠹭/<2F><><EFBFBD>/銝交聢嚗?
- <EFBFBD>?JSON<EFBFBD><EFBFBD><EFBFBD>其耨憭㵪<EFBFBD><EFBFBD><EFBFBD>銝剜<EFBFBD>撘訫噡嚗?
- <EFBFBD>?API瘚贝<EFBFBD>摰峕<EFBFBD>嚗?/7<><EFBFBD>嚗?
**后端开发** (100%):
- ✅ 数据库Schema设计4个表asl_schema
- ✅ 后端API框架10个接口
- LLM双模型筛选服务
- ✅ 三种筛选风格(宽松/标准/严格)
- JSON解析器修复(支持中文引号)
- API测试完成7/7通过
**核心成果**:
1. **<EFBFBD>峕芋<EFBFBD><EFBFBD><EFBFBD>?*: DeepSeek-V3 + Qwen-Max撟嗉<EFBFBD>
1. **双模型筛选**: DeepSeek-V3 + Qwen-Max并行
2. **三种Prompt**: 宽松/标准/严格模式
3. **<EFBFBD><EFBFBD>眏撅閧內**: 靽嘥<EFBFBD>銝支葵璅<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>游ế<EFBFBD><EFBFBD><EFBFBD>?
4. **<EFBFBD><EFBFBD><EFBFBD>瘚?*: <20><EFBFBD>瘚醶onclusion<6F><EFBFBD>嚗䔶<E59A97><EFBFBD>瘚閪ICO撌桀<E6928C>
3. **理由展示**: 保存两个模型的完整判断理由
4. **冲突检测**: 只检测conclusion冲突不检测PICO差异
---
### 漎?Week 2 <EFBFBD><EFBFBD>憪页<EFBFBD>敶枏<EFBFBD>隞餃𦛚嚗?
### Week 2 待开始(当前任务)
**<EFBFBD>滨垢UI撘<EFBFBD><EFBFBD>?* (0%):
- 漎?Day 1-2: 憿寧𤌍蝞∠<EFBFBD><EFBFBD>屸𢒰
- 漎?Day 3-4: <EFBFBD><EFBFBD>讃撖澆<EFBFBD><EFBFBD>屸𢒰
- 漎?Day 5: 蝑偦<EFBFBD><EFBFBD><EFBFBD>𨅯<EFBFBD>蝷?
**前端UI开发** (0%):
- Day 1-2: 项目管理界面
- Day 3-4: 文献导入界面
- Day 5: 筛选结果展示
---
@@ -79,24 +79,24 @@
### 前端
- **框架**: React 18 + TypeScript
- **UI摨?*: Ant Design 5
- **UI库**: Ant Design 5
- **路由**: React Router v6
- **<EFBFBD><EFBFBD>?*: React Query + Zustand
- **<EFBFBD><EFBFBD>**: Frontend-v2<EFBFBD><EFBFBD><EFBFBD>瘜典<EFBFBD>嚗?
- **状态**: React Query + Zustand
- **架构**: Frontend-v2(模块化注册)
### 后端
- **框架**: Fastify + TypeScript
- **ORM**: Prisma
- **<EFBFBD>唳旿摨?*: PostgreSQL (asl_schema)
- **数据库**: PostgreSQL (asl_schema)
- **LLM**: DeepSeek-V3, Qwen-Max, GPT-4o, Claude-4.5
### 撌脣<EFBFBD><EFBFBD><EFBFBD>撟喳蝱<EFBFBD>滚𦛚嚗<EFBFBD><EFBFBD>湔𦻖雿輻鍂嚗?
### 已完成的平台服务(可直接使用)
```typescript
import { logger } from '@/common/logging'; // 日志
import { storage } from '@/common/storage'; // 存储
import { cache } from '@/common/cache'; // 缓存
import { jobQueue } from '@/common/jobs'; // 异步任务
import { prisma } from '@/config/database'; // <EFBFBD>唳旿摨?
import { prisma } from '@/config/database'; // 数据库
```
---
@@ -107,10 +107,10 @@ import { prisma } from '@/config/database'; // 数据
```
frontend-v2/src/modules/asl/
├── pages/ # 页面组件
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> ProjectList/ # 憿寧𤌍<EFBFBD>𡑒”憿?<3F>?Week 2 Day 1
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> ProjectDetail/ # 憿寧𤌍霂行<EFBFBD>憿?<3F>?Week 2 Day 2
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> LiteratureImport/ # <EFBFBD><EFBFBD>讃撖澆<EFBFBD>憿?<3F>?Week 2 Day 3-4
<EFBFBD>? <20><EFBFBD><E5A999><EFBFBD> ScreeningResults/ # 蝑偦<EFBFBD><EFBFBD><EFBFBD>𣈯△ <20>?Week 2 Day 5
│ ├── ProjectList/ # 项目列表页 ← Week 2 Day 1
│ ├── ProjectDetail/ # 项目详情页 ← Week 2 Day 2
│ ├── LiteratureImport/ # 文献导入页 ← Week 2 Day 3-4
│ └── ScreeningResults/ # 筛选结果页 ← Week 2 Day 5
├── components/ # 通用组件
├── hooks/ # 自定义Hooks
├── services/ # API调用
@@ -121,13 +121,13 @@ frontend-v2/src/modules/asl/
### 后端(已完成)✅
```
backend/src/modules/asl/
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> controllers/ # <EFBFBD><EFBFBD><EFBFBD>?<3F>?
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> services/ # 銝𡁜𦛚<EFBFBD><EFBFBD> <20>?
<EFBFBD>? <20><EFBFBD><E5A999><EFBFBD> llmScreeningService.ts # <EFBFBD><EFBFBD>蝑偦<EFBFBD><EFBFBD><EFBFBD>?
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> routes/ # 頝舐眏 <20>?
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> schemas/ # JSON Schema + Prompt<EFBFBD><EFBFBD><EFBFBD> <20>?
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> types/ # 蝐餃<EFBFBD>摰帋<EFBFBD> <20>?
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> prompts/ # 銝厩<EFBFBD>Prompt璅⊥踎 <20>?
├── controllers/ # 控制器 ✅
├── services/ # 业务逻辑 ✅
│ └── llmScreeningService.ts # 核心筛选服务
├── routes/ # 路由 ✅
├── schemas/ # JSON Schema + Prompt生成 ✅
├── types/ # 类型定义 ✅
└── prompts/ # 三种Prompt模板 ✅
├── v1.1.0-lenient.txt # 宽松模式
├── v1.1.0-standard.txt # 标准模式
└── v1.1.0-strict.txt # 严格模式
@@ -137,78 +137,78 @@ backend/src/modules/asl/
## 🌟 核心功能说明
### 1. <EFBFBD>峕芋<EFBFBD><EFBFBD><EFBFBD>㗇㦤<EFBFBD>?
### 1. 双模型筛选机制
**工作流程**:
```
1. <EFBFBD><EFBFBD>銝𠹺<EFBFBD><EFBFBD><EFBFBD>讃嚗𠄌xcel嚗?
2. 蝟餌<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>讃嚗<EFBFBD><EFBFBD>憸?<3F><EFBFBD>嚗?
3. 撟嗉<EFBFBD><EFBFBD>鍂銝支葵LLM璅<EFBFBD>嚗?
1. 用户上传文献Excel
2. 系统解析文献(标题+摘要)
3. 并行调用两个LLM模型
- DeepSeek-V3
- Qwen-Max
4. 銝支葵璅<EFBFBD><EFBFBD><EFBFBD><EFBFBD>斗鱏嚗ǎnclude/exclude嚗?
4. 两个模型独立判断include/exclude
5. 系统检测冲突conclusion是否一致
6. 餈𥪜<EFBFBD>蝏𤘪<EFBFBD>嚗?
- <EFBFBD><EFBFBD>?<3F>?finalDecision = <EFBFBD>蝏栞捏
- <EFBFBD><EFBFBD> <20>?finalDecision = pending<EFBFBD><EFBFBD>鈭箏極憭齿瓲嚗?
6. 返回结果:
- 一致 → finalDecision = 模型结论
- 冲突 → finalDecision = pending(需人工复核)
```
**<EFBFBD><EFBFBD>**: 靽嘥<EFBFBD>銝支葵璅<EFBFBD><EFBFBD>?*摰峕㟲<E5B395><E39FB2>眏**靘𤤿鍂<F0A4A4BF>瑟䰻<E7919F>?
**重要**: 保存两个模型的**完整理由**供用户查看
---
### 2. 銝厩<EFBFBD>蝑偦<EFBFBD><EFBFBD><EFBFBD>?
### 2. 三种筛选风格
| 风格 | 特点 | 使用场景 |
|------|------|----------|
| **摰賣𠹭璅<EFBFBD>** | <EFBFBD>虾憭𡁶熙<EFBFBD><EFBFBD>銝漤<EFBFBD>餈?| <20><EFBFBD><E89098>嗆挾 |
| **<EFBFBD><EFBFBD><EFBFBD><EFBFBD>** | 撟唾﹛<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?| 撣貉<E692A3>雿輻鍂 |
| **銝交聢璅<EFBFBD>** | <EFBFBD><EFBFBD><EFBFBD>嚗䔶<EFBFBD><EFBFBD><EFBFBD>?| 蝎曄<E89D8E><E69B84>嗆挾 |
| **宽松模式** | 宁可多纳入,不错过 | 初筛阶段 |
| **标准模式** | 平衡准确率和召回率 | 常规使用 |
| **严格模式** | 宁可错杀,保证质量 | 精筛阶段 |
**摰䂿緵**: 撌脣銁<EFBFBD>𡒊垢摰䂿緵嚗<EFBFBD><EFBFBD>蝡舫<EFBFBD>瘛餃<EFBFBD><EFBFBD>㗇𥋘<EFBFBD>?
**实现**: 已在后端实现,前端需添加选择器
---
### 3. <EFBFBD>唳旿璅<EFBFBD>嚗Òsl_schema嚗?
### 3. 数据模型asl_schema
**4个核心表**:
```sql
screening_projects -- 筛选项目存PICOS、纳排标准
literatures -- <EFBFBD><EFBFBD><EFBFBD>∠𤌍嚗<EFBFBD><EFBFBD>憸塩<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DF<EFBFBD>暹𦻖嚗?
screening_results -- 蝑偦<EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝支葵璅<EFBFBD><EFBFBD><EFBFBD>ế<EFBFBD>?<3F><>眏嚗?
screening_tasks -- 蝑偦<EFBFBD>劐遙<EFBFBD><EFBFBD><EFBFBD><EFBFBD>隞餃𦛚餈𥕦漲頝蠘葵嚗?
literatures -- 文献条目标题、摘要、PDF链接
screening_results -- 筛选结果(两个模型的判断+理由)
screening_tasks -- 筛选任务(批量任务进度跟踪)
```
---
## <EFBFBD> UI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
## 🎨 UI原型参考
**位置**: `docs/03-业务模块/ASL-AI智能文献/03-UI设计/AI智能文献-标题摘要初筛原型.html`
**核心页面**:
1. **憿寧𤌍<EFBFBD>𡑒”** - <EFBFBD>曄內<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>厰★<EFBFBD>?
2. **憿寧𤌍霂行<EFBFBD>** - PICOS<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銵?
3. **<EFBFBD><EFBFBD>讃撖澆<EFBFBD>** - Excel銝𠹺<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
4. **蝑偦<EFBFBD><EFBFBD><EFBFBD>?* - <20>曄內蝑偦<E89D91><EFBFBD><E58EA9><EFBFBD><E6A0B6>舅銝芣芋<E88AA3><EFBFBD><E8AEA0><EFBFBD><EFBFBD><E79C8F><EFBFBD><EFBFBD><E89D92>霈?
1. **项目列表** - 显示所有筛选项目
2. **项目详情** - PICOS标准、纳排标准、文献列表
3. **文献导入** - Excel上传、预览、导入
4. **筛选结果** - 显示筛选结果、两个模型的理由、冲突标记
---
## <EFBFBD><EFBFBD> Week 2 <EFBFBD><EFBFBD>睲遙<EFBFBD><EFBFBD>霂衣<EFBFBD><EFBFBD><EFBFBD>嚗?
## 📋 Week 2 开发任务(详细清单)
### Day 1-2: 项目管理界面
**任务**:
- [ ] <EFBFBD>𥕦遣憿寧𤌍<EFBFBD>𡑒”憿蛛<EFBFBD>`/asl/projects`嚗?
- [ ] 创建项目列表页(`/asl/projects`
- [ ] 创建项目按钮 + 创建项目表单
- 项目名称
- PICOS<EFBFBD><EFBFBD><EFBFBD>嚗?銝芸<E98A9D>畾蛛<E795BE>
- 蝥喳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?
- <EFBFBD>㘾膄<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?
- PICOS标准5个字段
- 纳入标准(文本域)
- 排除标准(文本域)
- **筛选风格选择**Radio: 宽松/标准/严格)⭐
- [ ] 憿寧𤌍<EFBFBD>𡑒”撅閧內嚗㇍able嚗?
- [ ] 憿寧𤌍霂行<EFBFBD>憿蛛<EFBFBD>`/asl/projects/:id`嚗?
- [ ] 项目列表展示Table
- [ ] 项目详情页(`/asl/projects/:id`
**API<EFBFBD>亙藁**嚗<>歇摰峕<E691B0>嚗?
**API接口**(已完成):
- `POST /api/v1/asl/projects` - 创建项目
- `GET /api/v1/asl/projects` - 获取项目列表
- `GET /api/v1/asl/projects/:id` - 获取项目详情
@@ -218,41 +218,41 @@ screening_tasks -- 筛选任务(批量任务进度跟踪
### Day 3-4: 文献导入界面
**任务**:
- [ ] <EFBFBD><EFBFBD>讃撖澆<EFBFBD>憿蛛<EFBFBD>`/asl/projects/:id/import`嚗?
- [ ] Excel<EFBFBD><EFBFBD>辣銝𠹺<EFBFBD>嚗㇄ragger嚗?
- [ ] <EFBFBD><EFBFBD>讃憸<EFBFBD><EFBFBD>嚗㇍able嚗?
- [ ] 文献导入页(`/asl/projects/:id/import`
- [ ] Excel文件上传Dragger
- [ ] 文献预览Table
- [ ] 格式验证提示
- [ ] 确认导入按钮
- [ ] 导入进度提示
**API<EFBFBD>亙藁**嚗<>歇摰峕<E691B0>嚗?
**API接口**(已完成):
- `POST /api/v1/asl/projects/:id/literatures/import-json` - 导入文献
- `GET /api/v1/asl/projects/:id/literatures` - 获取文献列表
**Excel格式**:
```
必须字段: title, abstract
<EFBFBD><EFBFBD><EFBFBD>畾? pmid, authors, journal, publicationYear, doi
可选字段: pmid, authors, journal, publicationYear, doi
```
---
### Day 5: 蝑偦<EFBFBD><EFBFBD><EFBFBD>𨅯<EFBFBD>蝷?潃?**<2A><EFBFBD>**
### Day 5: 筛选结果展示 ⭐ **重点**
**任务**:
- [ ] 蝑偦<EFBFBD><EFBFBD><EFBFBD>𨅯<EFBFBD>銵券△嚗Ǒ/asl/projects/:id/results`嚗?
- [ ] 筛选结果列表页(`/asl/projects/:id/results`
- [ ] 结果筛选(全部/纳入/排除/待复核)
- [ ] 蝏𤘪<EFBFBD>霂行<EFBFBD>撘寧<EFBFBD> 潃?**<2A>喲睸**
- [ ] 结果详情弹窗 ⭐ **关键**
- 文献信息(标题、摘要)
- <EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝑吔<EFBFBD>include/exclude/pending嚗?
- **銝支葵璅<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?*嚗?
- DeepSeek-V3嚗𡁶<EFBFBD>霈?+ <20><>眏 + 蝵桐縑摨?
- Qwen-Max嚗𡁶<EFBFBD>霈?+ <20><>眏 + 蝵桐縑摨?
- 最终决策(include/exclude/pending
- **两个模型的完整结果**
- DeepSeek-V3:结论 + 理由 + 置信度
- Qwen-Max:结论 + 理由 + 置信度
- 冲突提示(如果两个模型不一致)
- 人工复核按钮
**API<EFBFBD>亙藁**嚗<>歇摰峕<E691B0>嚗?
- `GET /api/v1/asl/projects/:id/results` - <EFBFBD><EFBFBD>蝑偦<EFBFBD><EFBFBD><EFBFBD>?
**API接口**(已完成):
- `GET /api/v1/asl/projects/:id/results` - 获取筛选结果
**响应格式**:
```typescript
@@ -262,37 +262,37 @@ screening_tasks -- 筛选任务(批量任务进度跟踪
abstract: string;
finalDecision: 'include' | 'exclude' | 'pending';
// 潃?銝支葵璅<E79285><E288AA><EFBFBD>祕蝏<E7A595><E89D8F><EFBFBD>?
// ⭐ 两个模型的详细结果
model1Result: {
modelName: 'DeepSeek-V3';
conclusion: 'exclude';
confidence: 0.92;
reason: '摰峕㟲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?..'; // <EFBFBD>?<3F>滨垢<E6BBA8><E59EA2><EFBFBD>曄內
reason: '完整的排除理由...'; // ← 前端需显示
judgment: { P: 'match', I: 'match', C: 'mismatch', S: 'match' };
},
model2Result: {
modelName: 'Qwen-Max';
conclusion: 'include';
confidence: 0.85;
reason: '摰峕㟲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?..'; // <EFBFBD>?<3F>滨垢<E6BBA8><E59EA2><EFBFBD>曄內
reason: '完整的纳入理由...'; // ← 前端需显示
judgment: { ... };
},
hasConflict: true; // 銝支葵璅<EFBFBD>銝滢<EFBFBD><EFBFBD>?
hasConflict: true; // 两个模型不一致
conflictFields: ['conclusion'];
}
```
---
## <EFBFBD>𤣳 Week 2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
## 🔥 Week 2 开发重点
### 1. 蝑偦<EFBFBD><EFBFBD><EFBFBD><EFBFBD>㗇𥋘<EFBFBD>?潃?
### 1. 筛选风格选择器 ⭐
**位置**: 创建项目表单
```jsx
<Form.Item label="蝑偦<EFBFBD><EFBFBD><EFBFBD>? name="screeningStyle">
<Form.Item label="筛选风格" name="screeningStyle">
<Radio.Group defaultValue="standard">
<Radio.Button value="lenient">
🔓 宽松模式
@@ -312,15 +312,15 @@ screening_tasks -- 筛选任务(批量任务进度跟踪
---
### 2. 銝支葵璅<EFBFBD><EFBFBD><EFBFBD>眏撅閧內 潃鐥<E6BD83>潃?**<2A><><EFBFBD><EFBFBD>**
### 2. 两个模型理由展示 ⭐⭐⭐ **最重要**
**雿滨蔭**: 蝑偦<EFBFBD><EFBFBD><EFBFBD>𡏭祕<EFBFBD><EFBFBD>撕蝒?
**位置**: 筛选结果详情弹窗
```jsx
<Modal title="蝑偦<EFBFBD>㕑祕<EFBFBD>? width={1000}>
{/* <20><><EFBFBD><E89D8F>蝑?*/}
<Modal title="筛选详情" width={1000}>
{/* 最终决策 */}
<Alert type={finalDecision === 'pending' ? 'warning' : 'success'}>
<strong><3E><><EFBFBD><E89D8F>蝑?</strong> {finalDecision}
<strong>最终决策:</strong> {finalDecision}
</Alert>
{/* 冲突提示 */}
@@ -332,7 +332,7 @@ screening_tasks -- 筛选任务(批量任务进度跟踪
<Divider />
{/* 潃?銝支葵璅<E79285><E288AA><EFBFBD>祕蝏<E7A595><E89D8F><EFBFBD><EFBFBD>撟嗆<E6929F><E59786>曄內嚗?/}
{/* ⭐ 两个模型的详细结果(并排显示)*/}
<Row gutter={16}>
<Col span={12}>
<Card title="🤖 DeepSeek-V3" size="small">
@@ -342,7 +342,7 @@ screening_tasks -- 筛选任务(批量任务进度跟踪
{model1.conclusion}
</Tag>
</Descriptions.Item>
<Descriptions.Item label="蝵桐縑摨?>
<Descriptions.Item label="置信度">
{(model1.confidence * 100).toFixed(0)}%
</Descriptions.Item>
</Descriptions>
@@ -352,7 +352,7 @@ screening_tasks -- 筛选任务(批量任务进度跟踪
<div>
<strong>判断理由:</strong>
<p style={{marginTop: 8, whiteSpace: 'pre-wrap'}}>
{model1.reason} {/* 潃?<3F>曄內摰峕㟲<E5B395><E39FB2> */}
{model1.reason} {/* ⭐ 显示完整理由 */}
</p>
</div>
@@ -373,7 +373,7 @@ screening_tasks -- 筛选任务(批量任务进度跟踪
<Col span={12}>
<Card title="🤖 Qwen-Max" size="small">
{/* <EFBFBD><EFBFBD>嚗峕遬蝷榦odel2<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?*/}
{/* 同上显示model2的结果 */}
</Card>
</Col>
</Row>
@@ -381,45 +381,45 @@ screening_tasks -- 筛选任务(批量任务进度跟踪
{/* 人工复核按钮 */}
<div style={{marginTop: 16, textAlign: 'center'}}>
<Button type="primary" onClick={handleManualReview}>
鈭箏極憭齿瓲甇斗<EFBFBD><EFBFBD>?
人工复核此文献
</Button>
</div>
</Modal>
```
**为什么这么重要?**
- <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蚊I<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝔?
- 敶㮖舅銝芣芋<EFBFBD><EFBFBD><EFBFBD>𧒄嚗𣬚鍂<EFBFBD><EFBFBD><EFBFBD>笆瘥𠉛<EFBFBD><EFBFBD>望䔉<EFBFBD>𡁜<EFBFBD>蝑?
- 用户需要看到AI的思考过程
- 当两个模型冲突时,用户需要对比理由来做决策
- 即使人类专家也可能犯错,理由帮助验证
---
## 📚 重要文档索引
### <EFBFBD><EFBFBD><EFBFBD>﹝嚗<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?
1. **隞餃𦛚<EFBFBD><EFBFBD>**: `docs/03-銝𡁜𦛚璅<EFBFBD>/ASL-AI<EFBFBD><EFBFBD><EFBFBD><EFBFBD>讃/04-撘<><E69298>𤏸恣<F0A48FB8>?03-隞餃𦛚<E9A483><F0A69B9A>.md`
### 必读文档(开发前)
1. **任务分解**: `docs/03-业务模块/ASL-AI智能文献/04-开发计划/03-任务分解.md`
- Week 2详细任务清单
2. **UI原型**: `docs/03-业务模块/ASL-AI智能文献/03-UI设计/AI智能文献-标题摘要初筛原型.html`
- <EFBFBD>屸𢒰<EFBFBD><EFBFBD><EFBFBD>?
- 界面参考
3. **API霈曇恣**: `docs/03-銝𡁜𦛚璅<EFBFBD>/ASL-AI<EFBFBD><EFBFBD><EFBFBD><EFBFBD>讃/02-<2D><><EFBFBD>航挽霈?02-API霈曇恣閫<E681A3><E996AB>.md`
3. **API设计**: `docs/03-业务模块/ASL-AI智能文献/02-技术设计/02-API设计规范.md`
- API接口文档
### <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𧒄<EFBFBD>仿<EFBFBD>嚗?
1. **蝟餌<EFBFBD><EFBFBD><EFBFBD>**: `docs/00-蝟餌<EFBFBD><EFBFBD><EFBFBD>霈曇恣/00-蝟餌<E89D9F>敶枏<E695B6><E69E8F><EFBFBD><E59786><EFBFBD><EFBFBD><E69298><EFBFBD><E78390>?md`
2. **<EFBFBD>滨垢璅<EFBFBD><EFBFBD>?*: `docs/00-蝟餌<E89D9F><E9A48C><EFBFBD>霈曇恣/<2F><EFBFBD>蝡舀芋<E88880><EFBFBD><E5A092><EFBFBD>霈曇恣-V2.md`
3. **<EFBFBD>唳旿摨栞挽霈?*: `docs/03-銝𡁜𦛚璅<EFBFBD>/ASL-AI<EFBFBD><EFBFBD><EFBFBD><EFBFBD>讃/02-<2D><><EFBFBD>航挽霈?01-<2D>唳旿摨栞挽霈?md`
### 参考文档(需要时查阅)
1. **系统架构**: `docs/00-系统总体设计/00-系统当前状态与开发指南.md`
2. **前端模块化**: `docs/00-系统总体设计/前后端模块化架构设计-V2.md`
3. **数据库设计**: `docs/03-业务模块/ASL-AI智能文献/02-技术设计/01-数据库设计.md`
---
## <EFBFBD><EFBFBD> 敹恍<E695B9>笔鍳<E7AC94>?
## 🚀 快速启动
### 1. <EFBFBD>臬𢆡<EFBFBD>𡒊垢嚗<EFBFBD>歇摰峕<EFBFBD>嚗?
### 1. 启动后端(已完成)
```bash
cd backend
npm run dev
# <EFBFBD>𡒊垢餈鞱<EFBFBD><EFBFBD>?http://localhost:3001
# 后端运行在 http://localhost:3001
# API前缀: /api/v1/asl
```
@@ -427,12 +427,12 @@ npm run dev
```bash
cd frontend-v2
npm run dev
# <EFBFBD>滨垢餈鞱<EFBFBD><EFBFBD>?http://localhost:5173
# 前端运行在 http://localhost:5173
```
### 3. 测试API
```bash
# <EFBFBD>亙熒璉<EFBFBD><EFBFBD>?
# 健康检查
curl http://localhost:3001/api/v1/asl/health
# 获取项目列表
@@ -449,11 +449,11 @@ curl http://localhost:3001/api/v1/asl/projects
const userId = requestBody.userId || 'asl-test-user-001';
```
**<EFBFBD>煺漣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>閬?*: 摰䂿緵<E482BF><EFBFBD><E7AC94><EFBFBD>WT霈方<E99C88>
**生产环境需要**: 实现真实的JWT认证
---
### 2. 蝑偦<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
### 2. 筛选风格参数
创建项目时,记得传递筛选风格:
```typescript
const projectData = {
@@ -462,7 +462,7 @@ const projectData = {
inclusionCriteria: '...',
exclusionCriteria: '...',
screeningConfig: {
style: 'lenient', // <EFBFBD>?蝑偦<E89D91><EFBFBD><E58EB0>?
style: 'lenient', // ← 筛选风格
models: ['deepseek-chat', 'qwen-max']
}
};
@@ -470,60 +470,60 @@ const projectData = {
---
### 3. 銝支葵璅<EFBFBD><EFBFBD><EFBFBD><EFBFBD>舀瓲敹<EFBFBD><EFBFBD><EFBFBD>?
**<EFBFBD><EFBFBD><EFBFBD>蝡舀遬蝷?*嚗䔶<E59A97><E494B6><EFBFBD><E8B39C><EFBFBD>
### 3. 两个模型理由是核心功能
**必须在前端显示**,不能省略!
餈蹱糓<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>撣桀𨭌隞碶賑<EFBFBD><EFBFBD>圾AI<EFBFBD><EFBFBD>ế<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
这是用户最重要的需求帮助他们理解AI的判断逻辑。
---
## 🎯 Week 2 成功标准
### <EFBFBD><EFBFBD>摰峕㟲<EFBFBD>?
- [ ] <EFBFBD><EFBFBD><EFBFBD>臭誑<EFBFBD>𥕦遣憿寧𤌍嚗<EFBFBD><EFBFBD><EFBFBD>促ICOS<EFBFBD>𣬚<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㗇𥋘嚗?
### 功能完整性
- [ ] 用户可以创建项目包含PICOS和筛选风格选择
- [ ] 用户可以上传Excel文件导入文献
- [ ] <EFBFBD><EFBFBD><EFBFBD>臭誑<EFBFBD><EFBFBD>蝑偦<EFBFBD><EFBFBD><EFBFBD>𨅯<EFBFBD>銵?
- [ ] <EFBFBD><EFBFBD><EFBFBD>臭誑<EFBFBD><EFBFBD>**銝支葵璅<E79285><E288AA><EFBFBD>祕蝏<E7A595><E89D8F><EFBFBD>?* 潃?
- [ ] <EFBFBD><EFBFBD><EFBFBD>臭誑霂<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
- [ ] 用户可以查看筛选结果列表
- [ ] 用户可以查看**两个模型的详细理由** ⭐
- [ ] 用户可以识别冲突的文献
### 界面质量
- [ ] UI符合Ant Design规范
- [ ] <EFBFBD><EFBFBD>撘誩<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝滚<EFBFBD>撅誩<EFBFBD>嚗?
- [ ] <EFBFBD>㰘蝸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝷?
- [ ] 响应式布局(适配不同屏幕)
- [ ] 加载状态提示
- [ ] 错误处理友好
### 代码质量
- [ ] TypeScript类型完整
- [ ] 组件职责清晰
- [ ] API<EFBFBD>鍂撠<EFBFBD><EFBFBD>憟?
- [ ] API调用封装好
- [ ] 代码符合ESLint规范
---
## <EFBFBD>働 撘<><E69298>穃遣霈?
## 💡 开发建议
### 1. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>沲嚗<EFBFBD><EFBFBD>憛怠<EFBFBD>摰?
### 1. 先做框架,再填内容
```
Day 1: 搭建页面框架 + 路由
Day 2: 摰䂿緵銵典<EFBFBD><EFBFBD><EFBFBD><EFBFBD>銵?
Day 2: 实现表单和列表
Day 3-4: 文献导入功能
Day 5: 蝑偦<EFBFBD><EFBFBD><EFBFBD>𨅯<EFBFBD>蝷綽<EFBFBD><EFBFBD><EFBFBD>嚗?
Day 5: 筛选结果展示(重点)
```
### 2. 组件复用
```
- ProjectForm.tsx<EFBFBD><EFBFBD>撱?蝻𤥁<E89DBB>憿寧𤌍銵典<E98AB5>嚗?
- ProjectForm.tsx(创建/编辑项目表单)
- LiteratureTable.tsx文献列表表格
- ScreeningResultCard.tsx筛选结果卡片
- ModelComparisonPanel.tsx<EFBFBD><EFBFBD>见笆瘥娪𢒰<EFBFBD><EFBFBD>潃?
- ModelComparisonPanel.tsx(模型对比面板)⭐
```
### 3. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
### 3. 状态管理
```typescript
// 雿輻鍂React Query蝞∠<EFBFBD><EFBFBD>滚𦛚蝡舐𠶖<EFBFBD>?
// 使用React Query管理服务端状态
const { data: projects } = useQuery(['projects'], fetchProjects);
// 雿輻鍂Zustand蝞∠<EFBFBD><EFBFBD>蝡舐𠶖<EFBFBD>?
// 使用Zustand管理客户端状态
const useAslStore = create((set) => ({
currentProject: null,
setCurrentProject: (project) => set({ currentProject: project }),
@@ -535,7 +535,7 @@ const useAslStore = create((set) => ({
## 🔄 后续计划
### Week 3-4: MVP完成
- <EFBFBD><EFBFBD>蝑偦<EFBFBD>?
- 批量筛选
- 结果导出
- 测试上线
@@ -544,7 +544,7 @@ const useAslStore = create((set) => ({
- 用户自定义PICOS
- AI分析边界情况
**霂西<EFBFBD>**: `docs/03-銝𡁜𦛚璅<EFBFBD>/ASL-AI<EFBFBD><EFBFBD><EFBFBD><EFBFBD>讃/02-<2D><><EFBFBD>航挽霈?07-<2D><EFBFBD>Prompt<70><74><EFBFBD><E79285><EFBFBD><E69298>𤏸恣<F0A48FB8>?md`
**详见**: `docs/03-业务模块/ASL-AI智能文献/02-技术设计/07-智能Prompt生成模块开发计划.md`
---
@@ -557,13 +557,13 @@ const useAslStore = create((set) => ({
---
## <EFBFBD>?鈭斗𦻖璉<F0A6BB96><E79289><EFBFBD><E4BAA4>?
## ✅ 交接检查清单
<EFBFBD>蚊I摨磰砲蝖株恕<EFBFBD><EFBFBD>圾嚗?
新AI应该确认理解
- [ ] 项目是什么医学文献AI筛选
- [ ] 当前状态Week 1完成Week 2待开始
- [ ] <EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗㇌eact + Ant Design + Fastify + Prisma嚗?
- [ ] Week 2隞餃𦛚嚗?銝芷△<E88AB7><EFBFBD>憿寧𤌍蝞∠<E89D9E><E288A0><EFBFBD><EFBFBD><EFBFBD>桀紡<E6A180><EFBFBD><E4B993><EFBFBD><EFBFBD>𨅯<EFBFBD>蝷綽<E89DB7>
- [ ] 技术栈React + Ant Design + Fastify + Prisma
- [ ] Week 2任务3个页面项目管理、文献导入、结果展示
- [ ] 核心功能(双模型筛选、三种风格、显示理由)
- [ ] 重点任务(显示两个模型的完整理由)⭐
@@ -573,8 +573,8 @@ const useAslStore = create((set) => ({
**文档版本**: v1.0
**创建日期**: 2025-11-18
**蝏湔擪鈭?*: Previous AI Assistant
**<EFBFBD><EFBFBD>?*: <20>蚊I敹恍<E695B9><EFBFBD><E785BA>𧢲<EFBFBD><F0A7A2B2>?
**维护人**: Previous AI Assistant
**用途**: 新AI快速上手指南