import { toValueEnum } from '@/common/converter'; import { validateIdCard } from '@/common/validator'; import { MovableModalForm } from '@/components'; import ExamStudentController from '@/services/apis/ExamStudentController'; import { CertificateType } from '@/services/enums'; import { FormInstance, ProFormDigit, ProFormRadio, ProFormSelect, ProFormText, ProFormTextArea } from '@ant-design/pro-components'; import { useModel } from '@umijs/max'; import { App, Col, Row } from 'antd'; import { useEffect, useRef, useState } from 'react'; export type GradeBranchData = { examGrades: API.ExamGradeOutput[]; branches: API.SysOrgLiteOutput[]; hasNceeCourseComb: boolean; }; /** 修改监测学生信息 */ const ExamStudentEditModal: React.FC<{ examPlanId: number; data: Partial; gradeBranch: GradeBranchData; onFinish: () => void; onClose?: () => void; }> = ({ examPlanId, data, gradeBranch, onFinish, onClose }) => { const [open, setOpen] = useState(true); const handleClose = () => { setOpen(false); setTimeout(() => onClose?.(), 300); }; const formRef = useRef(); const { message } = App.useApp(); const { getDictValueEnum, } = useModel('useDict'); const { baseData } = useModel('useBaseData'); const [certType, setCertType] = useState(data.certificateType); const [grade, setGrade] = useState(); useEffect(() => { if (!data.examGradeId) { return; } const g = gradeBranch?.examGrades.find(t => t.id === data.examGradeId); setGrade(g); }, []); return ( <> title={`${data.id === '0' ? '添加' : '修改'}监测学生信息`} width={800} open={open} formRef={formRef} initialValues={{ ...data, examGradeId: data.examGradeId !== undefined ? data.examGradeId : undefined, sysOrgBranchId: data.sysOrgBranchId !== undefined ? data.sysOrgBranchId : undefined, certificateType: data.certificateType !== undefined ? `${data.certificateType}` : undefined, gender: data.gender !== undefined ? `${data.gender}` : undefined, nceeCourseCombId: data.nceeCourseCombId !== undefined ? `${data.nceeCourseCombId}` : undefined, }} modalProps={{ centered: true, maskClosable: false, onCancel: () => { formRef?.current?.resetFields(); handleClose(); }, }} onFinish={async (values) => { const { examGradeId, certificateType, gender, ...restValues } = values; const grade = gradeBranch.examGrades.find(t => t.id === examGradeId); if (!grade) { return; } let p: API.AddExamStudentInput = { ...restValues, examPlanId, examGradeId, gradeId: grade.gradeId, certificateType: JSON.parse(certificateType as any), gender: JSON.parse(gender as any), }; if (data.id !== '0') { const up = { id: data.id ?? 0, ...p } as API.UpdateExamStudentInput; await ExamStudentController.update(up); } else { await ExamStudentController.add(p); } message.success('已保存'); onFinish(); handleClose(); }} > a.grade.gradeNumber - b.grade.gradeNumber)?.map(t => ({ label: `${t.grade.fullName}(${t.gradeBeginName})`, value: t.id }))} required rules={[{ required: true }]} disabled={data.id !== '0'} onChange={(e: number) => { const g = gradeBranch?.examGrades.find(t => t.id === e); setGrade(g); formRef.current?.validateFields(['examNumber']); }} /> {gradeBranch.branches && gradeBranch.branches.length > 0 && ({ label: t.name, value: t.id }))} required disabled={data.id !== '0'} rules={[{ required: true }]} /> } setCertType(JSON.parse(v as string))} /> ({ validator: (_, value) => { const ct = JSON.parse(getFieldValue("certificateType")); if (ct === CertificateType.NONE) { return Promise.resolve(); } if (ct === CertificateType.ID_CARD) { const idc = validateIdCard(value); if (idc.success) { setFieldsValue({ gender: `${idc.gender}` }); return Promise.resolve(); } else { return Promise.reject(`身份证号${idc.errorMessage}有误`); } } if (value.length > 0) { return Promise.resolve(); } return Promise.reject('证件号码必须输入'); }, }), ]} /> ({ validator: (_, value) => { if (!grade?.isRequiredSelfExamNumber) { return Promise.resolve(); } if ((value ?? '').length !== grade?.selfExamNumberLength) { return Promise.reject(`当前年级必录,长度为${grade?.selfExamNumberLength}位`); } return Promise.resolve(); }, }), ]} /> {gradeBranch.hasNceeCourseComb && ({ id: t.id, name: t.shortName })) ?? [])} /> } ); }; export default ExamStudentEditModal;