Skip to content

API

CellMerger

单元格合并工具类

语法

new CellMerger(params)

params

字段类型必填默认值描述
paramsObject配置参数

params 属性

字段类型必填默认值描述
dataSourceObject[]数据源
mergeFieldsstring[]|Object[]需要进行「行合并」的字段
genSortboolean是否生成「行合并」后的序号
sortBystring按照该字段的纬度进行排序 ( 默认取 mergeFields 的第一项 )
modenumber合并模式
columnsObject[]列头(合并列时必填)
reCalcbooleanfalse是否重新计算合并 ( 例如,动态表格增加后重新计算合并 )

mode 属性

名称类型描述
Rownumber0合并行
Colnumber1合并列
RowColnumber2合并行和列 (已弃用) 🚨: 实际展示效果不好,所以废弃了

mergeFields 属性

名称类型必填描述
fieldstring字段名称
callbackFunction自定义逻辑进行「行合并计算」

columns 属性

名称类型必填描述
propstring列字段
js
const columns = [
  {
    prop: "name",
  },
  {
    prop: "age",
  },
  {
    prop: "address",
  },
];

方法

名称参数描述
getMergedData--获取合并后的数据

示例代码

js
import { CellMerger, Mode } from "@zlabnext/ztool";

// 属性配置
const options = {
  mode: Mode.Row,
  dataSource: [
    { province: "山东省", name: "张三" },
    { province: "山东省", name: "张三" },
    { province: "江苏省", name: "李四" },
  ],
  mergeFields: [
    {
      field: "province",
      callback(curItem, nextItem) {
        // 自定义合并条件
        return (
          curItem.name === nextItem.name &&
          curItem.province === nextItem.province
        );
      },
    },
  ],
  genSort: true,
};
const cellMerger = new CellMerger(options);
// 合并后的数据
const mergedData = cellMerger.getMergedData();

getMergedData

获取合并后的数据

语法

getMergedData(params)

params

CellMerger

示例代码

js
import { getMergedData, Mode } from "@zlabnext/ztool";

// 属性配置
const options = {
  mode: Mode.Row,
  dataSource: [
    { province: "山东省", name: "张三" },
    { province: "山东省", name: "张三" },
    { province: "江苏省", name: "李四" },
  ],
  mergeFields: [
    {
      field: "province",
      callback(curItem, nextItem) {
        // 自定义合并条件
        return (
          curItem.name === nextItem.name &&
          curItem.province === nextItem.province
        );
      },
    },
  ],
  genSort: true,
};
// 合并后的数据
const mergeData = getMergedData(options);

getFieldSpan

获取字段合并配置,例如为 el-table 处理 spanMethod

语法

getFieldSpan(row, field)

参数

字段类型必填描述
rowObject行数据
fieldstring目标字段的合并数据

示例代码

js
import { getFieldSpan } from "@zlabnext/ztool";

const spanMethod = ({ row, columnIndex }) => {
  if (columnIndex === 0) {
    // 核心代码
    return getFieldSpan(row, "province");
  }

  return {
    rowspan: 1,
    colspan: 1,
  };
};

splitIntoFragments

将数据拆分为二维数组,一般用于分页打印 PDF。

语法

splitIntoFragments(options)

params

字段类型必填描述
paramsObject配置参数

params 属性

字段类型必填描述
pageSizenumber每段的条数

TIP

其他属性同 CellMerger

示例代码

js
import { splitIntoFragments } from "@zlabnext/ztool";

const result = splitIntoFragments({
  mode: Mode.Row,
  dataSource: getDataSource(),
  pageSize: 3,
  mergeFields: ["name"],
  genSort: true, // 可生成排序
});

/* Before: 处理前的数据 */
// [
//   {
//     name: '张三',
//   },
//   {
//     name: '李四',
//   },
//   {
//     name: '王五',
//   },
//   {
//     name: '马六',
//   },
// ];

/* After: 处理后的数据 */
// [
//   [
//     {
//       // 1
//       name: '张三',
//     },
//     {
//       // 2
//       name: '李四',
//     },
//     {
//       // 3
//       name: '王五',
//     },
//   ],
//   [
//     {
//       // 4
//       name: '马六',
//     },
//   ],
// ];

getSortNo

获取序号值,在“行”合并时使用。

语法

getSortNo(params)

params

名称类型必填描述
paramsObject行数据

示例代码

js
import { getSortNo } from "@zlabnext/ztool";
html
<el-table-column label="序号" width="80">
  <template #default="{ row }"> {{ getSortNo(row) }}</template>
</el-table-column>

FAQ

按分组来 “合并行” 出现错版的情况 ?

  1. 给需要合并的分组添加统一的groupId来区分是否为一组。
  2. mergeFields自定义合并逻辑,加上前置判断groupId
js
const mergeFields = [
  {
    field: "name",
    callback(curItem, nextItem) {
      return (
        curItem.groupId === nextItem.groupId && curItem.name === nextItem.name
      );
    },
  },
];

目前是否支持 mode.RowCol ?

支持,但是不建议使用,因为合并后展示效果不好。