You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
OneAuth/docs/ui.md

6.6 KiB

VBase 前端界面设计文档

本文档基于 vigo/vhtml 框架,根据后端设计 (docs/design.md) 规划前端界面架构与组件设计。

1. 目录结构规范

遵循 vhtml 框架约定,建议采用以下目录结构:

/ui/
├── assets/                 # 静态资源
│   ├── global.css          # 全局样式 (Color vars, Reset)
│   └── ...
├── c/                      # 业务特定组件 (尽量复用 vhtml-ui仅存放业务强相关组件)
├── layout/                 # 页面布局及局部组件
│   ├── default.html        # 后台管理布局 (Sidebar + Header)
│   ├── public.html         # 公共布局 (Login/Register, Center aligned)
│   ├── header.html         # <layout-header>
│   └── sidebar.html        # <layout-sidebar>
├── page/                   # 页面路由组件
│   ├── auth/               # 认证模块
│   │   ├── login.html
│   │   └── register.html
│   ├── dashboard/          # 仪表盘
│   │   └── index.html
│   ├── sys/                # 系统管理 (User, Org, OAuth)
│   │   ├── user/
│   │   │   ├── index.html  # 用户列表
│   │   │   └── form.html   # 用户创建/编辑
│   │   ├── org/
│   │   │   ├── index.html  # 组织列表
│   │   │   └── detail.html # 组织详情/设置
│   │   └── oauth/
│   │       ├── index.html  # 应用列表
│   │       └── form.html   # 应用注册
│   ├── user/               # 个人中心
│   │   └── profile.html
│   ├── 404.html
│   └── 403.html
├── env.js                  # 全局环境配置 (Axios, Router guard)
├── routes.js               # 路由定义
└── root.html               # 根入口

2. 布局设计 (Layouts)

2.1 Public Layout (layout/public.html)

  • 用途: 登录、注册、404、403 等无需鉴权的页面。
  • 结构: 居中容器,背景简约,包含 Logo 和主体内容插槽。

2.2 Default Layout (layout/default.html)

  • 用途: 系统核心业务页面。
  • 结构:
    • Sidebar (Left): 导航菜单 (Dashboard, User, Org, OAuth, Settings)。支持折叠。
    • Header (Top): 面包屑导航, 组织切换器 (Org Switcher), 用户头像/下拉菜单 (Profile, Logout)。
    • Main Content: 路由视图插槽 (<router-view>)。
  • 特性: 需集成 OrgID 切换逻辑,切换组织时更新全局状态并刷新数据。

3. 核心模块界面规划与权限

3.1 认证模块 (Auth)

  • 权限: 公开访问 (Guest)
  • 登录页 (/login): 用户名/邮箱 + 密码。集成 OAuth2 第三方登录按钮。
  • 注册页 (/register): 基本信息填写。

3.2 仪表盘 (Dashboard)

  • 权限: 登录用户 (Authenticated)
  • 概览页 (/): 展示核心指标。
    • 普通用户: 仅可见个人或所属项目的数据概览。
    • 管理员: 可见整个组织或系统的宏观数据。

3.3 组织管理 (Org Module)

  • 组织列表 (/org):
    • 权限: 登录用户 (Authenticated)
    • 展示用户加入的所有组织。
    • “创建组织”入口:视系统配置开放给所有用户或仅限特定用户。
  • 组织详情/设置 (/org/:id):
    • 权限: 组织成员 (Member of Org)
    • 基本信息: 仅 Org Admin 可修改名称、Logo。
    • 成员管理: 仅 Org Admin 可邀请、移除成员或修改角色。
    • 只读视图: 普通成员仅可查看组织信息和成员列表。

3.4 用户管理 (User Module)

  • 用户列表 (/sys/user):
    • 权限: 系统管理员 (System Admin Only)
    • 全局用户管理表格,包含搜索、分页、禁用/启用用户功能。
  • 个人资料 (/profile):
    • 权限: 登录用户 (Authenticated)
    • 基本信息修改 (头像, 昵称)、账号安全 (修改密码, 绑定第三方账号)。

3.5 OAuth2 Provider (OAuth Module)

  • 应用管理 (/sys/oauth):
    • 权限: 登录用户 (Authenticated)
    • 开发者注册的 OAuth 应用列表。
    • 创建/编辑应用: 用户仅可管理自己创建的应用。
    • 系统级应用: 仅 System Admin 可见或管理系统预置应用。

4. 组件策略

4.1 基础组件库

本项目直接使用 vhtml-ui 组件库,无需重复封装基础组件。

  • 按钮、输入框、卡片、模态框、表格等均直接使用库组件。
  • 组件文档:http://localhost:4000/v/README.md

4.2 业务组件

  • 仅当组件包含特定业务逻辑且多处复用时,封装为自定义组件。
  • 命名规范:使用短前缀(如 c- 或直接目录名)。
  • 存放位置:
    • 全局复用:/ui/c/
    • 局部复用:直接存放在调用方同级目录或 _components 子目录中。

5. 路由规划 (routes.js)

const routes = [
  // Public
  { path: '/login', component: '/page/auth/login.html', layout: 'public', meta: { guest: true } },
  { path: '/register', component: '/page/auth/register.html', layout: 'public', meta: { guest: true } },

  // Dashboard (Default Layout)
  {
    path: '/',
    layout: 'default',
    meta: { auth: true }, // 登录用户均可访问
    component: '/page/dashboard/index.html'
  },

  // Org Management
  { path: '/org', component: '/page/sys/org/index.html', layout: 'default', meta: { auth: true } },
  { 
    path: '/org/:id', 
    component: '/page/sys/org/detail.html', 
    layout: 'default', 
    meta: { auth: true } // 页面内部需校验是否为成员
  },

  // User System
  { path: '/profile', component: '/page/user/profile.html', layout: 'default', meta: { auth: true } },
  { 
    path: '/users', 
    component: '/page/sys/user/index.html', 
    layout: 'default', 
    meta: { auth: true, roles: ['admin'] } // 仅系统管理员
  },

  // OAuth Management
  { path: '/oauth/apps', component: '/page/sys/oauth/index.html', layout: 'default', meta: { auth: true } },

  // Errors
  { path: '/403', component: '/page/403.html', layout: 'public' },
  { path: '*', component: '/page/404.html', layout: 'public' }
]

6. 交互与状态管理

  • 全局状态 ($env.$G):
    • user: 当前登录用户信息。
    • currentOrg: 当前选中的组织上下文 (影响 Header 显示和 API 请求 Header)。
    • token: JWT Token 管理。
  • API 请求:
    • 使用 $axios 拦截器,自动注入 Authorization: Bearer ...
    • 自动注入 X-Org-ID (当 currentOrg 存在时)。
  • 权限控制:
    • 路由守卫 (beforeEnter) 检查登录状态和角色。
    • 页面内使用 v-if 或指令控制按钮级别的权限显示。