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

167 lines
6.6 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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`)
```javascript
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` 或指令控制按钮级别的权限显示。