# 组件使用文档 本文档详细介绍了 Telegram 营销管理系统中使用的各种组件及其使用方法。 ## 目录 1. [基础组件](#基础组件) 2. [业务组件](#业务组件) 3. [表单组件](#表单组件) 4. [表格组件](#表格组件) 5. [图表组件](#图表组件) 6. [上传组件](#上传组件) 7. [权限组件](#权限组件) 8. [国际化组件](#国际化组件) 9. [最佳实践](#最佳实践) ## 基础组件 ### 1. BasicTable 基础表格 基础表格组件,提供完整的数据展示和操作功能。 #### 基本用法 ```vue ``` #### 主要配置项 - `api`: 数据请求接口函数 - `columns`: 表格列定义 - `showIndexColumn`: 是否显示序号列 - `showTableSetting`: 是否显示表格设置 - `useSearchForm`: 是否使用搜索表单 - `formConfig`: 搜索表单配置 - `actionColumn`: 操作列配置 ### 2. BasicForm 基础表单 基础表单组件,支持动态表单生成和验证。 #### 基本用法 ```vue ``` #### 支持的组件类型 - `Input`: 输入框 - `InputPassword`: 密码输入框 - `InputNumber`: 数字输入框 - `InputTextArea`: 文本域 - `Select`: 选择器 - `CheckboxGroup`: 多选框组 - `RadioButtonGroup`: 单选按钮组 - `DatePicker`: 日期选择器 - `RangePicker`: 日期范围选择器 - `Upload`: 上传组件 ### 3. BasicModal 基础弹窗 基础弹窗组件,提供完整的弹窗功能。 #### 基本用法 ```vue ``` ## 业务组件 ### 1. AccountSelector 账号选择器 用于选择 Telegram 账号的业务组件。 #### 基本用法 ```vue ``` #### 属性配置 - `value`: 选中的账号ID - `multiple`: 是否支持多选 - `disabled`: 是否禁用 - `placeholder`: 占位文本 ### 2. GroupSelector 群组选择器 用于选择 Telegram 群组的业务组件。 #### 基本用法 ```vue ``` ### 3. MessageTemplate 消息模板 用于消息模板编辑和管理的组件。 #### 基本用法 ```vue ``` ## 表单组件 ### 1. 高级搜索表单 用于复杂条件搜索的表单组件。 ```vue ``` ### 2. 动态表单 支持动态添加和删除字段的表单。 ```vue ``` ## 表格组件 ### 1. 可编辑表格 支持行内编辑的表格组件。 ```vue ``` ### 2. 树形表格 支持树形结构展示的表格。 ```vue ``` ## 图表组件 ### 1. 基础图表 基于 ECharts 的图表组件封装。 ```vue ``` ### 2. 实时图表 支持实时数据更新的图表组件。 ```vue ``` ## 上传组件 ### 1. 基础文件上传 ```vue ``` ### 2. 图片上传预览 ```vue ``` ### 3. 文件拖拽上传 ```vue ``` ## 权限组件 ### 1. 权限指令 使用 v-permission 指令控制元素显示。 ```vue ``` ### 2. 权限组件 使用组件方式控制权限。 ```vue ``` ### 3. 权限路由守卫 ```typescript // 在路由配置中使用权限 export const routes = [ { path: '/user', component: UserLayout, meta: { title: '用户管理', permissions: ['user:view'], // 需要的权限 roles: ['admin', 'user'], // 允许的角色 }, children: [ { path: 'list', component: UserList, meta: { title: '用户列表', permissions: ['user:list'], }, }, { path: 'create', component: UserCreate, meta: { title: '新增用户', permissions: ['user:create'], }, }, ], }, ]; ``` ## 国际化组件 ### 1. 国际化文本 ```vue ``` ### 2. 语言切换器 ```vue ``` ### 3. 表单国际化 ```vue ``` ## 最佳实践 ### 1. 组件开发规范 #### 组件命名 - 使用 PascalCase 命名组件 - 组件文件名与组件名保持一致 - 业务组件添加业务前缀 ```typescript // ✅ 正确 export default defineComponent({ name: 'UserAccountSelector', // ... }); // ❌ 错误 export default defineComponent({ name: 'userAccountSelector', // ... }); ``` #### Props 定义 - 使用 TypeScript 类型定义 - 提供默认值和验证 - 添加注释说明 ```typescript interface Props { /** 选中的值 */ value?: string | string[]; /** 是否支持多选 */ multiple?: boolean; /** 是否禁用 */ disabled?: boolean; /** 占位文本 */ placeholder?: string; /** 最大选择数量 */ maxCount?: number; } const props = withDefaults(defineProps(), { value: undefined, multiple: false, disabled: false, placeholder: '请选择', maxCount: 10, }); ``` #### 事件定义 - 使用 defineEmits 定义事件 - 提供类型约束 - 添加事件说明 ```typescript interface Emits { /** 值变化事件 */ (e: 'update:value', value: string | string[]): void; /** 选择变化事件 */ (e: 'change', value: string | string[], option: any): void; /** 清空事件 */ (e: 'clear'): void; } const emit = defineEmits(); ``` ### 2. 组件使用最佳实践 #### 性能优化 - 合理使用 v-memo 缓存组件 - 大列表使用虚拟滚动 - 图表组件按需加载 ```vue ``` #### 错误处理 - 组件内部处理异常 - 提供错误边界组件 - 用户友好的错误提示 ```vue ``` #### 样式管理 - 使用 CSS Modules 或 Scoped CSS - 遵循 BEM 命名规范 - 支持主题自定义 ```vue ``` ### 3. 测试建议 #### 单元测试 - 测试组件的输入输出 - 测试用户交互 - 测试边界情况 ```typescript import { mount } from '@vue/test-utils'; import { describe, it, expect } from 'vitest'; import UserSelector from '../UserSelector.vue'; describe('UserSelector', () => { it('should render correctly', () => { const wrapper = mount(UserSelector, { props: { value: ['user1', 'user2'], multiple: true, }, }); expect(wrapper.exists()).toBe(true); expect(wrapper.findAll('.user-item')).toHaveLength(2); }); it('should emit change event when selection changes', async () => { const wrapper = mount(UserSelector); await wrapper.find('.user-option').trigger('click'); expect(wrapper.emitted('change')).toBeTruthy(); expect(wrapper.emitted('update:value')).toBeTruthy(); }); }); ``` #### 组件文档 - 使用 Storybook 展示组件 - 提供使用示例 - 记录 API 文档 ```typescript // UserSelector.stories.ts import type { Meta, StoryObj } from '@storybook/vue3'; import UserSelector from './UserSelector.vue'; const meta: Meta = { title: 'Components/UserSelector', component: UserSelector, parameters: { docs: { description: { component: '用户选择器组件,支持单选和多选模式', }, }, }, argTypes: { multiple: { control: 'boolean', description: '是否支持多选', }, disabled: { control: 'boolean', description: '是否禁用', }, }, }; export default meta; type Story = StoryObj; export const Default: Story = { args: { multiple: false, placeholder: '请选择用户', }, }; export const Multiple: Story = { args: { multiple: true, placeholder: '请选择多个用户', }, }; ``` ## 总结 本文档涵盖了系统中主要组件的使用方法和最佳实践。在实际开发中,建议: 1. **遵循组件设计原则**:单一职责、可复用、可测试 2. **保持 API 一致性**:统一的命名规范和参数格式 3. **注重性能优化**:合理使用缓存和懒加载 4. **完善错误处理**:提供友好的错误提示和恢复机制 5. **编写完整文档**:包括使用示例、API 说明和最佳实践 如有疑问或需要添加新的组件说明,请联系开发团队。