insertEditTable 可编辑嵌套表格

  1. 修改时间: 2018-05-14
  2. 当前版本: 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

表格样式

浏览态样式 (待补充)

insertEditTable可编辑嵌套组件API - 图1

编辑态样式 (待补充)

insertEditTable可编辑嵌套组件API - 图2

简单示例

/**
 * 使用说明:
 *
 * 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