# 平台前端总体架构设计 > **文档版本:** 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 ; } 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 ; } // 检查是否独立运行模式 const isStandalone = module.standalone && window.location.hostname === module.apiBaseUrl; if (isStandalone) { // 独立运行:不显示顶部导航,只显示模块内容 return ; } // 集成运行:显示完整导航和布局 return ; }; ``` ### 配置驱动的模块加载 ```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 (
{/* 根据模块显示/隐藏 */}
{/* 路由出口 */}
); }; // ModuleLayout.tsx export const ModuleLayout = ({ module }: { module: ModuleDefinition }) => { return (
{module.sideNav && }
); }; ``` --- ## 🎨 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