MemberForm.jsx 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. import React, { useEffect } from 'react';
  2. import { Form, Input, Button, Select, DatePicker, InputNumber, Switch, Upload, message } from 'antd';
  3. import { UploadOutlined } from '@ant-design/icons';
  4. import moment from 'moment';
  5. const { Option } = Select;
  6. const MemberForm = ({ onSubmit, initialValues }) => {
  7. const [form] = Form.useForm();
  8. useEffect(() => {
  9. if (initialValues) {
  10. form.setFieldsValue({
  11. ...initialValues,
  12. birthDate: initialValues.birthDate ? moment(initialValues.birthDate) : null,
  13. baptismDate: initialValues.baptismDate ? moment(initialValues.baptismDate) : null,
  14. });
  15. } else {
  16. form.resetFields();
  17. }
  18. }, [initialValues, form]);
  19. const onFinish = (values) => {
  20. const formattedValues = {
  21. ...values,
  22. birthDate: values.birthDate ? values.birthDate.format('YYYY-MM-DD') : null,
  23. baptismDate: values.baptismDate ? values.baptismDate.format('YYYY-MM-DD') : null,
  24. photo: values.photo && values.photo[0] ? values.photo[0].originFileObj : null,
  25. };
  26. onSubmit(formattedValues);
  27. };
  28. const normFile = (e) => {
  29. if (Array.isArray(e)) {
  30. return e;
  31. }
  32. return e && e.fileList;
  33. };
  34. const beforeUpload = (file) => {
  35. const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png';
  36. if (!isJpgOrPng) {
  37. message.error('只能上传 JPG/PNG 格式的图片!');
  38. }
  39. const isLt2M = file.size / 1024 / 1024 < 2;
  40. if (!isLt2M) {
  41. message.error('图片大小不能超过 2MB!');
  42. }
  43. return isJpgOrPng && isLt2M;
  44. };
  45. return (
  46. <Form
  47. form={form}
  48. name="memberForm"
  49. onFinish={onFinish}
  50. layout="vertical"
  51. >
  52. <Form.Item
  53. name="name"
  54. label="姓名"
  55. rules={[{ required: true, message: '请输入姓名' }]}
  56. >
  57. <Input />
  58. </Form.Item>
  59. <Form.Item
  60. name="gender"
  61. label="性别"
  62. rules={[{ required: true, message: '请选择性别' }]}
  63. >
  64. <Select>
  65. <Option value="男">男</Option>
  66. <Option value="女">女</Option>
  67. </Select>
  68. </Form.Item>
  69. <Form.Item
  70. name="age"
  71. label="年龄"
  72. rules={[{ required: true, message: '请输入年龄' }]}
  73. >
  74. <InputNumber min={0} max={150} />
  75. </Form.Item>
  76. <Form.Item
  77. name="birthDate"
  78. label="出生日期"
  79. rules={[{ required: true, message: '请选择出生日期' }]}
  80. >
  81. <DatePicker />
  82. </Form.Item>
  83. <Form.Item
  84. name="maritalStatus"
  85. label="婚姻状况"
  86. rules={[{ required: true, message: '请选择婚姻状况' }]}
  87. >
  88. <Select>
  89. <Option value="未婚">未婚</Option>
  90. <Option value="已婚">已婚</Option>
  91. <Option value="离异">离异</Option>
  92. <Option value="丧偶">丧偶</Option>
  93. </Select>
  94. </Form.Item>
  95. <Form.Item
  96. name="isBaptized"
  97. label="是否受洗"
  98. valuePropName="checked"
  99. >
  100. <Switch />
  101. </Form.Item>
  102. <Form.Item
  103. name="baptismDate"
  104. label="受洗日期"
  105. >
  106. <DatePicker />
  107. </Form.Item>
  108. <Form.Item
  109. name="contact"
  110. label="联系方式"
  111. rules={[{ required: true, message: '请输入联系方式' }]}
  112. >
  113. <Input />
  114. </Form.Item>
  115. <Form.Item
  116. name="servicePosition"
  117. label="服侍岗位"
  118. >
  119. <Input />
  120. </Form.Item>
  121. <Form.Item
  122. name="photo"
  123. label="单寸照片"
  124. valuePropName="fileList"
  125. getValueFromEvent={normFile}
  126. >
  127. <Upload
  128. name="photo"
  129. listType="picture"
  130. beforeUpload={beforeUpload}
  131. maxCount={1}
  132. >
  133. <Button icon={<UploadOutlined />}>上传照片</Button>
  134. </Upload>
  135. </Form.Item>
  136. <Form.Item>
  137. <Button type="primary" htmlType="submit">
  138. 提交
  139. </Button>
  140. </Form.Item>
  141. </Form>
  142. );
  143. };
  144. export default MemberForm;