You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.tsx 19KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395
  1. import { useState, useEffect, useRef } from 'react';
  2. import { Link, history, connect } from '@umijs/max';
  3. import type { CaptFieldRef, FormInstance } from '@ant-design/pro-components';
  4. import { Layout, Image, Row, Col, Flex, Space, message, Typography, Segmented, Button, ConfigProvider } from 'antd';
  5. import type { CSSProperties } from 'react';
  6. import { PhoneTwoTone, MailTwoTone, PrinterTwoTone, } from '@ant-design/icons';
  7. import { PageContainer, ProFormCaptcha, ProFormSelect, ProFormText, ProFormCascader, ProFormDatePicker, ProForm } from '@ant-design/pro-components';
  8. import { disAfterData } from '@/utils/format'
  9. import { verifyPhone } from '@/utils/VerifyHelper'
  10. import { selectfieldNames, cascaderfieldNames } from '@/constants'
  11. import { PostCompanyRegister } from '@/services/apis/register';
  12. import { GetCaptcha } from '@/services/apis/common'
  13. const RegisterCompany: React.FC = ({ dispatch, dictModel, detail, closeModel }: any) => {
  14. const formRef = useRef<FormInstance | null>();
  15. const [codeImage, setCodeImage] = useState<string>('');
  16. const [capt_id, setCaptId] = useState<string>('');
  17. useEffect(() => {
  18. GetCaptcha().then((res: any) => {
  19. setCodeImage(res.data.img);
  20. setCaptId(res.data.capt_id);
  21. })
  22. }, []);
  23. useEffect(() => {
  24. dispatch({ type: 'dictModel/getList', payload: { code: 2028, type: 'setIndustryPostList' } })
  25. dispatch({ type: 'dictModel/getList', payload: { code: 2009, type: 'setAreaList' } })
  26. dispatch({ type: 'dictModel/getList', payload: { code: 2003, type: 'setScaleList' } })
  27. dispatch({ type: 'dictModel/getList', payload: { code: 2002, type: 'setNatureList' } })
  28. }, [])
  29. return (
  30. <>
  31. <ConfigProvider
  32. theme={{
  33. components: {
  34. Segmented: {
  35. colorText: '#19be6e'
  36. },
  37. Button: {
  38. colorText: ''
  39. }
  40. }
  41. }}
  42. >
  43. <ProForm<Register.Company>
  44. formRef={formRef}
  45. onFinish={async (values) => {
  46. try {
  47. values.capt_id = capt_id;
  48. values.username = values.contact_mobile;
  49. values.industry = values.industry_array && values.industry_array.length > 0 && values.industry_array[0] ? values.industry_array[0] : 0;
  50. values.industry2 = values.industry_array && values.industry_array.length > 0 && values.industry_array[1] ? values.industry_array[1] : 0;
  51. values.province = values.area_array && values.area_array.length > 0 && values.area_array[0] ? values.area_array[0] : 0;
  52. values.city = values.area_array && values.area_array.length > 0 && values.area_array[1] ? values.area_array[1] : 0;
  53. values.district = values.area_array && values.area_array.length > 0 && values.area_array[2] ? values.area_array[2] : 0;
  54. values.street = values.area_array && values.area_array.length > 0 && values.area_array[3] ? values.area_array[3] : 0;
  55. values.nature = values.nature_array && values.nature_array.length > 0 ? values.nature_array[values.nature_array.length - 1] : 0;
  56. values.scale = values.scale_array && values.scale_array.length > 0 ? values.scale_array[values.scale_array.length - 1] : 0;
  57. delete values.nature_array;
  58. delete values.industry_array;
  59. delete values.area_array;
  60. delete values.scale_array;
  61. console.log(values)
  62. let res = await PostCompanyRegister(values)
  63. message.success('注册成功,可进行登录');
  64. } catch (error) {
  65. let res = await GetCaptcha()
  66. setCodeImage(res.data.img);
  67. setCaptId(res.data.capt_id);
  68. formRef.current && formRef.current.resetFields(['captcha'])
  69. }
  70. }}
  71. submitter={{
  72. submitButtonProps: {
  73. block: true,
  74. size: 'large',
  75. title: '注册',
  76. style: {
  77. marginTop: 10
  78. }
  79. },
  80. resetButtonProps: {
  81. style: {
  82. // 隐藏重置按钮
  83. display: 'none',
  84. },
  85. },
  86. }}
  87. >
  88. <Row gutter={[20, 0]}>
  89. <Col span={12}>
  90. <ProFormText
  91. fieldProps={{
  92. size: 'large',
  93. }}
  94. name="contact_mobile"
  95. label="手机号"
  96. placeholder="请输入手机号"
  97. rules={[
  98. {
  99. required: true,
  100. message: '请输入手机号',
  101. },
  102. () => ({
  103. validator(_, value) {
  104. let info = verifyPhone(value);
  105. if (typeof (info) == 'boolean') {
  106. return Promise.resolve();
  107. }
  108. return Promise.reject(new Error(info));
  109. },
  110. })
  111. ]}
  112. />
  113. </Col>
  114. <Col span={12}>
  115. <ProFormText
  116. fieldProps={{
  117. size: 'large',
  118. }}
  119. name="email"
  120. label="邮箱"
  121. placeholder="请输入邮箱"
  122. rules={[
  123. {
  124. required: true,
  125. message: '请输入邮箱',
  126. },
  127. ]}
  128. />
  129. </Col>
  130. <Col span={12}>
  131. <ProFormText.Password
  132. fieldProps={{
  133. size: 'large',
  134. }}
  135. name="password"
  136. label="密码"
  137. placeholder="请输入密码"
  138. rules={[
  139. {
  140. required: true,
  141. message: '请输入密码',
  142. },
  143. () => ({
  144. validator(_, value) {
  145. let comformPassword = formRef.current && formRef.current.getFieldValue('comform_password');
  146. if (comformPassword && comformPassword != value) {
  147. return Promise.reject(new Error('两次密码不一致'));
  148. } else {
  149. return Promise.resolve();
  150. }
  151. },
  152. })
  153. ]}
  154. />
  155. </Col>
  156. <Col span={12}>
  157. <ProFormText.Password
  158. fieldProps={{
  159. size: 'large',
  160. }}
  161. name="comform_password"
  162. label="确认密码"
  163. placeholder="请确认密码"
  164. rules={[
  165. {
  166. required: true,
  167. message: '请确认密码',
  168. },
  169. () => ({
  170. validator(_, value) {
  171. let firstPassword = formRef.current && formRef.current.getFieldValue('password');
  172. if (firstPassword && firstPassword != value) {
  173. return Promise.reject(new Error('密码不一致'));
  174. } else {
  175. return Promise.resolve();
  176. }
  177. },
  178. })
  179. ]}
  180. />
  181. </Col>
  182. <Col span={12}>
  183. <ProFormText
  184. fieldProps={{
  185. size: 'large',
  186. }}
  187. name="full_name"
  188. label="企业名称"
  189. placeholder="请输入企业名称"
  190. rules={[
  191. {
  192. required: true,
  193. message: '请输入企业名称',
  194. },
  195. ]}
  196. />
  197. </Col>
  198. <Col span={12}>
  199. <ProFormText
  200. fieldProps={{
  201. size: 'large',
  202. }}
  203. name="registration_number"
  204. label="统一社会信用代码"
  205. placeholder="请输入统一社会信用代码"
  206. rules={[
  207. {
  208. required: true,
  209. message: '请输入统一社会信用代码',
  210. },
  211. ]}
  212. />
  213. </Col>
  214. <Col span={12}>
  215. <ProFormDatePicker name="establishment_date" placeholder='请选择注册日期' label="注册日期" width='lg' fieldProps={{ size: 'large', disabledDate: disAfterData }} rules={[
  216. {
  217. required: true,
  218. message: '请选择注册日期',
  219. },
  220. ]} />
  221. </Col>
  222. <Col span={12}>
  223. <ProFormCascader
  224. name="industry_array"
  225. label="所属行业"
  226. placeholder='请选择所属行业'
  227. fieldProps={{
  228. size: 'large',
  229. fieldNames: cascaderfieldNames,
  230. options: dictModel.industryPostList,
  231. changeOnSelect: true
  232. }}
  233. rules={[
  234. {
  235. required: true,
  236. message: '请选择所属行业',
  237. },
  238. ]}
  239. />
  240. </Col>
  241. <Col span={12}>
  242. <ProFormCascader
  243. name="area_array"
  244. label="所属地区"
  245. placeholder='请选择所属地区'
  246. fieldProps={{
  247. size: 'large',
  248. fieldNames: cascaderfieldNames,
  249. options: dictModel.areaList,
  250. changeOnSelect: true
  251. }}
  252. rules={[
  253. {
  254. required: true,
  255. message: '请选择所属地区',
  256. },
  257. ]}
  258. />
  259. </Col>
  260. <Col span={12}>
  261. <ProFormText
  262. fieldProps={{
  263. size: 'large',
  264. }}
  265. name="address"
  266. label="公司地址"
  267. placeholder="请输入公司地址"
  268. rules={[
  269. {
  270. required: true,
  271. message: '请输入公司地址',
  272. },
  273. ]}
  274. />
  275. </Col>
  276. <Col span={12}>
  277. <ProFormCascader
  278. name="nature_array"
  279. label="企业性质"
  280. placeholder="请选择企业性质"
  281. fieldProps={{
  282. size: 'large',
  283. fieldNames: selectfieldNames,
  284. options: dictModel.natureList,
  285. changeOnSelect: true
  286. }}
  287. rules={[
  288. {
  289. required: true,
  290. message: '请选择企业性质',
  291. }
  292. ]}
  293. />
  294. </Col>
  295. <Col span={12}>
  296. <ProFormCascader
  297. name="scale_array"
  298. label=" 企业规模"
  299. placeholder="请选择企业规模"
  300. fieldProps={{
  301. size: 'large',
  302. fieldNames: selectfieldNames,
  303. options: dictModel.scaleList,
  304. changeOnSelect: true
  305. }}
  306. rules={[
  307. {
  308. required: true,
  309. message: '请选择企业规模',
  310. }
  311. ]}
  312. />
  313. </Col>
  314. <Col span={12}>
  315. <ProFormText
  316. fieldProps={{
  317. size: 'large',
  318. }}
  319. name="contact_name"
  320. label="联系人"
  321. placeholder="请输入联系人"
  322. rules={[
  323. {
  324. required: true,
  325. message: '请输入联系人',
  326. },
  327. ]}
  328. />
  329. </Col>
  330. <Col span={12}>
  331. <ProFormText
  332. fieldProps={{
  333. size: 'large',
  334. }}
  335. name="contact_phone"
  336. label="联系固话"
  337. placeholder="请输入联系固话"
  338. rules={[
  339. {
  340. required: true,
  341. message: '请输入联系固话',
  342. },
  343. ]}
  344. />
  345. </Col>
  346. <Col span={24}>
  347. <Row gutter={10}>
  348. <Col span={18}>
  349. <ProFormText
  350. label="图形验证码"
  351. name="captcha"
  352. fieldProps={{
  353. size: 'large',
  354. }}
  355. placeholder={'请输入图形验证码'}
  356. rules={[
  357. {
  358. required: true,
  359. message: '请输入图形验证码',
  360. },
  361. ]}
  362. />
  363. </Col>
  364. <Col span={6}>
  365. <Image src={codeImage} width='100%' height={40} preview={false} style={{ borderRadius: '8px', marginTop: '30px' }} onClick={async () => {
  366. let res = await GetCaptcha()
  367. setCodeImage(res.data.img);
  368. setCaptId(res.data.capt_id);
  369. }} />
  370. </Col>
  371. </Row>
  372. </Col>
  373. </Row>
  374. </ProForm>
  375. </ConfigProvider>
  376. </>
  377. )
  378. }
  379. export default connect(({ dictModel }: any) => ({
  380. dictModel
  381. }))(RegisterCompany);