tangjie 2026-08-05 17:32:06 +08:00
parent 1d9dc7be62
commit 0a7476358d
3 changed files with 71 additions and 35 deletions

View File

@ -325,3 +325,11 @@ export const evalReportSpotcheckRectify = declareRequest(
"evalReportSpotcheckRectifyLoading", "evalReportSpotcheckRectifyLoading",
"Post > @/safetyEval/institution/eval-report-spotcheck/rectify", "Post > @/safetyEval/institution/eval-report-spotcheck/rectify",
); );
// ===== 机构备案行业信息 =====
export const orgIndustryCodeList = declareRequest(
"orgIndustryCodeLoading",
"Get > /safetyEval/org-info/select/org/industry/code",
"orgIndustryCodeList: [] | res.data || []",
);

View File

@ -1,6 +1,6 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { tools } from "@cqsjjb/jjb-common-lib"; import { tools } from "@cqsjjb/jjb-common-lib";
import { Button, Form, message, Modal, Space, Spin, Tabs } from "antd"; import { Button, Form, message, Modal, Space, Spin, Table, Tabs } from "antd";
import dayjs from "dayjs"; import dayjs from "dayjs";
import { useCallback, useEffect, useRef, useState } from "react"; import { useCallback, useEffect, useRef, useState } from "react";
import PageLayout from "@cqsjjb/jjb-react-admin-component/PageLayout"; import PageLayout from "@cqsjjb/jjb-react-admin-component/PageLayout";
@ -12,9 +12,7 @@ import { FILING_MATERIAL_TEMPLATE } from "../filingMaterialTemplate";
import { import {
fetchOrgPersonnelOptions, fetchOrgPersonnelOptions,
mapEquipRowToFilingEquipment, mapEquipRowToFilingEquipment,
mergeDetailFromForms, mergeDetailFromForms,
} from "../filingPersist"; } from "../filingPersist";
import { verifyFilingPrerequisites } from "../filingVerify"; import { verifyFilingPrerequisites } from "../filingVerify";
@ -36,13 +34,14 @@ const MODE_TITLE = {
function FilingFormPage(props) { function FilingFormPage(props) {
const query = router.query; const query = router.query;
const mode = query.mode; const mode = query.mode;
const [submitting, setSubmitting] = useState(false); const [submitting, setSubmitting] = useState(false);
const [activeStep, setActiveStep] = useState("basic"); const [activeStep, setActiveStep] = useState("basic");
const [detail, setDetail] = useState(null); const [detail, setDetail] = useState(null);
const [personnelOptions, setPersonnelOptions] = useState([]); const [personnelOptions, setPersonnelOptions] = useState([]);
const [verifyOpen, setVerifyOpen] = useState(false); const [verifyOpen, setVerifyOpen] = useState(false);
const [verifyResult, setVerifyResult] = useState(null); const [verifyResult, setVerifyResult] = useState(null);
const [verifyFailItems, setVerifyFailItems] = useState([]);
const [basicForm] = Form.useForm(); const [basicForm] = Form.useForm();
const [commitmentForm] = Form.useForm(); const [commitmentForm] = Form.useForm();
@ -84,7 +83,9 @@ function FilingFormPage(props) {
const commitment = res?.data?.commitment || {}; const commitment = res?.data?.commitment || {};
commitmentForm.setFieldsValue({ commitmentForm.setFieldsValue({
...commitment, ...commitment,
signDate: commitment.signDate ? dayjs(commitment.signDate) : undefined, signDate: commitment.signDate
? dayjs(commitment.signDate)
: undefined,
}); });
}); });
} else { } else {
@ -117,8 +118,6 @@ function FilingFormPage(props) {
[syncCommitmentFromBasic], [syncCommitmentFromBasic],
); );
useEffect(() => { useEffect(() => {
if (activeStep === "commitment") { if (activeStep === "commitment") {
syncCommitmentFromBasic(); syncCommitmentFromBasic();
@ -157,12 +156,11 @@ function FilingFormPage(props) {
setVerifyOpen(true); setVerifyOpen(true);
}; };
const handleVerifyConfirm = async (config={}) => { const handleVerifyConfirm = async (config = {}) => {
setSubmitting(true); setSubmitting(true);
const currentDetail = collectCurrentDetail(); const currentDetail = collectCurrentDetail();
const word = mode === "change" ? "Change" : ""; const word = mode === "change" ? "Change" : "";
const body = { const body = {
[`qualFiling${word}AddCmd`]: { [`qualFiling${word}AddCmd`]: {
@ -178,13 +176,15 @@ function FilingFormPage(props) {
delete params.materials; delete params.materials;
} }
if (params.personnelList) { if (params.personnelList) {
body[`qualFilingPersonnel${word}AddCmds`] = params.personnelList.map(item=>{ body[`qualFilingPersonnel${word}AddCmds`] = params.personnelList.map(
return { (item) => {
...item, return {
personName: item.userName || item.personName, ...item,
sourcePersonnelId: item.sourcePersonnelId || item.id, personName: item.userName || item.personName,
}; sourcePersonnelId: item.sourcePersonnelId || item.id,
}); };
},
);
delete params.personnelList; delete params.personnelList;
} }
if (params.equipmentList) { if (params.equipmentList) {
@ -210,8 +210,12 @@ function FilingFormPage(props) {
if (result?.success) { if (result?.success) {
setVerifyOpen(false); setVerifyOpen(false);
message.success(config.isSaveDraft ? "暂存成功" : "提交成功"); if (Array.isArray(result.data) && result.data.length) {
props.history.goBack(); setVerifyFailItems(result.data);
} else {
message.success(config.isSaveDraft ? "暂存成功" : "提交成功");
props.history.goBack();
}
} }
setSubmitting(false); setSubmitting(false);
}; };
@ -334,7 +338,9 @@ function FilingFormPage(props) {
{ {
key: "basic", key: "basic",
label: "1. 基本信息备案", label: "1. 基本信息备案",
children: <BasicInfoStep form={basicForm} disabled={readOnly} mode={mode} />, children: (
<BasicInfoStep form={basicForm} disabled={readOnly} mode={mode} />
),
forceRender: true, forceRender: true,
}, },
{ {
@ -397,23 +403,24 @@ function FilingFormPage(props) {
history={props.history} history={props.history}
previous previous
extra={ extra={
!readOnly && mode !== FILING_FORM_MODE.CHANGE ? ( !readOnly && mode !== FILING_FORM_MODE.CHANGE ? (
<Button loading={submitting} onClick={() => handleVerifyConfirm({ isSaveDraft: true })}> <Button
loading={submitting}
onClick={() => handleVerifyConfirm({ isSaveDraft: true })}
>
暂存 暂存
</Button> </Button>
) : null ) : null
} }
> >
<Spin spinning={ submitting}> <Spin spinning={submitting}>
<Tabs <Tabs activeKey={activeStep} items={STEP_ITEMS} onChange={goToStep} />
activeKey={activeStep}
items={STEP_ITEMS}
onChange={goToStep}
/>
<Space style={{ <Space
marginTop: '12px' style={{
}}> marginTop: "12px",
}}
>
{stepIndex > 0 && ( {stepIndex > 0 && (
<Button <Button
onClick={() => { onClick={() => {
@ -449,6 +456,25 @@ function FilingFormPage(props) {
onCancel={() => setVerifyOpen(false)} onCancel={() => setVerifyOpen(false)}
onConfirm={handleVerifyConfirm} onConfirm={handleVerifyConfirm}
/> />
<Modal
title="校验失败"
open={verifyFailItems.length > 0}
onCancel={() => setVerifyFailItems([])}
footer={<Button onClick={() => setVerifyFailItems([])}>知道了</Button>}
>
<Table
size="small"
rowKey="title"
pagination={false}
dataSource={verifyFailItems}
columns={[
{ title: "检查项", dataIndex: "title", width: 120 },
{ title: "资质要求", dataIndex: "description", width: 280 },
{ title: "当前值", dataIndex: "currentValue", width: 260 },
]}
/>
</Modal>
</PageLayout> </PageLayout>
); );
} }

View File

@ -18,7 +18,7 @@ import { tools } from "@cqsjjb/jjb-common-lib";
import PageLayout from "@cqsjjb/jjb-react-admin-component/PageLayout"; import PageLayout from "@cqsjjb/jjb-react-admin-component/PageLayout";
import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace"; import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace";
import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { QUALIFICATION_INDUSTRY_OPTIONS } from "~/enumerate/enterpriseOptions"; import { QUALIFICATION_INDUSTRY_OPTIONS_MAP } from "~/enumerate/enterpriseOptions";
import BaiduMapPicker from "~/components/BaiduMapPicker"; import BaiduMapPicker from "~/components/BaiduMapPicker";
import { district } from "~/enumerate/constant"; import { district } from "~/enumerate/constant";
import { phoneRule } from "~/utils/validators"; import { phoneRule } from "~/utils/validators";
@ -45,10 +45,12 @@ const EvalProjectCreate = (props) => {
evalProjectSaveLoading, evalProjectSaveLoading,
evalProjectDetailLoading, evalProjectDetailLoading,
customerPage: customerList, customerPage: customerList,
orgIndustryCodeList: industryCodes,
} = props.safetyEvalBusiness; } = props.safetyEvalBusiness;
useEffect(() => { useEffect(() => {
props.customerPage({ current: 1, size: 999 }); props.customerPage({ current: 1, size: 999 });
props.orgIndustryCodeList();
}, []); }, []);
useEffect(() => { useEffect(() => {
@ -308,9 +310,9 @@ const EvalProjectCreate = (props) => {
rules={[{ required: true, message: "请选择所属行业" }]} rules={[{ required: true, message: "请选择所属行业" }]}
> >
<Select placeholder="请选择" allowClear> <Select placeholder="请选择" allowClear>
{QUALIFICATION_INDUSTRY_OPTIONS.map((opt) => ( {(industryCodes || []).map((code) => (
<Select.Option key={opt.value} value={opt.value}> <Select.Option key={code} value={code}>
{opt.label} {QUALIFICATION_INDUSTRY_OPTIONS_MAP[code] || code}
</Select.Option> </Select.Option>
))} ))}
</Select> </Select>