Form 表单组件
修改时间: 2019-02-19当前版本: 1.1.55
分类: NC高级组件
表单样式

简单示例
/**
* 使用说明:
*
* 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状态,这样会带不出默认值)
-
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 组件开发中…
