ProjectModal.tsx 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. import { connect, useRequest } from 'umi'
  2. import { useEffect } from 'react'
  3. import { Button, Drawer, message } from 'antd'
  4. import { addProject, updateProject } from '@/services/api/project'
  5. import { delay } from '@/utils/util'
  6. import FormRender, { useForm } from 'form-render'
  7. import { BaseMenuEnum } from '@/pages/Schema/Base'
  8. import type { SchemaBaseModelState } from '@/pages/Schema/Base/model'
  9. import type { ConnectProps } from 'umi'
  10. import type { ProjectModelState } from '../../model'
  11. export enum ModalType {
  12. ADD = 0,
  13. UPDATE = 1
  14. }
  15. type ProjectModalProps = ConnectProps & {
  16. visibles: boolean
  17. setVisible: (visibles: boolean) => void
  18. readOnly: boolean
  19. type: ModalType
  20. defaultFormData?: {
  21. ID: string
  22. name: string
  23. projectTypeID: string
  24. }
  25. pTypeList: API.ProjectTypeList
  26. reloadTable: () => void
  27. schema?: Record<string, any> | null
  28. }
  29. const ProjectModal: React.FC<ProjectModalProps> = ({
  30. visibles,
  31. setVisible,
  32. dispatch,
  33. schema,
  34. type,
  35. defaultFormData,
  36. pTypeList,
  37. reloadTable
  38. }) => {
  39. const form = useForm()
  40. useEffect(() => {
  41. if (visibles && !schema) {
  42. dispatch({
  43. type: 'schemaBase/querySchema',
  44. payload: {
  45. columnType: BaseMenuEnum.PROJECT
  46. }
  47. })
  48. }
  49. }, [visibles])
  50. const { run: tryUpdateProject } = useRequest(updateProject, {
  51. manual: true,
  52. onSuccess: () => {
  53. message.success('更新成功')
  54. }
  55. })
  56. const { run: tryAddProject } = useRequest(addProject, {
  57. manual: true,
  58. onSuccess: () => {
  59. message.success('创建成功')
  60. }
  61. })
  62. const onMount = () => {
  63. form.setValues({ ...defaultFormData })
  64. delay(80).then(() => {
  65. // console.log(pTypeList)
  66. form.setSchemaByPath('projectTypeID', {
  67. enum: pTypeList.map(item => item.value),
  68. enumNames: pTypeList.map(item => item.label)
  69. })
  70. })
  71. }
  72. const onFinish = async (formData, errors) => {
  73. console.log('formData:', formData, 'errors', errors)
  74. try {
  75. // 执行表单提交
  76. if (type === ModalType.ADD) {
  77. await tryAddProject(formData)
  78. } else {
  79. await tryUpdateProject(formData)
  80. }
  81. setVisible(false)
  82. reloadTable()
  83. } catch (error) {
  84. message.error(error)
  85. }
  86. }
  87. return (
  88. <Drawer
  89. width="50vw"
  90. visible={visibles}
  91. onClose={() => {
  92. // ref.current?.resetFields()
  93. setVisible(false)
  94. }}
  95. title={type === ModalType.ADD ? '新增项目' : '编辑项目'}>
  96. {schema && <FormRender form={form} schema={schema} onFinish={onFinish} onMount={onMount} />}
  97. <div className="ml-120px">
  98. {/** 重置会导致下拉框的options丢失 */}
  99. {/* <Button onClick={() => form.setValues({})}>重置</Button> */}
  100. <Button type="primary" onClick={form.submit}>
  101. 提交
  102. </Button>
  103. </div>
  104. </Drawer>
  105. )
  106. }
  107. export default connect(
  108. ({ project, schemaBase }: { project: ProjectModelState; schemaBase: SchemaBaseModelState }) => ({
  109. pTypeList: project.projectTypeList.map(item => ({ label: item.name, value: item.ID })),
  110. schema: schemaBase.base[BaseMenuEnum.PROJECT]?.schema
  111. })
  112. )(ProjectModal)