# Uni-App-X 页面结构规范 - CRMEB 风格
## 📚 概述
本文档定义了 mall 项目中所有 admin 页面的标准结构和编写方法,参考 CRMEB 的专业设计模式。
---
## 1. 页面基本结构
### 1.1 完整模板
所有 admin 页面都应遵循此结构:
```uvue
```
---
## 2. 列表页面(ListPage)
### 2.1 结构说明
列表页面的典型结构:
```
┌─────────────────────────────────────┐
│ 页面标题 [+ 新增] [导出] │ <- page-header
├─────────────────────────────────────┤
│ ┌───────────────────────────────────┐│
│ │ 搜索 [输入框] [搜索] [重置] ││ <- search-section
│ └───────────────────────────────────┘│
├─────────────────────────────────────┤
│ ┌───────────────────────────────────┐│
│ │ 表格头 | 表格头 | 表格头 | 操作 ││
│ ├───────────────────────────────────┤│
│ │ 行数据 | 行数据 | 行数据 | 编辑删除 ││ <- list-card
│ │ 行数据 | 行数据 | 行数据 | 编辑删除 ││
│ │ 行数据 | 行数据 | 行数据 | 编辑删除 ││
│ └───────────────────────────────────┘│
├─────────────────────────────────────┤
│ [上一页] 第 1 页,共 10 页 [下一页] │ <- pagination
└─────────────────────────────────────┘
```
### 2.2 完整示例代码
```uvue
名称:
状态:
{{ item.id }}
{{ item.name }}
{{ statusMap[item.status] }}
{{ formatTime(item.createTime) }}
暂无数据
```
---
## 3. 表单页面(FormPage)
### 3.1 结构说明
表单页面的典型结构:
```
┌─────────────────────────────────────┐
│ 页面标题(新增/编辑) │ <- page-header
├─────────────────────────────────────┤
│ ┌───────────────────────────────────┐│
│ │ 基本信息 ││
│ │ ├─ 名称 [输入框] ││
│ │ ├─ 描述 [文本框] ││
│ │ ├─ 分类 [下拉选择] ││
│ │ └─ 状态 [单选按钮] ││ <- form-card
│ └───────────────────────────────────┘│
│ ┌───────────────────────────────────┐│
│ │ 详细配置 ││
│ │ ├─ 参数1 [输入框] ││
│ │ └─ 参数2 [输入框] ││
│ └───────────────────────────────────┘│
├─────────────────────────────────────┤
│ [保存] [取消] │ <- form-footer
└─────────────────────────────────────┘
```
### 3.2 完整示例代码
```uvue
{{ errors.name }}
{{ errors.category }}
```
---
## 4. 详情页面(DetailPage)
### 4.1 结构说明
详情页面的典型结构:
```
┌─────────────────────────────────────┐
│ [< 返回] 页面标题 [编辑] [删除] │ <- page-header
├─────────────────────────────────────┤
│ ┌───────────────────────────────────┐│
│ │ 基本信息 ││
│ │ ├─ 名称: 某某 ││
│ │ ├─ 描述: 描述内容 ││
│ │ └─ 创建时间: 2024-01-01 ││ <- info-card
│ └───────────────────────────────────┘│
│ ┌───────────────────────────────────┐│
│ │ 操作日志 ││
│ │ ├─ 2024-01-01 10:00 - 创建 ││ <- log-card
│ │ └─ 2024-01-02 11:00 - 更新 ││
│ └───────────────────────────────────┘│
└─────────────────────────────────────┘
```
### 4.2 完整示例代码
```uvue
ID:
{{ item.id }}
名称:
{{ item.name }}
描述:
{{ item.description }}
状态:
{{ statusMap[item.status] }}
创建时间:
{{ formatTime(item.createTime) }}
更新时间:
{{ formatTime(item.updateTime) }}
{{ formatTime(log.createTime) }}
{{ log.action }}
操作人: {{ log.operator }}
```
---
## 5. 布局规范
### 5.1 FlexBox 布局规则
```scss
// 水平排列
.flex-row {
display: flex;
flex-direction: row;
align-items: center;
gap: $space-md;
}
// 垂直排列
.flex-col {
display: flex;
flex-direction: column;
gap: $space-md;
}
// 间隔排列
.space-between {
display: flex;
justify-content: space-between;
align-items: center;
}
// 居中排列
.center {
display: flex;
justify-content: center;
align-items: center;
}
```
### 5.2 Grid 栅格
```scss
// 栅格容器
.grid {
display: grid;
gap: $space-lg;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
}
// 响应式栅格
@media (min-width: $breakpoint-lg) {
.grid {
grid-template-columns: repeat(3, 1fr);
}
}
```
---
## 6. 常见问题
### Q1: 如何处理长文本溢出?
```scss
// 单行溢出
.text-truncate {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
// 多行溢出
.text-clamp {
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
```
### Q2: 如何实现响应式页面?
始终采用"移动优先"策略:
1. 先为移动设备设计样式
2. 再使用 `@media` 为更大屏幕添加样式
3. 使用断点变量,不要硬编码断点值
### Q3: 如何管理颜色主题?
所有颜色值必须使用 `uni.scss` 中定义的变量。如需更换主题,只需修改变量值。
---
## 总结
✅ **页面开发核心原则**:
1. **统一结构** - 所有页面遵循相同的结构模板
2. **设计系统** - 所有样式使用 `uni.scss` 变量
3. **组件复用** - 使用 `AdminLayout` 等通用组件
4. **交互一致** - 遵循相同的交互和验证模式
5. **响应式设计** - 移动优先,逐步增强
❌ **禁止做法**:
- 不要创建不遵循模板的页面
- 不要使用硬编码的样式值
- 不要重复代码,尽量复用组件
- 不要创建孤立的页面样式
---
**文档版本**: 1.0
**最后更新**: 2026-01-31
**维护者**: AI Assistant