# 页面布局与间距控制规范
**版本**: v3.8
**更新时间**: 2026-03-24
---
## 📋 一、路由与页面布局对应表
### 1.1 主布局容器
所有页面都使用统一的布局结构:
```
← 页面容器(全局统一)
← Tips 提示(可选)
← 筛选工具栏(可选)
← 内容区块(白色背景)
{/* 表格/卡片/列表等 */}
```
### 1.2 路由与页面布局详细对应
| 路由 | 页面组件 | 标题 | 筛选栏 | 内容类型 | 使用组件 |
|------|---------|------|--------|---------|---------|
| **`/overview`** | `home/index` | 概览 | ❌ | 统计卡片 | `StatsGrid` |
| **`/appCenter`** | `appPlazaList/index` | 全部 RAG 应用 | ✅ | 卡片网格 | `AppCard` + `.app-card-grid` |
| **`/appCenter/category/*`** | `categoryApps/index` | 分类应用 | ✅ | 卡片网格 | `AppCard` + `.app-card-grid` |
| **`/appCenter/questionAnswer`** | `questionAnswer/list` | 我创建的应用 | ❌ | 卡片网格 | `AppCard` + `.app-card-grid` |
| **`/appCenter/questionAnswer/create`** | `questionAnswer/form` | 创建应用 | ❌ | 表单 | `Step1Drawer` |
| **`/knowledge/knowledgeLib`** | `knowledgeLib/list` | 知识库 | ✅ | 表格 | `Table` |
| **`/knowledge/knowledgeLib/create`** | `knowledgeLib/list` | 创建知识库 | ❌ | 表单 | `InfoModal` |
| **`/system/apiKey`** | `apiKey/index` | API Key 管理 | ✅ | 表格 | `Table` |
| **`/system/audit`** | `audit/index` | 应用审核 | ✅ | 表格 | `Table` |
| **`/universalChat`** | `universalChat/index` | 智能问答 | ❌ | 对话界面 | `ChatInterface` |
| **`/mobile-test`** | `mobile/MobileH5` | H5 测试 | ✅ | 混合 | `FilterBar` + `ChatInterface` |
---
## 📐 二、全局间距控制
### 2.1 间距变量系统
所有间距使用全局变量,定义在 `src/styles/variables.less`:
```less
// 4px 基准间距系统
@spacing-1: 4px; // 最小间距
@spacing-2: 8px; // 小间距
@spacing-3: 12px; // 中等间距
@spacing-4: 16px; // 标准间距
@spacing-5: 20px; // 大间距
@spacing-6: 24px; // 加大间距
@spacing-8: 32px; // 特大间距
@spacing-10: 40px; // 页面级间距
```
### 2.2 容器间距控制
#### **页面容器(`.page-container`)**
```less
.page-container {
padding: @spacing-4 @spacing-6; // 上下 16px,左右 24px
min-height: calc(100vh - @header-height);
background: @bg-primary;
}
```
**修改方式**:
```less
// 在 global.less 中统一修改
.page-container {
padding: @spacing-6 @spacing-8; // 改为更宽松的间距
}
```
#### **内容区块(`.content-section`)**
```less
.content-section {
margin-bottom: @spacing-6; // 与下一区块间距 24px
padding: @spacing-4; // 内边距 20px
background: @bg-secondary;
border-radius: @radius-lg;
}
```
**修改方式**:
```less
// 在 global.less 中统一修改
.content-section {
margin-bottom: @spacing-5; // 改为 20px
padding: @spacing-4; // 改为 16px
}
```
#### **区块间距(`.section-gap`)**
```less
.section-gap {
margin-bottom: @spacing-5; // 20px 统一间距
}
```
### 2.3 列表头部间距
```less
.list-header {
margin-bottom: @spacing-4; // 与下方内容间距 16px
padding-bottom: @spacing-3; // 标题栏底部内边距 12px
border-bottom: 1px solid @border-base;
// 紧跟 GuideTips 时
&.with-tips {
margin-bottom: 0; // 紧贴 GuideTips
}
}
```
### 2.4 筛选工具栏间距
```less
.filter-bar {
padding: @spacing-3 0; // 上下 12px
margin-bottom: 0; // 无外边距(让内容容器控制)
}
```
---
## 🎯 三、全局控制方法
### 3.1 修改全局间距(推荐)
**位置**:`src/styles/global.less`
**示例 1**:增加所有页面容器的内边距
```less
// 修改前
.page-container {
padding: @spacing-4 @spacing-6; // 16px / 24px
}
// 修改后
.page-container {
padding: @spacing-6 @spacing-8; // 24px / 32px - 更宽松
}
```
**示例 2**:统一内容区块间距
```less
// 修改前
.content-section {
margin-bottom: @spacing-6; // 24px
}
// 修改后
.content-section {
margin-bottom: @spacing-5; // 20px - 更紧凑
}
```
### 3.2 修改特定页面间距
**位置**:页面自己的 `style.less` 文件
**示例**:知识库列表页面增加额外间距
```less
// src/pages/knowledgeLib/list/style.less
.knowledgeLibList {
// 覆盖全局间距
.page-container {
padding-top: @spacing-8; // 顶部增加间距
}
.content-section {
margin-bottom: @spacing-8; // 增加底部间距
}
}
```
### 3.3 使用间距工具类
**在 JSX 中使用**:
```tsx
// 增加顶部间距
内容
{/* margin-top: 16px */}
// 增加底部间距
内容
{/* margin-bottom: 24px */}
// 增加内边距
内容
{/* padding: 20px */}
```
**可用的工具类**:
| 类名 | 说明 | 值 |
|------|------|-----|
| `.mt-1` ~ `.mt-6` | 上外边距 | 4px ~ 24px |
| `.mb-1` ~ `.mb-6` | 下外边距 | 4px ~ 24px |
| `.p-1` ~ `.p-6` | 内边距 | 4px ~ 24px |
---
## 📊 四、常见布局场景
### 4.1 标准列表页(知识库、API Key、审核)
```tsx
{/* 标题区域 */}
{/* Tips 提示 */}
{/* 筛选工具栏 */}
{/* 内容区块 */}
```
**间距说明**:
- `.list-header` → `.guide-tips-wrapper`: 0px (紧贴)
- `.guide-tips-wrapper` → `.filter-bar`: 0px (紧贴)
- `.filter-bar` → `.content-section`: 0px (紧贴)
- `.content-section` 内部:`padding: 20px`
### 4.2 卡片网格页(应用中心)
```tsx
```
**间距说明**:
- `.filter-bar` → `.app-card-grid`: 0px (紧贴)
- `.app-card-grid` 内部:`gap: 16px`
- `.app-card-grid` → `.pagination-container`: 24px
### 4.3 统计概览页(首页)
```tsx
```
**间距说明**:
- `.list-header` → `StatsGrid`: 24px (默认)
---
## 🔧 五、快速修改指南
### 5.1 增加所有页面的上下间距
**修改位置**:`src/styles/global.less`
```less
.page-container {
padding: @spacing-6 @spacing-8; // 改为 24px / 32px
}
```
### 5.2 增加内容区块之间的间距
```less
.content-section {
margin-bottom: @spacing-8; // 改为 32px
}
```
### 5.3 增加标题与内容的间距
```less
.list-header {
margin-bottom: @spacing-6; // 改为 24px
}
```
### 5.4 增加筛选栏与内容的间距
**方法 1**:在 `FilterBar` 组件样式中修改
```less
// src/components/common/FilterBar/index.less
.filter-bar {
margin-bottom: @spacing-4; // 改为 16px
}
```
**方法 2**:在内容区块上增加上边距
```less
.content-section {
margin-top: @spacing-4; // 增加顶部间距 16px
}
```
---
## 📋 六、最佳实践
### ✅ 推荐做法
1. **使用全局变量**
```less
// ✅ 正确
.my-class {
margin-bottom: @spacing-5;
}
// ❌ 错误
.my-class {
margin-bottom: 20px; // 硬编码
}
```
2. **优先修改全局样式**
```less
// ✅ 在 global.less 中统一修改
.content-section {
margin-bottom: @spacing-8;
}
```
3. **使用工具类**
```tsx
// ✅ 使用现有工具类
内容
```
### ❌ 避免的做法
1. **不要在组件中硬编码间距**
```tsx
// ❌ 错误
内容
// ✅ 正确
内容
```
2. **不要重复定义全局样式**
```less
// ❌ 错误 - 在组件样式中重复定义
.my-component .content-section {
margin-bottom: 24px;
}
// ✅ 正确 - 使用全局类
内容
```
---
## 🎯 七、总结
### 全局间距控制层级
```
1. 页面容器 (.page-container)
└─ padding: @spacing-4 @spacing-6
2. 标题区域 (.list-header)
└─ margin-bottom: @spacing-4
3. Tips 提示 (.guide-tips-wrapper)
└─ margin-bottom: @spacing-4
4. 筛选工具栏 (.filter-bar)
└─ margin-bottom: 0
5. 内容区块 (.content-section)
└─ margin-bottom: @spacing-6
└─ padding: @spacing-5
```
### 修改优先级
1. **全局修改** → `src/styles/global.less`
2. **页面特定** → `src/pages/xxx/style.less`
3. **组件特定** → `src/components/xxx/index.less`
---
**文档维护**: AI Assistant
**最后更新**: 2026-03-24
**版本**: v3.8