编辑表单
注意
- 当字段在当前条件下 disabled, 直接使用 显示值, 而不是使用输入组件 (非模态框中的编辑框, 自己按需求调整)
- 当字段是级联 disabled 时, 需要使用 输入组件的 disabled
详情页面编辑表单-卡片-二级标题
- 详情页面编辑表单-卡片 一般用于打开一个新的页面或者进入子页面时
import React, { Component } from "react";
import { Card, Form, Row, Col, Input } from "hzero-ui";
import intl from "utils/intl";
import { enableRender } from "utils/renderer";
import {
DETAIL_CARD_CLASSNAME,
FORM_COL_2_3_LAYOUT,
FORM_COL_3_LAYOUT,
EDIT_FORM_ROW_LAYOUT,
ROW_HALF_WRITE_ONLY_CLASSNAME,
ROW_WRITE_ONLY_CLASSNAME,
ROW_READ_ONLY_CLASSNAME,
} from "utils/constants";
const { TextArea } = Input;
@Form.create({ fieldNameProp: null })
export default class CardEditForm extends Component {
render() {
const { form, loading = false, isSite = false, record = {} } = this.props;
const { infoType = "N" } = record;
const infoDisabled = infoType === "N";
return (
<Card
key="event-header"
bordered={false}
className={DETAIL_CARD_CLASSNAME}
title={
<h3>
{intl.get("module.service.view.title.header").d("编辑头信息")}
</h3>
}
loading={loading}
>
<Form layout="inline">
<Row
{...EDIT_FORM_ROW_LAYOUT}
className={ROW_HALF_WRITE_ONLY_CLASSNAME}
>
{isSite && (
<Col {...FORM_COL_2_3_LAYOUT}>
<Form.Item
label={intl
.get("module.service.model.modelName.field1")
.d("字段1")}
>
{form.getFieldDecorator("field1", {
initialValue: record.field1,
})(<TextArea />)}
</Form.Item>
</Col>
)}
</Row>
<Row {...EDIT_FORM_ROW_LAYOUT} className={ROW_WRITE_ONLY_CLASSNAME}>
<Col {...FORM_COL_3_LAYOUT}>
<Form.Item
label={intl
.get("module.service.model.modelName.field2")
.d("字段2")}
>
{form.getFieldDecorator("field2")(<Input />)}
</Form.Item>
</Col>
<Col {...FORM_COL_3_LAYOUT}>
<Form.Item
label={intl
.get("module.service.model.modelName.field3")
.d("字段3")}
>
{form.getFieldDecorator("field3")(<Input />)}
</Form.Item>
</Col>
<Col {...FORM_COL_3_LAYOUT}>
<Form.Item
label={intl
.get("module.service.model.modelName.field4")
.d("字段4")}
>
{form.getFieldDecorator("field4")(<Input />)}
</Form.Item>
</Col>
<Col {...FORM_COL_3_LAYOUT}>
<Form.Item
label={intl
.get("module.service.model.modelName.field5")
.d("字段5")}
>
{enableRender(form.getFieldValue("field5"))}
</Form.Item>
</Col>
</Row>
<Row {...EDIT_FORM_ROW_LAYOUT} className={ROW_READ_ONLY_CLASSNAME}>
<Col {...FORM_COL_3_LAYOUT}>
<Form.Item
label={intl
.get("module.service.model.modelName.field6")
.d("字段6")}
>
{form.getFieldDecorator("field6", {
initialValue: record.field6,
})(
infoDisabled ? (
<React.Fragment>{record.field6}</React.Fragment>
) : (
<Input />
)
)}
</Form.Item>
</Col>
<Col {...FORM_COL_3_LAYOUT}>
<Form.Item
label={intl
.get("module.service.model.modelName.field6")
.d("字段7")}
>
{form.getFieldDecorator("field7", {
initialValue: record.field7,
})(
infoDisabled ? (
<React.Fragment>{record.field7}</React.Fragment>
) : (
<Input />
)
)}
</Form.Item>
</Col>
<Col {...FORM_COL_3_LAYOUT}>
<Form.Item
label={intl
.get("module.service.model.modelName.field8")
.d("字段8")}
>
{form.getFieldDecorator("field8", {
initialValue: record.field8,
})(
infoDisabled ? (
<React.Fragment>{record.field6}</React.Fragment>
) : (
<Input />
)
)}
</Form.Item>
</Col>
</Row>
</Form>
</Card>
);
}
}
详情页面编辑表单-模态框
- 详情页面编辑表单-模态框 一般用于打开侧边框(Modal),一般采用右侧弹出模态框
import React from 'react';
import { Modal, Input, Form, Button } from 'hzero-ui';
import { Bind } from 'lodash-decorators';
import intl from "utils/intl";
import { Header, Content } from "components/Page";
const FormItem = Form.Item;
const formLayout = {
labelCol: { span: 5 },
wrapperCol: { span: 17 },
};
@Form.create({ fieldNameProp: null })
export default class DrawerEditForm extends React.Component {
constructor(props) {
super(props);
this.state = {
modalVisible: false,
isCreate: false,
};
}
@Bind()
showModal() {
this.setState({
modalVisible: true,
isCreate: true,
});
}
@Bind()
onCancel() {
this.setState({
modalVisible: false,
});
}
@Bind()
handleEditModal() {
this.setState({
isCreate: false,
modalVisible: true,
});
}
render() {
const { form, loading } = this.props;
const { modalVisible, isCreate } = this.state;
const { getFieldDecorator } = form;
return (
<React.Fragment>
<Header title='模态框编辑表单'>
<Button icon='plus' type='primary' onClick={this.showModal}>
{intl.get('hzero.common.button.create').d('新建')}
</Button>
</Header>
<Content>
<a onClick={this.handleEditModal}>
{intl.get('hzero.common.button.edit').d('编辑')}
</a>
<Modal
destroyOnClose
wrapClassName="ant-modal-sidebar-right"
transitionName="move-right"
title={isCreate ? '新建' : '编辑'}
visible={modalVisible}
confirmLoading={loading}
onCancel={this.onCancel}
onOk={this.handleOK}
>
<Form>
<FormItem
{...formLayout}
label={intl.get('hpfm.message.model.message.code').d('消息编码')}
>
{getFieldDecorator('code', {
initialValue: isCreate ? undefined : 111,
rules: [
{
required: true,
message: intl.get('hzero.common.validation.notNull', {
name: intl.get('hpfm.message.model.message.code').d('消息编码'),
}),
},
],
})(
<Input
trim
typeCase="lower"
inputChinese={false}
/>,
)}
</FormItem>
</Form>
</Modal>
</Content>
</React.Fragment>
);
}
}
详情页面编辑表单-收缩框
- 详情页面编辑表单-收缩框 一般用于可将表单收起和展开的情况(采用hzero-ui的折叠面板)
import React, { Fragment } from 'react';
import {
Col,
Collapse,
Form,
Icon,
Input,
InputNumber,
Row,
Spin,
} from 'hzero-ui';
import { Bind } from 'lodash-decorators';
import classnames from 'classnames';
import { PASSWORD } from 'utils/regExp';
import { Content, Header } from 'components/Page';
import {
DETAIL_DEFAULT_CLASSNAME,
EDIT_FORM_ITEM_LAYOUT,
EDIT_FORM_ROW_LAYOUT,
FORM_COL_3_LAYOUT,
} from 'utils/constants';
import intl from 'utils/intl';
import formatterCollections from 'utils/intl/formatterCollections';
const FormItem = Form.Item;
const { Panel } = Collapse;
@Form.create({ fieldNameProp: null })
@formatterCollections({ code: ['hiam.passwordPolicy'] })
export default class CollapseEditForm extends React.Component {
constructor(props) {
super(props);
this.state = {
collapseKeys: ['passwordPolicy'],
};
}
/**
* onCollapseChange - 折叠面板onChange
* @param {Array<string>} collapseKeys - Panels key
*/
@Bind()
onCollapseChange(collapseKeys) {
this.setState({
collapseKeys,
});
}
render() {
const {
form: {
getFieldDecorator,
getFieldValue,
}} = this.props;
const { collapseKeys = [] } = this.state;
return (
<React.Fragment>
<Header title={intl.get('hiam.passwordPolicy.view.message.title').d('密码策略')} />
<Content>
<Spin
spinning={false}
wrapperClassName={classnames(DETAIL_DEFAULT_CLASSNAME)}
>
<Collapse
className="form-collapse"
defaultActiveKey={['passwordPolicy', 'loginPolicy']}
onChange={this.onCollapseChange}
>
<Panel
showArrow={false}
header={
<Fragment>
<h3>
{intl
.get('hiam.passwordPolicy.view.message.subTitle.passwordPolicy')
.d('密码安全策略')}
</h3>
<a>
{collapseKeys.includes('passwordPolicy')
? intl.get(`hzero.common.button.up`).d('收起')
: intl.get(`hzero.common.button.expand`).d('展开')}
</a>
<Icon type={collapseKeys.includes('passwordPolicy') ? 'up' : 'down'} />
</Fragment>
}
key="passwordPolicy"
>
<Form>
<Row {...EDIT_FORM_ROW_LAYOUT} className="writable-row">
<Col {...FORM_COL_3_LAYOUT}>
<FormItem
{...EDIT_FORM_ITEM_LAYOUT}
label={intl
.get('hiam.passwordPolicy.model.passwordPolicy.originalPassword')
.d('新用户默认密码')}
>
{getFieldDecorator('originalPassword', {
rules: [
{
required: true,
message: intl.get('hzero.common.validation.notNull', {
name: intl.get('hiam.subAccount.model.user.password').d('密码'),
}),
},
{
pattern: PASSWORD,
message: intl
.get('hzero.common.validation.password')
.d('至少包含数字/字母/字符2种组合,长度为6-30个字符'),
},
],
initialValue: 'handhand',
})(<Input />)}
</FormItem>
</Col>
<Col {...FORM_COL_3_LAYOUT}>
<FormItem
{...EDIT_FORM_ITEM_LAYOUT}
label={intl
.get('hiam.passwordPolicy.model.passwordPolicy.passwordUpdateRate')
.d('密码更新频率')}
>
{getFieldDecorator('passwordUpdateRate', {
rules: [
{
required: true,
message: intl.get('hzero.common.validation.notNull', {
name: intl
.get('hiam.passwordPolicy.model.passwordPolicy.passwordUpdateRate')
.d('密码更新频率'),
}),
},
],
initialValue: 22,
})(
<InputNumber
style={{ width: '100%' }}
min={0}
precision={0}
formatter={value => `${value}天`}
/>
)}
</FormItem>
</Col>
<Col {...FORM_COL_3_LAYOUT}>
<FormItem
{...EDIT_FORM_ITEM_LAYOUT}
label={intl
.get('hiam.passwordPolicy.model.passwordPolicy.minLength')
.d('最小密码长度')}
>
{getFieldDecorator('minLength', {
initialValue: 11,
rules: [
{
required: true,
message: intl
.get('hiam.passwordPolicy.model.passwordPolicy.minLength')
.d('最小密码长度'),
},
],
})(
<InputNumber
style={{ width: '100%' }}
min={6}
precision={0}
max={getFieldValue('maxLength')}
/>
)}
</FormItem>
</Col>
</Row>
</Form>
</Panel>
</Collapse>
</Spin>
</Content>
</React.Fragment>
);
}
}
详情页面编辑表单-无卡片
- 详情页面编辑表单-无卡片 一般用于打开新的页面或进入子页面
import React from 'react';
import { Input, Form, Row, Col } from 'hzero-ui';
import intl from "utils/intl";
import { CODE_UPPER } from 'utils/regExp';
import { Header, Content } from "components/Page";
import {
EDIT_FORM_ROW_LAYOUT,
ROW_READ_WRITE_CLASSNAME,
FORM_COL_3_LAYOUT,
EDIT_FORM_ITEM_LAYOUT,
DETAIL_EDIT_FORM_CLASSNAME,
} from 'utils/constants';
@Form.create({ fieldNameProp: null })
export default class DetailEditForm extends React.Component {
render() {
const { form }= this.props;
return (
<React.Fragment>
<Header title='编辑表单-无卡片' />
<Content>
<Form className={DETAIL_EDIT_FORM_CLASSNAME}>
<Row
{...EDIT_FORM_ROW_LAYOUT}
className={ROW_READ_WRITE_CLASSNAME}
>
<Col {...FORM_COL_3_LAYOUT}>
<Form.Item
{...EDIT_FORM_ITEM_LAYOUT}
label={intl.get('hpfm.staticText.model.staticText.code').d('编码')}
>
{form.getFieldDecorator('textCode', {
initialValue: 'CODE',
rules: [
{
required: true,
message: intl.get('hzero.common.validation.notNull', {
name: intl.get('module.service.model.service.code').
d('编码'),
}),
},
{
pattern: CODE_UPPER,
message: intl.get('hzero.common.validation.codeUpper').
d('全大写及数字,必须以字母、数字开头,可包含“-”、“_”、“.”、“/”'),
},
],
})(<Input trim typeCase="upper" inputChinese={false} />)}
</Form.Item>
</Col>
<Col {...FORM_COL_3_LAYOUT}>
<Form.Item
{...EDIT_FORM_ITEM_LAYOUT}
label={intl.get('module.service.model.service.name').d('名称')}
>
{form.getFieldDecorator('textCode', {
initialValue: 'NAME',
rules: [
{
pattern: CODE_UPPER,
message: intl.get('hzero.common.validation.codeUpper').
d('全大写及数字,必须以字母、数字开头,可包含“-”、“_”、“.”、“/”'),
},
],
})(<Input trim typeCase="upper" inputChinese={false} />)}
</Form.Item>
</Col>
<Col {...FORM_COL_3_LAYOUT}>
<Form.Item
{...EDIT_FORM_ITEM_LAYOUT}
label={intl.get('hpfm.staticText.model.staticText.title').d('标题')}
>
{form.getFieldDecorator('textCode', {
initialValue: 'TITLE',
})(<Input trim typeCase="upper" inputChinese={false} />)}
</Form.Item>
</Col>
</Row>
</Form>
</Content>
</React.Fragment>
);
}
}