ProjectModal.tsx 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import { useRequest } from 'umi'
  2. import { useRef, useEffect } from 'react'
  3. import ProForm, { ProFormSelect, ProFormText } from '@ant-design/pro-form'
  4. import { message, Modal } from 'antd'
  5. import { addProject, updateProject } from '@/services/api/project'
  6. import type { FormInstance } from 'antd'
  7. export enum ModalType {
  8. ADD = 0,
  9. UPDATE = 1
  10. }
  11. type ProjectModalProps = {
  12. visible: boolean
  13. setVisible: (visible: boolean) => void
  14. type: ModalType
  15. defaultFormData?: {
  16. id: string
  17. name: string
  18. project_type_id: string
  19. }
  20. pTypeList: API.ProjectTypeList
  21. reloadTable: () => void
  22. }
  23. const ProjectModal: React.FC<ProjectModalProps> = ({
  24. visible,
  25. setVisible,
  26. type,
  27. defaultFormData,
  28. pTypeList,
  29. reloadTable
  30. }) => {
  31. const ref = useRef<FormInstance>(null)
  32. useEffect(() => {
  33. defaultFormData && ref.current?.setFieldsValue({ ...defaultFormData })
  34. }, [defaultFormData])
  35. const { run: tryUpdateProject } = useRequest(updateProject, {
  36. manual: true,
  37. onSuccess: () => {
  38. message.success('更新成功')
  39. }
  40. })
  41. const { run: tryAddProject } = useRequest(addProject, {
  42. manual: true,
  43. onSuccess: () => {
  44. message.success('创建成功')
  45. }
  46. })
  47. const handleOnFinish = () => {
  48. ref.current?.validateFields().then(async values => {
  49. try {
  50. // 执行表单提交
  51. if (type === ModalType.ADD) {
  52. await tryAddProject(values)
  53. } else {
  54. await tryUpdateProject(values)
  55. }
  56. setVisible(false)
  57. reloadTable()
  58. ref.current?.resetFields()
  59. } catch (error) {
  60. message.error(error)
  61. }
  62. })
  63. }
  64. return (
  65. <Modal
  66. width="35vw"
  67. visible={visible}
  68. onCancel={() => {
  69. ref.current?.resetFields()
  70. setVisible(false)
  71. }}
  72. title={type === ModalType.ADD ? '新增项目' : '编辑项目'}
  73. onOk={() => handleOnFinish()}>
  74. <ProForm formRef={ref} submitter={{ render: false }}>
  75. {type === ModalType.UPDATE ? <ProFormText name="id" hidden /> : null}
  76. <ProFormText
  77. name="name"
  78. label="项目名称"
  79. rules={[{ required: true, message: '请输入项目名称' }]}
  80. />
  81. <ProFormSelect
  82. name="project_type_id"
  83. label="项目类型"
  84. rules={[{ required: true, message: '请选择项目类型' }]}
  85. options={pTypeList}
  86. />
  87. </ProForm>
  88. </Modal>
  89. )
  90. }
  91. export default ProjectModal