Files
AIclinicalresearch/docs/01-平台基础层/06-前端架构/02-导航结构设计.md
HaHafeng 66255368b7 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
2026-01-16 13:42:10 +08:00

11 KiB
Raw Blame History

导航结构设计文档

文档版本: v1.0
创建日期: 2025-10-29
维护者: 前端开发团队
最后更新: 2025-10-29


📋 文档说明

本文档详细说明AI科研平台的导航结构设计包括顶部导航和左侧导航的设计规范。

重要提示: 本文档中涉及的模块版本要求(requiredVersion)均为初始配置,可以根据业务需求随时调整。版本权限分配完全可配置,无需改动代码逻辑。


🧭 顶部导航设计

导航项配置

// navigationConfig.ts
export interface NavigationItem {
  id: string;                    // 唯一标识
  label: string;                 // 显示名称
  route: string;                 // 路由路径
  icon?: ReactNode;              // 图标(可选)
  requiredVersion?: UserVersion;  // 最低版本要求(可配置,支持后期调整)
  standalone?: boolean;          // 是否支持独立运行
}

/**
 * 顶部导航配置
 * 
 * ⚠️ 重要说明:
 * - requiredVersion 字段为初始配置,可根据业务需求随时调整
 * - 推荐通过后端API动态获取版本配置支持实时调整
 * - 修改版本要求无需改动代码逻辑,只需更新配置即可
 */
export const TOP_NAVIGATION_ITEMS: NavigationItem[] = [
  {
    id: 'ai-qa',
    label: 'AI问答',
    route: '/ai-qa',
    requiredVersion: 'basic', // 初始配置:基础版可用(可调整)
  },
  {
    id: 'literature-platform',
    label: 'AI智能文献',
    route: '/literature',
    requiredVersion: 'advanced', // 初始配置:高级版可用(可调整)
    standalone: true,
  },
  {
    id: 'knowledge-base',
    label: '知识库',
    route: '/knowledge-base',
    requiredVersion: 'basic', // 初始配置:基础版可用(可调整)
  },
  {
    id: 'data-cleaning',
    label: '智能数据清洗',
    route: '/data-cleaning',
    requiredVersion: 'advanced', // 初始配置:高级版可用(可调整)
    placeholder: true, // 占位,显示"开发中"
  },
  {
    id: 'statistical-analysis',
    label: '智能统计分析',
    route: '/intelligent-analysis',
    requiredVersion: 'premium', // 初始配置:旗舰版可用(可调整)
    external: true, // 由Java团队开发只做顶部导航集成
  },
  {
    id: 'statistical-tools',
    label: '统计分析工具',
    route: '/statistical-tools',
    requiredVersion: 'premium', // 初始配置:旗舰版可用(可调整)
    external: true, // 由Java团队开发只做顶部导航集成
  },
];

顶部导航布局

┌──────────────────────────────────────────────────────────────────────────┐
│  [Logo]  [AI问答] [AI智能文献] [知识库] [智能数据清洗] [智能统计分析] [统计分析工具]  [用户名] [用户菜单▼] │
└──────────────────────────────────────────────────────────────────────────┘
  160px     自适应宽度                                                   200px

视觉设计规范

导航项样式

  • 正常状态color: #4b5563, font-weight: 500
  • 悬停状态color: #0ea5e9, background: rgba(14, 165, 233, 0.1)
  • 激活状态color: #0ea5e9, font-weight: 600, border-bottom: 2px solid #0ea5e9
  • 禁用状态(无权限):color: #9ca3af, cursor: not-allowed

间距规范

  • 导航项之间:16px 水平间距
  • 导航项内边距:12px 16px
  • 整个导航栏高度:64px

个人中心设计

位置:顶部导航最右侧

显示内容

  • 用户名(手机号脱敏显示,如:186****8738
  • 用户头像/图标(点击触发下拉菜单)

下拉菜单选项

┌─────────────────────┐
│ 个人中心            │
│ 历史记录            │
│ ────────────────    │
│ 订阅管理            │
│ 退出账号            │
└─────────────────────┘

路由跳转

  • 个人中心 → /user/profile
  • 历史记录 → /user/history
  • 订阅管理 → /user/subscription
  • 退出账号 → 登出操作

📂 左侧导航设计

设计原则

  1. 按需显示:只有进入具体模块后才显示左侧导航
  2. 模块独立:每个模块有自己独立的左侧导航配置
  3. 层级清晰:支持一级和二级菜单

AI问答模块左侧导航

布局方式:卡片式布局(不使用左侧导航)

┌─────────────────────────────────────────┐
│  AI问答主界面                            │
│  ┌───────────────────────────────────┐  │
│  │  搜索框 + 提问按钮                 │  │
│  └───────────────────────────────────┘  │
│                                         │
│  或选择一个智能体开始:                   │
│  ┌────┐ ┌────┐ ┌────┐ ┌────┐          │
│  │选题│ │PICO│ │研究│ │方法│ ...       │
│  │评价│ │梳理│ │方案│ │学   │          │
│  └────┘ └────┘ └────┘ └────┘          │
└─────────────────────────────────────────┘

AI智能文献模块左侧导航

const LITERATURE_SIDE_NAV = [
  {
    id: 'research-plan',
    label: '研究方案生成',
    route: '/literature/research-plan',
    icon: '📋',
  },
  {
    id: 'search',
    label: '智能文献检索',
    route: '/literature/search',
    icon: '🔍',
  },
  {
    id: 'management',
    label: '文献管理',
    route: '/literature/management',
    icon: '📚',
  },
  {
    id: 'screening',
    label: '标题摘要初筛',
    route: '/literature/screening',
    icon: '✅',
  },
  {
    id: 'full-text',
    label: '全文复筛',
    route: '/literature/full-text',
    icon: '📄',
  },
  {
    id: 'extraction',
    label: '全文解析与数据提取',
    route: '/literature/extraction',
    icon: '🔬',
  },
  {
    id: 'analysis',
    label: '数据综合分析与报告',
    route: '/literature/analysis',
    icon: '📊',
  },
];

布局样式

  • 宽度:200px
  • 背景色:#f9fafb
  • 激活项:background: #e0e7ff, border-left: 3px solid #4f46e5

知识库模块左侧导航

const KNOWLEDGE_BASE_SIDE_NAV = [
  {
    id: 'list',
    label: '知识库列表',
    route: '/knowledge-base',
    icon: '📚',
  },
  {
    id: 'create',
    label: '+ 新建知识库',
    route: '/knowledge-base/create',
    icon: '+',
  },
];

智能统计分析模块(外部模块说明)

说明: 智能统计分析模块由Java团队开发,采用Java后端技术栈。
我们的职责: 仅在顶部导航中集成该模块的入口点击后跳转到Java团队开发的页面。
设计规范: 不需要我们设计左侧导航Java团队已有自己的页面布局设计。

集成方式:

  • 顶部导航点击后,直接跳转到 /intelligent-analysis 路由
  • 该路由可能指向独立的Java应用或iframe嵌入
  • 具体集成方式需与Java团队协商确定

统计分析工具模块(外部模块说明)

说明: 统计分析工具模块由Java团队开发,采用Java后端技术栈。
我们的职责: 仅在顶部导航中集成该模块的入口点击后跳转到Java团队开发的页面。
设计规范: 该模块不是左侧导航设计Java团队有自己的页面布局如顶部Tab导航等

集成方式:

  • 顶部导航点击后,直接跳转到 /statistical-tools 路由
  • 该路由可能指向独立的Java应用或iframe嵌入
  • 具体集成方式需与Java团队协商确定

🔄 导航交互逻辑

顶部导航切换

// 点击顶部导航项
const handleNavClick = (item: NavigationItem) => {
  // 1. 检查权限
  if (!hasPermission(item.requiredVersion)) {
    showUpgradePrompt(item);
    return;
  }
  
  // 2. 检查是否为占位模块
  if (item.placeholder) {
    showComingSoon(item);
    return;
  }
  
  // 3. 导航到目标路由
  navigate(item.route);
  
  // 4. 更新激活状态
  setActiveNavItem(item.id);
};

左侧导航切换

// 点击左侧导航项
const handleSideNavClick = (item: SideNavItem) => {
  // 导航到目标路由(模块内部路由)
  navigate(item.route);
  
  // 更新激活状态
  setActiveSideNavItem(item.id);
};

面包屑导航(可选)

对于深层级页面,建议添加面包屑导航:

首页 > AI智能文献 > 标题摘要初筛 > 审核工作台

📱 响应式设计

桌面端 (>1024px)

  • 完整显示所有顶部导航项
  • 显示完整的左侧导航

平板端 (768-1024px)

  • 显示前4个顶部导航项
  • 其余导航项折叠到"更多"菜单
  • 左侧导航可折叠为抽屉式

移动端 (<768px)

  • 顶部导航采用汉堡菜单(☰)
  • 左侧导航改为底部Tab导航或抽屉式

🎨 样式规范

CSS变量定义

:root {
  /* 导航颜色 */
  --nav-bg-color: #ffffff;
  --nav-border-color: #e5e7eb;
  --nav-text-color: #4b5563;
  --nav-text-hover: #0ea5e9;
  --nav-text-active: #0ea5e9;
  --nav-active-border: #0ea5e9;
  
  /* 侧边栏颜色 */
  --sidebar-bg: #f9fafb;
  --sidebar-active-bg: #e0e7ff;
  --sidebar-active-border: #4f46e5;
  --sidebar-text-color: #4338ca;
  
  /* 尺寸 */
  --nav-height: 64px;
  --sidebar-width: 200px;
  --nav-item-padding: 12px 16px;
  --nav-item-spacing: 16px;
}

📝 实施清单

组件开发

  • TopNavigation.tsx - 顶部导航组件
  • SideNavigation.tsx - 左侧导航组件
  • UserMenu.tsx - 用户菜单组件
  • NavigationGuard.tsx - 导航权限守卫
  • ComingSoon.tsx - 开发中占位组件

配置文件

  • navigationConfig.ts - 导航配置
  • moduleNavConfig.ts - 模块导航配置
  • versionConfig.ts - 版本配置(本地配置,作为兜底)
  • useVersionConfig.ts - 版本配置Hook从API动态获取

文档

  • 更新本文档
  • 编写导航组件使用文档

文档版本: v1.0
最后更新: 2025-10-29