import React from 'react'; import { Modal, Form, Input, Button, InputNumber, Select, Checkbox, Radio } from 'antd'; const { Option } = Select; const { TextArea } = Input; const layout = { labelCol: { span: 5, }, wrapperCol: { span: 19, } }; export default class ModalForm extends React.Component { state = { visible: false, value: 0 }; // Modal相關 showModal = () => { this.setState({ visible: true, }); } handleOk = e => { this.formRef.current.validateFields() .then(values => { this.formRef.current.resetFields(); this.setState({ visible: false }); console.log("表單值:"); console.log(values); }) .catch(info => { console.log('Validate Failed:', info); }); } handCancel = e => { this.formRef.current.resetFields(); this.setState({ visible: false }) } handleAfterClose = () => { console.log("modal 關閉了!"); } // 表單相關 formRef = React.createRef(); // 定義一個表單 render() { return (<> <Button type="primary" onClick={this.showModal}> 創建 </Button> <Modal title="創建" visible={this.state.visible} width={660} onOk={this.handleOk} onCancel={this.handCancel} okText="確認" cancelText="取消" afterClose={this.handleAfterClose} maskClosable={false} destroyOnClose={true} > <Form {...layout} ref={this.formRef} name="control-ref" preserve={false}> <Form.Item label="賬號" style={{ marginBottom: 0 }}> <Form.Item name="account" style={{ display: 'inline-block', width: 'calc(80% - 8px)', marginRight: 15 }} rules={[ { required: true, message: "賬號不能為空" }, { pattern: /^[a-zA-Z0-9_()()\u4e00-\u9fa5]{1,32}$/, message: "賬號為1至32位漢字、字母、數字、下划線或中英文括號" }, ]} > <Input /> </Form.Item> <Form.Item style={{ display: 'inline-block', width: 'calc(20% - 8px)' }} > <Checkbox>USBKEY</Checkbox> </Form.Item> </Form.Item> <Form.Item label="姓名" style={{ marginBottom: 0 }}> <Form.Item name="name" style={{ display: 'inline-block', width: 'calc(80% - 8px)' }} rules={[ { required: true, message: "姓名不能為空" }, { pattern: /^[a-zA-Z0-9_()()\u4e00-\u9fa5]{1,32}$/, message: "姓名為1至32位漢字、字母、數字、下划線或中英文括號" }, ]} > <Input /> </Form.Item> </Form.Item> <Form.Item label="個人空間配額"> <Form.Item name="space" noStyle rules={[{ required: true, message: "個人空間配額不能為空" }, { type: 'number', min: 1, max: 100, message: "個人空間配額為1-100之間整數" } ]} > <InputNumber style={{ width: 160, marginRight: 15 }} placeholder="1-100之間整數" /> </Form.Item> G </Form.Item> <Form.Item label="私密空間配額"> <Form.Item name="private" noStyle rules={[ { required: true, message: "私密空間配額不能為空" }, { type: 'number', min: 1, max: 100, message: "私密空間配額為1-100之間整數" } ]} > <InputNumber style={{ width: 160, marginRight: 15 }} placeholder="1-100之間整數" /> </Form.Item> G </Form.Item> <Form.Item label="證書級別" style={{ marginBottom: 0 }}> <Form.Item name="level" style={{ display: 'inline-block', width: 'calc(80% - 8px)' }} rules={[ { required: true, message: "證書級別不能為空" }, ]} > <Select placeholder="請選擇證書級別" allowClear > <Option value="1">一級</Option> <Option value="2">二級</Option> </Select> </Form.Item> </Form.Item> <Form.Item label="存儲服務器" style={{ marginBottom: 0 }}> <Form.Item name="server" style={{ display: 'inline-block', width: 'calc(80% - 8px)' }} rules={[ { required: true, message: "存儲服務器不能為空" }, ]} > <Select placeholder="請選擇存儲服務器" allowClear > <Option value="1">服務器一</Option> <Option value="2">服務器二</Option> </Select> </Form.Item> </Form.Item> <Form.Item name="share" label="是否允許中心共享" rules={[ { required: true, message: "中心共享不能為空" }, ]} > <Radio.Group name="radiogroup"> <Radio value={1}>是</Radio> <Radio value={0}>否</Radio> </Radio.Group> </Form.Item> <Form.Item label="描述" style={{ marginBottom: 0 }}> <Form.Item name="describe" style={{ display: 'inline-block', width: 'calc(80% - 8px)' }} rules={[ { pattern: /^[a-zA-Z0-9_()(),。,.\u4e00-\u9fa5]{0,128}$/, message: '描述只能為漢字、字母、數字、下划線或中英文逗號、句號和括號' } ]} > <TextArea rows={4} /> </Form.Item> </Form.Item> </Form> </Modal> </>) } }