unit.jsx 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728
  1. /*
  2. @author:李霆
  3. @update:2018/05/29
  4. */
  5. import React from 'react';
  6. import {
  7. Radio,
  8. Icon,
  9. Button,
  10. Input,
  11. Select,
  12. Spin,
  13. message,
  14. DatePicker,
  15. Modal,
  16. Upload,
  17. Form,
  18. Row,
  19. Col,
  20. InputNumber
  21. } from 'antd';
  22. import $ from 'jquery/src/ajax';
  23. import './unit.less';
  24. import {
  25. socialAttribute,
  26. industry,
  27. } from '@/dataDic.js';
  28. import {
  29. splitUrl,
  30. } from '@/tools.js';
  31. const FormItem = Form.Item;
  32. import Crop from '@/crop/cropBlock';
  33. //图片组件
  34. const PicturesWall = React.createClass({
  35. getInitialState() {
  36. return {
  37. previewVisible: false,
  38. previewImage: '',
  39. fileList: []
  40. };
  41. },
  42. handleCancel() {
  43. this.setState({
  44. previewVisible: false
  45. });
  46. },
  47. handlePreview(file) {
  48. this.setState({
  49. previewImage: file.url || file.thumbUrl,
  50. previewVisible: true
  51. });
  52. },
  53. handleChange(info) {
  54. let fileList = info.fileList;
  55. this.setState({
  56. fileList
  57. });
  58. this.props.fileList(fileList);
  59. },
  60. componentWillReceiveProps(nextProps) {
  61. this.state.fileList = nextProps.pictureUrl;
  62. },
  63. render() {
  64. const { previewVisible, previewImage, fileList } = this.state;
  65. const uploadButton = (
  66. <div>
  67. <Icon type="plus" />
  68. <div className="ant-upload-text">点击上传</div>
  69. </div>
  70. );
  71. return (
  72. <div style={{ display: 'inline-block' }}>
  73. <Upload
  74. action={globalConfig.context + '/api/user/uploadPicture'}
  75. data={{ sign: 'user_picture' }}
  76. listType="picture-card"
  77. fileList={fileList}
  78. onPreview={this.handlePreview}
  79. onChange={this.handleChange}
  80. >
  81. {fileList.length >= 1 ? null : uploadButton}
  82. </Upload>
  83. <Modal maskClosable={false} visible={previewVisible} footer={null} onCancel={this.handleCancel}>
  84. <img alt="example" style={{ width: '100%' }} src={previewImage} />
  85. </Modal>
  86. </div>
  87. );
  88. }
  89. });
  90. const PicturesWallMore = React.createClass({
  91. getInitialState() {
  92. return {
  93. previewVisible: false,
  94. previewImage: '',
  95. fileList: []
  96. };
  97. },
  98. handleCancel() {
  99. this.setState({
  100. previewVisible: false
  101. });
  102. },
  103. handlePreview(file) {
  104. this.setState({
  105. previewImage: file.url || file.thumbUrl,
  106. previewVisible: true
  107. });
  108. },
  109. handleChange(info) {
  110. let fileList = info.fileList;
  111. this.setState({
  112. fileList
  113. });
  114. this.props.fileList(fileList);
  115. },
  116. componentWillReceiveProps(nextProps) {
  117. this.state.fileList = nextProps.pictureUrl;
  118. },
  119. render() {
  120. const { previewVisible, previewImage, fileList } = this.state;
  121. const uploadButton = (
  122. <div>
  123. <Icon type="plus" />
  124. <div className="ant-upload-text">点击上传</div>
  125. </div>
  126. );
  127. return (
  128. <div style={{ display: 'inline-block' }}>
  129. <Upload
  130. action={globalConfig.context + '/api/user/uploadHonerPicture'}
  131. data={{ sign: 'honor_picture' }}
  132. listType="picture-card"
  133. fileList={fileList}
  134. onPreview={this.handlePreview}
  135. onChange={this.handleChange}
  136. >
  137. {fileList.length >= 8 ? null : uploadButton}
  138. </Upload>
  139. <Modal maskClosable={false} visible={previewVisible} footer={null} onCancel={this.handleCancel}>
  140. <img alt="example" style={{ width: '100%' }} src={previewImage} />
  141. </Modal>
  142. </div>
  143. );
  144. }
  145. });
  146. const Unit = React.createClass({
  147. getInitialState() {
  148. return {
  149. loading: false,
  150. orgCodeUrl: [],
  151. companyLogoUrl: [],
  152. ProvinceCity:[],
  153. qualiUrl:[]
  154. };
  155. },
  156. loadInformation(record) {
  157. this.setState({
  158. loading:true
  159. })
  160. $.ajax({
  161. method: 'get',
  162. dataType: 'json',
  163. url: globalConfig.context + '/api/user/getOrganizationDetail',
  164. success: function(data) {
  165. let thisData = data.data;
  166. if (!thisData) {
  167. if (data.error && data.error.length) {
  168. message.warning(data.error[0].message);
  169. }
  170. thisData = {};
  171. }
  172. this.setState({
  173. InformationId: thisData.id,
  174. InformationUid: thisData.uid,
  175. identifyName: thisData.identifyName,
  176. listed: thisData.listed,
  177. highTechZone: thisData.highTechZone,
  178. orgCodeUrl: thisData.orgCodeUrl
  179. ? splitUrl(thisData.orgCodeUrl, ',', globalConfig.avatarHost + '/upload')
  180. : [],
  181. companyLogoUrl:thisData.companyLogoUrl?thisData.companyLogoUrl.split(','):[],
  182. qualiUrl: thisData.honorPicture
  183. ? splitUrl(thisData.honorPicture, ',', globalConfig.avatarHost + '/upload')
  184. : [],
  185. dataInformation: thisData,
  186. //ProvinceCity: ProvinceCityArr[0] != null ? ProvinceCityArr : undefined,
  187. industry: String(thisData.industry) == 'null' ? undefined : String(thisData.industry),
  188. societyTag: thisData.societyTag || undefined,
  189. introduction: thisData.introduction,
  190. postalAddress: thisData.postalAddress,
  191. fixedTel: thisData.fixedTel,
  192. registeredCapital: thisData.registeredCapital,
  193. enterpriseScale: thisData.enterpriseScale,
  194. legalPerson: thisData.legalPerson,
  195. legalPersonIdCard: thisData.legalPersonIdCard,
  196. legalPersonTel: thisData.legalPersonTel,
  197. legalPersonEmail: thisData.legalPersonEmail,
  198. businessScope: thisData.businessScope,
  199. orgCode: thisData.orgCode,
  200. type:thisData.type,
  201. qq:thisData.qq,
  202. email:thisData.email,
  203. authentication:thisData.authentication
  204. });
  205. }.bind(this)
  206. }).always(
  207. function() {
  208. this.setState({
  209. loading: false
  210. });
  211. }.bind(this)
  212. );
  213. },
  214. //图片
  215. getOrgCodeUrl(e) {
  216. this.setState({
  217. orgCodeUrl: e
  218. });
  219. },
  220. getCompanyLogoUrl(e) {
  221. this.setState({
  222. companyLogoUrl: e
  223. });
  224. },
  225. getQualiUrl(e) {
  226. this.setState({
  227. qualiUrl: e
  228. });
  229. },
  230. //基本信息提交
  231. newSubmit(e) {
  232. this.setState({
  233. selectedRowKeys: []
  234. });
  235. let theorgCodeUrl = [];
  236. if (this.state.orgCodeUrl.length) {
  237. let picArr = [];
  238. this.state.orgCodeUrl.map(function(item) {
  239. if (item.response && item.response.data && item.response.data.length) {
  240. picArr.push(item.response.data);
  241. }
  242. });
  243. theorgCodeUrl = picArr.join(',');
  244. }
  245. let thequaliUrl = [];
  246. if (this.state.qualiUrl.length) {
  247. let picArr = [];
  248. this.state.qualiUrl.map(function(item) {
  249. if (item.response && item.response.data && item.response.data.length) {
  250. picArr.push(item.response.data);
  251. }
  252. });
  253. thequaliUrl = picArr.join(',');
  254. }
  255. this.setState({
  256. loading: true
  257. });
  258. $.ajax({
  259. method: 'post',
  260. dataType: 'json',
  261. url: globalConfig.context + '/api/user/updateOrganizationDetail',
  262. data: {
  263. id: this.state.InformationId,
  264. uid: this.state.InformationUid,
  265. societyTag: this.state.societyTag,
  266. identifyName: this.state.identifyName, //单位名称
  267. introduction: this.state.introduction,
  268. unitName: this.state.unitName,
  269. industry: this.state.industry,
  270. postalAddress: this.state.postalAddress,
  271. fixedTel: this.state.fixedTel,
  272. contactsFax: this.state.contactsFax,
  273. registeredCapital: this.state.registeredCapital ? this.state.registeredCapital : 0,
  274. enterpriseScale: this.state.enterpriseScale,
  275. legalPerson: this.state.legalPerson,
  276. legalPersonIdCard: this.state.legalPersonIdCard,
  277. legalPersonTel: this.state.legalPersonTel,
  278. legalPersonEmail: this.state.legalPersonEmail,
  279. highTechZone: this.state.highTechZone,
  280. listed: this.state.listed,
  281. contacts: this.state.contacts,
  282. orgCode: this.state.orgCode,
  283. businessScope: this.state.businessScope,
  284. introduction: this.state.introduction,
  285. // companyLogoUrl: thecompanyLogoUrl.length != 0 ? thecompanyLogoUrl : '',
  286. companyLogoUrl:this.state.companyLogoUrl.length>0?(this.state.companyLogoUrl).join(','):[],
  287. honorPicture: thequaliUrl.length != 0 ? thequaliUrl : '',
  288. orgCodeUrl: theorgCodeUrl.length != 0 ? theorgCodeUrl : '',
  289. auditStatus: this.state.auditStatus,
  290. authentication:this.state.authentication,
  291. type:this.state.type,
  292. qq:this.state.qq,
  293. email:this.state.email
  294. }
  295. }).done(
  296. function(data) {
  297. this.setState({
  298. loading: false
  299. });
  300. if (!data.error.length) {
  301. message.success('保存成功');
  302. this.loadInformation();
  303. } else {
  304. message.warning(data.error[0].message);
  305. }
  306. }.bind(this)
  307. );
  308. },
  309. subFun(){
  310. if(!this.state.identifyName){
  311. message.warning("请填写单位名称")
  312. return;
  313. }
  314. if (!this.state.industry) {
  315. message.warning('请选择行业!');
  316. return false;
  317. }
  318. if (!this.state.societyTag) {
  319. message.warning('请选择社会性质!');
  320. return false;
  321. }
  322. if (isNaN(this.state.registeredCapital)) {
  323. message.warning('注册资本只能输入数字!');
  324. return false;
  325. }
  326. if (!this.state.email) {
  327. message.warning('请填写企业邮箱!');
  328. return false;
  329. }
  330. if (!this.state.qq) {
  331. message.warning('请填写企业QQ!');
  332. return false;
  333. }
  334. if (this.state.companyLogoUrl&&(this.state.companyLogoUrl.length)<1) {
  335. message.warning('请上传企业LOGO.');
  336. return false;
  337. }
  338. if(!this.state.businessScope){
  339. message.warning('请填写业务范围!');
  340. return false;
  341. }
  342. if(!this.state.introduction){
  343. message.warning('请填写企业简介!');
  344. return false;
  345. }
  346. if (this.state.qualiUrl&&(this.state.qualiUrl.length)<1) {
  347. message.warning('请上传资质荣誉照片.');
  348. return false;
  349. }
  350. this.newSubmit()
  351. },
  352. handleOk(){
  353. this.newSubmit();
  354. this.setState({
  355. visible:false
  356. })
  357. },
  358. handleCancel(){
  359. this.setState({
  360. visible:false
  361. })
  362. },
  363. //logo图片获取
  364. getAllImg(imgArr){
  365. this.setState({
  366. companyLogoUrl:imgArr
  367. })
  368. },
  369. componentWillMount() {
  370. this.loadInformation();
  371. },
  372. componentWillReceiveProps(nextProps) {
  373. },
  374. render() {
  375. return (
  376. <div className="unit-wrap">
  377. <Form layout="horizontal" onSubmit={this.newSubmit} id="demand-form" style={{width:'80%'}}>
  378. <Spin spinning={this.state.loading}>
  379. <Row style={{ marginBottom: 20 }}>
  380. <Col offset={2} span={4}>
  381. <h4 style={{fontSize:20}}>企业资料</h4>
  382. </Col>
  383. </Row>
  384. <div className="clearfix" style={{ paddingLeft: '60px' }}>
  385. <FormItem
  386. className="half-item"
  387. labelCol={{ span: 4 }}
  388. wrapperCol={{ span: 18 }}
  389. label={<span><span className="color-red"> * </span>企业名称</span>}
  390. >
  391. <Input
  392. maxLength={128}
  393. value={this.state.identifyName}
  394. onChange={(e) => {
  395. this.setState({ identifyName: e.target.value });
  396. }}
  397. placeholder="请输入企业名称"
  398. />
  399. </FormItem>
  400. <FormItem
  401. className="half-item"
  402. labelCol={{ span: 4 }}
  403. wrapperCol={{ span: 18 }}
  404. label="企业规模"
  405. >
  406. <InputNumber
  407. placeholder="企业规模"
  408. value={this.state.enterpriseScale}
  409. InputNumber min={0} maxLength={16}
  410. style={{width:120,marginRight:10}}
  411. onChange={(e) => {
  412. this.setState({ enterpriseScale: e });
  413. }}
  414. />
  415. <span>人</span>
  416. </FormItem>
  417. </div>
  418. <div className="clearfix" style={{ paddingLeft: '60px' }}>
  419. <FormItem className="half-item" labelCol={{ span: 4 }} wrapperCol={{ span: 18 }} label={<span><span className="color-red"> * </span>行业</span>}>
  420. <Select
  421. placeholder="选择行业"
  422. value={this.state.industry}
  423. onChange={(e) => {
  424. this.setState({ industry: e });
  425. }}
  426. >
  427. {industry.map(function(item) {
  428. return <Select.Option key={item.value}>{item.key}</Select.Option>;
  429. })}
  430. </Select>
  431. </FormItem>
  432. <FormItem
  433. className="half-item"
  434. labelCol={{ span: 4 }}
  435. wrapperCol={{ span: 18 }}
  436. label={<span><span className="color-red"> * </span>社会属性</span>}
  437. >
  438. <Select
  439. placeholder="客户社会属性"
  440. value={this.state.societyTag}
  441. onChange={(e) => {
  442. this.setState({ societyTag: e });
  443. }}
  444. >
  445. {socialAttribute.map(function(item) {
  446. return <Select.Option key={item.value}>{item.key}</Select.Option>;
  447. })}
  448. </Select>
  449. </FormItem>
  450. <FormItem
  451. className="half-item"
  452. labelCol={{ span: 4 }}
  453. wrapperCol={{ span: 18 }}
  454. label="通信地址"
  455. >
  456. <Input
  457. maxLength={255}
  458. placeholder="客户通信地址"
  459. value={this.state.postalAddress}
  460. onChange={(e) => {
  461. this.setState({ postalAddress: e.target.value });
  462. }}
  463. />
  464. </FormItem>
  465. <FormItem
  466. className="half-item"
  467. labelCol={{ span: 4 }}
  468. wrapperCol={{ span: 18 }}
  469. label="固定电话"
  470. >
  471. <Input
  472. maxLength={16}
  473. placeholder="客户固定电话"
  474. value={this.state.fixedTel}
  475. onChange={(e) => {
  476. this.setState({ fixedTel: e.target.value });
  477. }}
  478. />
  479. </FormItem>
  480. <FormItem
  481. className="half-item"
  482. labelCol={{ span: 4 }}
  483. wrapperCol={{ span: 18 }}
  484. label="注册资本"
  485. >
  486. <Input
  487. placeholder="注册资本单位为万元"
  488. value={this.state.registeredCapital}
  489. maxLength={6}
  490. onChange={(e) => {
  491. this.setState({ registeredCapital: e.target.value });
  492. }}
  493. />
  494. </FormItem>
  495. <FormItem
  496. className="half-item"
  497. labelCol={{ span: 4 }}
  498. wrapperCol={{ span: 18 }}
  499. label="法人名称"
  500. >
  501. <Input
  502. maxLength={16}
  503. placeholder="法人名称"
  504. value={this.state.legalPerson}
  505. onChange={(e) => {
  506. this.setState({ legalPerson: e.target.value });
  507. }}
  508. />
  509. </FormItem>
  510. <FormItem
  511. className="half-item"
  512. labelCol={{ span: 4 }}
  513. wrapperCol={{ span: 18 }}
  514. label="法人身份证号码"
  515. >
  516. <Input
  517. maxLength={32}
  518. placeholder="法人身份证号码"
  519. value={this.state.legalPersonIdCard}
  520. onChange={(e) => {
  521. this.setState({ legalPersonIdCard: e.target.value });
  522. }}
  523. />
  524. </FormItem>
  525. <FormItem
  526. className="half-item"
  527. labelCol={{ span: 4 }}
  528. wrapperCol={{ span: 18 }}
  529. label="法人电话"
  530. >
  531. <Input
  532. maxLength={16}
  533. placeholder="法人电话"
  534. value={this.state.legalPersonTel}
  535. onChange={(e) => {
  536. this.setState({ legalPersonTel: e.target.value });
  537. }}
  538. />
  539. </FormItem>
  540. <FormItem
  541. className="half-item"
  542. labelCol={{ span: 4 }}
  543. wrapperCol={{ span: 18 }}
  544. label="法人电子邮箱"
  545. >
  546. <Input
  547. maxLength={32}
  548. placeholder="法人电子邮箱"
  549. value={this.state.legalPersonEmail}
  550. onChange={(e) => {
  551. this.setState({ legalPersonEmail: e.target.value });
  552. }}
  553. />
  554. </FormItem>
  555. <FormItem
  556. className="half-item"
  557. labelCol={{ span: 4 }}
  558. wrapperCol={{ span: 18 }}
  559. label="机构代码"
  560. >
  561. <Input
  562. maxLength={32}
  563. placeholder="社会同意机构代码"
  564. value={this.state.orgCode}
  565. onChange={(e) => {
  566. this.setState({ orgCode: e.target.value });
  567. }}
  568. />
  569. </FormItem>
  570. <FormItem
  571. className="half-item"
  572. labelCol={{ span: 4 }}
  573. wrapperCol={{ span: 18 }}
  574. label={<span><span className="color-red"> * </span>企业邮箱</span>}
  575. >
  576. <Input
  577. maxLength={32}
  578. placeholder="请填写企业邮箱"
  579. value={this.state.email}
  580. onChange={(e) => {
  581. this.setState({ email: e.target.value });
  582. }}
  583. />
  584. </FormItem>
  585. <FormItem
  586. className="half-item"
  587. labelCol={{ span: 4 }}
  588. wrapperCol={{ span: 18 }}
  589. label={<span><span className="color-red"> * </span>企业QQ</span>}
  590. >
  591. <Input
  592. maxLength={16}
  593. placeholder="填写企业QQ"
  594. value={this.state.qq}
  595. onChange={(e) => {
  596. this.setState({ qq: e.target.value });
  597. }}
  598. />
  599. </FormItem>
  600. <FormItem className="half-item" labelCol={{ span: 4 }} wrapperCol={{ span: 18 }} label="高新">
  601. <Radio.Group
  602. value={this.state.highTechZone}
  603. onChange={(e) => {
  604. this.setState({ highTechZone: e.target.value });
  605. }}
  606. >
  607. <Radio value={0}>是</Radio>
  608. <Radio value={1}>否 </Radio>
  609. </Radio.Group>
  610. </FormItem>
  611. <FormItem className="half-item" labelCol={{ span: 4 }} wrapperCol={{ span: 18 }} label="上市">
  612. <Radio.Group
  613. value={this.state.listed}
  614. onChange={(e) => {
  615. this.setState({ listed: e.target.value });
  616. }}
  617. >
  618. <Radio value={0}>是</Radio>
  619. <Radio value={1}>否 </Radio>
  620. </Radio.Group>
  621. </FormItem>
  622. <div className="clearfix pictures">
  623. <FormItem
  624. className="half-item"
  625. labelCol={{ span: 4 }}
  626. wrapperCol={{ span: 18 }}
  627. style={{ marginTop: 15 }}
  628. label="机构证(PIC)"
  629. >
  630. <PicturesWall
  631. pictureSign="PIC"
  632. fileList={this.getOrgCodeUrl}
  633. pictureUrl={this.state.orgCodeUrl}
  634. />
  635. <p>图片建议:图片要清晰。</p>
  636. </FormItem>
  637. <FormItem
  638. className="half-item"
  639. style={{paddingTop:15}}
  640. labelCol={{ span: 4 }}
  641. wrapperCol={{ span: 18 }}
  642. label={<span><span className="color-red"> * </span>企业logo</span>}
  643. >
  644. <Crop
  645. getAllImg={this.getAllImg}
  646. number = {1}
  647. aspectRatio = {1/1}
  648. url ={globalConfig.context + '/api/user/uploadPicture64'}
  649. uploadData = {{sign:'user_picture'}}
  650. urlArr = {this.state.companyLogoUrl}
  651. />
  652. <p>图片建议 : 图片要清晰。</p>
  653. </FormItem>
  654. </div>
  655. <div className="clearfix">
  656. <FormItem
  657. className="half-item"
  658. labelCol={{ span: 4 }}
  659. wrapperCol={{ span: 18 }}
  660. label={<span><span className="color-red"> * </span>业务范围</span>}
  661. >
  662. <Input
  663. type="textarea"
  664. rows={4}
  665. maxLength={400}
  666. value={this.state.businessScope}
  667. placeholder="请输入业务范围"
  668. onChange={(e) => {
  669. this.setState({ businessScope: e.target.value });
  670. }}
  671. />
  672. </FormItem>
  673. <FormItem
  674. className="half-item"
  675. labelCol={{ span: 4 }}
  676. wrapperCol={{ span: 18 }}
  677. label={<span><span className="color-red"> * </span>企业简介</span>}
  678. >
  679. <Input
  680. type="textarea"
  681. rows={4}
  682. maxLength={512}
  683. value={this.state.introduction}
  684. placeholder="请输入企业简介"
  685. onChange={(e) => {
  686. this.setState({ introduction: e.target.value });
  687. }}
  688. />
  689. </FormItem>
  690. </div>
  691. <div className="clearfix">
  692. <FormItem
  693. labelCol={{ span: 2 }}
  694. wrapperCol={{ span: 18 }}
  695. style={{ marginTop: 15 }}
  696. label={<span><span className="color-red"> * </span>荣誉资质</span>}
  697. >
  698. <PicturesWallMore
  699. pictureSign="PIC"
  700. fileList={this.getQualiUrl}
  701. pictureUrl={this.state.qualiUrl}
  702. />
  703. <p>图片建议:图片要清晰。</p>
  704. </FormItem>
  705. </div>
  706. <Row style={{ marginBottom: 20 ,marginTop:10}}>
  707. <Col offset={2} span={4}>
  708. <Button size="large" className="set-submit" type="primary" onClick={this.subFun} >
  709. 保存
  710. </Button>
  711. </Col>
  712. </Row>
  713. </div>
  714. </Spin>
  715. </Form>
  716. </div>
  717. );
  718. }
  719. });
  720. export default Unit;