index.tsx 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. import logo from '@/assets/img/loginlogo.png'
  2. import { userStore } from '@/store/mobx'
  3. import { iFromValues, iLoginProps, iRetrieveFormProps } from '@/types/login'
  4. import consts from '@/utils/consts'
  5. import { Button, Form, Input, Modal } from 'antd'
  6. import React, { useState, useEffect } from 'react'
  7. import { RouteComponentProps, withRouter } from 'react-router-dom'
  8. import { apiProject } from "./api"
  9. import styles from './index.module.scss'
  10. import QueueAnim from 'rc-queue-anim'
  11. import './index.scss'
  12. import { storage } from '@/utils/util'
  13. // 正常登录Form表单
  14. const initLoginState = {
  15. projectInfo: '',
  16. projectCode: '',
  17. visible: false,
  18. user: userStore.userInfo
  19. }
  20. type iState = typeof initLoginState
  21. const NormalLoginForm: React.FC<iLoginProps> = () => {
  22. const [ form ] = Form.useForm()
  23. const [ state, setState ] = useState<iState>(initLoginState)
  24. const onFinish = (values: iFromValues) => {
  25. userStore.login(values)
  26. }
  27. useEffect(() => {
  28. const code = storage.get('p_code')
  29. if (code) {
  30. handleProjectCode({ target: { value: code } })
  31. form.setFieldsValue({ code })
  32. }
  33. }, [])
  34. const handleProjectCode = async (e: any) => {
  35. const projectCode = e.target?.value
  36. const { code = -1, data = [] } = await apiProject(projectCode)
  37. if (code === consts.RET_CODE.SUCCESS) {
  38. if (data.length && data[0].name) {
  39. setState({ ...state, projectCode, projectInfo: data[0].name })
  40. storage.set('p_code', projectCode)
  41. } else {
  42. setState({ ...state, projectCode, projectInfo: '' })
  43. }
  44. }
  45. }
  46. // const setVisible = (label: boolean) => {
  47. // setState({ ...state, visible: label })
  48. // }
  49. // const handleForgetPsw = () => {
  50. // setState({ ...state, visible: !state.visible })
  51. // }
  52. return (
  53. <Form
  54. name="normal_login"
  55. className={styles.loginForm}
  56. form={form}
  57. // initialValues={{ password: '123456', code : '234' }}
  58. onFinish={onFinish}
  59. >
  60. <h4 key="title">纵横工程建设项目管理系统</h4>
  61. <QueueAnim >
  62. <QueueAnim>
  63. {
  64. state.projectInfo ?
  65. <h5 key="projectInfo" className={[ 'project-title' ].join(' ')} >{state.projectInfo}</h5>
  66. : null
  67. }
  68. </QueueAnim>
  69. <div key="code">
  70. <Form.Item
  71. name="code"
  72. rules={[ { required: true, message: '请输入项目编号!' } ]}
  73. >
  74. <Input placeholder="项目编号" onChange={handleProjectCode} autoComplete="off" autoFocus/>
  75. </Form.Item>
  76. </div>
  77. <div key="account">
  78. <Form.Item
  79. name="account"
  80. rules={[ { required: true, message: '请输入账号!' } ]}
  81. >
  82. <Input placeholder="登录账号" />
  83. </Form.Item>
  84. </div>
  85. <div key="password">
  86. <Form.Item
  87. name="password"
  88. rules={[ { required: true, message: '请输入密码!' } ]}
  89. >
  90. <Input.Password type="password" placeholder="密码" />
  91. </Form.Item>
  92. </div>
  93. <div key="button">
  94. <Form.Item>
  95. <Button type="primary" htmlType="submit">登录</Button>
  96. </Form.Item>
  97. </div>
  98. {/* <div className={styles.textRight}>
  99. <span onClick={this.handleForgetPsw}>忘记密码?</span>
  100. </div> */}
  101. {/* <RetrieveForm visible={state.visible} setVisible={setVisible} /> */}
  102. </QueueAnim>
  103. </Form>
  104. )
  105. }
  106. // 找回密码Form表单
  107. const RetrieveForm: React.FC<iRetrieveFormProps> = ({ visible, setVisible }) => {
  108. const handleOk = () => {
  109. console.log('ok')
  110. }
  111. const handleCancel = () => {
  112. console.log('cancel')
  113. setVisible(!visible)
  114. }
  115. return (
  116. <Modal
  117. title="找回密码"
  118. visible={visible}
  119. onOk={handleOk}
  120. onCancel={handleCancel}
  121. cancelText="取消"
  122. closable={false}
  123. okText="重置密码"
  124. />
  125. )
  126. }
  127. const Login = (props: RouteComponentProps) => {
  128. const { history } = props
  129. return (
  130. <div className="login-container">
  131. <div className={[ "login-content", `bg-${Math.ceil(Math.random() * 10) % 3 + 1}` ].join(' ')}>
  132. <div className="form-sign pi-flex pi-flex-row">
  133. <div className="pi-flex-sub">
  134. <img src={logo} />
  135. </div>
  136. <div className="pi-flex-sub">
  137. <NormalLoginForm history={history} />
  138. </div>
  139. </div>
  140. <footer>
  141. <p className="mb-1">Copyright © 2019 <a href="https://smartcost.com.cn">珠海纵横创新软件有限公司</a>.All Rights Reserved.<a className="mb-2" href="http://www.miitbeian.gov.cn">粤ICP备14032472号</a></p>
  142. </footer>
  143. </div>
  144. </div>
  145. )
  146. }
  147. export default withRouter(Login)