feat(platform): Implement legacy system integration with Wrapper Bridge architecture
Complete integration of the old clinical research platform (www.xunzhengyixue.com) into the new AI platform via Token injection + iframe embedding: Backend: - Add legacy-bridge module (MySQL pool, auth service, routes) - POST /api/v1/legacy/auth: JWT -> phone lookup -> Token injection into old MySQL - Auto-create user in old system if not found (matched by phone number) Frontend: - LegacySystemPage: iframe container with Bridge URL construction - ResearchManagement + StatisticalTools entry components - Module registry updated from external links to iframe embed mode ECS (token-bridge.html deployed to www.xunzhengyixue.com): - Wrapper Bridge: sets cookies within same-origin context - Storage Access API for cross-site dev environments - CSS injection: hide old system nav/footer, remove padding gaps - Inner iframe loads target page with full DOM access (same-origin) Key technical decisions: - Token injection (direct MySQL write) instead of calling login API - Wrapper Bridge instead of parent-page cookie setting (cross-origin fix) - Storage Access API + SameSite=None;Secure for third-party cookie handling - User isolation guaranteed by phone number matching Documentation: - Integration plan v4.0 with full implementation record - Implementation summary with 6 pitfalls documented - System status guide updated (ST module now integrated) Tested: Local E2E verified - auto login, research management, 126 statistical tools, report generation, download, UI layout all working correctly Made-with: Cursor
This commit is contained in:
@@ -214,6 +214,13 @@ import { ssaRoutes } from './modules/ssa/index.js';
|
||||
await fastify.register(ssaRoutes, { prefix: '/api/v1/ssa' });
|
||||
logger.info('✅ SSA智能统计分析路由已注册: /api/v1/ssa');
|
||||
|
||||
// ============================================
|
||||
// 【集成模块】Legacy Bridge - 旧系统集成桥接
|
||||
// ============================================
|
||||
import { legacyBridgeRoutes } from './modules/legacy-bridge/routes.js';
|
||||
await fastify.register(legacyBridgeRoutes, { prefix: '/api/v1/legacy' });
|
||||
logger.info('✅ Legacy Bridge路由已注册: /api/v1/legacy');
|
||||
|
||||
// 启动服务器
|
||||
const start = async () => {
|
||||
try {
|
||||
@@ -340,6 +347,11 @@ const gracefulShutdown = async (signal: string) => {
|
||||
await prisma.$disconnect();
|
||||
console.log('✅ 数据库连接已关闭');
|
||||
|
||||
// 4. 关闭 Legacy MySQL 连接池
|
||||
const { closeLegacyMysqlPool } = await import('./modules/legacy-bridge/mysql-pool.js');
|
||||
await closeLegacyMysqlPool();
|
||||
console.log('✅ Legacy MySQL连接池已关闭');
|
||||
|
||||
console.log('👋 优雅关闭完成,再见!');
|
||||
process.exit(0);
|
||||
} catch (error) {
|
||||
|
||||
Reference in New Issue
Block a user