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

111 lines
3.7 KiB
JavaScript
Raw Normal View History

2026-07-02 16:58:07 +08:00
import React, { useState, useEffect } from "react";
2026-07-02 18:46:33 +08:00
import { Button, Tag, Space, Spin } from "antd";
2026-06-30 15:59:15 +08:00
import PageLayout from "@cqsjjb/jjb-react-admin-component/PageLayout";
2026-07-02 18:46:33 +08:00
import { REVIEW_STATUS_MAP, LEGAL_STATUS_STYLE } from "~/enumerate/constant";
2026-07-02 15:01:19 +08:00
import { tools } from "@cqsjjb/jjb-common-lib";
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { NS_QUAL_REVIEW } from "~/enumerate/namespace";
2026-06-30 15:59:15 +08:00
import FilingTabs from "../FilingTabs";
2026-07-02 18:46:33 +08:00
import ReviewModal from "./ReviewModal";
2026-06-30 15:59:15 +08:00
import "./indes.less";
2026-07-02 18:46:33 +08:00
const { router } = tools;
2026-06-30 15:59:15 +08:00
const QualReviewForm = (props) => {
2026-07-03 16:35:01 +08:00
const { queryComplianceCheck, fetchQualFilingDetail, queryChangeComplianceCheck, fetchQualChangeDetail, qualReview } = props;
const { qualReviewLoading, complianceCheckItems, fetchQualFilingDetailLoading, qualFilingDetail } = qualReview;
2026-07-03 10:35:36 +08:00
const { router } = tools;
const isChange = router.query.mode === "change";
2026-06-30 15:59:15 +08:00
const [compliance, setCompliance] = useState({});
const [reviewVisible, setReviewVisible] = useState(false);
2026-07-03 10:35:36 +08:00
2026-07-02 16:58:07 +08:00
const statusConfig = REVIEW_STATUS_MAP[qualFilingDetail.filingStatusCode];
2026-06-30 15:59:15 +08:00
2026-07-02 16:58:07 +08:00
const legalPassCount = complianceCheckItems.filter(
(i) => i.status === "PASS",
2026-07-02 15:01:19 +08:00
).length;
2026-07-02 16:58:07 +08:00
const legalFailCount = complianceCheckItems.filter(
(i) => i.status === "NOT_PASS",
2026-07-02 15:01:19 +08:00
).length;
2026-06-30 15:59:15 +08:00
2026-07-02 15:01:19 +08:00
useEffect(() => {
2026-07-03 10:35:36 +08:00
const complianceAction = isChange ? queryChangeComplianceCheck : queryComplianceCheck;
const detailAction = isChange ? fetchQualChangeDetail : fetchQualFilingDetail;
complianceAction({ id: router.query.id });
detailAction({ id: router.query.id });
2026-07-02 15:01:19 +08:00
}, []);
2026-06-30 15:59:15 +08:00
return (
<PageLayout
title={
<Space>
<span>资质备案审核</span>
2026-07-02 15:01:19 +08:00
{statusConfig && (
<Tag color={statusConfig.color}>{statusConfig.label}</Tag>
)}
2026-06-30 15:59:15 +08:00
</Space>
}
history={props.history}
previous
2026-07-02 15:01:19 +08:00
footer={
<Button type="primary" onClick={() => setReviewVisible(true)}>
审核操作
</Button>
}
2026-06-30 15:59:15 +08:00
>
2026-07-02 16:58:07 +08:00
<Spin spinning={qualReviewLoading || fetchQualFilingDetailLoading}>
2026-07-02 15:01:19 +08:00
<div className="qual-review-form">
<div className="legal-check-bar">
<div className="legal-check-title">法律规定内容</div>
<div className="legal-check-grid">
{complianceCheckItems.map((item) => {
2026-07-02 16:58:07 +08:00
const style = LEGAL_STATUS_STYLE[item.status] || {};
2026-07-02 15:01:19 +08:00
return (
<div
2026-07-02 16:58:07 +08:00
key={item.title}
2026-07-02 15:01:19 +08:00
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>
2026-06-30 15:59:15 +08:00
</div>
2026-07-02 15:01:19 +08:00
);
})}
</div>
2026-06-30 15:59:15 +08:00
</div>
2026-07-02 15:01:19 +08:00
<FilingTabs
2026-07-02 16:58:07 +08:00
detail={qualFilingDetail}
2026-07-02 15:01:19 +08:00
isReview
compliance={compliance}
onComplianceChange={(id, v) =>
setCompliance((prev) => ({ ...prev, [id]: v }))
}
/>
2026-06-30 15:59:15 +08:00
2026-07-02 18:46:33 +08:00
<ReviewModal
2026-07-02 15:01:19 +08:00
open={reviewVisible}
2026-07-02 18:46:33 +08:00
filingId={qualFilingDetail?.id}
2026-07-03 10:35:36 +08:00
isChange={isChange}
2026-07-02 18:46:33 +08:00
legalPassCount={legalPassCount}
legalFailCount={legalFailCount}
2026-07-08 15:38:45 +08:00
onSuccess={() => props.history.goBack()}
2026-07-02 15:01:19 +08:00
onCancel={() => setReviewVisible(false)}
2026-07-02 18:46:33 +08:00
/>
2026-07-02 15:01:19 +08:00
</div>
</Spin>
2026-06-30 15:59:15 +08:00
</PageLayout>
);
};
2026-07-02 15:01:19 +08:00
export default Connect(
[NS_QUAL_REVIEW],
true,
)(QualReviewForm);