From 85fddd05011393577badea185970e74abdb329d5 Mon Sep 17 00:00:00 2001 From: linxd <544554903@qq.com> Date: Tue, 15 Jul 2025 10:02:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B3=A8=E5=86=8C=E8=A1=A8=E5=8D=95=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/locales/en-US/login.ts | 1 + src/pages/register/supplier.tsx | 5 + .../register/supplier/CommonFormSections.tsx | 419 ++++++++++++------ src/pages/register/supplier/DomesticForm.tsx | 60 ++- 4 files changed, 319 insertions(+), 166 deletions(-) diff --git a/src/locales/en-US/login.ts b/src/locales/en-US/login.ts index 6ea006e..34a7084 100644 --- a/src/locales/en-US/login.ts +++ b/src/locales/en-US/login.ts @@ -12,4 +12,5 @@ export default { "login.register.tip": "Don't have an account?", "login.register.action": "Register now", "login.back.home": "Back to home", + "login.captcha.placeholder": "Please enter verification code", }; diff --git a/src/pages/register/supplier.tsx b/src/pages/register/supplier.tsx index 38a25c4..e091cba 100644 --- a/src/pages/register/supplier.tsx +++ b/src/pages/register/supplier.tsx @@ -74,6 +74,10 @@ const SupplierRegister: React.FC = (props) => { }); }; + const onFinishFailed = (errorInfo: any) => { + console.log('Failed:', errorInfo); + }; + const onFinish = async (values: any) => { setLoading(true); try { @@ -146,6 +150,7 @@ const SupplierRegister: React.FC = (props) => { name="supplier_register" className="register-form" onFinish={onFinish} + onFinishFailed={onFinishFailed} layout="horizontal" labelAlign="right" size="large" diff --git a/src/pages/register/supplier/CommonFormSections.tsx b/src/pages/register/supplier/CommonFormSections.tsx index 76a8b9b..07cd466 100644 --- a/src/pages/register/supplier/CommonFormSections.tsx +++ b/src/pages/register/supplier/CommonFormSections.tsx @@ -21,6 +21,8 @@ import { UploadOutlined, PlusOutlined, DeleteOutlined } from '@ant-design/icons' import { message } from 'antd'; import { validateFileSize } from '@/utils/utils'; import { getRegionTree, getregionInternational } from '@/servers/api/register'; +import { getDictList } from '@/servers/api/dicts'; +import type { DictItem } from '@/servers/api/dicts'; const { Option } = Select; @@ -45,6 +47,48 @@ function convertToCascaderOptions(data: any[]): any[] { * 包含资质证书类型、名称、编号、等级、发证机构、发证日期、有效期等 */ export const QualificationSection: React.FC = ({ form }) => { + // 检查行是否有任何字段被填写 + const hasRowValue = (formInstance: any, recordObj: any, currentField: string) => { + const values = formInstance.getFieldsValue(['coscoSupplierQualifications']); + if (!values.coscoSupplierQualifications || !values.coscoSupplierQualifications[recordObj.name]) { + return false; + } + + const rowData = values.coscoSupplierQualifications[recordObj.name]; + const fields = ['certType', 'certName', 'certNumber', 'certLevel', 'issuingAuthority', 'dateTime', 'termOfValidity', 'certFile']; + + // 过滤掉当前正在验证的字段 + return fields.filter(field => field !== currentField).some(field => { + const value = rowData[field]; + if (field === 'certFile' && value) { + return value.fileList && value.fileList.length > 0; + } + return value !== undefined && value !== null && value !== ''; + }); + }; + + // 生成条件性验证规则 + const createConditionalRule = (fieldName: string, errorMsg: string) => ({ + validator: (_: any, value: any, callback: any) => { + const record = _.field.split('.')[1]; + + // 如果当前字段有值,或者行中有任何字段有值,则该字段为必填 + if (value || hasRowValue(form, { name: record }, fieldName)) { + if (!value) { + return Promise.reject(new Error(errorMsg)); + } + } + return Promise.resolve(); + }, + }); + + // 创建带必填标识的表头 + const createRequiredTitle = (title: string) => ( + + {title} * + + ); + return ( <>
资质信息
@@ -70,80 +114,77 @@ export const QualificationSection: React.FC = ({ form } render: (_, __, index) => index + 1, }, { - title: '资质证书类型', + title: createRequiredTitle('资质证书类型'), dataIndex: 'certType', render: (_, record) => ( - + ), }, { - title: '资质名称', + title: createRequiredTitle('资质名称'), dataIndex: 'certName', render: (_, record) => ( ), }, { - title: '资质证书编号', + title: createRequiredTitle('资质证书编号'), dataIndex: 'certNumber', render: (_, record) => ( ), }, { - title: '资质类别和等级', + title: createRequiredTitle('资质类别和等级'), dataIndex: 'certLevel', render: (_, record) => ( - + ), }, { - title: '发证机构', + title: createRequiredTitle('发证机构'), dataIndex: 'issuingAuthority', render: (_, record) => ( ), }, { - title: '发证日期', + title: createRequiredTitle('发证日期'), dataIndex: 'issueDate', render: (_, record) => ( = ({ form } ), }, { - title: '资质有效期至', + title: createRequiredTitle('资质有效期至'), dataIndex: 'expiryDate', render: (_, record) => ( = ({ form } ), }, { - title: '附件', + title: createRequiredTitle('附件'), dataIndex: 'certFile', render: (_, record) => (