# 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 ``` #### 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