# VbTable 自动行合并功能 ## 概述 自动行合并功能允许表格组件根据数据内容自动计算并应用行合并,无需手动在数据中添加 `_rowSpan` 字段。 ## 使用方法 ### 基本用法 ```vue ``` ### 多层级合并 ```vue ``` ## Props 配置 ### autoRowMerge - **类型**: `boolean` - **默认值**: `false` - **说明**: 是否启用自动行合并功能 ### autoRowMergeFields - **类型**: `string[]` - **默认值**: `[]` - **说明**: 需要进行自动合并的字段列表,字段顺序决定层级关系 ## 工作原理 1. **数据拷贝**: 组件会深拷贝原始数据,避免修改原始数据源 2. **分组计算**: 根据指定的字段列表,逐行比较相邻数据的字段值 3. **层级判断**: 对于多层级合并,会检查所有上级字段是否相同 4. **自动设置**: 自动计算并设置 `_rowSpan` 值(使用 `rowSpanSuffix` 配置的后缀) ## 示例 ### 示例 1: 单字段合并 ```javascript const columns = [ { name: "部门", field: "department" }, { name: "姓名", field: "name" }, { name: "职位", field: "position" } ] const data = [ { department: "技术部", name: "张三", position: "工程师" }, { department: "技术部", name: "李四", position: "工程师" }, { department: "产品部", name: "王五", position: "产品经理" } ] ``` 使用 `:auto-row-merge-fields="['department']"` 后,相同部门的行会自动合并。 ### 示例 2: 多层级合并 ```javascript const columns = [ { name: "区域", field: "region" }, { name: "城市", field: "city" }, { name: "门店", field: "store" }, { name: "商品", field: "product" } ] const data = [ { region: "华东", city: "上海", store: "门店A", product: "商品1" }, { region: "华东", city: "上海", store: "门店A", product: "商品2" }, { region: "华东", city: "南京", store: "门店B", product: "商品1" } ] ``` 使用 `:auto-row-merge-fields="['region', 'city', 'store']"` 后: - 相同区域的行会合并 - 在同一区域内,相同城市的行会合并 - 在同一城市内,相同门店的行会合并 ## 优势 1. **简化代码**: 无需手动计算和设置 rowSpan 值 2. **自动同步**: 数据变化时自动重新计算合并关系 3. **易于维护**: 只需关注数据本身,不需要处理合并逻辑 4. **支持层级**: 天然支持多层级的合并场景 ## 注意事项 1. **性能考虑**: 自动合并会深拷贝数据,大数据量时可能影响性能 2. **覆盖行为**: 如果数据中已存在手动设置的 rowSpan,自动合并会覆盖它 3. **字段顺序**: 多层级合并时,字段顺序很重要,前面的字段是后面字段的父级 4. **数据类型**: 确保用于合并的字段值可以进行相等比较 ## 与手动合并的对比 | 特性 | 手动合并 | 自动合并 | | ---------- | ------------------ | -------------- | | 代码复杂度 | 高(需要计算逻辑) | 低(只需配置) | | 数据修改 | 需要修改原始数据 | 不修改原始数据 | | 维护成本 | 高 | 低 | | 灵活性 | 高(可精确控制) | 中(基于规则) | | 适用场景 | 复杂合并逻辑 | 常规分组合并 | ## 最佳实践 1. **简单场景**: 优先使用自动合并,代码更简洁 2. **复杂场景**: 如果需要特殊的合并逻辑,可以结合手动和自动合并 3. **大数据量**: 考虑在服务端预处理数据,或禁用自动合并 4. **动态数据**: 自动合并特别适合数据频繁变化的场景