safety-eval-service-frontend/src/pages/Container/QualificationReview/QualReviewForm/index.js

124 lines
4.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import React, { useState, useEffect } from "react";
import { Button, Tag, Space, Spin, message } from "antd";
import PageLayout from "@cqsjjb/jjb-react-admin-component/PageLayout";
import { REVIEW_STATUS_MAP, LEGAL_STATUS_STYLE } from "~/enumerate/constant";
import { tools } from "@cqsjjb/jjb-common-lib";
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { NS_QUAL_REVIEW } from "~/enumerate/namespace";
import FilingTabs from "../FilingTabs";
import ReviewModal from "./ReviewModal";
import "./indes.less";
const { router } = tools;
const QualReviewForm = (props) => {
const { queryComplianceCheck, fetchQualFilingDetail, queryChangeComplianceCheck, fetchQualChangeDetail, modifyFilingMaterialChange, modifyFilingMaterial, qualReview } = props;
const { qualReviewLoading, complianceCheckItems, fetchQualFilingDetailLoading, qualFilingDetail } = qualReview;
const { router } = tools;
const isChange = router.query.mode === "change";
const [compliance, setCompliance] = useState({});
const [reviewVisible, setReviewVisible] = useState(false);
const statusConfig = REVIEW_STATUS_MAP[qualFilingDetail.filingStatusCode];
const legalPassCount = complianceCheckItems.filter(
(i) => i.status === "PASS",
).length;
const legalFailCount = complianceCheckItems.filter(
(i) => i.status === "NOT_PASS",
).length;
useEffect(() => {
const complianceAction = isChange ? queryChangeComplianceCheck : queryComplianceCheck;
const detailAction = isChange ? fetchQualChangeDetail : fetchQualFilingDetail;
complianceAction({ id: router.query.id });
detailAction({ id: router.query.id });
}, []);
// 符合性切换:备案变更管理(mode=change)走 PUT qual-filing-material-change
// 资质备案确认 / 备案公示管理等非变更场景走 POST qual-filing-material/modify。
// pass -> 1(符合) fail -> 2(不符合)
const handleComplianceChange = (id, v) => {
setCompliance((prev) => ({ ...prev, [id]: v }));
if (v == null) return;
const hasSatisfy = v === "pass" ? 1 : 2;
const action = isChange ? modifyFilingMaterialChange : modifyFilingMaterial;
action({ id, hasSatisfy }).then((res) => {
if (res?.success === false) {
message.error(res?.message || "符合性更新失败");
}
});
};
return (
<PageLayout
title={
<Space>
<span>资质备案审核</span>
{statusConfig && (
<Tag color={statusConfig.color}>{statusConfig.label}</Tag>
)}
</Space>
}
history={props.history}
previous
footer={
<Button type="primary" onClick={() => setReviewVisible(true)}>
审核操作
</Button>
}
>
<Spin spinning={qualReviewLoading || fetchQualFilingDetailLoading}>
<div className="qual-review-form">
<div className="legal-check-bar">
<div className="legal-check-title">法律规定内容</div>
<div className="legal-check-grid">
{complianceCheckItems.map((item) => {
const style = LEGAL_STATUS_STYLE[item.status] || {};
return (
<div
key={item.title}
className="legal-check-item"
style={{
borderLeft: `3px solid ${style.borderColor}`,
background: style.bg,
}}
>
<span>{style.icon}</span>
<div>
<div style={{ fontWeight: 500 }}>{item.title}</div>
<div className="legal-check-item-desc">{item.description}</div>
</div>
</div>
);
})}
</div>
</div>
<FilingTabs
detail={qualFilingDetail}
isReview
compliance={compliance}
onComplianceChange={handleComplianceChange}
/>
<ReviewModal
open={reviewVisible}
filingId={qualFilingDetail?.id}
isChange={isChange}
legalPassCount={legalPassCount}
legalFailCount={legalFailCount}
onSuccess={() => props.history.goBack()}
onCancel={() => setReviewVisible(false)}
/>
</div>
</Spin>
</PageLayout>
);
};
export default Connect(
[NS_QUAL_REVIEW],
true,
)(QualReviewForm);