Summary: - PostgreSQL database migration to RDS completed (90MB SQL, 11 schemas) - Frontend Nginx Docker image built and pushed to ACR (v1.0, ~50MB) - Python microservice Docker image built and pushed to ACR (v1.0, 1.12GB) - Created 3 deployment documentation files Docker Configuration Files: - frontend-v2/Dockerfile: Multi-stage build with nginx:alpine - frontend-v2/.dockerignore: Optimize build context - frontend-v2/nginx.conf: SPA routing and API proxy - frontend-v2/docker-entrypoint.sh: Dynamic env injection - extraction_service/Dockerfile: Multi-stage build with Aliyun Debian mirror - extraction_service/.dockerignore: Optimize build context - extraction_service/requirements-prod.txt: Production dependencies (removed Nougat) Deployment Documentation: - docs/05-部署文档/00-部署进度总览.md: One-stop deployment status overview - docs/05-部署文档/07-前端Nginx-SAE部署操作手册.md: Frontend deployment guide - docs/05-部署文档/08-PostgreSQL数据库部署操作手册.md: Database deployment guide - docs/00-系统总体设计/00-系统当前状态与开发指南.md: Updated with deployment status Database Migration: - RDS instance: pgm-2zex1m2y3r23hdn5 (2C4G, PostgreSQL 15.0) - Database: ai_clinical_research - Schemas: 11 business schemas migrated successfully - Data: 3 users, 2 projects, 1204 literatures verified - Backup: rds_init_20251224_154529.sql (90MB) Docker Images: - Frontend: crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/ai-clinical_frontend-nginx:v1.0 - Python: crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/python-extraction:v1.0 Key Achievements: - Resolved Docker Hub network issues (using generic tags) - Fixed 30 TypeScript compilation errors - Removed Nougat OCR to reduce image size by 1.5GB - Used Aliyun Debian mirror to resolve apt-get network issues - Implemented multi-stage builds for optimization Next Steps: - Deploy Python microservice to SAE - Build Node.js backend Docker image - Deploy Node.js backend to SAE - Deploy frontend Nginx to SAE - End-to-end verification testing Status: Docker images ready, SAE deployment pending
81 lines
1.9 KiB
TypeScript
81 lines
1.9 KiB
TypeScript
/**
|
|
* 筛选结果列表Hook
|
|
* 用于获取和管理筛选结果列表(支持分页和筛选)
|
|
*/
|
|
|
|
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
|
|
import { message } from 'antd';
|
|
import { aslApi } from '../api';
|
|
|
|
interface UseScreeningResultsOptions {
|
|
projectId: string;
|
|
page?: number;
|
|
pageSize?: number;
|
|
filter?: 'all' | 'conflict' | 'included' | 'excluded' | 'reviewed';
|
|
enabled?: boolean;
|
|
}
|
|
|
|
/**
|
|
* 使用筛选结果Hook
|
|
*/
|
|
export function useScreeningResults({
|
|
projectId,
|
|
page = 1,
|
|
pageSize = 50,
|
|
filter = 'all',
|
|
enabled = true,
|
|
}: UseScreeningResultsOptions) {
|
|
const queryClient = useQueryClient();
|
|
|
|
// 查询筛选结果列表
|
|
const { data, isLoading, error, refetch } = useQuery({
|
|
queryKey: ['screening-results', projectId, page, pageSize, filter],
|
|
queryFn: () => aslApi.getScreeningResultsList(projectId, { page, pageSize, filter }),
|
|
enabled: enabled && !!projectId,
|
|
staleTime: 1000 * 30, // 30秒内认为数据是新鲜的
|
|
});
|
|
|
|
const results = (data as any)?.data?.items || [];
|
|
const total = (data as any)?.data?.total || 0;
|
|
const totalPages = (data as any)?.data?.totalPages || 0;
|
|
|
|
// 人工复核Mutation
|
|
const reviewMutation = useMutation({
|
|
mutationFn: ({ resultId, decision, note }: {
|
|
resultId: string;
|
|
decision: 'include' | 'exclude';
|
|
note?: string;
|
|
}) => aslApi.reviewScreeningResult(resultId, { decision, note }),
|
|
onSuccess: () => {
|
|
// 刷新列表
|
|
queryClient.invalidateQueries({ queryKey: ['screening-results', projectId] });
|
|
message.success('复核提交成功');
|
|
},
|
|
onError: (error: any) => {
|
|
message.error(`复核失败: ${error.message}`);
|
|
},
|
|
});
|
|
|
|
return {
|
|
results,
|
|
total,
|
|
totalPages,
|
|
page,
|
|
pageSize,
|
|
isLoading,
|
|
error,
|
|
refetch,
|
|
// 人工复核方法
|
|
review: reviewMutation.mutate,
|
|
isReviewing: reviewMutation.isPending,
|
|
};
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|