Modal.tsx 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. import StrengthMeter from '@/components/StrengthMeter'
  2. import { userStore } from '@/store/mobx'
  3. import { iUserInfo } from '@/types/setting'
  4. import consts from '@/utils/consts'
  5. import { Button, Form, Input, Modal, Select } from 'antd'
  6. import { observer } from 'mobx-react'
  7. import React, { useEffect, useState } from 'react'
  8. import { apiAccountDelete } from '../api'
  9. import styles from '../index.module.scss'
  10. import PswModal from './PswModal'
  11. const { Option } = Select
  12. export interface iUserModal {
  13. visible: boolean
  14. loading: boolean
  15. userInfo: iUserInfo
  16. onCreate: (values: any) => void
  17. onCancel: () => void
  18. initData: () => void
  19. }
  20. const UserModal: React.FC<iUserModal> = ({ visible, loading, onCreate, onCancel, userInfo, initData }) => {
  21. const [ form ] = Form.useForm()
  22. const [ delLoading, setDelLoading ] = useState<boolean>(false)
  23. const [ showPswModal, setShowPswModal ] = useState<boolean>(false)
  24. useEffect(() => {
  25. if (visible) {
  26. form.resetFields()
  27. userInfo.id ? form.setFieldsValue(userInfo) : form.resetFields()
  28. if (!userStore.groupList.length) {
  29. userStore.getGroupList()
  30. }
  31. }
  32. }, [ visible ])
  33. const delBtnHandler = async () => {
  34. setDelLoading(true)
  35. const { code = -1 } = await apiAccountDelete(userInfo.id)
  36. if (code === consts.RET_CODE.SUCCESS) {
  37. onCancel()
  38. initData()
  39. }
  40. setDelLoading(false)
  41. }
  42. return (
  43. <>
  44. <Modal
  45. getContainer={false}
  46. visible={visible}
  47. title={userInfo.id ? '编辑账号' : '新增账号'}
  48. onCancel={onCancel}
  49. footer={
  50. <div>
  51. {
  52. userInfo.id && !userInfo.jlAuth?
  53. <>
  54. <Button size="small" danger onClick={() => delBtnHandler()} loading={delLoading}>删除账号</Button>
  55. <Button size="small" type="primary" ghost onClick={() => {
  56. onCancel()
  57. setShowPswModal(true)
  58. }}>修改账号/密码</Button>
  59. </>
  60. : ''
  61. }
  62. <Button size="small" className={styles.grayBtn} onClick={() => onCancel()}>关闭</Button>
  63. <Button size="small" type="primary" loading={loading} onClick={() => {
  64. form.validateFields().then(values => {
  65. onCreate(values)
  66. })
  67. }}>{userInfo.id ? '提交修改' : '确认添加'}</Button>
  68. </div>
  69. }
  70. >
  71. <Form
  72. form={form}
  73. layout="vertical"
  74. className={styles.FormContent}
  75. >
  76. {
  77. userInfo.id ?
  78. <Form.Item name="id" hidden>
  79. <Input />
  80. </Form.Item>
  81. : ''
  82. }
  83. <Form.Item name="accountGroup" label="账号组" rules={[ { required: true, message: '请选择账号组' } ]}>
  84. <Select
  85. showSearch
  86. placeholder="请选择"
  87. size="small"
  88. optionFilterProp="children"
  89. filterOption={(input, option) => option && option?.children.toLowerCase().indexOf(input.toLowerCase()) >= 0}>
  90. {
  91. userStore.groupList?.map(item => <Option value={item.key} key={item.key}>{item.value}</Option>)
  92. }
  93. </Select>
  94. </Form.Item>
  95. <Form.Item name="account" label="登录账号" rules={[ { required: true, message: '请输入登录账号' } ]}>
  96. <Input size="small" placeholder="支持英文数字组合" disabled={userInfo.id ? true : false} />
  97. </Form.Item>
  98. {
  99. !userInfo.id ?
  100. <Form.Item name="password" label="登录密码" rules={[ { required: true, message: '请输入登录密码' }, () => ({
  101. validator(_, value) {
  102. if (value) {
  103. if (/(?=.*[0-9])(?=.*[a-zA-Z]).{6,30}/.test(value)) {
  104. return Promise.resolve()
  105. }
  106. return Promise.reject('密码必须带有字母与数字的组合且大于6位')
  107. }
  108. return Promise.resolve()
  109. }
  110. }) ]}>
  111. <StrengthMeter />
  112. </Form.Item>
  113. : ''
  114. }
  115. <Form.Item name="name" label="姓名" rules={[ { required: true, message: '请输入姓名' } ]}>
  116. <Input size="small" />
  117. </Form.Item>
  118. <Form.Item name="company" label="单位名称" rules={[ { required: true, message: '请输入单位名称' } ]}>
  119. <Input size="small" />
  120. </Form.Item>
  121. <Form.Item name="position" label="职位名称" rules={[ { required: true, message: '请输入职位名称' } ]}>
  122. <Input size="small" />
  123. </Form.Item>
  124. <Form.Item name="mobile" label="手机" rules={[ { required: true, message: '请输入手机号码' }, () => ({
  125. validator(_, value) {
  126. if (value) {
  127. if(/^(?:(?:\+|00)86)?1[3-9]\d{9}$/.test(value)) {
  128. return Promise.resolve()
  129. }
  130. return Promise.reject('请输入正确的手机号码')
  131. }
  132. return Promise.resolve()
  133. }
  134. }) ]}>
  135. <Input size="small" />
  136. </Form.Item>
  137. <Form.Item name="telephone" label="电话" rules={[ () => ({
  138. validator(_, value) {
  139. if (value) {
  140. if(/^(?:(?:\d{3}-)?\d{8}|^(?:\d{4}-)?\d{7,8})(?:-\d+)?$/.test(value)) {
  141. return Promise.resolve()
  142. }
  143. return Promise.reject('请输入正确的座机号码')
  144. }
  145. return Promise.resolve()
  146. }
  147. }) ]}>
  148. <Input size="small" placeholder="格式000-0000000" />
  149. </Form.Item>
  150. </Form>
  151. </Modal>
  152. <PswModal visible={showPswModal} onCancel={() => setShowPswModal(false)} userInfo={userInfo} />
  153. </>
  154. )
  155. }
  156. export default observer(UserModal)