{detail.customerName}
diff --git a/src/components/LayoutFooterPortal/index.js b/src/components/LayoutFooterPortal/index.js
new file mode 100644
index 0000000..55c8167
--- /dev/null
+++ b/src/components/LayoutFooterPortal/index.js
@@ -0,0 +1,19 @@
+import { useEffect, useState } from "react";
+import { createPortal } from "react-dom";
+
+/**
+ * 将节点传送到 PageLayout footer 插槽(配合 footer={} 使用)
+ * @param {String} [slotId] - 插槽节点 id
+ * @param {ReactNode} children - 底部按钮等内容,为空时不渲染
+ */
+const LayoutFooterPortal = ({ slotId = "page-footer-slot", children }) => {
+ const [slot, setSlot] = useState(null);
+
+ useEffect(() => {
+ setSlot(document.getElementById(slotId));
+ }, [slotId]);
+
+ return slot && children ? createPortal(children, slot) : null;
+};
+
+export default LayoutFooterPortal;
\ No newline at end of file
diff --git a/src/components/StatCardGroup/index.less b/src/components/StatCardGroup/index.less
index db15bab..7ae3b24 100644
--- a/src/components/StatCardGroup/index.less
+++ b/src/components/StatCardGroup/index.less
@@ -11,13 +11,14 @@
background: #fff;
border: 1px solid #e2e8f0;
border-radius: 8px;
- padding: 12px;
+ padding: 10px;
display: flex;
justify-content: space-between;
.stat-info {
.stat-label {
font-size: 16px;
+
color: #64748b;
}
diff --git a/src/pages/Container/InspNoticeManage/InspectionNotice/index.js b/src/pages/Container/InspNoticeManage/InspectionNotice/index.js
index f50d833..1736f0b 100644
--- a/src/pages/Container/InspNoticeManage/InspectionNotice/index.js
+++ b/src/pages/Container/InspNoticeManage/InspectionNotice/index.js
@@ -7,6 +7,7 @@ import {
Input,
Select,
ConfigProvider,
+ Tag,
message,
Upload,
} from "antd";
@@ -18,6 +19,7 @@ import { AntdTableFuncControl } from "@cqsjjb/jjb-common-decorator/antd";
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { NS_INSP_NOTICE } from "~/enumerate/namespace";
import dayjs from "dayjs";
+import StatCardGroup from "~/components/StatCardGroup";
import "./index.less";
const { TextArea } = Input;
@@ -113,12 +115,12 @@ const PROCESS_TYPE_OPTIONS = [
{ label: "查看办结结果", value: "查看办结结果" },
];
-const statusTagClass = (code) => {
- if (code === 1) return "inst-tag-danger";
- if (code === 2) return "inst-tag-warning";
- if (code === 3) return "inst-tag-info";
- if (code === 4) return "inst-tag-success";
- return "";
+const statusTagColor = (code) => {
+ if (code === 1) return "error";
+ if (code === 2) return "warning";
+ if (code === 3) return "processing";
+ if (code === 4) return "success";
+ return undefined;
};
const statusDisplayName = (code, name) => {
@@ -135,11 +137,11 @@ const noticeTypeLabel = (record) => {
return record.inspTypeName || "监督检查通知";
};
-const noticeTypeTagClass = (record) => {
- if (record.statusCode === 4) return "inst-tag-success";
- if (record.statusCode === 1) return "inst-tag-danger";
- if (record.statusCode === 3) return "inst-tag-info";
- return "inst-tag-warning";
+const noticeTypeTagColor = (record) => {
+ if (record.statusCode === 4) return "success";
+ if (record.statusCode === 1) return "error";
+ if (record.statusCode === 3) return "processing";
+ return "warning";
};
const formatDate = (val) => {
@@ -428,23 +430,23 @@ const InstitutionInspectionNotice = (props) => {
title: "通知编号",
dataIndex: "noticeNo",
width: 140,
- render: (t) => {t || "-"},
+
},
{
title: "通知类型",
dataIndex: "inspTypeName",
width: 110,
render: (_, record) => (
-
+
{noticeTypeLabel(record)}
-
+
),
},
{
title: "来源预警",
dataIndex: "sourceRefNo",
width: 140,
- render: (t) => t || "-",
+
},
{
title: "来源字段",
@@ -452,13 +454,9 @@ const InstitutionInspectionNotice = (props) => {
width: 180,
render: (_, record) => (
- {record.sourceTypeName ? (
- {record.sourceTypeName}
- ) : (
- 监督检查
- )}
+ {record.sourceTypeName || "监督检查"}
{record.inspTypeName ? (
- {record.inspTypeName}
+ {record.inspTypeName}
) : null}
),
@@ -480,9 +478,9 @@ const InstitutionInspectionNotice = (props) => {
dataIndex: "statusCode",
width: 110,
render: (code, record) => (
-
+
{statusDisplayName(code, record.statusName)}
-
+
),
},
{
@@ -531,40 +529,50 @@ const InstitutionInspectionNotice = (props) => {
-
-
-
-
监管消息总数
-
{metrics.total}
-
来源:监管端风险预警中心
-
-
✉️
-
-
-
-
待处理
-
{metrics.pending}
-
需机构直接处理
-
-
待
-
-
-
-
待监管复核
-
{metrics.feedback}
-
材料已提交
-
-
审
-
-
-
-
已办结
-
{metrics.closed}
-
办结消息可归档
-
-
结
-
-
+
消息来源:
diff --git a/src/pages/Container/InspNoticeManage/InspectionNotice/index.less b/src/pages/Container/InspNoticeManage/InspectionNotice/index.less
index 58020f6..44d4dc2 100644
--- a/src/pages/Container/InspNoticeManage/InspectionNotice/index.less
+++ b/src/pages/Container/InspNoticeManage/InspectionNotice/index.less
@@ -41,76 +41,9 @@
font-weight: 600;
}
-.inst-metrics {
- display: grid;
- grid-template-columns: repeat(4, minmax(0, 1fr));
- gap: 12px;
- margin-bottom: 12px;
-}
-
-@media (max-width: 1100px) {
- .inst-metrics {
- grid-template-columns: repeat(2, minmax(0, 1fr));
- }
-}
-
-.inst-metric-card {
- display: flex;
- justify-content: space-between;
- align-items: flex-start;
- gap: 8px;
- padding: 14px 16px;
- border: 1px solid #e2e8f0;
- border-radius: 10px;
- background: #fff;
-}
-
-.inst-metric-card .label {
- font-size: 16px;
- color: #64748b;
-}
-
-.inst-metric-card .value {
- font-size: 20px;
- font-weight: 700;
- color: #0f172a;
- margin: 4px 0;
- line-height: 1.2;
-}
-
-.inst-metric-card .value.danger {
- color: #dc2626;
-}
-
-.inst-metric-card .value.warning {
- color: #d97706;
-}
-
-.inst-metric-card .value.success {
- color: #059669;
-}
-
-.inst-metric-card .hint {
- font-size: 16px;
- color: #94a3b8;
-}
-
-.inst-metric-card .icon {
- width: 32px;
- height: 32px;
- border-radius: 8px;
- background: #f1f5f9;
- color: #64748b;
- display: flex;
- align-items: center;
- justify-content: center;
- font-size: 14px;
- flex-shrink: 0;
-}
-
.inst-note {
margin-bottom: 12px;
- padding: 10px 12px;
+ padding: 6px 12px;
border-radius: 8px;
background: #f8fafc;
border: 1px solid #e2e8f0;
@@ -124,7 +57,7 @@
align-items: center;
justify-content: space-between;
gap: 12px;
- margin-bottom: 12px;
+ margin-bottom: 6px;
flex-wrap: wrap;
}
@@ -145,38 +78,6 @@
color: #999;
}
-.inst-tag {
- display: inline-block;
- padding: 2px 8px;
- border-radius: 999px;
- font-size: 14px;
- font-weight: 500;
- background: #f1f5f9;
- color: #475569;
-}
-
-.inst-tag-success {
- background: #d1fae5;
- color: #065f46;
-}
-
-.inst-tag-info {
- background: #dbeafe;
- color: #1e40af;
-}
-
-.inst-tag-warning {
- background: #fef3c7;
- color: #92400e;
-}
-
-.inst-tag-danger {
- background: #fee2e2;
- color: #991b1b;
-}
-
-
-
.inst-modal-section {
border: 1px solid #e2e8f0;
border-radius: 8px;
@@ -272,16 +173,6 @@
gap: 4px;
}
-.inst-source-pill {
- display: inline-block;
- padding: 0 6px;
- border-radius: 999px;
- font-size: 14px;
- background: #eff6ff;
- color: #1d4ed8;
- border: 1px solid #bfdbfe;
-}
-
.inst-upload-tip {
font-size: 14px;
color: #64748b;
diff --git a/src/pages/Container/QualApplication/FilingForm/components/ChangeHistoryModal.jsx b/src/pages/Container/QualApplication/FilingForm/components/ChangeHistoryModal.jsx
index 005de70..0f6ce73 100644
--- a/src/pages/Container/QualApplication/FilingForm/components/ChangeHistoryModal.jsx
+++ b/src/pages/Container/QualApplication/FilingForm/components/ChangeHistoryModal.jsx
@@ -39,7 +39,7 @@ export default function ChangeHistoryModal({ open, filingId, onCancel }) {
index + 1 },
{ title: "变更事项", dataIndex: "changeItemName" },
- { title: "变更时间", dataIndex: "changeTime", width: 120 },
+ { title: "变更时间", dataIndex: "changeTime", width: 200 },
{ title: "操作人", dataIndex: "operatorName", width: 100, render: (val) => val || "-" },
]}
/>
diff --git a/src/pages/Container/SafetyEvalBusiness/CustomerManage/index.js b/src/pages/Container/SafetyEvalBusiness/CustomerManage/index.js
index 1fe4c47..c31ac46 100644
--- a/src/pages/Container/SafetyEvalBusiness/CustomerManage/index.js
+++ b/src/pages/Container/SafetyEvalBusiness/CustomerManage/index.js
@@ -393,7 +393,7 @@ const CustomerManage = (props) => {
-
+
diff --git a/src/pages/Container/SafetyEvalBusiness/EvalReportLibrary/index.js b/src/pages/Container/SafetyEvalBusiness/EvalReportLibrary/index.js
index ec6675c..0559926 100644
--- a/src/pages/Container/SafetyEvalBusiness/EvalReportLibrary/index.js
+++ b/src/pages/Container/SafetyEvalBusiness/EvalReportLibrary/index.js
@@ -30,6 +30,7 @@ import { tools } from "@cqsjjb/jjb-common-lib";
import dayjs from "dayjs";
import {EVAL_TYPE_OPTIONS} from '~/enumerate/constant';
import {QUALIFICATION_INDUSTRY_OPTIONS} from '~/enumerate/enterpriseOptions';
+import StatCardGroup from "~/components/StatCardGroup";
import "./index.less";
@@ -719,29 +720,35 @@ const EvalReportLibrary = (props) => {
];
const summaryItems = [
- { key: "totalCount", label: "报告总数", value: statData.totalCount },
+ {
+ key: "totalCount",
+ title: "报告总数",
+ value: statData.totalCount,
+ valueColor: "#1e293b",
+ },
{
key: "recentThreeYearCount",
- label: "近三年报告",
+ title: "近三年报告",
value: statData.recentThreeYearCount,
+ valueColor: "#1e293b",
},
{
key: "submittedCount",
- label: "已报送监管",
+ title: "已报送监管",
value: statData.submittedCount,
- color: "#059669",
+ valueColor: "#059669",
},
{
key: "incompleteCount",
- label: "待完善分类",
+ title: "待完善分类",
value: statData.incompleteCount,
- color: "#d97706",
+ valueColor: "#d97706",
},
{
key: "spotcheckingCount",
- label: "监管抽查中",
+ title: "监管抽查中",
value: statData.spotcheckingCount,
- color: "#2563eb",
+ valueColor: "#2563eb",
},
];
@@ -784,16 +791,7 @@ const EvalReportLibrary = (props) => {
上传过去三年已执行项目的正式报告,按年度、评价类型、行业和企业分类管理,并可报送监管端抽查。
-
- {summaryItems.map((item) => (
-
- {item.label}
-
- {item.value ?? "-"}
-
-
- ))}
-
+
div { border-radius: 6px } */
-.erl-summary {
- display: grid;
- grid-template-columns: repeat(5, minmax(0, 1fr));
- gap: 11px;
- margin-bottom: 16px;
-}
-
-.erl-summary-item {
- padding: 13px;
- background: #fff;
- border: 1px solid #dce4ec;
- border-radius: 6px;
-}
-
-.erl-summary-item span,
-.erl-summary-item strong {
- display: block;
-}
-
-.erl-summary-item span {
- font-size: 14px;
- color: #64748b;
-}
-
-.erl-summary-item strong {
- font-size: 19px;
- margin-top: 2px;
- color: #0f172a;
- font-weight: 600;
- line-height: 1.2;
-}
-
/* 报告名称文件图标 - 原型 .report-file-cell i { border-radius: 4px } */
.erl-file-cell {
display: flex;
@@ -350,18 +317,7 @@
border-radius: 12px;
}
-@media (max-width: 1200px) {
- .erl-summary {
- grid-template-columns: repeat(3, minmax(0, 1fr));
- }
-}
-
@media (max-width: 768px) {
- /* 原型 media:.report-library-summary { grid-template-columns: repeat(2,1fr) } */
- .erl-summary {
- grid-template-columns: repeat(2, minmax(0, 1fr));
- }
-
.erl-upload-box-inner {
grid-template-columns: 54px 1fr;
}
@@ -372,9 +328,3 @@
justify-self: start;
}
}
-
-@media (max-width: 480px) {
- .erl-summary {
- grid-template-columns: 1fr;
- }
-}
diff --git a/src/pages/Container/SafetyEvalBusiness/ProjectFlow/ArchiveContent.js b/src/pages/Container/SafetyEvalBusiness/ProjectFlow/ArchiveContent.js
index f67e1df..091d65e 100644
--- a/src/pages/Container/SafetyEvalBusiness/ProjectFlow/ArchiveContent.js
+++ b/src/pages/Container/SafetyEvalBusiness/ProjectFlow/ArchiveContent.js
@@ -18,6 +18,7 @@ import dayjs from "dayjs";
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace";
import { tools } from "@cqsjjb/jjb-common-lib";
+import LayoutFooterPortal from "~/components/LayoutFooterPortal";
const { router } = tools;
@@ -193,23 +194,20 @@ const ArchiveContent = ({ readOnly, ...props }) => {
-
- {!readOnly && (
-
- )}
-
+ {!readOnly && (
+
+
+
+
+
+ )}
);
};
diff --git a/src/pages/Container/SafetyEvalBusiness/ProjectFlow/ContractContent.js b/src/pages/Container/SafetyEvalBusiness/ProjectFlow/ContractContent.js
index b6ad52a..0937320 100644
--- a/src/pages/Container/SafetyEvalBusiness/ProjectFlow/ContractContent.js
+++ b/src/pages/Container/SafetyEvalBusiness/ProjectFlow/ContractContent.js
@@ -22,6 +22,7 @@ import { district } from "~/enumerate/constant";
import { phoneRule } from "~/utils/validators";
import { tools } from "@cqsjjb/jjb-common-lib";
import AttachmentUpload from "~/components/AttachmentUpload";
+import LayoutFooterPortal from "~/components/LayoutFooterPortal";
const { router } = tools;
const { TextArea } = Input;
@@ -530,16 +531,18 @@ const ContractContent = ({ readOnly, ...props }) => {
{!readOnly && (
-
-
-
-
+
+
+
+
+
+
)}
diff --git a/src/pages/Container/SafetyEvalBusiness/ProjectFlow/ControlContent.js b/src/pages/Container/SafetyEvalBusiness/ProjectFlow/ControlContent.js
index d744120..87c6a55 100644
--- a/src/pages/Container/SafetyEvalBusiness/ProjectFlow/ControlContent.js
+++ b/src/pages/Container/SafetyEvalBusiness/ProjectFlow/ControlContent.js
@@ -14,6 +14,7 @@ import { CheckCircleFilled } from "@ant-design/icons";
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace";
import { tools } from "@cqsjjb/jjb-common-lib";
+import LayoutFooterPortal from "~/components/LayoutFooterPortal";
const { TextArea } = Input;
const { router } = tools;
@@ -266,18 +267,6 @@ const ControlContent = ({ readOnly, ...props }) => {
},
]}
/>
-
- {!readOnly && (
-
- )}
-
)}
@@ -373,6 +362,21 @@ const ControlContent = ({ readOnly, ...props }) => {
)}
+
+ {step === 1 && !readOnly && (
+
+
+
+
+
+ )}
);
};
diff --git a/src/pages/Container/SafetyEvalBusiness/ProjectFlow/InternalReviewContent.js b/src/pages/Container/SafetyEvalBusiness/ProjectFlow/InternalReviewContent.js
index c054dd7..5ddcd88 100644
--- a/src/pages/Container/SafetyEvalBusiness/ProjectFlow/InternalReviewContent.js
+++ b/src/pages/Container/SafetyEvalBusiness/ProjectFlow/InternalReviewContent.js
@@ -17,6 +17,7 @@ import {
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace";
import { tools } from "@cqsjjb/jjb-common-lib";
+import LayoutFooterPortal from "~/components/LayoutFooterPortal";
const { TextArea } = Input;
const { router } = tools;
@@ -317,21 +318,23 @@ const InternalReviewContent = ({ readOnly, ...props }) => {
]}
/>
{!readOnly && (
-
-
-
-
+
+
+
+
+
+
)}
);
diff --git a/src/pages/Container/SafetyEvalBusiness/ProjectFlow/RiskAnalysisContent.js b/src/pages/Container/SafetyEvalBusiness/ProjectFlow/RiskAnalysisContent.js
index 8bdbb11..070dab0 100644
--- a/src/pages/Container/SafetyEvalBusiness/ProjectFlow/RiskAnalysisContent.js
+++ b/src/pages/Container/SafetyEvalBusiness/ProjectFlow/RiskAnalysisContent.js
@@ -23,6 +23,7 @@ import {EVAL_TYPE_OPTIONS} from '~/enumerate/constant';
import { QUALIFICATION_INDUSTRY_OPTIONS } from "~/enumerate/enterpriseOptions";
import { tools } from "@cqsjjb/jjb-common-lib";
import AttachmentUpload from "~/components/AttachmentUpload";
+import LayoutFooterPortal from "~/components/LayoutFooterPortal";
const { router } = tools;
const { TextArea } = Input;
@@ -543,22 +544,24 @@ const RiskAnalysisContent = ({ readOnly, ...props }) => {
{!readOnly && (
-
-
+
+
+
-
-
+
+
+
)}
diff --git a/src/pages/Container/SafetyEvalBusiness/ProjectFlow/SurveyContent.js b/src/pages/Container/SafetyEvalBusiness/ProjectFlow/SurveyContent.js
index 92d0a26..6b7b610 100644
--- a/src/pages/Container/SafetyEvalBusiness/ProjectFlow/SurveyContent.js
+++ b/src/pages/Container/SafetyEvalBusiness/ProjectFlow/SurveyContent.js
@@ -6,6 +6,7 @@ import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace";
import { tools } from "@cqsjjb/jjb-common-lib";
import AttachmentUpload from "~/components/AttachmentUpload";
import {ROLE_DEFINITIONS_MAP} from '~/enumerate/constant'
+import LayoutFooterPortal from "~/components/LayoutFooterPortal";
import "./index.less";
import dayjs from "dayjs";
@@ -353,14 +354,16 @@ const SurveyContent = ({ readOnly, ...props }) => {
-
- {!isFirst && }
- {isLast ? (
- !readOnly &&
- ) : (
-
- )}
-
+
+
+ {!isFirst && }
+ {isLast ? (
+ !readOnly &&
+ ) : (
+
+ )}
+
+
);
};
diff --git a/src/pages/Container/SafetyEvalBusiness/ProjectFlow/TeamContent.js b/src/pages/Container/SafetyEvalBusiness/ProjectFlow/TeamContent.js
index 1221a6b..b83c2b1 100644
--- a/src/pages/Container/SafetyEvalBusiness/ProjectFlow/TeamContent.js
+++ b/src/pages/Container/SafetyEvalBusiness/ProjectFlow/TeamContent.js
@@ -15,6 +15,7 @@ import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace";
import { tools } from "@cqsjjb/jjb-common-lib";
import { ROLE_DEFINITIONS } from "~/enumerate/constant";
import StatCardGroup from "~/components/StatCardGroup";
+import LayoutFooterPortal from "~/components/LayoutFooterPortal";
const { router } = tools;
@@ -342,17 +343,19 @@ const TeamContent = ({ readOnly, ...props }) => {
-
- {!readOnly && (
-
- )}
-
+ {!readOnly && (
+
+
+
+
+
+ )}
{
]}
/>
{!readOnly && (
-
-
-
-
+
+
+
+
+
+
)}
);
diff --git a/src/pages/Container/SafetyEvalBusiness/ProjectFlow/index.js b/src/pages/Container/SafetyEvalBusiness/ProjectFlow/index.js
index efba212..5a9e3aa 100644
--- a/src/pages/Container/SafetyEvalBusiness/ProjectFlow/index.js
+++ b/src/pages/Container/SafetyEvalBusiness/ProjectFlow/index.js
@@ -247,6 +247,7 @@ const ProjectFlow = (props) => {
}
title={
项目工作台
diff --git a/src/pages/Container/SafetyEvalBusiness/ProjectFlow/index.less b/src/pages/Container/SafetyEvalBusiness/ProjectFlow/index.less
index 3f11b48..dc0d03b 100644
--- a/src/pages/Container/SafetyEvalBusiness/ProjectFlow/index.less
+++ b/src/pages/Container/SafetyEvalBusiness/ProjectFlow/index.less
@@ -3,6 +3,11 @@
padding-top: 0px;
}
}
+
+// footer 插槽为空时隐藏 PageLayout 底栏
+[class*="-lay-container-bottom"]:has(> #pf-footer-slot:empty) {
+ display: none;
+}
.pf {
// 区块头部
@@ -207,11 +212,6 @@
line-height: 1.55;
}
- // 项目组 - 底部操作行
- &-bottom-actions {
- margin-top: 8px;
- }
-
// 弹窗 - 提示文字
&-modal-hint {
margin-bottom: 8px;
diff --git a/src/pages/Container/index.js b/src/pages/Container/index.js
index 882d321..18f7d5a 100644
--- a/src/pages/Container/index.js
+++ b/src/pages/Container/index.js
@@ -46,7 +46,11 @@ export default class Container extends React.Component {
theme={{
token: this.token,
algorithm: this.algorithm,
-
+ components: {
+ Tag: {
+ fontSizeSM: 13,
+ },
+ },
}}
locale={language}
prefixCls={window.process.env.app.antd["ant-prefix"]}
diff --git a/src/pages/Container/index.less b/src/pages/Container/index.less
index fb18d50..cf2173a 100644
--- a/src/pages/Container/index.less
+++ b/src/pages/Container/index.less
@@ -2,6 +2,7 @@
color: rgba(0, 0, 0, 0.45);
font-size: 14px;
+ line-height: 22px;
font-weight: 400;
}
.micro-temp-page-header-heading-left{