editTable 可编辑表格

  1. 修改时间: 2018-04-26
  2. 当前版本: 1.2.3

分类: NC高级组件

使用场景

备注:操作列需要加入 itemtype: "customer"

表格样式

浏览态样式

editTable-browse.png

编辑态样式

editTable-edit.png

简单示例

  1. /**
  2. * 使用说明:
  3. *
  4. * 1.引入createPage
  5. * 2.包装业务页面
  6. * 3.代码中使用表单各种 API
  7. * this.props.editTable.createEditTable
  8. * this.props.editTable.setTableData
  9. * ......
  10. */
  11. // 1.引入createPage
  12. import { createPage } from 'nc-lightapp-front'; // 'nc-lightapp-front/src'; 可以引入到源码,用于调试
  13. // 示例 editTable 页面
  14. class EditTable extends Component {
  15. constructor(props) {
  16. super(props);
  17. }
  18. // 界面渲染
  19. render() {
  20. // 3.获取创建表单API
  21. let { createEditTable } = this.props.editTable;
  22. return (
  23. <div className="table-wrapper">
  24. // 根据meta信息创建简单table
  25. {createEditTable(
  26. 'tableDemo', //表格id
  27. onCloseModel: onCloseModelFn, // 弹窗控件点击关闭事件
  28. onAfterEvent: afterEventFn, // 控件的编辑后事件
  29. onSelected: onSelectedFn, // 左侧选择列单个选择框回调
  30. onSelectedAll: onSelectedAllFn, // 左侧选择列全选回调
  31. selectedChange: selectedChangeFn, // 选择框有变动的钩子函数
  32. params: 'test', // 自定义传参
  33. )}
  34. </div>
  35. );
  36. }
  37. }
  38. // 2.包装 editTable 页面
  39. export default createPage({
  40. initTemplate: initTemplate
  41. })(EditTable);

表格方法API (this.props.editTable 下面的方法)

方法名 方法说明 参数 类型 说明 可选值 返回值 类型 示例
1.createEditTable(moduleId, config) 创建可编辑表格,表格对应的区域为ID moduleId 页面对应的区域名 String; 弹窗型组件实例 Node createEditTable(‘tableDemo’)
2.setTableData(moduleId, data, isCache, isTop) 设置表格数据 data 渲染数据 Object;
如果设置空数据 data为{rows: []}, isCache(Boolean)是否保存原始数据,默认是true(保存), isTop 数据是否回到顶部(默认是false,不回到顶部)
undefined 执行函数 setTableData(‘tableDemo’, res.table)
3.getAllRows(moduleId) 获取表格数据 moduleId 数据列表的数组 Array getAllRows(‘tableDemo’)
4.addRow(moduleId, index, autoFocus, defaultValue) 新增行 moduleId 表格id, index 新增后的行序号-1 Number 默认追加到最后行,autoFocus 是否定位到新增行 Boolean, defaultValue 新增行的默认值,当没设置value值的时候必须设置itemtype,数据事例{ a:{display, value, scale, itemtype} } undefined 执行函数 addRow(‘tableDemo’, 0, false, { a:{display, value, scale, itemtype} })
5.setEditableRowKeyByIndex(tableId, index, key, flag) 通过index设置表格某些行的某些字段编辑性 tableId 表格的id String index 索引 Number或[Number] key 属性名 String或[String] flag 开关 Boolean setEditableRowKeyByIndex(‘tableDemo’, 1, ‘org_pk’, false)
6.setValByKeyAndIndex(moduleId, index, key, { value, display, scale,isEdit }) 根据行序号设置表格某行某个字段值 0代表第一行 index 行号 Number/Array 单数字或者数字组成的数组
key columns的键值 String
{ value, display, scale, isEdit }
分别设置value值display值和scale值Objcct 不设置的项,可略去不写,isEdit单元格是否是获取焦点状态
undefined 执行函数 setValByKeyAndIndex(‘table1’,1,’bank’,{value: ‘ff’, display:112, scale:0,isEdit:false });
7.deleteTableRowsByIndex(moduleId, index, flag) 通过index删除行/多行 index 行号 Number/Array 单数字或者数字组成的数组, flag是否真删,默认是假删 undefined 执行函数 deleteTableRowsByIndex(‘tableDemo’, 0) ;
deleteTableRowsByIndex(‘tableDemo’, [1,2,3])
8.getChangedRows(moduleId, flag) 获取被修改、删除、新增的行 moduleId 页面对应的区域名 String; flag 是否走校验 ,不传默认走, 传true就不走 数据列表的数组 Array getChangedRows(‘tableDemo’,true)
9.getStatus(moduleId) 获取表格状态 moduleId 页面对应的区域名 String; 当前表格状态 edit/browse String getStatus(‘tableDemo’)
10.setStatus(moduleId, status, callback) 设置表格状态 status 行状态 String ‘edit’和’browse’其一;
callback 自定义回调 Function
undefined 执行函数 setStatus(‘tableDemo’, ‘add’, callback)
11.deleteTableRowsByRowId(moduleId, rowId,flag) 通过RowId删除单行 rowId 行id String ,flag是否真删,不传默认假删 undefined 执行函数 deleteTableRowsByRowId(‘tableDemo’, ‘44343.666’)
12.cancelEdit(moduleId, callback) 取消编辑,将表格数据恢复到编辑前的值(以最近setTableData为界限) callback 自定义回调 Function undefined 执行函数 cancelEdit(‘tableDemo’)
13.pasteRow(moduleId, data, index) 复制粘贴行,粘贴到index下方 data 渲染数据 Object;
index 行序号-1 Number 不传默认为行首
undefined 执行函数 pasteRow(‘tableDemo’,{values:{org_pk:{value:11111}}, 2)
14.setEditableByKey(moduleId, rowId, key, status) 通过rowId和键设置表格某行某个字段编辑性 RowId 行的RowId String;
key columns的键值 String;
flag true为可编辑 Boolean
undefined 执行函数 setEditableByKey(‘tableDemo’, ‘44343.666’, ‘org_pk’, true)
15.hideColByKey(moduleId, keys)) 根据id和column的key隐藏某列 keys 需要隐藏列键名 String/Array undefined 执行函数 hideColByKey(‘tableDemo’, [‘org_pk’,’name’]);
hideColByKey(‘tableDemo’, ‘org_pk’)
16.showColByKey(moduleId, keys) 根据id和column的key显示某列 keys 需要显示列键名 String/Array undefined 执行函数 showColByKey(‘tableDemo’, [‘org_pk’,’name’]);
showColByKey(‘tableDemo’, ‘org_pk’)
17.setValByKeyAndRowId(moduleId, rowId, key, { value, display, scale }) 根据RowId设置表格某行某个字段值 rowId 行id String
key columns的键值 String
{ value, display, scale }
分别设置value值display值和scale值Objcct 不设置的项,可略去不写
undefined 执行函数 setValByKeyAndRowId(‘table1’,’111223333334’,’bank’,{value: ‘ff’, display:112, scale:0 });
18.getValByKeyAndRowId(moduleId, rowId, key) 根据RowId获取表格某行某个字段值 rowId 行id String
key columns的键值 String
Object 数据对象 getValByKeyAndRowId(‘table1’,34343.fggfe,’bank’)
19.getValByKeyAndIndex(moduleId, index, key) 根据行序号获取表格某行某个字段值 0代表第一行 index 行号 Number/Array 单数字或者数字组成的数组
key columns的键值 String
Object 数据对象 getValByKeyAndIndex(‘table1’,1,’bank’)
20.getAllRowsRemoveKeys(moduleId, keys) 获取不包含某键或者某些键的行数据,意思是通过传入的键过滤不想要的数据 keys 需要排除的键名 String/Array/Undefined 排除特定键的数组 Array getAllRowsRemoveKeys(‘tableDemo’, [‘org_pk’,’name’])
21.getNumberOfRows(moduleId) 根据id获取表格中所有的行的数量 moduleId 区域id String 行数量 Number getNumberOfRows(‘tableDemo’)
22.getAllData(moduleId) 类似于getAllRows方法,加了areaType,areacode两个字段 moduleId 区域id String 用于后台提交格式的数据 Object getAllData(‘tableDemo’)
23.getCacheDataById(moduleId) 通过id获取当前的缓存数据 moduleId 区域id String 缓存数据 Object getCacheDataById(‘tableDemo’)
24.filterEmptyRows(moduleId, keys) 过滤空行,界面、数据都删除空行 kyes 忽略的键数组 Array undefined 执行函数 filterEmptyRows(‘tableDemo’)
25.openModel(moduleId, type, record, index) 弹窗编辑 type 编辑或新增 String add或edit
record 当前行数据 Object render函数有或者选中有
index 当前行号 Number
undefined 执行函数 openModel(‘tableDemo’, ‘edit’, record, index)
26.closeModel(moduleId) 关闭弹窗 moduleId 区域id String undefined 执行函数 closeModel(‘tableDemo’)
27.getCheckedRows(moduleId) 获取选中行数据 moduleId 区域Id String [{index:1,data:{}},{index:2,data:{}}]
Array 对象组成的数组
index为行号 data为行内数据
getCheckedRows(‘tableDemo’)
28.selectAllRows(moduleId, checked) 行全选/全不选
checked为true 全选
checked为false 全不选
checked 开关标志 Boolean undefined 执行函数 editTable.selectAllRows(‘tableDemo’, false)
29.reverseSelected(moduleId) 反选中 moduleId 区域Id String undefined 执行函数 reverseSelected(‘tableDemo’)
30.setEditableRowKeyByRowId(tableId, rowid, key, flag) 通过rowId设置表格某些行的某些字段编辑性 tableId 表格的id String rowid 行id String或[String] key 属性名 String或[String] flag 开关 Boolean setEditableRowKeyByRowId(“table_b”, ‘111aassswwww’, ‘numberkey’,false)
31.setEditableRowByRowId(tableId, rowid, flag) 通过rowId设置表格某些行的编辑性 tableId 表格的id String rowid 行id String或[String] flag 开关 Boolean setEditableRowByRowId(“table_b”, ‘111aassswwww’, false)
32.setEditableRowByIndex(tableId, index, flag) 通过Index设置表格某些行的编辑性 tableId 表格的id String index 行序号-1 ( Number或[Number] flag 开关 Boolean setEditableRowByIndex(‘table_b’, 1, false)
33.batchChangeTableData(tableId) 批量更改表格数据 tableId 表格的id String {key, display, value} batchChangeTableData(tableId)
34.setCheckboxDisabled(tableId, index, flag) 设置每行第一个Checkbox是否禁用 tableId 表格的id String , index 行索引 Number或Array ,flag 是否禁用 true 或false undefined 执行函数 setCheckboxDisabled(‘tableDemo’, 1, false)
35.getFilterRows(tableId, key, value) 筛选表格中指定数据的方法 tableId 表格的id String ,key 所要搜索表格数据中的属性 String或Array , value 所要搜索表格数据中的value String undefined 执行函数 getFilterRows(‘tableDemo’, [‘name’], ‘zhangsan’)
36.setFiltrateTableData(tableId, key, value, isShowAll) 设置筛选后的表格数据 tableId 表格的id String, key 所要搜索表格数据中的属性 String或Array, value 所要搜索表格数据中的value String,isShowAll 筛选不到是否展示全数据 Boolean undefined 执行函数 setFiltrateTableData(‘tableDemo’, [‘name’], ‘zhangsan’, false)
37.setAllCheckboxAble(tableId, flag) 设置设置所有多选框禁用和启用的方法 tableId 表格的id String,flag Boolean undefined 执行函数 setAllCheckboxAble(‘tableDemo’, false)
38.selectTableRows(tableId, index, flag) 设置某些行多选框的选中状态 tableId 表格的id String ,index 索引 Number或Array, flag Boolean undefined 执行函数 selectTableRows(‘tableDemo’, [1,2,3], false)
39.moveRow(tableId, indexStart, indexEnd) 移动行 tableId 表格的id String ,indexStart 起始索引 Number, indexEnd 终止索引 Number undefined 执行函数 moveRow(‘tableDemo’, 1, 2)
40.setRowStatus(tableId, index, flag) 设置行状态 tableId 表格的id String ,index 索引 Number或Array, flag 行状态 ‘0’初始态, ‘1’已修改, ‘2’新增, ‘3’删除 undefined 执行函数 setRowStatus(‘tableDemo’, 1, 2)
41.getRowStatus(tableId, index) 获取行状态 tableId 表格的id String ,index 索引 Number undefined 执行函数 getRowStatus(‘tableDemo’, 1)
42.focusRowByIndex(tableId, index) 设置当前的行 tableId 表格的id String ,index 索引 Number或Array undefined 执行函数 focusRowByIndex(‘tableDemo’, 1)
43.getClickRowIndex(tableId) 获取当前点击行 tableId 表格的id String {index, record} 执行函数 getClickRowIndex(‘tableDemo’)
44.setRowPosition(tableId, indexStart, position) 将行置顶或置尾 tableId 表格的id String,indexStart 需要移动行索引,position 需置顶还是置尾 up(置顶) down(置尾) undefind 执行函数 setRowPosition(‘tableDemo’, 1, ‘up’)
45.updateDataByIndexs(moduleId, record, isCache, isDel) 更新多行的数据(根据index值) record 需要设置的数据数组 Array,格式为:[{index: 0, data: { status: “1”, values: {} }, …] isCache 是否缓存新的数据 true或者false,默认是false isDel是否将已经删除的行过滤掉,true或者false,默认是false
46.setColEditableByKey(moduleId, key, flag) 设置某一列的编辑性 key 需要设置的meta中的键 String/Array flag 编辑性,true为不可编辑(默认true) Boolean undefined 执行函数 setColEditableByKey(‘tableDemo’, ‘bank’) ;
setColEditableByKey(‘tableDemo’, [‘bank’, ‘ic_group’], false)
47.setColScale(list) 设置某些表格,某些列的精度 list数据结构 [{areacode: ‘tableid’, filedcode: ‘colkey’, scale: “2”}, ….],areacode(区域id), filedcode(列对应的attrcode), scale(精度) undefined 执行函数 setColScale**([{areacode: ‘tableid’, filedcode: ‘colkey’, scale: “2”}, ….])
48.checkRequired(tableId, rows) 检验必输项的方法, 检验输入的行 tableId 表格id,rows 所要校验的行数据 [{status: “0”, rowid: “hhghg-34343m43-434343wws”, values: { nallotmny: {value: “1199.000”}}}] undefined 执行函数 checkRequired**([{status: “0”, rowid: “hhghg-34343m43-434343wws”, values: { nallotmny: {value: “1199.000”}}},…])
49.updateTableData(moduleId, data, callback) 更新表格数据 data 后台返回的data 需要有rowId 删除的数据不要返回 Object undefined 执行函数 updateTableData(‘tableDemo’, {rows: [{
50.getTablePageInfo(moduleId) 获取simpleTable表格的page信息 moduleId 页面对应的区域ID String {pageSize, pageIndex}:{当前页码,每页数量} getTablePageInfo(‘tableDemo’)
51.insertRowsAfterIndex(moduleId, data, index) 多行数据插入到index行后 data 多行数据的数组或者单行对象 Array/Obejct index 行序号-1 Number undefined 执行函数 insertRowsAfterIndex(‘tableDemo’, record, 1) ;
insertRowsAfterIndex(‘tableDemo’, [record1,record2,record3 ], 1)
52.updateTableHeight 刷新表格高度, 这是特殊场景使用,一般是表格上方部分,高度变化,表格需要不断适应时使用,并且页面上只有一个edittable undefined 执行函数
53.setColValue(moduleId, key, { display, value, scale }) 通过key设置表格某列数据 key columns的键值 String;
{ value, display, scale }
分别设置value值display值和scale值 Objcct
undefined 执行函数 setColValue(‘tableDemo’,’org_pk’,{value: ‘11’, display: ‘示例’})
54.getSortParam(tableId) 获取表格当前排序信息 tableId 表格的id String 执行函数 getSortParam(‘tableDemo’)
55.saveFilterCustomColData(tableId, { attrcode, rowId, value }) 存储自定义列的显示数据 tableId表格的id,attrcode(当前列字段), rowId(当前行rowid), value(自定义显示的数据) undefined 执行函数

createEditTable的config回调和自定义参数

函数名 方法说明 暴露出来的参数 示例 备注
onCloseModel 弹窗取消事件回调数 props props为组件集合
tableModelConfirm 弹窗确认事件回调 props, moduleId, data(侧拉数据)
onAfterEvent 弹窗控件的编辑后事件 props, moduleId(区域id), key(操作的键), value(当前值), changedrows(新旧值集合), record(行数据), index(当前index)
onBeforeEvent 编辑前事件 props 内部方法,moduleId(区域id), item(模版当前列的项), index(当前索引),value(当前值), record(行数据) 最后返回true,表格可编辑,返回false,表格不可编辑
onSelected 左侧选择列单个选择框回调 props, moduleId(区域id), record(行数据), index(当前index), status(选框值)
onSelectedAll 左侧选择列全选回调 props, moduleId(区域id), status(选框值), length(选中数量)
selectedChange 选择框有变动的钩子函数 props, moduleId(区域id), newVal(被选中的行数), oldVal(旧的被选中的行数)
onRowClick 单击行钩子函数 props, moduleId(区域id), record(行数据), index(当前index),e (事件对象)
onRowDoubleClick 行双击事件 record(行数据) ,index(当前index) props, e (事件对象)
params 自定义传参
showCheck 显示复选框 true
showIndex 显示序号列 true
isAddRow 失去焦点是否自动增行 false
height 设置表格高度 465
noTotalRows 设置某些行的某些属性不可合计 noTotalRows: () => { return [{ code: [“npobnum”], indexArr: 2 },….] }
allowTotalRows 设置可合计的行 allowTotalRows: () => { return [3] }
noTotalCol 设置不可合计的列 [‘npobnum’]
showTotal 设置是否展示合计行,通过模版设置istotal属性,和设置当前属性,都可以展示合计行,!!!!!!!但是模版设置合计行和这个属性不能同时设置,除非所有的列都想合计才用这个属性,否则都需要在模版上设置!!!!!! true或false
addRowCallback 自动增行后的回调
addRowDefaultValue 给自动增的行设置默认值,是一个函数,返回值是默认值数据,格式和增行的默认值格式相同
adaptionHeight 表格是否自适应高度,占满屏幕 默认不占满,(false)
otherAreaHeight 表格自适应高度时表格底部其他部分的高度, 减去这个高度等于最终表格高度 数字类型
rowClassList 给表体行添加自定义类名 rowClassList 是数组, 数组里面是对象 ,详见例子,index 行索引(可以是数字或者数字数组) className 类名 rowClassList: [{index: 1, className: ‘test-one’}]
showPagination 是否展示分页,编辑态默认不展示分页 true 是展示, false是不展示
lazyload 是否滚动分页 true 是分页, false是不分页,默认是分页
setCellClass(index, record, ICode) 设置单元格的类名 index表示当前行,record当前行数据,ICode当前字段 setCellClass={() => { return ‘calssname’ } 返回值是对应的类名
sort 表格后端排序 backSource:true,表示后端排序,mode:’multiple’(多列排序) 或’single’(单列排序)(如果前端排序的时候想多列排序,对象里就穿这个字段就可以了),sortFun 后端排序的回调函数 sort={mode:’multiple’,backSource:true,sortFun:(a)=> {console.log(a)}}
merge 用于表格单元格合并 index:当前单元格行序号,从0开始,attrcode,当前单元格的所在列的attrcode 例子:(index, attrcode)=>{if(index0&&attrcode
‘cpobid’){ return {colSpan:1,rowSpan:2} } if(index1&&attrcode
‘cpobid’){ return {colSpan:1,rowSpan:0} }} 注意:如果要合并当前单元格和下面一个单元格也就是rowspan设为2,需要把下面的单元格rowspan设为0,colspan同样,如果合并3个格,就需要把下两个格设为0,以此类推
注意,当使用懒加载表格的时候,需要使用mergeEndIndex这个属性,不然会出现行错乱,使用方式:与rowspan和colspan同时返回,如果110行合并,值为10,1120合并,值为20,以此类推
customRowHeight 使用原有行高,覆盖全局个性化行高, 默认是false, 不覆盖
modalCustomerArea 用于表格侧拉中创建自定义区域 (pagescope)=>{return(dom)}

editTable的模版里的meta和item的特定功能的设置

功能名称 属性名 方法说明 示例
列排序(前端排序) isSort默认为true 表格默认对所有列前端排序,如果想自定义排序,需要在item里自行注册sorter=() => {}函数,使用方法和数组的sort方法一样。 {itemtype: “number”,visible: true,label: “分配金额”,isSort: true,attrcode: “nallotmny”}或{itemtype: “number”,visible: true,label: “分配金额”,sorter:() => {return -1},attrcode: “nallotmny”}
决定什么状态渲染自定义单元格内容 renderStatus browse 表示浏览态渲染自定义单元格内容(此时表格需要是浏览态),edit表示编辑态渲染自定义单元格内容(此时表格需要是编辑态) { table_b: { pagination: true, items: [{itemtype: “refer”, maxlength: “20”,renderStatus: ‘browse’,render:() => {return ()} visible: true, label: “财务组织最新版本”, width: “140px”, disabled: true, color: “red”}]