# CRMEB 页面设计规范与 Uni-App-X UVue 复刻指南
## 📋 目录
1. [CRMEB 项目架构分析](#crmeb-项目架构分析)
2. [页面布局模式](#页面布局模式)
3. [样式系统设计](#样式系统设计)
4. [组件设计规范](#组件设计规范)
5. [工程化配置](#工程化配置)
6. [UVue 复刻方案](#uvue-复刻方案)
7. [迁移检查清单](#迁移检查清单)
---
## CRMEB 项目架构分析
### 1. 项目结构概览
```
CRMEB/template/admin/
├── src/
│ ├── layout/ # 布局系统
│ │ ├── index.vue # 主布局容器(支持多种布局模式)
│ │ ├── main/ # 主要布局模式
│ │ │ ├── defaults.vue # 默认布局
│ │ │ ├── classic.vue # 经典布局
│ │ │ ├── transverse.vue # 横向布局
│ │ │ └── columns.vue # 分栏布局
│ │ ├── navBars/ # 导航栏系统
│ │ │ ├── breadcrumb/ # 面包屑
│ │ │ └── tagsView/ # 标签页
│ │ ├── navMenu/ # 侧边栏菜单
│ │ ├── footer/ # 页脚
│ │ └── component/ # 布局相关组件
│ ├── components/ # 全局可复用组件(60+)
│ │ ├── cards/ # 卡片组件
│ │ ├── from/ # 表单相关
│ │ ├── searchFrom/ # 搜索表单
│ │ └── ...
│ ├── pages/ # 页面模块(16个大类)
│ │ ├── account/ # 账户管理
│ │ ├── agent/ # 代理管理
│ │ ├── app/ # APP管理
│ │ ├── cms/ # CMS内容
│ │ ├── finance/ # 财务
│ │ ├── order/ # 订单
│ │ ├── product/ # 商品
│ │ ├── system/ # 系统设置
│ │ ├── user/ # 用户管理
│ │ └── ...
│ ├── styles/ # 全局样式
│ ├── router/ # 路由配置
│ ├── store/ # 状态管理(Vuex)
│ ├── utils/ # 工具函数
│ └── ...
├── package.json # 项目依赖(Vue 2)
├── vue.config.js # Webpack 配置
├── .prettierrc.js # 代码格式化规则
└── babel.config.js # Babel 配置
```
### 2. 核心设计特点
#### 2.1 多布局支持
CRMEB 支持 4 种布局模式:
- **Defaults**: 侧边栏 + 顶部菜单 + 内容区
- **Classic**: 经典布局(左菜单 + 内容)
- **Transverse**: 顶部菜单 + 内容
- **Columns**: 三栏布局(侧菜单 + 侧栏 + 内容)
#### 2.2 标签页系统
- 每个打开的页面都生成一个标签
- 支持标签页关闭、固定、刷新
- 与路由历史联动
#### 2.3 面包屑导航
- 动态生成,根据路由元信息
- 支持多级导航回溯
#### 2.4 响应式设计
- 自动监听窗口大小
- < 1000px 时自动切换移动端布局
- 侧边栏自动收起
---
## 页面布局模式
### CRMEB 的四种布局
#### 模式 1: Defaults(默认布局 - 最常用)
```
┌─────────────────────────────────────────┐
│ Logo │ Breadcrumb │ Tags │ User │ ← NavBars
├─────────┼─────────────────────────────────┤
│ Menu │ │
│ │ Content Area │
│ │ (Page Components) │
│ │ │
├─────────┴─────────────────────────────────┤
│ Footer │
└─────────────────────────────────────────┘
```
**特点**:
- 左侧固定菜单栏
- 顶部面包屑 + 标签页
- 主内容区占据剩余空间
#### 模式 2: Classic(经典布局)
```
┌─────────────────────────────────────────┐
│ Logo │ Breadcrumb │ Tags │ User Settings │ ← NavBars
├──────┴─────────────────────────────────────┤
│ Menu │ Content Area │
│ │ (Page Components) │
│ │ │
├──────┴─────────────────────────────────────┤
│ Footer │
└─────────────────────────────────────────────┘
```
#### 模式 3: Transverse(横向菜单)
```
┌────────────────────────────────────────┐
│ Logo │ Menu 1 │ Menu 2 │ ... │ Settings│ ← Top Menu
├────────────────────────────────────────┤
│ Breadcrumb │ Tags │ Actions │
├────────────────────────────────────────┤
│ │
│ Content Area │
│ (Page Components) │
│ │
└────────────────────────────────────────┘
```
#### 模式 4: Columns(三栏布局)
```
┌──────────────────────────────────────────┐
│ NavBars (Breadcrumb + Tags) │
├─────────┬──────────┬──────────────────────┤
│ Menu │ SubMenu │ Content Area │
│ │ │ (Page Components) │
│ │ │ │
└─────────┴──────────┴──────────────────────┘
```
---
## 样式系统设计
### 1. 全局样式架构
```scss
styles/
├── common.scss # 通用样式重置、基础类名
├── variables.scss # CSS 变量、主题颜色
├── animate.scss # 动画库
├── element-ui.scss # Element UI 主题覆盖
└── index.scss # 主入口文件
```
### 2. 颜色系统
CRMEB 使用标准设计系统颜色:
- **主颜色**: `#1890ff`(蓝色)
- **成功**: `#52c41a`(绿色)
- **警告**: `#faad14`(黄色)
- **错误**: `#ff4d4f`(红色)
- **边框**: `#d9d9d9`(灰色)
- **文字**: `#000000` / `#666666` / `#999999`
### 3. 间距系统
```scss
$space-xs: 4px;
$space-sm: 8px;
$space: 12px;
$space-md: 16px;
$space-lg: 24px;
$space-xl: 32px;
```
### 4. 圆角系统
```scss
$radius-xs: 2px;
$radius-sm: 4px;
$radius: 6px;
$radius-lg: 8px;
$radius-xl: 12px;
```
### 5. 阴影系统
```scss
$shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.06);
$shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
$shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.15);
```
---
## 组件设计规范
### 1. 组件命名规范
```
常用组件类型:
- Cards/ # 卡片展示(数据统计卡、信息卡)
- Form/ # 表单相关(表单控件、表单验证)
- List/ # 列表显示(表格、数据列表)
- Modal/ # 模态框(确认框、详情框)
- Table/ # 表格组件(支持排序、分页、筛选)
- Upload/ # 上传组件(图片、视频、文件)
- Search/ # 搜索组件(高级搜索、快速搜索)
```
### 2. 常用组件库
CRMEB 使用 Element UI 作为基础组件库:
- `el-button` - 按钮
- `el-input` - 输入框
- `el-select` - 选择器
- `el-table` - 表格
- `el-form` - 表单
- `el-dialog` - 对话框
- `el-tree` - 树形控件
- `el-pagination` - 分页
### 3. 页面组件结构
```vue
```
---
## 工程化配置
### 1. 构建工具配置
**vue.config.js** (Webpack):
```javascript
module.exports = {
productionSourceMap: false,
configureWebpack: {
resolve: {
alias: {
"@": path.resolve(__dirname, "./src"),
},
},
},
chainWebpack: (config) => {
// 优化大文件分割
config.optimization.splitChunks({
cacheGroups: {
vendor: {
test: /[\\/]node_modules[\\/]/,
name: "chunk-vendors",
priority: 10,
},
common: {
minChunks: 2,
priority: 5,
reuseExistingChunk: true,
},
},
});
},
};
```
### 2. 代码格式化配置
**.prettierrc.js**:
```javascript
module.exports = {
printWidth: 100,
tabWidth: 2,
useTabs: false,
semi: true,
singleQuote: true,
trailingComma: "es5",
bracketSpacing: true,
arrowParens: "always",
};
```
### 3. ESLint 配置
**.eslintrc.js**:
```javascript
module.exports = {
root: true,
env: {
node: true,
browser: true,
es2021: true,
},
extends: ["plugin:vue/essential", "eslint:recommended"],
parserOptions: {
parser: "babel-eslint",
ecmaVersion: 2020,
},
rules: {
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
},
};
```
### 4. Babel 配置
**babel.config.js**:
```javascript
module.exports = {
presets: ["@vue/cli-plugin-babel/preset"],
plugins: [],
};
```
---
## UVue 复刻方案
### 1. 布局系统复刻
#### 1.1 AdminLayout 增强版
**layouts/admin/AdminLayout.uvue** - 支持多种布局:
```uvue
```
### 2. 样式系统复刻
#### 2.1 主样式文件
**uni.scss** - 全局 SCSS 变量:
```scss
// 颜色系统
$primary-color: #1890ff;
$success-color: #52c41a;
$warning-color: #faad14;
$error-color: #ff4d4f;
$info-color: #1890ff;
$text-primary: #000000;
$text-secondary: #666666;
$text-disabled: #999999;
$border-color: #d9d9d9;
$background-color: #f5f5f5;
// 间距系统
$space-xs: 4px;
$space-sm: 8px;
$space: 12px;
$space-md: 16px;
$space-lg: 24px;
$space-xl: 32px;
// 圆角系统
$radius-xs: 2px;
$radius-sm: 4px;
$radius: 6px;
$radius-lg: 8px;
$radius-xl: 12px;
// 阴影系统
$shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.06);
$shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
$shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.15);
// 字体大小
$font-size-xs: 12px;
$font-size-sm: 13px;
$font-size: 14px;
$font-size-md: 16px;
$font-size-lg: 18px;
$font-size-xl: 20px;
// 行高
$line-height-xs: 1.2;
$line-height-sm: 1.4;
$line-height: 1.6;
$line-height-lg: 1.8;
// 过渡动画
$transition-duration: 0.3s;
$transition-timing: cubic-bezier(0.645, 0.045, 0.355, 1);
```
#### 2.2 通用样式类
**styles/common.scss** - 常用工具类:
```scss
// 布局相关
.flex {
display: flex;
}
.flex-center {
display: flex;
align-items: center;
justify-content: center;
}
.flex-between {
display: flex;
align-items: center;
justify-content: space-between;
}
.flex-col {
display: flex;
flex-direction: column;
}
// 间距相关
.m-xs {
margin: $space-xs;
}
.m-sm {
margin: $space-sm;
}
.m {
margin: $space;
}
.m-md {
margin: $space-md;
}
.m-lg {
margin: $space-lg;
}
.m-xl {
margin: $space-xl;
}
.p-xs {
padding: $space-xs;
}
.p-sm {
padding: $space-sm;
}
.p {
padding: $space;
}
.p-md {
padding: $space-md;
}
.p-lg {
padding: $space-lg;
}
.p-xl {
padding: $space-xl;
}
// 文字相关
.text-center {
text-align: center;
}
.text-left {
text-align: left;
}
.text-right {
text-align: right;
}
.text-primary {
color: $text-primary;
}
.text-secondary {
color: $text-secondary;
}
.text-disabled {
color: $text-disabled;
}
.text-xs {
font-size: $font-size-xs;
}
.text-sm {
font-size: $font-size-sm;
}
.text {
font-size: $font-size;
}
.text-md {
font-size: $font-size-md;
}
.text-lg {
font-size: $font-size-lg;
}
// 显示/隐藏
.hidden {
display: none;
}
.block {
display: block;
}
.inline-block {
display: inline-block;
}
// 溢出处理
.truncate {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.line-clamp-2 {
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
// 边框
.border {
border: 1px solid $border-color;
}
.border-top {
border-top: 1px solid $border-color;
}
.border-bottom {
border-bottom: 1px solid $border-color;
}
.border-left {
border-left: 1px solid $border-color;
}
.border-right {
border-right: 1px solid $border-color;
}
// 圆角
.rounded {
border-radius: $radius;
}
.rounded-sm {
border-radius: $radius-sm;
}
.rounded-lg {
border-radius: $radius-lg;
}
// 阴影
.shadow-sm {
box-shadow: $shadow-sm;
}
.shadow {
box-shadow: $shadow;
}
.shadow-lg {
box-shadow: $shadow-lg;
}
// 背景色
.bg-white {
background-color: #ffffff;
}
.bg-light {
background-color: $background-color;
}
.bg-primary {
background-color: $primary-color;
}
// 透明度
.opacity-50 {
opacity: 0.5;
}
.opacity-75 {
opacity: 0.75;
}
```
### 3. 页面模板复刻
#### 3.1 标准列表页面
**pages/mall/admin/template/ListPage.uvue**:
```uvue
共 {{ total }} 条记录
```
#### 3.2 表单页面
**pages/mall/admin/template/FormPage.uvue**:
```uvue
```
---
## 组件库清单
### 必须实现的组件
#### 1. 基础组件
- [ ] Button(按钮)
- [ ] Input(输入框)
- [ ] Select(选择器)
- [ ] Checkbox(复选框)
- [ ] Radio(单选框)
- [ ] Switch(开关)
- [ ] DatePicker(日期选择器)
#### 2. 容器组件
- [ ] Card(卡片)
- [ ] Modal(模态框)
- [ ] Drawer(抽屉)
- [ ] Tabs(标签页)
- [ ] Collapse(折叠面板)
#### 3. 数据展示
- [ ] Table(表格)
- [ ] List(列表)
- [ ] Pagination(分页)
- [ ] Tree(树形控件)
- [ ] Empty(空状态)
#### 4. 表单组件
- [ ] Form(表单)
- [ ] Upload(上传)
- [ ] SearchForm(搜索表单)
- [ ] Filter(高级筛选)
#### 5. 反馈组件
- [ ] Message(消息)
- [ ] Toast(提示)
- [ ] Confirm(确认框)
- [ ] Loading(加载中)
#### 6. 导航组件
- [ ] Menu(菜单)
- [ ] Breadcrumb(面包屑)
- [ ] Tabs(标签)
- [ ] Pagination(分页)
---
## 迁移检查清单
### Phase 1: 基础设施
- [ ] 创建样式系统文件
- [ ] uni.scss(全局变量)
- [ ] styles/common.scss(通用类)
- [ ] styles/animate.scss(动画)
- [ ] 更新 AdminLayout 支持多布局
- [ ] Defaults 布局
- [ ] Classic 布局
- [ ] Columns 布局
- [ ] 配置工程化工具
- [ ] .eslintrc 配置
- [ ] .prettierrc 配置
- [ ] tsconfig.json 优化
### Phase 2: 核心组件
- [ ] 实现基础 UI 组件库
- [ ] 实现 FormView 表单组件
- [ ] 实现 TableView 表格组件
- [ ] 实现 SearchForm 搜索组件
### Phase 3: 页面模板
- [ ] 创建列表页面模板
- [ ] 创建表单页面模板
- [ ] 创建详情页面模板
- [ ] 创建仪表板页面模板
### Phase 4: 样式规范化
- [ ] 统一所有页面的样式
- [ ] 规范间距使用
- [ ] 规范颜色使用
- [ ] 规范排版样式
### Phase 5: 文档完善
- [ ] 编写组件使用文档
- [ ] 编写样式规范文档
- [ ] 编写页面开发指南
- [ ] 维护变更日志
---
## 推荐阅读
- [ADMIN_SIDEBAR_COMPLETE_GUIDE.md](ADMIN_SIDEBAR_COMPLETE_GUIDE.md) - 侧边栏完整指南
- [CRMEB_DASHBOARD_GUIDE.md](CRMEB_DASHBOARD_GUIDE.md) - 仪表板设计指南
- [UNI_APP_X_PAGE_FIX_GUIDE.md](UNI_APP_X_PAGE_FIX_GUIDE.md) - uni-app-x 页面修复指南
---
**文档维护者**: AI Assistant
**最后更新**: 2026-01-31
**版本**: 1.0