insertEditTable 可编辑嵌套表格
修改时间: 2018-05-14当前版本: 1.0.0
分类: NC高级组件
使用场景
特别注意:
1、操作列属性说明
label: '操作', 显示的列名称 *必须
attrcode: 'opr', 列字段(键值) 非必须
itemtype: 'customer', 列所属类别 *必须
className: 'table-opr', 列样式类名 *必须 可补充追加 'table-opr my-class-name'
fixed: 'right', 列是否右侧固定 选用
visible: true, 控制列的显隐性 *必须
width: '160px', 控制宽度出滚动条 选用
2、控制字段在列表里显示 visible:true
3、想显示 **序号** 或者 **多选框** ,可以试试showIndex和showCheck
表格样式
浏览态样式 (待补充)

编辑态样式 (待补充)

简单示例
/**
* 使用说明:
*
* 1.引入createPage
* 2.包装业务页面
* 3.代码中使用表单各种 API
* this.props.insertEditTable.createInsertEditTable
* ......
*/
// 1.引入createPage
import { createPage } from 'nc-lightapp-front'; // 'nc-lightapp-front/src'; 可以引入到源码,用于调试
// 示例 InsertEditTable 页面
class InsertEditTable extends Component {
constructor(props) {
super(props);
}
// 界面渲染
render() {
// 3.获取创建表单API
let { createInsertEditTable } = this.props.insertEditTable;
return (
<div className="table-wrapper">
// 根据meta信息创建简单table
{createInsertEditTable(
'revecont_b', //父表ID
'bodyTable', //子表ID
{
onAfterEvent: afterEvent, // 控件的编辑后事件
onCloseModel: this.onCloseModel, // 弹窗控件点击关闭事件
onSelected: this.onSelected, // 父表单个选择框回调
onSelectedAll: this.onSelectedAll, // 父表全选回调
selectedChange: this.selectedChange, // 父表选择框有变动的钩子函数
showCheck: true, //是否显示父表的复选框
showChildCheck: true, //是否显示子表的复选框
showIndex: true, // 是否显示父表的索引
setChildTableData: setChildTableData.bind(this) // 设置子表数据
})}
</div>
);
}
}
// 2.包装 cardTable 页面
export default createPage({
initTemplate: initTemplate
})(InsertEditTable);
表格方法API (this.props.cardTable 下面的方法)
| 方法名 | 方法说明 | 参数 类型 说明 可选值 | 返回值 类型 | 示例 |
|---|---|---|---|---|
| 1、createInsertEditTable(moduleId, childModuleId,config) | 创建可编辑表格,表格对应的区域为ID | moduleId 页面对应的区域名 String; childModuleId 页面对应的区域名 String | 卡片单据组件实例 Node | createCardTable(‘tableDemo’) |
| 2、setTableData(moduleId, data, callback) | 设置父表格数据 | data 渲染数据 Object; 如果设置空数据 data为{rows: []} |
undefined 执行函数 | setTableData(‘tableDemo’, res.table) |
| 3、getStatus(moduleId) | 获取表格状态 | moduleId 页面对应的区域名 String; | 当前表格状态 edit/browse String | getStatus(‘tableDemo’) |
| 4、setStatus(moduleId, status, callback) | 设置表格状态 | status 行状态 String ‘edit’和’browse’其一; callback 自定义回调 Function |
undefined 执行函数 | setStatus(‘tableDemo’, ‘add’, callback) |
| 5、getAllRows(moduleId, flag) | 获取表格数据 | flag 是否关闭必输项校验 Boolean 不传为开启等同false | 数据列表的数组 Array | getAllRows(‘tableDemo’, false) |
| 6、getVisibleRows(moduleId) | 获取表格内可见列表数据 (排除删除项目) | moduleId 页面对应的区域名 String; | 数据列表的数组 Array | getVisibleRows(‘tableDemo’) |
| 7、getChangedRows(moduleId) | 获取被修改、删除、新增的行 | moduleId 页面对应的区域名 String; | 数据列表的数组 Array | getChangedRows(‘tableDemo’) |
| 8、getNumberOfRows(moduleId, flag) | 根据id获取表格中所有(可见)的行的数量 | flag 开关 Boolean ; flag为true包含删除项目 flag不传或者false不包含删除项目 |
行数量 Number | getNumberOfRows(‘tableDemo’) |
| 9、getAllData(moduleId) | 获取表格被包装的数据(包含父表和子表数据) | moduleId 页面对应的区域名 String; | 数据对象 Object | getAllData(‘tableDemo’) |
| 10、addRow(moduleId, index, data, callback) | 新增行 | index 行序号-1 Number 默认追加到最后行 ; data 新增的默认data {key: {display: ‘’, scale: 0, value: ‘’}} |
undefined 执行函数 | addRow(‘tableDemo’, 0, {‘org_pk’: {display: ‘组织名称’, value: ‘001’}}) |
| 11、delRowByRowId(moduleId, rowId, callback) | 通过RowId删除单行 | rowId 行id String | undefined 执行函数 | delRowByRowId(‘tableDemo’, ‘44343.666’) |
| 12、delRowsByIndex(moduleId, index, callback) | 通过index删除行/多行 | index 行号 Number/Array 单数字或者数字组成的数组 | undefined 执行函数 | delRowsByIndex(‘tableDemo’, 0) ; delRowsByIndex(‘tableDemo’, [1,2,3]) |
| 13、setValByKeyAndRowId(moduleId, rowId, key, { value, display, scale }) | 根据RowId设置表格某行某个字段值 | rowId 行id String key columns的键值 String { value, display, scale } 分别设置value值display值和scale值Objcct 不设置的项,可略去不写 |
undefined 执行函数 | setValByKeyAndRowNumber(‘table1’,34343.fggfe,’bank’,{value: ‘ff’ }) setValByKeyAndRowNumber(‘table1’,’34343.fggfe’,’bank’,{value: ‘11’, display: ‘示例’}) {value:null, display: null}); 清空 |
| 14、setValByKeyAndIndex(moduleId, index, key, { value, display, scale }) | 根据行序号设置表格某行某个字段值 0代表第一行 | index 行号 Number/Array 单数字或者数字组成的数组 key columns的键值 String { value, display, scale } 分别设置value值display值和scale值 Objcct 不设置的项,可略去不写 |
undefined 执行函数 | setValByKeyAndRowNumber(‘table1’,1,’bank’,{value: ‘ff’ }) setValByKeyAndRowNumber(‘table1’,1,’bank’,{value: ‘11’, display: ‘示例’}) |
| 15、resetTableData(moduleId, callback) | 取消编辑,将表格数据恢复到编辑前的值(以最近setTableData/updateTableData为界限) | callback 自定义回调 Function | undefined 执行函数 | resetTableData(‘tableDemo’) |
| 16、updateTableData(moduleId, data, callback) | 更新表格数据 | data 后台返回的data 需要有rowId 删除的数据不要返回 Object | undefined 执行函数 | updateTableData(‘tableDemo’, {…}) |
| 17、openModel(moduleId, type, record, index, callback) | 弹窗编辑 | type 编辑或新增 String add或edit record 当前行数据 Object render函数有或者选中有 index 当前行号 Number |
undefined 执行函数 | openModel(‘tableDemo’, ‘edit’, record, index) |
| 18、closeModel(moduleId, callback) | 关闭弹窗 | moduleId 区域id String | undefined 执行函数 | closeModel(‘tableDemo’) |
| 19、getValByKeyAndRowId(moduleId, rowId, key) | 根据RowId获取表格某行某个字段值 | rowId 行id String key columns的键值 String |
Object 数据对象 | getValByKeyAndRowNumber(‘table1’,34343.fggfe,’bank’) |
| 20、getValByKeyAndIndex(moduleId, index, key) | 根据行序号获取表格某行某个字段值 0代表第一行 | index 行号 Number/Array 单数字或者数字组成的数组 key columns的键值 String |
Object 数据对象 | getValByKeyAndRowNumber(‘table1’,1,’bank’) |
| 21、hideColByKey(moduleId, keys)) | 根据id和column的key隐藏某列 | keys 需要隐藏列键名 String/Array | undefined 执行函数 | hideColByKey(‘tableDemo’, [‘org_pk’,’name’]); hideColByKey(‘tableDemo’, ‘org_pk’) |
| 22、showColByKey(moduleId, keys) | 根据id和column的key显示某列 | keys 需要显示列键名 String/Array | undefined 执行函数 | showColByKey(‘tableDemo’, [‘org_pk’,’name’]); showColByKey(‘tableDemo’, ‘org_pk’) |
| 23、setEditableByRowId(moduleId, rowId, key, status) | 通过rowId和键设置表格某行某个字段编辑性 | RowId 行的RowId String; key columns的键值 String; flag true为可编辑 Boolean |
undefined 执行函数 | setEditableByKey(‘tableDemo’, ‘44343.666’, ‘org_pk’, true) |
| 24、setEditableByIndex(moduleId, index, key, status) | 通过index和键设置表格某行某个字段编辑性 | index 行的index Number; key columns的键值 String; flag true为可编辑 Boolean |
undefined 执行函数 | setEditableByKey(‘tableDemo’, 0, ‘org_pk’, true) |
| 25、pasteRow(moduleId, index) | 复制粘贴行,粘贴到index下方 | index 行序号-1 Number 不传默认为行首 | undefined 执行函数 | pasteRow(‘tableDemo’, 1) |
| 26、getColValue(moduleId, key) | 通过key获取表格某列数据 | key columns的键值 String | 列数据 Array | getColValue(‘tableDemo’,’org_pk’) |
| 27、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: ‘示例’}) |
| 28、getCheckedRows(moduleId) | 获取选中行数据(包含父表和子表) | moduleId 区域Id String | [{index:1,data:{}},{index:2,data:{}}] Array 对象组成的数组 index为行号 data为行内数据 |
getCheckedRows(‘tableDemo’) |
| 29、selectAllRows(moduleId, checked) | 行全选/全不选 checked为true 全选 checked为false 全不选 |
checked 开关标志 Boolean | undefined 执行函数 | cardTable.selectAllRows(‘tableDemo’, false) |
| 30、selectRowsByIndex(moduleId, index) | 选中某些行(通过index) | index 行号 Number/Array 单数字或者数字组成的数组 | undefined 执行函数 | selectRowsByIndex(‘tableDemo’, [1,2]) |
| 31、unSelectRowsByIndex(moduleId, index) | 选中某些行(通过index) | index 行号 Number/Array 单数字或者数字组成的数组 | undefined 执行函数 | unSelectRowsByIndex(‘tableDemo’, [1,2]) |
| 32、reverseSelected(moduleId) | 反选中 | moduleId 区域Id String | undefined 执行函数 | reverseSelected(‘tableDemo’) |
| 33、filterEmptyRows(moduleId, keys) | 过滤空行,keys为排除排查的键值 | keys table里面的keys Array | undefined 执行函数 | filterEmptyRows(‘tableDemo’, [‘org_pk’]) |
| 34、getAllRowsRemoveKeys(moduleId, keys) | 获取不包含某键或者某些键的行数据,意思是通过传入的键过滤不想要的数据 | keys 需要排除的键名 String/Array/Undefined | 排除特定键的数组 Array | getAllRowsRemoveKeys(‘tableDemo’, [‘org_pk’,’name’]) |
| 35、toggleRowView(moduleId, record) | 切换视图,展开和收起 | record 行数据data Object | undefined 执行函数 | toggleRowView(‘tableDemo’, record) |
| 36、createBrowseIcons(moduleId, config) | 创建表格肩部右侧功能按钮 | config 配置项 Object | ReactNode react片段 | createBrowseIcons(‘tableDemo’, {}) |
| 37、getCacheData(moduleId) | 获取当前表的缓存数据 | moduleId 区域id String | 数据对象 Object | getCacheData(‘tableDemo’) |
| 38、focusRowByIndex(moduleId, index) | 把index行设置为选中行 | index 行号 Number | undefined 执行函数 | focusRowByIndex(‘tableDemo’, 2) |
| 39、getMixinMetaData(moduleId) | 获取以模板数据为基准的全数组数据 | moduleId 区域Id String | 以meta为基准的全数据数组 Array | getMixinMetaData(‘tableDemo’) |
| 40、closeExpandedRow(moduleId) | 关闭任何的展开视图 | moduleId 区域Id String | undefined 执行函数 | closeExpandedRow(‘tableDemo’) |
| 41、setChildTableData(moduleId,childModuleId,record,datas) | 设置子表数据 | moduleId 区域Id String ,childModuleId 区域Id String,record 父表当前行数据 obj, datas 子表要设置的数据 obj | undefined 执行函数 | closeExpandedRow(‘tableDemo’) |
createInsertEditTable的config回调和自定义参数
| 函数名 | 方法说明 | 暴露出来的参数 | 示例 | 备注 |
|---|---|---|---|---|
| modelSave | 整单保存 | props | ||
| tableHead | 右侧肩部功能区创建 | |||
| onAfterEvent | 弹窗控件的编辑后事件 | props, moduleId(区域id), key(操作的键), value(当前值), changedrows(新旧值集合), record(行数据), index(当前index) | ||
| 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) | ||
| params | 自定义传参 | — | — | — |
| showCheck | 显示父表复选框 | — | true | — |
| showChildCheck | 显示子表复选框 | — | true | — |
| showIndex | 显示序号列 | — | true | — |
| childAfterEvent | 子表编辑后事件 | props,moduled,key,value,changedrows,index,record | — | — |
| childBeforeEvent | 子表编辑前事件 | props,moduled,item,index,value,record | — | — |
| childHeight | 子表高度(默认420) | 420 | — |
