mirror of
https://github.com/ant-design/ant-design.git
synced 2024-12-27 02:18:34 +08:00
0a70563e44
* 🎬 improve drawer demo * 🎬 fix drawer demo glitch close #24011
187 lines
5.1 KiB
Markdown
187 lines
5.1 KiB
Markdown
---
|
|
order: 3
|
|
title:
|
|
zh-CN: 抽屉表单
|
|
en-US: Submit form in drawer
|
|
---
|
|
|
|
## zh-CN
|
|
|
|
在抽屉中使用表单。
|
|
|
|
## en-US
|
|
|
|
Use a form in Drawer with a submit button.
|
|
|
|
```jsx
|
|
import { Drawer, Form, Button, Col, Row, Input, Select, DatePicker } from 'antd';
|
|
import { PlusOutlined } from '@ant-design/icons';
|
|
|
|
const { Option } = Select;
|
|
|
|
class DrawerForm extends React.Component {
|
|
state = { visible: false };
|
|
|
|
showDrawer = () => {
|
|
this.setState({
|
|
visible: true,
|
|
});
|
|
};
|
|
|
|
onClose = () => {
|
|
this.setState({
|
|
visible: false,
|
|
});
|
|
};
|
|
|
|
render() {
|
|
return (
|
|
<>
|
|
<Button type="primary" onClick={this.showDrawer}>
|
|
<PlusOutlined /> New account
|
|
</Button>
|
|
<Drawer
|
|
title="Create a new account"
|
|
width={720}
|
|
onClose={this.onClose}
|
|
visible={this.state.visible}
|
|
bodyStyle={{ paddingBottom: 80 }}
|
|
footer={
|
|
<div
|
|
style={{
|
|
textAlign: 'right',
|
|
}}
|
|
>
|
|
<Button onClick={this.onClose} style={{ marginRight: 8 }}>
|
|
Cancel
|
|
</Button>
|
|
<Button onClick={this.onClose} type="primary">
|
|
Submit
|
|
</Button>
|
|
</div>
|
|
}
|
|
>
|
|
<Form layout="vertical" hideRequiredMark>
|
|
<Row gutter={16}>
|
|
<Col span={12}>
|
|
<Form.Item
|
|
name="name"
|
|
label="Name"
|
|
rules={[{ required: true, message: 'Please enter user name' }]}
|
|
>
|
|
<Input placeholder="Please enter user name" />
|
|
</Form.Item>
|
|
</Col>
|
|
<Col span={12}>
|
|
<Form.Item
|
|
name="url"
|
|
label="Url"
|
|
rules={[{ required: true, message: 'Please enter url' }]}
|
|
>
|
|
<Input
|
|
style={{ width: '100%' }}
|
|
addonBefore="http://"
|
|
addonAfter=".com"
|
|
placeholder="Please enter url"
|
|
/>
|
|
</Form.Item>
|
|
</Col>
|
|
</Row>
|
|
<Row gutter={16}>
|
|
<Col span={12}>
|
|
<Form.Item
|
|
name="owner"
|
|
label="Owner"
|
|
rules={[{ required: true, message: 'Please select an owner' }]}
|
|
>
|
|
<Select placeholder="Please select an owner">
|
|
<Option value="xiao">Xiaoxiao Fu</Option>
|
|
<Option value="mao">Maomao Zhou</Option>
|
|
</Select>
|
|
</Form.Item>
|
|
</Col>
|
|
<Col span={12}>
|
|
<Form.Item
|
|
name="type"
|
|
label="Type"
|
|
rules={[{ required: true, message: 'Please choose the type' }]}
|
|
>
|
|
<Select placeholder="Please choose the type">
|
|
<Option value="private">Private</Option>
|
|
<Option value="public">Public</Option>
|
|
</Select>
|
|
</Form.Item>
|
|
</Col>
|
|
</Row>
|
|
<Row gutter={16}>
|
|
<Col span={12}>
|
|
<Form.Item
|
|
name="approver"
|
|
label="Approver"
|
|
rules={[{ required: true, message: 'Please choose the approver' }]}
|
|
>
|
|
<Select placeholder="Please choose the approver">
|
|
<Option value="jack">Jack Ma</Option>
|
|
<Option value="tom">Tom Liu</Option>
|
|
</Select>
|
|
</Form.Item>
|
|
</Col>
|
|
<Col span={12}>
|
|
<Form.Item
|
|
name="dateTime"
|
|
label="DateTime"
|
|
rules={[{ required: true, message: 'Please choose the dateTime' }]}
|
|
>
|
|
<DatePicker.RangePicker
|
|
style={{ width: '100%' }}
|
|
getPopupContainer={trigger => trigger.parentNode}
|
|
/>
|
|
</Form.Item>
|
|
</Col>
|
|
</Row>
|
|
<Row gutter={16}>
|
|
<Col span={24}>
|
|
<Form.Item
|
|
name="description"
|
|
label="Description"
|
|
rules={[
|
|
{
|
|
required: true,
|
|
message: 'please enter url description',
|
|
},
|
|
]}
|
|
>
|
|
<Input.TextArea rows={4} placeholder="please enter url description" />
|
|
</Form.Item>
|
|
</Col>
|
|
</Row>
|
|
</Form>
|
|
</Drawer>
|
|
</>
|
|
);
|
|
}
|
|
}
|
|
|
|
ReactDOM.render(<DrawerForm />, mountNode);
|
|
```
|
|
|
|
```css
|
|
.site-form-in-drawer-wrapper {
|
|
position: absolute;
|
|
right: 0px;
|
|
bottom: 0px;
|
|
width: 100%;
|
|
padding: 10px 16px;
|
|
border-top: 1px solid #e9e9e9;
|
|
background: #fff;
|
|
text-align: right;
|
|
}
|
|
```
|
|
|
|
<style>
|
|
[data-theme="dark"] .site-form-in-drawer-wrapper {
|
|
border-top: 1px solid #303030;
|
|
background: #1f1f1f;
|
|
}
|
|
</style>
|