- Add platform infrastructure chapter to frontend-backend architecture design - Update system architecture document with 6 new infrastructure modules - Update AI onboarding guide with infrastructure overview - Link to backend/src/common/README.md for detailed usage guide Key Updates: - Storage service (LocalAdapter + OSSAdapter) - Logging system (Winston + JSON format) - Cache service (Memory + Redis) - Async job queue (Memory + Database) - Health check endpoints - Monitoring metrics - Database connection pool - Environment config management All modules support zero-code switching between local and cloud environments. Related: #Platform-Infrastructure
579 lines
19 KiB
Markdown
579 lines
19 KiB
Markdown
# 平台前端总体架构设计
|
||
|
||
> **文档版本:** v1.0
|
||
> **创建日期:** 2025-10-29
|
||
> **维护者:** 前端开发团队
|
||
> **最后更新:** 2025-10-29
|
||
|
||
---
|
||
|
||
## 📋 文档说明
|
||
|
||
本文档是**平台级前端架构设计**,涵盖整个AI科研平台的前端架构,包括:
|
||
- 统一的顶部导航设计
|
||
- 模块化架构设计
|
||
- 路由设计
|
||
- 权限控制系统(**版本配置完全可调整**)
|
||
- 模块独立性设计(支持未来独立分拆)
|
||
|
||
> **注意:** 本文档是平台级设计,各模块的详细架构设计请参考各模块的专属文档。
|
||
|
||
> **重要提示:** 本文档中涉及的版本权限分配(基础版、高级版、旗舰版的模块分配)均为**初始方案**,可以根据业务需求随时调整,无需改动代码逻辑。推荐从后端API动态获取版本配置。
|
||
|
||
---
|
||
|
||
## 🎯 设计原则
|
||
|
||
### 1. 模块化设计
|
||
- 每个功能模块独立开发、独立部署
|
||
- 模块间无依赖关系,可独立运行
|
||
- 支持模块独立产品化(如AI智能文献独立售卖)
|
||
|
||
### 2. 权限控制设计
|
||
- 基于用户版本的权限控制
|
||
- 灵活的功能模块开关机制
|
||
- 支持未来商业模式拓展(基础版、高级版、旗舰版)
|
||
|
||
### 3. 可扩展性设计
|
||
- 预留新模块接入接口
|
||
- 插件化的模块加载机制
|
||
- 配置驱动的功能开关
|
||
|
||
### 4. 一致性设计
|
||
- 统一的UI/UX规范
|
||
- 统一的交互模式
|
||
- 统一的状态管理
|
||
|
||
---
|
||
|
||
## 🧭 顶部导航设计
|
||
|
||
### 导航结构
|
||
|
||
```
|
||
┌──────────────────────────────────────────────────────────────────────────────┐
|
||
│ Logo [AI问答] [AI智能文献] [知识库] [智能数据清洗] [智能统计分析] [统计分析工具] [用户名 ▼] │
|
||
└──────────────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 导航项详情
|
||
|
||
| 位置 | 中文名称 | 英文标识 | 路由路径 | 开发状态 | 权限要求(初始配置) |
|
||
|------|---------|---------|---------|---------|---------------------|
|
||
| 1 | AI问答 | `ai-qa` | `/ai-qa` | ✅ 已开发 | 基础版+ ⚠️可调整 |
|
||
| 2 | AI智能文献 | `literature-platform` | `/literature` | 🚧 待开发 | 高级版+ ⚠️可调整 |
|
||
| 3 | 知识库 | `knowledge-base` | `/knowledge-base` | ✅ 已开发 | 基础版+ ⚠️可调整 |
|
||
| 4 | 智能数据清洗 | `data-cleaning` | `/data-cleaning` | 📋 占位 | 高级版+ ⚠️可调整 |
|
||
| 5 | 智能统计分析 | `statistical-analysis` | `/intelligent-analysis` | ✅ 已开发(Java团队) | 旗舰版 ⚠️可调整 |
|
||
| 6 | 统计分析工具 | `statistical-tools` | `/statistical-tools` | ✅ 已开发(Java团队) | 旗舰版 ⚠️可调整 |
|
||
| 最右侧 | 个人中心 | `user-center` | `/user/*` | ✅ 已开发 | 所有用户 |
|
||
|
||
> **说明:** 权限要求列中的"基础版+"、"高级版+"、"旗舰版"为**初始配置**,可根据业务需求随时调整,无需改动代码逻辑。推荐从后端API动态获取版本配置。
|
||
|
||
### 路由路径设计
|
||
|
||
```typescript
|
||
// 主路由结构
|
||
const routes = {
|
||
// 模块路由
|
||
'/ai-qa': 'AI问答模块',
|
||
'/literature': 'AI智能文献模块',
|
||
'/knowledge-base': '知识库模块',
|
||
'/data-cleaning': '智能数据清洗模块(占位)',
|
||
'/intelligent-analysis': '智能统计分析模块(Java团队开发,只做顶部导航集成)',
|
||
'/statistical-tools': '统计分析工具模块(Java团队开发,只做顶部导航集成)',
|
||
|
||
// 用户相关
|
||
'/user/profile': '个人中心 - 个人资料',
|
||
'/user/settings': '个人中心 - 设置',
|
||
'/user/history': '个人中心 - 历史记录',
|
||
'/user/subscription': '个人中心 - 订阅管理',
|
||
};
|
||
```
|
||
|
||
---
|
||
|
||
## 🏗️ 整体架构设计
|
||
|
||
### 架构层次图
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 应用层 (Application) │
|
||
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
||
│ │ AI问答 │ │AI智能文献│ │ 知识库 │ │ 其他模块 │ │
|
||
│ │ Module │ │ Module │ │ Module │ │ Module │ │
|
||
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
|
||
└─────────────────────────────────────────────────────────────┘
|
||
↓
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 框架层 (Framework Layer) │
|
||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||
│ │ 导航系统 │ │ 路由系统 │ │ 权限控制 │ │
|
||
│ │ Navigation │ │ Router │ │ Permission │ │
|
||
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||
│ │ 布局系统 │ │ 状态管理 │ │ 配置管理 │ │
|
||
│ │ Layout │ │ State Mgmt │ │ Config │ │
|
||
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||
└─────────────────────────────────────────────────────────────┘
|
||
↓
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 基础层 (Base Layer) │
|
||
│ React + TypeScript + Ant Design + Tailwind CSS │
|
||
└─────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 目录结构设计
|
||
|
||
```
|
||
frontend-v2/
|
||
├── src/
|
||
│ ├── app/ # 应用入口
|
||
│ │ ├── App.tsx # 根组件
|
||
│ │ ├── main.tsx # 入口文件
|
||
│ │ └── routes.tsx # 路由配置
|
||
│ │
|
||
│ ├── framework/ # 框架层(核心)
|
||
│ │ ├── navigation/ # 导航系统
|
||
│ │ │ ├── TopNavigation.tsx # 顶部导航
|
||
│ │ │ ├── SideNavigation.tsx # 左侧导航
|
||
│ │ │ └── navigationConfig.ts # 导航配置
|
||
│ │ │
|
||
│ │ ├── routing/ # 路由系统
|
||
│ │ │ ├── RouterConfig.tsx # 路由配置
|
||
│ │ │ ├── RouteGuard.tsx # 路由守卫(权限)
|
||
│ │ │ └── LazyLoader.tsx # 懒加载
|
||
│ │ │
|
||
│ │ ├── permission/ # 权限控制
|
||
│ │ │ ├── PermissionProvider.tsx
|
||
│ │ │ ├── usePermission.ts # 权限Hook
|
||
│ │ │ ├── permissionConfig.ts # 权限配置
|
||
│ │ │ └── versionConfig.ts # 版本配置
|
||
│ │ │
|
||
│ │ ├── layout/ # 布局系统
|
||
│ │ │ ├── MainLayout.tsx # 主布局
|
||
│ │ │ ├── ModuleLayout.tsx # 模块布局
|
||
│ │ │ └── EmptyLayout.tsx # 空布局
|
||
│ │ │
|
||
│ │ ├── config/ # 配置管理
|
||
│ │ │ ├── moduleConfig.ts # 模块配置
|
||
│ │ │ ├── appConfig.ts # 应用配置
|
||
│ │ │ └── environment.ts # 环境配置
|
||
│ │ │
|
||
│ │ └── state/ # 全局状态
|
||
│ │ ├── userStore.ts # 用户状态
|
||
│ │ ├── navigationStore.ts # 导航状态
|
||
│ │ └── permissionStore.ts # 权限状态
|
||
│ │
|
||
│ ├── modules/ # 功能模块(独立)
|
||
│ │ ├── ai-qa/ # AI问答模块
|
||
│ │ │ ├── index.tsx
|
||
│ │ │ ├── routes.tsx
|
||
│ │ │ └── ...
|
||
│ │ │
|
||
│ │ ├── literature/ # AI智能文献模块
|
||
│ │ │ ├── index.tsx
|
||
│ │ │ ├── routes.tsx
|
||
│ │ │ └── ...
|
||
│ │ │
|
||
│ │ ├── knowledge-base/ # 知识库模块
|
||
│ │ │ ├── index.tsx
|
||
│ │ │ ├── routes.tsx
|
||
│ │ │ └── ...
|
||
│ │ │
|
||
│ │ ├── data-cleaning/ # 智能数据清洗(占位)
|
||
│ │ │ └── Placeholder.tsx
|
||
│ │ │
|
||
│ │ ├── intelligent-analysis/ # 智能统计分析
|
||
│ │ │ └── ...
|
||
│ │ │
|
||
│ │ └── statistical-tools/ # 统计分析工具
|
||
│ │ └── ...
|
||
│ │
|
||
│ ├── components/ # 通用组件
|
||
│ │ ├── common/ # 基础组件
|
||
│ │ ├── business/ # 业务组件
|
||
│ │ └── hooks/ # 通用Hooks
|
||
│ │
|
||
│ ├── api/ # API层
|
||
│ │ ├── client.ts # API客户端
|
||
│ │ ├── modules/ # 模块API
|
||
│ │ └── types/ # API类型
|
||
│ │
|
||
│ ├── utils/ # 工具函数
|
||
│ └── types/ # 全局类型
|
||
```
|
||
|
||
---
|
||
|
||
## 🔐 权限控制设计
|
||
|
||
### 用户版本定义
|
||
|
||
> **重要说明:** 版本权限分配是完全**可配置、可调整**的。以下配置为**初始方案**,可以根据业务需求随时修改,无需改动代码逻辑。
|
||
|
||
```typescript
|
||
// 用户版本类型
|
||
type UserVersion = 'basic' | 'advanced' | 'premium';
|
||
|
||
// 版本配置(可配置,支持后期调整)
|
||
// 配置文件位置:src/framework/permission/versionConfig.ts
|
||
// 或者通过后端API动态获取配置
|
||
const VERSION_CONFIG = {
|
||
basic: {
|
||
name: '基础版',
|
||
modules: ['ai-qa', 'knowledge-base'], // 初始配置:基础版包含模块
|
||
},
|
||
advanced: {
|
||
name: '高级版',
|
||
modules: [
|
||
'ai-qa',
|
||
'knowledge-base',
|
||
'literature-platform',
|
||
'data-cleaning',
|
||
], // 初始配置:高级版包含模块
|
||
},
|
||
premium: {
|
||
name: '旗舰版',
|
||
modules: [
|
||
'ai-qa',
|
||
'knowledge-base',
|
||
'literature-platform',
|
||
'data-cleaning',
|
||
'intelligent-analysis',
|
||
'statistical-tools',
|
||
], // 初始配置:旗舰版包含全部模块
|
||
},
|
||
};
|
||
|
||
// 说明:
|
||
// 1. 以上模块分配为初始方案,可根据实际业务需求调整
|
||
// 2. 支持通过配置文件修改,无需改动代码
|
||
// 3. 更推荐从后端API动态获取版本配置,便于实时调整
|
||
```
|
||
|
||
### 权限控制实现
|
||
|
||
> **设计说明:** 权限控制采用配置驱动的方式,支持通过配置文件或后端API动态获取版本配置,便于后期灵活调整。
|
||
|
||
```typescript
|
||
// 权限控制Hook
|
||
export const usePermission = () => {
|
||
const userVersion = useUserStore((state) => state.version);
|
||
|
||
// 方式1:从静态配置读取(适合开发阶段)
|
||
// const allowedModules = VERSION_CONFIG[userVersion].modules;
|
||
|
||
// 方式2:从后端API动态获取(推荐,支持实时调整)
|
||
const versionConfig = useVersionConfig(); // 从API获取最新配置
|
||
const allowedModules = versionConfig[userVersion]?.modules || [];
|
||
|
||
const hasAccess = (moduleId: string): boolean => {
|
||
return allowedModules.includes(moduleId);
|
||
};
|
||
|
||
const getFilteredNavigation = (navigation: NavigationItem[]) => {
|
||
return navigation.filter((item) => {
|
||
// 检查用户版本是否满足模块要求
|
||
if (!item.requiredVersion) return true;
|
||
const versionHierarchy = ['basic', 'advanced', 'premium'];
|
||
const userLevel = versionHierarchy.indexOf(userVersion);
|
||
const requiredLevel = versionHierarchy.indexOf(item.requiredVersion);
|
||
return userLevel >= requiredLevel;
|
||
});
|
||
};
|
||
|
||
return {
|
||
hasAccess,
|
||
getFilteredNavigation,
|
||
userVersion,
|
||
versionConfig, // 返回当前版本配置,便于调试
|
||
};
|
||
};
|
||
```
|
||
|
||
### 版本配置动态获取(推荐方案)
|
||
|
||
```typescript
|
||
// src/framework/permission/useVersionConfig.ts
|
||
import { useQuery } from '@tanstack/react-query';
|
||
|
||
export const useVersionConfig = () => {
|
||
const { data, isLoading } = useQuery({
|
||
queryKey: ['versionConfig'],
|
||
queryFn: async () => {
|
||
// 从后端API获取版本配置
|
||
const response = await fetch('/api/config/version');
|
||
return response.json();
|
||
},
|
||
staleTime: 5 * 60 * 1000, // 缓存5分钟
|
||
refetchOnWindowFocus: false,
|
||
});
|
||
|
||
// 如果API请求失败,回退到本地配置
|
||
return data || VERSION_CONFIG;
|
||
};
|
||
```
|
||
|
||
**优势:**
|
||
- ✅ 版本配置可在后端实时调整,无需前端发版
|
||
- ✅ 支持A/B测试不同版本配置
|
||
- ✅ 便于运营人员灵活调整产品策略
|
||
- ✅ 前端有本地配置作为兜底方案,保证可用性
|
||
|
||
### 路由守卫
|
||
|
||
```typescript
|
||
// RouteGuard.tsx
|
||
export const RouteGuard = ({ moduleId, children }) => {
|
||
const { hasAccess } = usePermission();
|
||
|
||
if (!hasAccess(moduleId)) {
|
||
return <UpgradePrompt moduleId={moduleId} />;
|
||
}
|
||
|
||
return children;
|
||
};
|
||
```
|
||
|
||
---
|
||
|
||
## 🔌 模块独立性设计
|
||
|
||
### 模块注册机制
|
||
|
||
```typescript
|
||
// 模块接口定义
|
||
interface ModuleDefinition {
|
||
id: string; // 模块唯一标识
|
||
name: string; // 模块名称
|
||
route: string; // 路由路径
|
||
icon?: ReactNode; // 图标
|
||
component: LazyComponent; // 懒加载组件
|
||
sideNav?: SideNavConfig; // 左侧导航配置
|
||
version?: UserVersion[]; // 支持的版本
|
||
standalone?: boolean; // 是否支持独立运行
|
||
apiBaseUrl?: string; // 独立运行时的API地址
|
||
}
|
||
|
||
// 模块配置
|
||
const MODULES: ModuleDefinition[] = [
|
||
{
|
||
id: 'literature-platform',
|
||
name: 'AI智能文献',
|
||
route: '/literature',
|
||
component: lazy(() => import('@/modules/literature')),
|
||
version: ['advanced', 'premium'],
|
||
standalone: true, // 支持独立运行
|
||
apiBaseUrl: process.env.LITERATURE_API_URL, // 可配置
|
||
},
|
||
// ... 其他模块
|
||
];
|
||
```
|
||
|
||
### 独立部署支持
|
||
|
||
```typescript
|
||
// 模块加载器
|
||
export const ModuleLoader = ({ moduleId }: { moduleId: string }) => {
|
||
const module = MODULES.find((m) => m.id === moduleId);
|
||
|
||
if (!module) {
|
||
return <NotFound />;
|
||
}
|
||
|
||
// 检查是否独立运行模式
|
||
const isStandalone = module.standalone &&
|
||
window.location.hostname === module.apiBaseUrl;
|
||
|
||
if (isStandalone) {
|
||
// 独立运行:不显示顶部导航,只显示模块内容
|
||
return <StandaloneLayout module={module} />;
|
||
}
|
||
|
||
// 集成运行:显示完整导航和布局
|
||
return <ModuleLayout module={module} />;
|
||
};
|
||
```
|
||
|
||
### 配置驱动的模块加载
|
||
|
||
```typescript
|
||
// 环境变量配置
|
||
// .env
|
||
REACT_APP_ENABLED_MODULES=ai-qa,knowledge-base,literature-platform
|
||
REACT_APP_STANDALONE_MODULE=literature-platform
|
||
|
||
// 模块配置读取
|
||
const getEnabledModules = () => {
|
||
const enabled = process.env.REACT_APP_ENABLED_MODULES?.split(',') || [];
|
||
return MODULES.filter((m) => enabled.includes(m.id));
|
||
};
|
||
```
|
||
|
||
---
|
||
|
||
## 📐 布局系统设计
|
||
|
||
### 布局层次
|
||
|
||
```
|
||
MainLayout (主布局)
|
||
├── Header (顶部导航)
|
||
│ ├── Logo
|
||
│ ├── TopNavigation (导航项)
|
||
│ └── UserMenu (用户菜单)
|
||
│
|
||
└── MainContent (主内容区)
|
||
├── SideNavigation (左侧导航) - 可选
|
||
└── Content (内容区域)
|
||
└── ModuleLayout (模块布局)
|
||
```
|
||
|
||
### 布局组件
|
||
|
||
```typescript
|
||
// MainLayout.tsx
|
||
export const MainLayout = () => {
|
||
return (
|
||
<div className="min-h-screen flex flex-col">
|
||
<Header />
|
||
<div className="flex flex-1">
|
||
<SideNavigation /> {/* 根据模块显示/隐藏 */}
|
||
<main className="flex-1">
|
||
<Outlet /> {/* 路由出口 */}
|
||
</main>
|
||
</div>
|
||
</div>
|
||
);
|
||
};
|
||
|
||
// ModuleLayout.tsx
|
||
export const ModuleLayout = ({ module }: { module: ModuleDefinition }) => {
|
||
return (
|
||
<div className="module-layout">
|
||
{module.sideNav && <ModuleSideNav config={module.sideNav} />}
|
||
<div className="module-content">
|
||
<Outlet />
|
||
</div>
|
||
</div>
|
||
);
|
||
};
|
||
```
|
||
|
||
---
|
||
|
||
## 🎨 UI/UX设计规范
|
||
|
||
### 顶部导航样式
|
||
|
||
```css
|
||
.top-navigation {
|
||
height: 64px;
|
||
background: #ffffff;
|
||
border-bottom: 1px solid #e5e7eb;
|
||
display: flex;
|
||
align-items: center;
|
||
padding: 0 24px;
|
||
}
|
||
|
||
.nav-item {
|
||
padding: 8px 16px;
|
||
margin: 0 4px;
|
||
color: #4b5563;
|
||
font-weight: 500;
|
||
border-bottom: 2px solid transparent;
|
||
transition: all 0.2s;
|
||
}
|
||
|
||
.nav-item:hover {
|
||
color: #0ea5e9;
|
||
}
|
||
|
||
.nav-item.active {
|
||
color: #0ea5e9;
|
||
border-bottom-color: #0ea5e9;
|
||
font-weight: 600;
|
||
}
|
||
```
|
||
|
||
### 响应式设计
|
||
|
||
- **桌面端 (>1024px)**: 完整显示所有导航项
|
||
- **平板端 (768-1024px)**: 显示前4个,其余折叠到"更多"菜单
|
||
- **移动端 (<768px)**: 汉堡菜单 + 抽屉导航
|
||
|
||
---
|
||
|
||
## 📝 实施计划
|
||
|
||
### 第一阶段:框架搭建(Week 1)
|
||
- [x] 创建新前端项目结构
|
||
- [ ] 实现顶部导航组件
|
||
- [ ] 实现路由系统
|
||
- [ ] 实现权限控制基础
|
||
- [ ] 实现基础布局系统
|
||
|
||
### 第二阶段:模块集成(Week 2)
|
||
- [ ] 迁移AI问答模块
|
||
- [ ] 迁移知识库模块
|
||
- [ ] 实现占位模块(智能数据清洗)
|
||
- [ ] 完善权限控制
|
||
|
||
### 第三阶段:AI智能文献开发(Week 3+)
|
||
- [ ] 开发AI智能文献模块
|
||
- [ ] 实现模块独立运行支持
|
||
- [ ] 完善文档和测试
|
||
|
||
---
|
||
|
||
## 🔄 未来扩展考虑
|
||
|
||
### 1. 模块独立产品化
|
||
- 支持通过环境变量配置独立运行
|
||
- 独立的API地址配置
|
||
- 独立的部署配置
|
||
|
||
### 2. 版本权限管理
|
||
- 后端API提供用户版本信息
|
||
- 版本配置完全可调整(无需改动代码)
|
||
- 推荐从后端API动态获取版本配置,支持实时调整模块分配
|
||
- 前端根据版本动态显示/隐藏模块
|
||
- 支持版本升级提示
|
||
- 版本权限分配策略可随时根据业务需求调整
|
||
|
||
### 3. 新模块接入
|
||
- 遵循模块接口规范
|
||
- 在配置文件中注册模块
|
||
- 自动集成到导航系统
|
||
|
||
---
|
||
|
||
## 📚 相关文档
|
||
|
||
- [导航结构设计](./02-导航结构设计.md)
|
||
- [路由设计](./03-路由设计.md)
|
||
- [布局设计](./04-布局设计.md)
|
||
- [权限控制设计](./05-权限控制设计.md)
|
||
- [AI智能文献模块架构设计](../AI智能文献/00-系统设计/01-模块架构设计.md)
|
||
|
||
---
|
||
|
||
**文档版本:** v1.0
|
||
**最后更新:** 2025-10-29
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|