Form 表单组件

  1. 修改时间: 2019-02-19
  2. 当前版本: 1.1.55

分类: NC高级组件

表单样式

form.png

简单示例

/**
 * 使用说明:
 *
 * 1.引入createPage
 * 2.包装业务页面
 * 3.代码中使用表单各种 API
 *   this.props.form.createForm
 *   this.props.form.setAllFormValue
 *   this.props.form.getAllFormValue
 *   this.props.form.setFormStatus
 *   ......
 */

// 1.引入createPage
import { createPage } from 'nc-lightapp-front'; // 'nc-lightapp-front/src'; 可以引入到源码,用于调试

// 示例 表单组件页面
class FormDemo extends Component {
    constructor(props) {
        super(props);
    }

    // 界面渲染
    render() {
        // 获取创建表单API
        let { createForm } = this.props.form;
        return (
            <div className="form-wrapper">
                // 根据模板信息创建form
                {createForm('formid'), {
                    // 编辑前事件
                    onBeforeEvent: beforeEventFn.bind(this)
                    //编辑后事件
                    onAfterEvent: afterEventFn.bind(this), 
                    // 取消 switch_browse 组件气泡提示
                    cancelPSwitch: true
                }}
            </div>
        );
    }
}

// 2.包装 FormDemo页面

export default createPage({
    initTemplate: initTemPlateFn,   // initTemPlateFn为初始化模板的方法
})(FormDemo);

表单方法API (this.props.form下面的方法)

方法名 方法说明 参数 类型 说明 可选值 返回值 类型 示例 备注
createForm(moduleId, config) 创建表单,表单对应的区域为moduleId moduleId 是页面对应的区域ID String ; config 一些配置项 Object Node createForm(‘formid’) -
setAllFormValue(data) 设置表单数据 data表单数据对象 Object - setAllFormValue({formid:data})
getAllFormValue(moduleIds) 获取表单数据 moduleIds 表单对应区域 String/Array Object getAllFormValue(‘formid’)/getAllFormValue([‘formid1’,’formid2’]) -
setFormStatus(moduleId, status) 设置表单状态 moduleId 页面对应区域名 String ;
status(’add’/‘edit’/‘browse’)状态 String
- setFormStatus(‘formid’,’edit’) -
getFormStatus(moduleId) 获取表单状态 moduleId 页面对应区域名 String String getFormStatus(‘formid’) -
isCheckNow(moduleIds,type) 开启表单校验 moduleId 页面对应区域名 String type toast提示类型默’‘danger’ String true/false校验是否通过 Boolean isCheckNow(‘formid’,’warning’)/isCheckNow([‘formid1’,’formid2’]) -
getFormItemsValue(moduleId,keys) 获取表单某些字段的值 moduleId 页面对应区域名 String ;
keys 字段的键 String/Array
String/Array 一个/多个字段的值 getFormItemsValue(‘formid’,’name’)/getFormItemsValue(‘formid’,[‘name’,’sex’]) -
setFormItemsValue(moduleId,values) 设置表单某些字段的值 moduleId 页面对应区域名 String ;
values 键值对 Object
- setFormItemsValue(‘formid’,{‘name’:{value:’张三’,display:null},’sex’:{display:’男’,value:’0’}) -
setFormItemsDisabled(moduleId,values) 设置表单某些字段的编辑性 moduleId 页面对应区域名 String ;
values 键值对 Object
- setFormItemsDisabled(‘formid’,{‘name’:true,’sex’:false) -
getFormItemsDisabled(moduleId,keys) 获取表单某些字段的编辑性 moduleId 页面对应区域名 String ;
keys 字段的键值 String/Array
- getFormItemsDisabled(‘formid’,’name’)/getFormItemsDisabled(‘formid’,[‘name’,’sex’]) -
setFormItemsRequired(moduleId,values) 设置表单某些字段的必输性 moduleId 页面对应区域名 String ;
values 键值对 Object
- setFormItemsRequired(‘formid’,{‘name’:true,’sex’:false) -
getFormItemsRequired(moduleId,keys) 获取表单某些字段的必输性 moduleId 页面对应区域名 String ;
keys 字段的键值 String/Array
- getFormItemsRequired(‘formid’,’name’)/getFormItemsDisabled(‘formid’,[‘name’,’sex’]) -
cancel(moduleIds) 将表单值取消到上次保存状态并切换到浏览态 moduleIds 页面对应区域名 String/Array - cancel(‘formid’)/cancel([‘formid1’,’name’]) -
EmptyAllFormValue(moduleId) 清空表单所有数据 moduleId 页面对应区域名 String - EmptyAllFormValue(‘formid’) -
setFormItemsVisible(moduleId,values) 设置表单某些字段的显隐性(旧方法) moduleId 页面对应区域名 String ;
values 键值对 Object
- setFormItemsVisible(‘formid’,{‘name’:true,’sex’:false) -
getFormItemsVisible(moduleId,keys) 获取表单某些字段的显隐性 moduleId 页面对应区域名 String ;
keys 字段的键值 String/Array
- getFormItemsVisible(‘formid’,’name’)/getFormItemsVisible(‘formid’,[‘name’,’sex’]) -
setItemsVisible(moduleId,values) 用此API必须createForm时加标记(createForm(areacode,{setVisibleByForm:true})),解决效率问题 设置表单某些字段的显隐性(新方法) moduleId 页面对应区域名 String ;
values 键值对 Object
- setItemsVisible(‘formid’,{‘name’:true,’sex’:false) -
getResidtxtLang(moduleId,attrcode) 根据多语文本 attrcode 获取 当前登录语言的 attrcode 获取登录语言对应的attrcode moduleId 页面对应区域名 String ;
attrcodo String
String getResidtxtLang(‘formid’,’duoyu’) -
closeArea(moduleId) 收起表单某个区域 收起表单某个区域 moduleId 页面对应区域名 String - closeArea(‘formid’,) -
openArea(moduleId) 收起表单某个区域 展开表单某个区域 moduleId 页面对应区域名 String - openArea(‘formid’,) -
setFormItemAutoFocus(moduleId,attrcode) 自动获取焦点API(旧方案,已弃用,不删除是为了防止业务组之前引用报错) 自动获取焦点API moduleId 页面对应区域名 String;
attrcode 字段对应的ID String
- setFormItemAutoFocus(‘formid’,”attrcode”) -
resetItemWidth(moduleId) 设置表单列数 设置表单列数 moduleId 页面对应区域名 String - resetItemWidth(‘formid’,) -
setFormPopConfirmSwitchTips(moduleId,attrcode,content) 设置表单 popconfirmswitch 组件提示语 设置表单 popconfirmswitch 组件 提示语 moduleId 页面对应区域名 String ;
attrcode 控件标识符 String;
content 提示内容 Array
- setFormPopConfirmSwitchTips(‘formid’,’id’,[‘新开提示’,’新关提示’]) -
setFormItemFocus(moduleId,attrcode) 指定 attrcode 获取焦点 指定 attrcode 获取焦点 moduleId 页面对应区域名 String;
attrcode 字段对应的ID String
- setFormItemFocus(‘formid’,”attrcode”) -

createForm的config参数说明

函数名 方法说明 暴露出来的参数 示例 备注
onAfterEvent 表单的编辑后事件 props, moduleId(区域id), key(操作的键), value(当前值),oldValue(旧值)
onBeforeEvent 表单的编辑前事件 props, moduleId(区域id), key(操作的键), value(当前值),data(当前表单所有值)
expandArr 需要展开的子表(主表默认展开) Array 数组 expandArr: [“form1”,”form2”]
headLeftArea 左侧渲染图片 Function headLeftArea: () => { return <div className="form-atvor"></div> }
cancelPSwitch 取消 switch_browse 组件气泡提示 Boolean cancelPSwitch: true
isNoStandard 创建非标准单据(主组织不切换文本态) Boolean isNoStandard: true

4 模板结构

表单数据和使用时分离的, 也就是在createForm的时候不需要传递数据, 表单会根据createForm时出入的id从meta上找到对应数据。

4.1 Form

名称 说明 类型 示例
items 模板数据每一项 array items: [{attrcode: a},{attrcode: b}]
status 当前状态 string add browse edit
moduletype 当前组件类型 string form or table
isunfold 表单展开状态 Boolean isunfold: false
areaVisible 表单区是否可见 Boolean visible: true

4.2 FormItem

名称 说明 类型 示例
attrcode 当前item的ID 唯一 string attrcode: ‘pk_org’
colnum item占几列 number colnum: 2
isnextrow 是否另起一行 bool isnextrow: true
editAfterFlag 编辑关联项 bool editAfterFlag: false
initialvalue 初始值 Obj or string initialvalue: {display: 123, value: 123}
itemtype 渲染组件类型 string itemtype: ‘refer’
maxlength 字段最大长度 number number: 10
options select radio 等枚举组件每一项 Obj options: [{display: 是, value: true},{display: 否, value: false}]
label 标签名称 string label: ‘我是标签’
scale 精度 number scale: 2
visible 是否显示 bool visible: false
required 是否必填 bool required: false
disabled 是否禁用 bool disabled: false
hyperlinkflag 是否超链接 bool hyperlinkflag: false

5. 注意事项

5.1 表单有哪些状态?

表单组件区分为3种状态,分别为add, edit, browse 这三种状态。

  • add 为新增态,会带出模板上默认值,可编辑的状态。
  • edit 为编辑态, 不会带出默认值,渲染表单上存储的值,可编辑的状态。
  • browse 为浏览态, 不会带出默认值, 渲染表单上存储的值, 不可编辑的状态。

    5.2 如何设置新增态(add) ?

    有两个方式设置新增态

  • 在createForm(moduleId)之后,设置模板数组(setMeta(meta))之前,调用设置表单状态的API(setFormStatus(moudleid, status))设置表单为add状态。(不能在表单渲染完之后设置为add状态,这样会带不出默认值)

  • 直接在模板中status配置 add 的状态。

    5.3 设置为新增态,但是未带出默认值 ?

    如已通过上面两种方式设置了新增态,但是依然未带出默认值,可能是以下几种情况导致

  • 手动调用表单设置值的API (setAllFormValue 和 setFormItemsValue), 调用这两个API会覆盖默认值。

  • 表单已渲染完成,再调用设置状态Api。表单初次渲染会把没有默认值项value置为null, 再次表单状态设置为add状态,不会覆盖之前初始化的值。

    5.4 如何替换自己组件

    如果现在表单组件满足不了当前的业务需求时, 可以自行替换表单组件。 javascript /**
    • @description: renderItem 方法放在page的this上
    • @param {type} 组件类型
    • @param {type} 组件ID
    • @param {type} 字段ID
    • @param {type} 需要渲染的jsx
    • @return: */
      props.renderItem( ‘form’, ‘head’, ‘attrcode’,

);

6. 组件更新日志

  • v1.0 meta版本
  • v2.0 From 组件开发中…