# Uni-App-X 组件库规范 - CRMEB 风格 ## 📚 概述 本文档定义了 mall 项目中可复用组件的开发规范,参考 CRMEB 的组件库设计。所有组件必须遵循此规范。 --- ## 1. 组件分类体系 ``` components/ ├── basic/ # 基础组件 │ ├── Button.uvue │ ├── Input.uvue │ ├── Select.uvue │ ├── Checkbox.uvue │ ├── Radio.uvue │ └── ... ├── container/ # 容器组件 │ ├── Card.uvue │ ├── Modal.uvue │ ├── Drawer.uvue │ └── ... ├── data/ # 数据展示组件 │ ├── Table.uvue │ ├── List.uvue │ ├── Tree.uvue │ └── ... ├── form/ # 表单组件 │ ├── Form.uvue │ ├── FormItem.uvue │ ├── DatePicker.uvue │ └── ... ├── feedback/ # 反馈组件 │ ├── Message.uvue │ ├── Toast.uvue │ ├── Modal.uvue │ └── ... └── navigation/ # 导航组件 ├── Tabs.uvue ├── Breadcrumb.uvue └── ... ``` --- ## 2. 基础组件规范 ### 2.1 Button(按钮) #### 特性 - 4 种类型: primary / default / danger / success - 3 种尺寸: sm / md / lg - 支持禁用和加载状态 - 支持前置和后置图标 #### 代码示例 ```uvue ``` #### 使用示例 ```uvue ``` ### 2.2 Input(输入框) #### 特性 - 支持不同类型: text / password / number / email - 支持前缀和后缀插槽 - 支持验证状态反馈 - 支持 clearable 清空功能 #### 代码示例 ```uvue ``` ### 2.3 Select(下拉选择) #### 特性 - 支持单选和多选 - 支持搜索过滤 - 支持虚拟滚动(大数据) - 支持自定义选项模板 #### 示例 ```uvue ``` --- ## 3. 容器组件规范 ### 3.1 Card(卡片) ```uvue ``` ### 3.2 Modal(模态框) ```uvue ``` --- ## 4. 表单组件规范 ### 4.1 Form(表单容器) ```uvue ``` ### 4.2 FormItem(表单项) ```uvue ``` --- ## 5. 数据展示组件规范 ### 5.1 Table(表格) 核心要点: - 支持排序和筛选 - 支持行选择 - 支持固定列头 - 支持虚拟滚动 ```uvue ``` --- ## 6. 反馈组件规范 ### 6.1 Message(消息提示) ```uvue ``` --- ## 7. 组件命名规范 ### 7.1 文件命名 - 使用 **PascalCase**(帕斯卡命名法) - 例如: `Button.uvue`, `FormItem.uvue`, `TableCell.uvue` ### 7.2 Props 命名 - 使用 **camelCase**(驼峰命名法) - 例如: `modelValue`, `isLoading`, `onConfirm` ### 7.3 事件命名 - 使用 **camelCase**(驼峰命名法) - 例如: `@click`, `@change`, `@submit` ### 7.4 Slot 命名 - 使用 **kebab-case**(短横线命名法) - 例如: ``, `` ### 7.5 Class 命名 - 使用 **kebab-case**(短横线命名法) - 例如: `.form-item`, `.btn-primary`, `.list-item` --- ## 8. Props 和 Emit 规范 ### 8.1 Props 验证 ```typescript interface ButtonProps { type?: "primary" | "default" | "danger" | "success"; size?: "sm" | "md" | "lg"; label: string; disabled?: boolean; loading?: boolean; } const props = withDefaults(defineProps(), { type: "primary", size: "md", disabled: false, loading: false, }); ``` ### 8.2 Emit 验证 ```typescript const emit = defineEmits<{ click: []; change: [value: string]; submit: [formData: Record]; }>(); ``` --- ## 9. 组件文档模板 每个组件都应包含以下文档: ```markdown # Button 组件 ## 描述 按钮组件,支持多种类型和尺寸。 ## Props | 属性 | 类型 | 默认值 | 说明 | | -------- | ------- | ------- | ---------------------------------------- | | type | string | primary | 按钮类型: primary/default/danger/success | | size | string | md | 按钮尺寸: sm/md/lg | | label | string | - | 按钮文本 | | disabled | boolean | false | 是否禁用 | | loading | boolean | false | 是否加载中 | ## Events | 事件 | 参数 | 说明 | | ----- | ---- | -------- | | click | - | 点击事件 | ## Slots 无 ## 示例 \`\`\`vue