{"_id":"@cj-toolkit-x/table-cell-merger","name":"@cj-toolkit-x/table-cell-merger","dist-tags":{"latest":"0.0.1"},"versions":{"0.0.1":{"name":"@cj-toolkit-x/table-cell-merger","version":"0.0.1","description":"一个计算表格内数据合并的工具，支持行合并、列合并等常见场景。!","homepage":"https://github.com/chenJJ20180912/cj-toolkit-x-table-cell-merger#readme","bugs":{"url":"https://github.com/chenJJ20180912/cj-toolkit-x-table-cell-merger/issues"},"license":"MIT","main":"lib/index.js","module":"es/index.mjs","types":"es/index.d.ts","exports":{".":{"types":"./es/index.d.ts","import":"./es/index.mjs","require":"./lib/index.js"},"./es":"./es/index.mjs","./lib":"./lib/index.js","./es/*.mjs":"./es/*.mjs","./es/*":"./es/*.mjs","./lib/*.js":"./lib/*.js","./lib/*":"./lib/*.js","./*":"./*"},"unpkg":"dist/index.full.js","jsdelivr":"dist/index.full.js","repository":{"type":"git","url":"git+https://github.com/chenJJ20180912/cj-toolkit-x-table-cell-merger.git"},"publishConfig":{"access":"public"},"sideEffects":["dist/*"],"devDependencies":{"gulp":"^4.0.2","gulp-clean":"^0.4.0","gulp-rename":"^2.0.0","gulp-terser":"^2.1.0","gulp-typescript":"^6.0.0-alpha.1","ts-node":"^10.9.1","typescript":"^3.8.3"},"dependencies":{"gulp-clean":"^0.4.0"},"gitHead":"0a6b8b6531eaa20014a82a6945446b3733366d71","_id":"@cj-toolkit-x/table-cell-merger@0.0.1","_nodeVersion":"16.15.0","_npmVersion":"8.5.5","dist":{"integrity":"sha512-lkKFOlsuonDuQY6tXtHfLvVLjoEEDWUQy14AG1hHyA43As0W/MP980Sg3xRW8h1/89CL/JmsYFxVBPT+rHYTdA==","shasum":"851ada37978292955010c63fdb930ece6ba84b3c","tarball":"https://registry.npmjs.org/@cj-toolkit-x/table-cell-merger/-/table-cell-merger-0.0.1.tgz","fileCount":16,"unpackedSize":124172,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD8HzqmYNF8UxnjCavI6xZ7dnupEXkgVluPmdO42ibYCAIgZIWsSO64YJPkVifyKqGcmQWfv9Vgw+R2D6F+Gi5NL3o="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkKTvOACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmot0w/9EK5Pj6gDYMIgpAAinrhRe/idTCrlAHe0UCVuB9KVXOLVRx7u\r\n2Eigpte7LO6Fvdb8NP7IO21RIpB6MRfuUqtOKUeJN6gljsaFN+yLERM4VBC4\r\nNVcwNjbNrlcSUMww3CZyQyrjSZclKeFx9oR652d2x0vwfTCj45w6jYUWYdie\r\nXxIZNwLdstbXIFyuuTknFkQHcC+1fACWIfH3sIWlfC6c1odw4P4XF7u4SjSS\r\nQWi6FfdUwGhh8P97MJLcoPCxWdAMIdduZjWAg7SZk1kAQPtf6vijiiccn/1Q\r\nMFP/Y3iWiWGZ9yjeLzEDhzX/ZB/nravAOEEysEciGCilghJa8dBnvyGhT7aO\r\nW0rQwbS2qJKQPxY7GlWil/0T5m6BnaIIQmPzkZLc31QUx9FmrmefhrLT3zk+\r\n7tgw9y8eTXkJ1LaQIz1qjW7yqZuVFLpiiZBJeT2MbElkeRpUEAILwAI4hTX2\r\nGy+t837s7tvwH8jcTdTv/HjnUWUB0BL/C5A4E70ZRo1MBo5Za7Rcsq6N8jrg\r\nTrBh4E8Sxn4B6tLaU1XWwHfyjPIQSqlw87PefPvkX8bR7z0wh2L4BlZI38sC\r\nnR96JA9nitQZB1rfsUNJ98vsy/Hn6T/jg7AjnN1mGqPIDe4yqXIg91sH4feu\r\n+DTdap7oE65Pd3xio3vfefqG/q32ou2juQU=\r\n=8+Ms\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"sssdal19995","email":"635959292@qq.com"},"directories":{},"maintainers":[{"name":"sssdal19995","email":"635959292@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/table-cell-merger_0.0.1_1680423886072_0.9907392641011743"},"_hasShrinkwrap":false}},"time":{"created":"2023-04-02T08:24:46.003Z","0.0.1":"2023-04-02T08:24:46.216Z","modified":"2023-04-02T08:24:46.410Z"},"maintainers":[{"name":"sssdal19995","email":"635959292@qq.com"}],"description":"一个计算表格内数据合并的工具，支持行合并、列合并等常见场景。!","homepage":"https://github.com/chenJJ20180912/cj-toolkit-x-table-cell-merger#readme","repository":{"type":"git","url":"git+https://github.com/chenJJ20180912/cj-toolkit-x-table-cell-merger.git"},"bugs":{"url":"https://github.com/chenJJ20180912/cj-toolkit-x-table-cell-merger/issues"},"license":"MIT","readme":"# cj-toolkit-x-table-merger\r\n一个计算表格内数据合并的工具，支持行合并、列合并等常见场景。\r\n<img src=\"./demo.png\"/>\r\n## 配置项\r\n\r\n | 属性名 | 说明 | 类型 | 默认值 | \r\n | ---- | ---- | ---- | ---- | \r\n | mergeColumns | 纵向合并的列属性名 | Array<string> | [] | \r\n | mergeColumnsRelations | 纵向合并的列关系 | Record<string,string> | [] | \r\n | horizontalColumns | 横向合并的列属性名 | Array<string>/Array<Array<string>> | [] | \r\n | disabled | 是否禁止内部计算,vue计算属性内可以通过此属性控制是否进行重新计算 | boolean/function | false | \r\n | splitter | 分隔符,用于将行标识和列属性拼接为单元格id | string | '$$' | \r\n | getRowKey | 获取当前行标识 | function | 取当前行上的id字段作为行标识 | \r\n | mergeEmpty | 是否合并空字符串 和 undefined,设置自定义值比较规则后此属性失效 | boolean | false | \r\n | judgeValueEquals | 自定义比较单元格的值,用于实现复杂业务逻辑,返回true 则合并 | function | 直接判断值是否相等 | \r\n\r\n\r\n### 使用方法\r\n```typescript\r\nimport {TableCellMerger} from \"cj-toolkit-x/table-merger\"\r\n// 创建一个单元格合并器\r\nconst tableCellMerger = new TableCellMerger()\r\n// 定义options 配置项\r\nconst options:TableCellMergeOptions = {\r\n}\r\n\r\nconst data = []\r\n// 绑定配置项\r\ntableCellMerger.setOptions(options)\r\n// 执行计算合并\r\ntableCellMerger.mergeCell(data)\r\n// 获取合并信息\r\nconst rowData = {};// 需要获取合并属性的行\r\nconst prop = '';// 需要获取合并数据的属性\r\nconst cellMergeInfo = tableCellMerger.getCellMergeInfo(rowData,prop)\r\n```\r\n<font color=\"red\">备注：以下场景均以vue3 element-plus 演示</font>\r\n### 1.省市性别行合并:\r\n```typescript\r\n/* 省市性别行合并 */\r\n// 构建一个表格合并计算器\r\nconst tableCellMerger1 = new TableCellMerger()\r\n// 设置参数\r\ntableCellMerger1.setOptions({\r\n  mergeColumns: ['province', 'city', 'gender']\r\n})\r\n// 绑定数据\r\ntableCellMerger1.mergeCell(data)\r\nconst spanMethod1 = function (params: { row: Record<string, any>, column: { property: string } }) {\r\n  const {\r\n    row,\r\n    column\r\n  } = params\r\n  const { property } = column\r\n  return tableCellMerger1.getCellMergeInfo(row, property)\r\n}\r\n```\r\n### 2.省市合并,相同市下面的性别合并:\r\n```typescript\r\n/* 省市合并,相同市下面的性别合并 */\r\n// 构建一个表格合并计算器\r\nconst tableCellMerger2 = new TableCellMerger()\r\n// 设置参数\r\ntableCellMerger2.setOptions({\r\n  mergeColumns: ['province', 'city', 'gender'],\r\n  mergeColumnsRelations: { gender: 'city' }\r\n})\r\n// 绑定数据\r\ntableCellMerger2.mergeCell(data)\r\nconst spanMethod2 = function (params: { row: Record<string, any>, column: { property: string } }) {\r\n  const {\r\n    row,\r\n    column\r\n  } = params\r\n  const { property } = column\r\n  return tableCellMerger2.getCellMergeInfo(row, property)\r\n}\r\n```\r\n### 3.自定义合并,相同性别下的市才可以进行合并：\r\n```typescript\r\n/* 自定义合并,相同性别下的市才可以进行合并 */\r\n// 构建一个表格合并计算器\r\nconst tableCellMerger3 = new TableCellMerger()\r\n// 设置参数\r\ntableCellMerger3.setOptions({\r\n  mergeColumns: ['province', 'city', 'gender'],\r\n  mergeColumnsRelations: { gender: 'city' },\r\n  judgeValueEquals (cur: CellValueWrapper, // 当前值\r\n    next: CellValueWrapper, // 下一个值\r\n    tableCellMerger: TableCellMerger, // 单元格合并管理器\r\n    vertical: boolean): boolean {\r\n    const { prop } = cur\r\n    if (prop === 'city') {\r\n      // 如果当前比较的市城市 那么先检查市\r\n      if (next.rowData.gender !== cur.rowData.gender) {\r\n        return false\r\n      }\r\n    }\r\n    return !!tableCellMerger.defaultTableMergeOptions.judgeValueEquals?.(cur, next, tableCellMerger, vertical)\r\n  }\r\n})\r\n// 绑定数据\r\ntableCellMerger3.mergeCell(data)\r\nconst spanMethod3 = function (params: { row: Record<string, any>, column: { property: string } }) {\r\n  const {\r\n    row,\r\n    column\r\n  } = params\r\n  const { property } = column\r\n  return tableCellMerger3.getCellMergeInfo(row, property)\r\n}\r\n```\r\n\r\n### 4.横向省市合并:\r\n```typescript\r\n/* 横向合并 */\r\n// 构建一个表格合并计算器\r\nconst tableCellMerger4 = new TableCellMerger()\r\n// 设置参数\r\ntableCellMerger4.setOptions({\r\n  mergeColumns: ['province', 'city', 'gender'],\r\n  mergeColumnsRelations: { gender: 'city' },\r\n  horizontalColumns: ['province', 'city'], // 横向合并省市\r\n  judgeValueEquals (cur: CellValueWrapper, // 当前值\r\n    next: CellValueWrapper, // 下一个值\r\n    tableCellMerger: TableCellMerger, // 单元格合并管理器\r\n    vertical: boolean): boolean {\r\n    const { prop } = cur\r\n    // 纵向合并\r\n    if (prop === 'city') {\r\n      // 如果当前比较的市城市 那么先检查市\r\n      if (next.rowData.gender !== cur.rowData.gender) {\r\n        return false\r\n      }\r\n    }\r\n    return !!tableCellMerger.defaultTableMergeOptions.judgeValueEquals?.(cur, next, tableCellMerger, vertical)\r\n  }\r\n})\r\n// 绑定数据\r\ntableCellMerger4.mergeCell(data)\r\nconst spanMethod4 = function (params: { row: Record<string, any>, column: { property: string } }) {\r\n  const {\r\n    row,\r\n    column\r\n  } = params\r\n  const { property } = column\r\n  return tableCellMerger4.getCellMergeInfo(row, property)\r\n}\r\n```\r\ndemo代码地址:\r\n","readmeFilename":"README.md"}