editTable 可编辑表格
修改时间: 2018-04-26当前版本: 1.2.3
分类: NC高级组件
使用场景
备注:操作列需要加入 itemtype: "customer"
表格样式
浏览态样式

编辑态样式

简单示例
/*** 使用说明:** 1.引入createPage* 2.包装业务页面* 3.代码中使用表单各种 API* this.props.editTable.createEditTable* this.props.editTable.setTableData* ......*/// 1.引入createPageimport { createPage } from 'nc-lightapp-front'; // 'nc-lightapp-front/src'; 可以引入到源码,用于调试// 示例 editTable 页面class EditTable extends Component {constructor(props) {super(props);}// 界面渲染render() {// 3.获取创建表单APIlet { createEditTable } = this.props.editTable;return (<div className="table-wrapper">// 根据meta信息创建简单table{createEditTable('tableDemo', //表格idonCloseModel: onCloseModelFn, // 弹窗控件点击关闭事件onAfterEvent: afterEventFn, // 控件的编辑后事件onSelected: onSelectedFn, // 左侧选择列单个选择框回调onSelectedAll: onSelectedAllFn, // 左侧选择列全选回调selectedChange: selectedChangeFn, // 选择框有变动的钩子函数params: 'test', // 自定义传参)}</div>);}}// 2.包装 editTable 页面export default createPage({initTemplate: initTemplate})(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”}] |
