feat
parent
65abc7ee66
commit
160be8ae9c
|
|
@ -20,7 +20,7 @@ module.exports = {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// 应用唯一标识符
|
// 应用唯一标识符
|
||||||
appIdentifier: "safety-eval",
|
appIdentifier: "safetyEval",
|
||||||
// 应用上下文注入全局变量
|
// 应用上下文注入全局变量
|
||||||
contextInject: {
|
contextInject: {
|
||||||
// 应用Key
|
// 应用Key
|
||||||
|
|
|
||||||
|
|
@ -19,8 +19,8 @@ export const VERIFY_STATUS_MAP = {
|
||||||
/** 审核状态 */
|
/** 审核状态 */
|
||||||
export const REVIEW_STATUS_MAP = {
|
export const REVIEW_STATUS_MAP = {
|
||||||
pending: { label: "待审核", color: "warning" },
|
pending: { label: "待审核", color: "warning" },
|
||||||
reviewing: { label: "审核中", color: "processing" },
|
2: { label: "审核中", color: "processing" },
|
||||||
rejected: { label: "打回", color: "error" },
|
3: { label: "打回", color: "error" },
|
||||||
};
|
};
|
||||||
|
|
||||||
/** 专家核验状态 */
|
/** 专家核验状态 */
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ export const FILING_BUSINESS_SCOPE_OPTIONS = [
|
||||||
];
|
];
|
||||||
|
|
||||||
export const FILING_FORM_MODE = {
|
export const FILING_FORM_MODE = {
|
||||||
APPLICATION: "safety-eval",
|
APPLICATION: "application",
|
||||||
FILED: "filed",
|
FILED: "filed",
|
||||||
CHANGE: "change",
|
CHANGE: "change",
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -27,14 +27,6 @@ import PrerequisiteVerifyModal from "./components/PrerequisiteVerifyModal";
|
||||||
|
|
||||||
const router = tools.router;
|
const router = tools.router;
|
||||||
|
|
||||||
const STEP_ITEMS = [
|
|
||||||
{ key: "basic", label: "1. 备案基本信息" },
|
|
||||||
{ key: "materials", label: "2. 备案材料上传" },
|
|
||||||
{ key: "commitment", label: "3. 法定代表人承诺书" },
|
|
||||||
{ key: "personnel", label: "4. 备案人员管理" },
|
|
||||||
{ key: "equipment", label: "5. 装备清单" },
|
|
||||||
];
|
|
||||||
|
|
||||||
const MODE_TITLE = {
|
const MODE_TITLE = {
|
||||||
[FILING_FORM_MODE.APPLICATION]: "资质备案申请",
|
[FILING_FORM_MODE.APPLICATION]: "资质备案申请",
|
||||||
[FILING_FORM_MODE.FILED]: "资质备案填报",
|
[FILING_FORM_MODE.FILED]: "资质备案填报",
|
||||||
|
|
@ -89,38 +81,13 @@ function FilingFormPage(props) {
|
||||||
setDetail((prev) => ({ ...prev, ...(res?.data || {}) }));
|
setDetail((prev) => ({ ...prev, ...(res?.data || {}) }));
|
||||||
console.log(res?.data, "res.data");
|
console.log(res?.data, "res.data");
|
||||||
basicForm.setFieldsValue(res?.data || {});
|
basicForm.setFieldsValue(res?.data || {});
|
||||||
|
commitmentForm.setFieldsValue(res?.data?.commitment || {});
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
setDetail((prev) => ({ ...prev, materials: FILING_MATERIAL_TEMPLATE }));
|
setDetail((prev) => ({ ...prev, materials: FILING_MATERIAL_TEMPLATE }));
|
||||||
}
|
}
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (!personnelOptions.length) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const data = detailRef.current;
|
|
||||||
const commitment = data?.commitment || {};
|
|
||||||
if (commitment.legalRepPersonnelId) {
|
|
||||||
commitmentForm.setFieldValue(
|
|
||||||
"legalRepPersonnelId",
|
|
||||||
String(commitment.legalRepPersonnelId),
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (commitment.legalRepName) {
|
|
||||||
const matched = personnelOptions.find(
|
|
||||||
(item) => item.staffName === commitment.legalRepName,
|
|
||||||
);
|
|
||||||
if (matched) {
|
|
||||||
commitmentForm.setFieldsValue({
|
|
||||||
legalRepPersonnelId: matched.value,
|
|
||||||
legalRepName: matched.staffName || matched.label,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, [commitmentForm, personnelOptions]);
|
|
||||||
|
|
||||||
const collectCurrentDetail = useCallback(() => {
|
const collectCurrentDetail = useCallback(() => {
|
||||||
const current = detailRef.current || detail;
|
const current = detailRef.current || detail;
|
||||||
return mergeDetailFromForms(current, {
|
return mergeDetailFromForms(current, {
|
||||||
|
|
@ -129,37 +96,39 @@ function FilingFormPage(props) {
|
||||||
});
|
});
|
||||||
}, [basicForm, commitmentForm, detail]);
|
}, [basicForm, commitmentForm, detail]);
|
||||||
|
|
||||||
const handleSaveDraft = async () => {
|
|
||||||
if (readOnly) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
setSubmitting(true);
|
|
||||||
try {
|
|
||||||
const currentDetail = collectCurrentDetail();
|
|
||||||
await persistFilingToBackend(props, currentDetail, mode);
|
|
||||||
clearLocalDraft(mode);
|
|
||||||
message.success("已暂存");
|
|
||||||
props.history.push("qualApplication/filingApplication/list");
|
|
||||||
} catch (err) {
|
|
||||||
message.error(err?.message || "暂存失败");
|
|
||||||
} finally {
|
|
||||||
setSubmitting(false);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleSubmitRequest = async () => {
|
const handleSubmitRequest = async () => {
|
||||||
if (readOnly) {
|
if (readOnly) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
|
await basicForm.validateFields();
|
||||||
|
} catch (err) {
|
||||||
|
setActiveStep("basic");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
await commitmentForm.validateFields();
|
||||||
|
} catch (err) {
|
||||||
|
setActiveStep("commitment");
|
||||||
|
return;
|
||||||
|
}
|
||||||
const currentDetail = collectCurrentDetail();
|
const currentDetail = collectCurrentDetail();
|
||||||
|
if (!currentDetail?.personnelList?.length) {
|
||||||
|
message.warning("请至少添加一位备案人员");
|
||||||
|
setActiveStep("personnel");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!currentDetail?.equipmentList?.length) {
|
||||||
|
message.warning("请至少添加一条装备清单");
|
||||||
|
setActiveStep("equipment");
|
||||||
|
return;
|
||||||
|
}
|
||||||
const result = verifyFilingPrerequisites(currentDetail);
|
const result = verifyFilingPrerequisites(currentDetail);
|
||||||
setVerifyResult(result);
|
setVerifyResult(result);
|
||||||
setVerifyOpen(true);
|
setVerifyOpen(true);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleVerifyConfirm = async () => {
|
const handleVerifyConfirm = async (config) => {
|
||||||
if (!verifyResult?.passed) {
|
if (!verifyResult?.passed) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -167,7 +136,11 @@ function FilingFormPage(props) {
|
||||||
|
|
||||||
const currentDetail = collectCurrentDetail();
|
const currentDetail = collectCurrentDetail();
|
||||||
const body = {
|
const body = {
|
||||||
qualFilingAddCmd: { ...currentDetail },
|
qualFilingAddCmd: {
|
||||||
|
...currentDetail,
|
||||||
|
filingStatusCode: config.isSaveDraft ? 5 : 2,
|
||||||
|
applyTypeCode: mode === "application" ? 1 : 2,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
const params = body.qualFilingAddCmd;
|
const params = body.qualFilingAddCmd;
|
||||||
if (params.materials) {
|
if (params.materials) {
|
||||||
|
|
@ -189,15 +162,15 @@ function FilingFormPage(props) {
|
||||||
if (router.query.id) {
|
if (router.query.id) {
|
||||||
body.qualFilingAddCmd.id = router.query.id;
|
body.qualFilingAddCmd.id = router.query.id;
|
||||||
}
|
}
|
||||||
debugger;
|
|
||||||
const result = await props.submitQualFiling(body);
|
const result = await props.submitQualFiling(body);
|
||||||
|
|
||||||
if (result?.success) {
|
if (result?.success) {
|
||||||
setVerifyOpen(false);
|
setVerifyOpen(false);
|
||||||
message.success("提交成功");
|
message.success(isSaveDraft ? "暂存成功" : "提交成功");
|
||||||
props.history.push("filingApplication/list");
|
props.history.push("filingApplication/list");
|
||||||
} else {
|
} else {
|
||||||
message.error(result?.message || "提交失败");
|
message.error(result?.message || (isSaveDraft ? "暂存失败" : "提交失败"));
|
||||||
}
|
}
|
||||||
setSubmitting(false);
|
setSubmitting(false);
|
||||||
};
|
};
|
||||||
|
|
@ -326,6 +299,57 @@ function FilingFormPage(props) {
|
||||||
}));
|
}));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const STEP_ITEMS = [
|
||||||
|
{
|
||||||
|
key: "basic",
|
||||||
|
label: "1. 备案基本信息",
|
||||||
|
children: <BasicInfoStep form={basicForm} disabled={readOnly} />,
|
||||||
|
forceRender: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "materials",
|
||||||
|
label: "2. 备案材料上传",
|
||||||
|
children: (
|
||||||
|
<MaterialStep
|
||||||
|
materials={detail?.materials || []}
|
||||||
|
disabled={readOnly}
|
||||||
|
onUpload={handleMaterialUpload}
|
||||||
|
/>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "commitment",
|
||||||
|
label: "3. 法定代表人承诺书",
|
||||||
|
children: <CommitmentStep form={commitmentForm} disabled={readOnly} />,
|
||||||
|
forceRender: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "personnel",
|
||||||
|
label: "4. 备案人员管理",
|
||||||
|
children: (
|
||||||
|
<PersonnelStep
|
||||||
|
personnelList={detail?.personnelList || []}
|
||||||
|
disabled={readOnly}
|
||||||
|
onAdd={handlePersonnelAdd}
|
||||||
|
onRemove={handlePersonnelRemove}
|
||||||
|
/>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "equipment",
|
||||||
|
label: "5. 装备清单",
|
||||||
|
children: (
|
||||||
|
<EquipmentStep
|
||||||
|
equipmentList={detail?.equipmentList || []}
|
||||||
|
disabled={readOnly}
|
||||||
|
onAdd={handleEquipmentAdd}
|
||||||
|
onRemove={handleEquipmentRemove}
|
||||||
|
onCalibration={handleEquipmentCalibration}
|
||||||
|
/>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
const stepIndex = STEP_ITEMS.findIndex((item) => item.key === activeStep);
|
const stepIndex = STEP_ITEMS.findIndex((item) => item.key === activeStep);
|
||||||
const isLastStep = stepIndex === STEP_ITEMS.length - 1;
|
const isLastStep = stepIndex === STEP_ITEMS.length - 1;
|
||||||
|
|
||||||
|
|
@ -354,7 +378,7 @@ function FilingFormPage(props) {
|
||||||
<Tabs
|
<Tabs
|
||||||
activeKey={activeStep}
|
activeKey={activeStep}
|
||||||
items={STEP_ITEMS}
|
items={STEP_ITEMS}
|
||||||
onChange={(key) => {
|
onChange={async (key) => {
|
||||||
if (key === "commitment") {
|
if (key === "commitment") {
|
||||||
commitmentForm.setFieldsValue({
|
commitmentForm.setFieldsValue({
|
||||||
filingUnitName:
|
filingUnitName:
|
||||||
|
|
@ -365,43 +389,7 @@ function FilingFormPage(props) {
|
||||||
setActiveStep(key);
|
setActiveStep(key);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<div style={{ marginTop: 16 }}>
|
|
||||||
{activeStep === "basic" && (
|
|
||||||
<BasicInfoStep form={basicForm} disabled={readOnly} />
|
|
||||||
)}
|
|
||||||
{activeStep === "materials" && (
|
|
||||||
<MaterialStep
|
|
||||||
materials={detail?.materials || []}
|
|
||||||
disabled={readOnly}
|
|
||||||
onUpload={handleMaterialUpload}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
{activeStep === "commitment" && (
|
|
||||||
<CommitmentStep
|
|
||||||
form={commitmentForm}
|
|
||||||
disabled={readOnly}
|
|
||||||
personnelOptions={personnelOptions}
|
|
||||||
onSignatureChange={handleSignatureChange}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
{activeStep === "personnel" && (
|
|
||||||
<PersonnelStep
|
|
||||||
personnelList={detail?.personnelList || []}
|
|
||||||
disabled={readOnly}
|
|
||||||
onAdd={handlePersonnelAdd}
|
|
||||||
onRemove={handlePersonnelRemove}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
{activeStep === "equipment" && (
|
|
||||||
<EquipmentStep
|
|
||||||
equipmentList={detail?.equipmentList || []}
|
|
||||||
disabled={readOnly}
|
|
||||||
onAdd={handleEquipmentAdd}
|
|
||||||
onRemove={handleEquipmentRemove}
|
|
||||||
onUploadCalibration={handleEquipmentCalibration}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
display: "flex",
|
display: "flex",
|
||||||
|
|
@ -429,7 +417,9 @@ function FilingFormPage(props) {
|
||||||
<Space>
|
<Space>
|
||||||
{stepIndex > 0 && (
|
{stepIndex > 0 && (
|
||||||
<Button
|
<Button
|
||||||
onClick={() => setActiveStep(STEP_ITEMS[stepIndex - 1].key)}
|
onClick={async () => {
|
||||||
|
setActiveStep(STEP_ITEMS[stepIndex - 1].key);
|
||||||
|
}}
|
||||||
>
|
>
|
||||||
上一步
|
上一步
|
||||||
</Button>
|
</Button>
|
||||||
|
|
@ -437,7 +427,7 @@ function FilingFormPage(props) {
|
||||||
{!isLastStep && (
|
{!isLastStep && (
|
||||||
<Button
|
<Button
|
||||||
type="primary"
|
type="primary"
|
||||||
onClick={() => {
|
onClick={async () => {
|
||||||
setActiveStep(STEP_ITEMS[stepIndex + 1].key);
|
setActiveStep(STEP_ITEMS[stepIndex + 1].key);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
|
@ -447,7 +437,11 @@ function FilingFormPage(props) {
|
||||||
{!readOnly && isLastStep && (
|
{!readOnly && isLastStep && (
|
||||||
<>
|
<>
|
||||||
{mode !== FILING_FORM_MODE.FILED && (
|
{mode !== FILING_FORM_MODE.FILED && (
|
||||||
<Button onClick={handleSaveDraft}>暂存</Button>
|
<Button
|
||||||
|
onClick={() => handleVerifyConfirm({ isSaveDraft: true })}
|
||||||
|
>
|
||||||
|
暂存
|
||||||
|
</Button>
|
||||||
)}
|
)}
|
||||||
<Button type="primary" onClick={handleSubmitRequest}>
|
<Button type="primary" onClick={handleSubmitRequest}>
|
||||||
{mode === FILING_FORM_MODE.FILED ? "提交填报" : "提交申请"}
|
{mode === FILING_FORM_MODE.FILED ? "提交填报" : "提交申请"}
|
||||||
|
|
|
||||||
|
|
@ -16,12 +16,16 @@ const { router } = tools;
|
||||||
|
|
||||||
const QualReview = (props) => {
|
const QualReview = (props) => {
|
||||||
const [form] = Form.useForm();
|
const [form] = Form.useForm();
|
||||||
const { qualApplication, queryReviewList } = props;
|
const { qualReview, queryReviewList } = props;
|
||||||
const {qualReviewList, qualReviewTotal,qualReviewLoading}= qualApplication || {};
|
const {qualReviewList, qualReviewTotal,qualReviewLoading}= qualReview || {};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const handleSearch = () => {
|
const handleSearch = () => {
|
||||||
queryReviewList(router.query);
|
queryReviewList({
|
||||||
|
...router.query,
|
||||||
|
supervision: true,
|
||||||
|
});
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -48,7 +52,7 @@ const QualReview = (props) => {
|
||||||
fixed: "left",
|
fixed: "left",
|
||||||
render: (text, record, index) => index + 1,
|
render: (text, record, index) => index + 1,
|
||||||
},
|
},
|
||||||
{ title: "机构名称", dataIndex: "filingUnitName", width: 220, ellipsis: true },
|
{ title: "机构名称", dataIndex: "orgName", width: 220, ellipsis: true },
|
||||||
{ title: "机构类型", dataIndex: "filingUnitTypeName", width: 100 },
|
{ title: "机构类型", dataIndex: "filingUnitTypeName", width: 100 },
|
||||||
{ title: "证书编号", dataIndex: "filingNo", width: 140, ellipsis: true },
|
{ title: "证书编号", dataIndex: "filingNo", width: 140, ellipsis: true },
|
||||||
{ title: "安全评价业务范围", dataIndex: "businessScope", width: 180, ellipsis: true },
|
{ title: "安全评价业务范围", dataIndex: "businessScope", width: 180, ellipsis: true },
|
||||||
|
|
@ -63,10 +67,10 @@ const QualReview = (props) => {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "审核状态",
|
title: "审核状态",
|
||||||
dataIndex: "reviewStatus",
|
dataIndex: "filingStatusCode",
|
||||||
width: 100,
|
width: 100,
|
||||||
render: (status) => {
|
render: (_, {filingStatusCode}) => {
|
||||||
const config = REVIEW_STATUS_MAP[pending];
|
const config = REVIEW_STATUS_MAP[filingStatusCode];
|
||||||
return config ? <Tag color={config.color}>{config.label}</Tag> : '--';
|
return config ? <Tag color={config.color}>{config.label}</Tag> : '--';
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -134,16 +138,16 @@ const QualReview = (props) => {
|
||||||
<Select.Option value="no">否</Select.Option>
|
<Select.Option value="no">否</Select.Option>
|
||||||
</ControlWrapper.Select>
|
</ControlWrapper.Select>
|
||||||
</Form.Item>,
|
</Form.Item>,
|
||||||
<Form.Item key="reviewStatus" name="reviewStatus">
|
<Form.Item key="filingStatusCode" name="filingStatusCode">
|
||||||
<ControlWrapper.Select
|
<ControlWrapper.Select
|
||||||
label="审核状态"
|
label="审核状态"
|
||||||
placeholder="请选择"
|
placeholder="请选择"
|
||||||
allowClear
|
allowClear
|
||||||
style={{ width: "100%" }}
|
style={{ width: "100%" }}
|
||||||
>
|
>
|
||||||
<Select.Option value="pending">待审核</Select.Option>
|
|
||||||
<Select.Option value="reviewing">审核中</Select.Option>
|
<Select.Option value="2">审核中</Select.Option>
|
||||||
<Select.Option value="rejected">打回</Select.Option>
|
<Select.Option value="3">打回</Select.Option>
|
||||||
</ControlWrapper.Select>
|
</ControlWrapper.Select>
|
||||||
</Form.Item>,
|
</Form.Item>,
|
||||||
]}
|
]}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue