weaver_trunk_cli/pc4mobx/hrm/public/components/Form.js

219 lines
4.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import {
WeaFormItem,
WeaSearchGroup,
} from 'ecCom';
import {
WeaSwitch
} from 'comsMobx';
import {
isObject
} from 'lodash';
import {
observer,
} from 'mobx-react';
@observer
export default class Form extends React.Component {
/**
* @DateTime 2019-05-21
* 概述是否渲染当前condition
* @param {Number} index condition的索引值
* @return {Boolean}
*/
isRenderCondition = (index) => {
const {
groupConfig,
form
} = this.props;
//groupConfig不存在
if (!groupConfig) {
return true;
}
//groupConfig类型不正确
if (!isObject(groupConfig)) {
console && console.error && console.error('check groupConfig type!');
return false
}
//获取动态表单组的索引值
const activeIndexs = Object.keys(groupConfig).map(key => parseInt(key));
if (activeIndexs.includes(index)) {
const key = index.toString();
const config = groupConfig[key];
const {
activeKey,
activeValue
} = config;
//所有表单元素的值
const formFieldsParams = form.getFormParams();
//activeKey对应表单元素的值
const currentValue = formFieldsParams[activeKey];
return activeValue.includes(currentValue);
} else {
return true;
}
}
isRenderItem = (key) => {
const {
itemConfig
} = this.props;
//itemConfig不存在
if (!itemConfig) {
return true;
}
//itemConfig类型错误
if (!isObject(itemConfig)) {
console && console.error && console.error('check itemConfig type!');
}
//动态表单元素的domkey集合
const activeKeys = Object.keys(itemConfig);
if (activeKeys.includes(key)) {
const config = itemConfig[key];
const {
activeKey,
activeValue
} = config;
//所有表单元素的值
const formFieldsParams = form.getFormParams();
//activeKey对应表单元素的值
const currentValue = formFieldsParams[activeKey];
return activeValue.includes(currentValue);
} else {
return true;
}
}
/**
* @DateTime 2019-05-21
* 概述:一行是否显示多个表单元素
* @return {Boolean}
*/
isRenderMultiItems = () => {
const {
multiConfig
} = this.props;
if (!multiConfig) {
return false;
}
if (!isObject(multiConfig)) {
console && console.error && console.error('check multiConfig type');
return false;
}
return true;
}
//渲染一个表单元素
renderItem = (item) => {
this.renderRow(item);
}
//渲染多个表单元素
renderMultiItems = (item) => {
this.renderRow(item, true);
}
//渲染一行中包含的表单元素
renderRow = (item, isMulti) => {
const {
form,
multiConfig
} = this.props;
return (
<WeaFormItem
{...item}
labelCol={{span: 6}}
wrapperCol={{span: 18}}
error={form.getError(item)}
>
<WeaSwitch
fieldConfig={item}
form={form}
formParams={form.getFormParams()}
onChange={(res,obj) => handleFormChange && handleFormChange(res,obj)}
onBlur={(value, res, obj)=>handleFormBlur && handleFormBlur(value, res, obj)}
/>
{
isMulti && multiConfig.map(item=>
const {
domkey
} = item;
const isRender = this.isRenderItem(domkey[0]);
if (!isRender) {
return null;
}
return (<WeaFormItem
{...item}
hideLabel={true}
wrapperCol={{span: 24}}
error={form.getError(item)}
>
<WeaSwitch
fieldConfig={item}
form={form}
formParams={form.getFormParams()}
onChange={(res,obj) => handleFormChange && handleFormChange(res,obj)}
onBlur={(value, res, obj)=>handleFormBlur && handleFormBlur(value, res, obj)}
/>
</WeaFormItem>)
)
}
</WeaFormItem>
)
}
render() {
const {
conditions,
form
} = this.props, {
isFormInit
} = form;
//表单未初始化完成
if (!isFormInit) {
return null;
}
conditions && conditions.map((condition, index) => {
//是否渲染当前condition
const isRender = this.isRenderCondition(index);
if (isRender) {
condition.map(c => {
return c.items.map(item => {
const {
domkey
} = item;
//是否渲染当前item
const isRender = this.isRenderItem(domkey[0]);
if (isRender) {
//是否渲染多个item
const isRenderMulti = this.isRenderMultiItems();
if (isRenderMulti) {
this.renderMultiItems(item);
} else {
this.renderItem(item);
}
} else {
return null;
}
});
});
} else {
return null;
}
});
}
}