dev-tmp1
tangjie 2026-08-17 16:55:05 +08:00
parent 81ddf115ff
commit d74349355a
43 changed files with 533 additions and 678 deletions

View File

@ -0,0 +1,36 @@
import React from "react";
import "./index.less";
/**
* 统一统计卡片组
* @param {Array} items - [{ key, title, value, valueColor, hint, iconBg, iconColor, iconText }]
* @param {Boolean} [loading] - 是否加载中
*/
const StatCardGroup = ({ items = [], loading }) => (
<div
className="stat-grid"
style={{ gridTemplateColumns: `repeat(${items.length || 1}, 1fr)` }}
>
{items.map((card) => (
<div key={card.key} className="stat-card">
<div className="stat-info">
<div className="stat-label">{card.title}</div>
<div className="stat-value" style={{ color: card.valueColor }}>
{loading ? "· · ·" : card.value ?? "-"}
</div>
{card.hint ? <div className="stat-hint">{card.hint}</div> : null}
</div>
{card.iconText ? (
<div
className="stat-icon"
style={{ background: card.iconBg, color: card.iconColor }}
>
{card.iconText}
</div>
) : null}
</div>
))}
</div>
);
export default StatCardGroup;

View File

@ -0,0 +1,48 @@
// 统一统计卡片网格
.stat-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16px;
margin-bottom: 10px;
}
// 统一统计卡片
.stat-card {
background: #fff;
border: 1px solid #e2e8f0;
border-radius: 8px;
padding: 12px;
display: flex;
justify-content: space-between;
.stat-info {
.stat-label {
font-size: 16px;
color: #64748b;
}
.stat-value {
font-size: 20px;
font-weight: 700;
line-height: 1.15;
margin-top: 6px;
}
.stat-hint {
font-size: 14px;
color: #64748b;
margin-top: 4px;
}
}
.stat-icon {
width: 38px;
height: 38px;
border-radius: 10px;
display: flex;
align-items: center;
justify-content: center;
font-size: 15.4px;
flex-shrink: 0;
}
}

View File

@ -377,7 +377,7 @@ function DepartmentPositionPage(props) {
return (
<PageLayout title="部门岗位管理">
<div style={{ display: "flex", gap: 16, minHeight: 480 }}>
<div style={{ display: "flex", gap: 16, height: "100%" }}>
<div
style={{
width: 260,

View File

@ -424,7 +424,7 @@ function EquipFormModal({
filterOption={(input, option) => (option?.label ?? "").toLowerCase().includes(input.toLowerCase())}
/>
</Form.Item>
<Form.Item name='deviceTypeName' />
<Form.Item name='deviceTypeName' noStyle />
</Col>
<Col span={12}>
<Form.Item

View File

@ -342,12 +342,12 @@ function PersonnelChangePage(props) {
open={viewResignOpen}
destroyOnHidden
title="查看离职申请"
width={720}
width={800}
cancelText="返回"
okButtonProps={{ style: { display: "none" } }}
onCancel={() => setViewResignOpen(false)}
>
<Descriptions bordered column={1} labelStyle={{ width: 120 }}>
<Descriptions bordered column={1} labelStyle={{ width: 140 }}>
<Descriptions.Item label="申请人">{resignInfo.applicantName}</Descriptions.Item>
<Descriptions.Item label="申请时间">{resignInfo.applyTime}</Descriptions.Item>
<Descriptions.Item label="预计离职日期">{resignInfo.expectedResignDate}</Descriptions.Item>

View File

@ -11,11 +11,13 @@
padding-right: 16px;
overflow: auto;
&-title {
font-weight: 500;
margin-bottom: 12px;
color: rgba(0, 0, 0, 0.85);
}
}
.personnel-info-main {

View File

@ -334,13 +334,13 @@ function ViewModal({ open, currentId, requestDetail, onCancel }) {
open={open}
destroyOnHidden
title="查看离职申请"
width={720}
width={800}
loading={detailLoading}
cancelText="返回"
okButtonProps={{ style: { display: "none" } }}
onCancel={onCancel}
>
<Descriptions bordered column={1} labelStyle={{ width: 120 }}>
<Descriptions bordered column={1} labelStyle={{ width: 140 }}>
<Descriptions.Item label="申请人">
{info.applicantName}
</Descriptions.Item>

View File

@ -656,7 +656,7 @@ const InstitutionInspectionNotice = (props) => {
open={processOpen}
onCancel={() => setProcessOpen(false)}
width={820}
destroyOnClose
destroyOnHidden
className="inst-modal"
footer={
processViewOnly ? (
@ -755,7 +755,7 @@ const InstitutionInspectionNotice = (props) => {
open={exportOpen}
onCancel={() => setExportOpen(false)}
width={560}
destroyOnClose
destroyOnHidden
className="inst-modal"
footer={
<Button type="primary" loading={exportLoading} onClick={handleExport}>

View File

@ -175,39 +175,7 @@
color: #991b1b;
}
.inst-modal {
.micro-temp-modal-content {
border-radius: 12px;
overflow: hidden;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.15);
}
.micro-temp-modal-header {
padding: 14px 21px;
border-bottom: 1px solid #e2e8f0;
margin-bottom: 0;
}
.micro-temp-modal-body {
padding: 21px;
max-height: 72vh;
overflow-y: auto;
scrollbar-width: none;
-ms-overflow-style: none;
&::-webkit-scrollbar {
width: 0;
height: 0;
display: none;
}
}
.micro-temp-modal-footer {
padding: 14px 21px;
border-top: 1px solid #e2e8f0;
margin-top: 0;
}
}
.inst-modal-section {
border: 1px solid #e2e8f0;

View File

@ -1,9 +1,5 @@
import React, { useState, useEffect } from "react";
import {
Row,
Col,
Card,
Statistic,
Table,
Tag,
Button,
@ -29,15 +25,35 @@ import {
QUALIFICATION_INDUSTRY_OPTIONS,
QUALIFICATION_INDUSTRY_OPTIONS_MAP,
} from "~/enumerate/enterpriseOptions";
import "./index.less";
import StatCardGroup from "~/components/StatCardGroup";
const { router } = tools;
const STAT_ITEMS = [
{ key: "monitoringCount", title: "在监项目", color: "#1677ff" },
{ key: "normalCount", title: "正常执行", color: "#52c41a" },
{ key: "warningCount", title: "进度/人员预警", color: "#faad14" },
{ key: "monthPlanCompleteCount", title: "本月计划完成", color: "#722ed1" },
{
key: "monitoringCount",
title: "在监项目",
color: "#1677ff",
},
{
key: "normalCount",
title: "正常执行",
color: "#52c41a",
},
{
key: "warningCount",
title: "进度/人员预警",
color: "#faad14",
},
{
key: "monthPlanCompleteCount",
title: "本月计划完成",
color: "#722ed1",
},
];
const EvalProjectMonitor = (props) => {
@ -187,19 +203,13 @@ const EvalProjectMonitor = (props) => {
return (
<PageLayout title="项目实时监控">
<Row gutter={16} className="epm-stat-row">
{STAT_ITEMS.map((item) => (
<Col span={6} key={item.key}>
<Card size="small">
<Statistic
title={item.title}
value={statData[item.key] ?? "-"}
valueStyle={{ color: item.color }}
/>
</Card>
</Col>
))}
</Row>
<StatCardGroup
items={STAT_ITEMS.map((item) => ({
...item,
value: statData[item.key],
valueColor: item.color,
}))}
/>
<SearchForm
form={searchForm}

View File

@ -1,3 +0,0 @@
.epm-stat-row {
margin-bottom: 16px;
}

View File

@ -17,6 +17,7 @@ import {
QUAL_MONITOR_STATUS_OPTIONS,
QUAL_MONITOR_STANDARD_ROWS,
} from "~/enumerate/constant";
import StatCardGroup from "~/components/StatCardGroup";
import "./index.less";
const { router } = tools;
@ -280,53 +281,40 @@ const QualMonitor = (props) => {
<PageLayout title="资质保持监控">
<div className="qual-monitor">
{/* 统计卡片 */}
<div className="stat-grid">
{[
<StatCardGroup
items={[
{
label: "备案机构总数",
key: "total",
title: "备案机构总数",
value: stats.total,
valueColor: "#1e293b",
hint: "来源:已备案机构管理.机构状态",
color: "#1e293b",
iconBg: "#ede9fe",
iconColor: "#7c3aed",
iconText: "机",
},
{
label: "条件保持正常",
key: "normal",
title: "条件保持正常",
value: stats.normal,
valueColor: "#059669",
hint: "十项资质条件均通过",
color: "#059669",
iconBg: "#d1fae5",
iconColor: "#059669",
iconText: "正",
},
{
label: "条件预警机构",
key: "warning",
title: "条件预警机构",
value: stats.warning,
valueColor: "#d97706",
hint: "人员比例、属地材料待核验",
color: "#d97706",
iconBg: "#fef3c7",
iconColor: "#d97706",
iconText: "预",
},
].map((card, idx) => (
<div key={idx} className="stat-card">
<div className="stat-info">
<div className="stat-label">{card.label}</div>
<div className="stat-value" style={{ color: card.color }}>
{card.value}
</div>
<div className="stat-hint">{card.hint}</div>
</div>
<div
className="stat-icon"
style={{ background: card.iconBg, color: card.iconColor }}
>
{card.iconText}
</div>
</div>
))}
</div>
]}
/>

View File

@ -10,55 +10,6 @@
border: 1px solid #e2e8f0;
}
// 统计卡片网格
.stat-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 16px;
margin-bottom: 10px;
}
// 统计卡片
.stat-card {
background: #fff;
border: 1px solid #e2e8f0;
border-radius: 8px;
padding: 12px;
display: flex;
justify-content: space-between;
.stat-info {
.stat-label {
font-size: 16px;
color: #64748b;
}
.stat-value {
font-size: 20px;
font-weight: 700;
line-height: 1.15;
margin-top: 6px;
}
.stat-hint {
font-size: 16px;
color: #64748b;
margin-top: 4px;
}
}
.stat-icon {
width: 38px;
height: 38px;
border-radius: 10px;
display: flex;
align-items: center;
justify-content: center;
font-size: 15.4px;
flex-shrink: 0;
}
}
// 资质条件来源说明
.source-note {
background: #f8fafc;

View File

@ -7,6 +7,7 @@ import ControlWrapper from "@cqsjjb/jjb-react-admin-component/ControlWrapper";
import { AntdTableFuncControl } from "@cqsjjb/jjb-common-decorator/antd";
import { tools } from "@cqsjjb/jjb-common-lib";
import AttachmentUpload from "~/components/AttachmentUpload";
import StatCardGroup from "~/components/StatCardGroup";
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { NS_RISK_CENTER } from "~/enumerate/namespace";
import {
@ -167,7 +168,7 @@ const RiskCenter = (props) => {
width: 100,
fixed: "right",
render: (_, record) => (
<Button type="primary" size="small" onClick={() => handleProcess(record)}>
<Button type="link" size="small" onClick={() => handleProcess(record)}>
处理
</Button>
),
@ -178,26 +179,20 @@ const RiskCenter = (props) => {
<PageLayout title="风险预警中心">
<div className="risk-center">
{/* 统计卡片 */}
<div className="stat-grid cols-4">
{overviewStats.map((stat, idx) => {
<StatCardGroup
items={overviewStats.map((stat, idx) => {
const theme = CARD_THEMES[idx % CARD_THEMES.length];
return (
<div className="stat-card" key={idx}>
<div className="stat-info">
<div className="stat-label">{stat.label}</div>
<div className="stat-value">{stat.value}</div>
<div className="stat-hint">{stat.hint}</div>
</div>
<div
className="stat-icon"
style={{ background: theme.bg, color: theme.color }}
>
{stat.label.charAt(0)}
</div>
</div>
);
return {
key: stat.label,
title: stat.label,
value: stat.value,
hint: stat.hint,
iconBg: theme.bg,
iconColor: theme.color,
iconText: stat.label.charAt(0),
};
})}
</div>
/>
{/* 项目预警规则提示 */}
<div className="source-note">

View File

@ -1,65 +1,4 @@
.risk-center {
// 统计卡片网格
.stat-grid.cols-4 {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16px;
margin-bottom: 10px;
}
// 统计卡片
.stat-card {
background: #fff;
border: 1px solid #e2e8f0;
border-radius: 8px;
padding: 12px;
display: flex;
justify-content: space-between;
.stat-info {
.stat-label {
font-size: 16px;
color: #64748b;
}
.stat-value {
font-size: 20px;
font-weight: 700;
line-height: 1.15;
margin-top: 6px;
}
.stat-value--high {
color: #dc2626;
}
.stat-value--mid {
color: #d97706;
}
.stat-value--ok {
color: #059669;
}
.stat-hint {
font-size: 16px;
color: #64748b;
margin-top: 4px;
}
}
.stat-icon {
width: 38px;
height: 38px;
border-radius: 10px;
display: flex;
align-items: center;
justify-content: center;
font-size: 18px;
flex-shrink: 0;
}
}
// 来源说明/规则提示
.source-note {
background: #f8fafc;

View File

@ -1,9 +1,5 @@
import React, { useState, useEffect } from "react";
import {
Row,
Col,
Card,
Statistic,
Table,
Tag,
Button,
@ -21,6 +17,7 @@ import { DownloadOutlined } from "@ant-design/icons";
import * as XLSX from "xlsx";
import PageLayout from "@cqsjjb/jjb-react-admin-component/PageLayout";
import SearchForm from "~/components/SearchForm";
import StatCardGroup from "~/components/StatCardGroup";
import ControlWrapper from "@cqsjjb/jjb-react-admin-component/ControlWrapper";
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace";
@ -150,10 +147,30 @@ const roleText = (v) => {
};
const STAT_ITEMS = [
{ key: "notificationArchivedCount", title: "告知书已归档", color: "#1677ff" },
{ key: "clockInNormalCount", title: "人员打卡正常", color: "#52c41a" },
{ key: "notificationAbnormalCount", title: "告知异常", color: "#faad14" },
{ key: "clockInAbnormalCount", title: "打卡异常", color: "#ff4d4f" },
{
key: "notificationArchivedCount",
title: "告知书已归档",
valueColor: "#1677ff",
},
{
key: "clockInNormalCount",
title: "人员打卡正常",
valueColor: "#52c41a",
},
{
key: "notificationAbnormalCount",
title: "告知异常",
valueColor: "#faad14",
},
{
key: "clockInAbnormalCount",
title: "打卡异常",
valueColor: "#ff4d4f",
},
];
/** 解析文件 JSON */
@ -457,19 +474,9 @@ const SurveyMonitor = (props) => {
return (
<PageLayout title="项目踏勘监管">
<Row gutter={16} className="sm-stat-row">
{STAT_ITEMS.map((item) => (
<Col span={6} key={item.key}>
<Card size="small">
<Statistic
title={item.title}
value={statData[item.key] ?? "-"}
valueStyle={{ color: item.color }}
/>
</Card>
</Col>
))}
</Row>
<StatCardGroup
items={STAT_ITEMS.map((item) => ({ ...item, value: statData[item.key] }))}
/>
<SearchForm
form={searchForm}

View File

@ -1,3 +1 @@
.sm-stat-row {
margin-bottom: 16px;
}

View File

@ -210,11 +210,11 @@ const SiteReviewNotice = (props) => {
open={detailModalVisible}
onCancel={() => setDetailModalVisible(false)}
footer={null}
width={680}
width={800}
destroyOnHide={true}
>
{currentRecord && (
<Descriptions column={2} bordered size="small">
<Descriptions column={2} bordered size="small" labelStyle={{ width: 120 }}>
<Descriptions.Item label="通知编号">{currentRecord.id}</Descriptions.Item>
<Descriptions.Item label="监管联系人">{currentRecord.supervisorContact || "-"}</Descriptions.Item>
<Descriptions.Item label="联系电话">{currentRecord.contactPhone || "-"}</Descriptions.Item>

View File

@ -444,7 +444,7 @@ const FilingTabs = ({
{ title: "序号", width: 60, render: (_, __, i) => i + 1 },
{ title: "装备名称", dataIndex: "deviceName", ellipsis: true },
{ title: "规格型号", dataIndex: "deviceModel", ellipsis: true },
{ title: "生产厂家", dataIndex: "manufacturer" },
{ title: "生产厂家", dataIndex: "manufacturer",ellipsis: true },
{
title: "计量检定情况",
width: 120,

View File

@ -1,6 +1,6 @@
import React, { useState, useEffect } from "react";
import dayjs from "dayjs";
import { Form, Table, Button, Modal, Input, Select, DatePicker, Card, Row, Col, Statistic, message, Tag } from "antd";
import { Form, Table, Button, Modal, Input, Select, DatePicker, Row, Col, message, Tag } from "antd";
import PageLayout from "@cqsjjb/jjb-react-admin-component/PageLayout";
import SearchForm from "~/components/SearchForm";
import ControlWrapper from "@cqsjjb/jjb-react-admin-component/ControlWrapper";
@ -11,6 +11,7 @@ import { NS_QUAL_REVIEW } from "~/enumerate/namespace";
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { ON_SITE_REVIEW_STATUS_MAP } from "~/enumerate/constant";
import AttachmentUpload from "~/components/AttachmentUpload";
import StatCardGroup from "~/components/StatCardGroup";
const { router } = tools;
@ -42,7 +43,6 @@ const SiteReviewNotice = (props) => {
qualOnSiteReviewStats = {},
orgSelectList = [],
siteReviewNoticeLoading,
siteReviewStatisticsLoading,
siteReviewSaveLoading,
siteReviewResultLoading,
} = qualReview || {};
@ -227,26 +227,40 @@ const SiteReviewNotice = (props) => {
>
<Row gutter={16} style={{ marginBottom: 16 }}>
<Col span={8}>
<Card size="small" loading={siteReviewStatisticsLoading}>
<Statistic title="通知总数" value={qualOnSiteReviewStats.totalCount ?? "-"} suffix="条" />
<div style={{ fontSize: 14, color: "#999", marginTop: 4 }}>{qualOnSiteReviewStats.annualCumulativeCount ?? 0} 条本年度累计</div>
</Card>
</Col>
<Col span={8}>
<Card size="small" loading={siteReviewStatisticsLoading}>
<Statistic title="待开展审查" value={qualOnSiteReviewStats.pendingReviewNextThirtyDaysCount ?? ""} valueStyle={{ color: "#2563eb" }} suffix="条" />
<div style={{ fontSize: 14, color: "#999", marginTop: 4 }}>未来30日内</div>
</Card>
</Col>
<Col span={8}>
<Card size="small" loading={siteReviewStatisticsLoading}>
<Statistic title="已完成" value={qualOnSiteReviewStats.completedArchivedCount ?? "-"} valueStyle={{ color: "#059669" }} suffix="条" />
<div style={{ fontSize: 14, color: "#999", marginTop: 4 }}>审查结果已归档</div>
</Card>
</Col>
</Row>
<StatCardGroup
items={[
{
key: "totalCount",
title: "通知总数",
value: qualOnSiteReviewStats.totalCount,
valueColor: "#1e293b",
hint: `${qualOnSiteReviewStats.annualCumulativeCount ?? 0} 条本年度累计`,
iconBg: "#eef2ff",
iconColor: "#4f46e5",
iconText: "通",
},
{
key: "pendingReviewNextThirtyDaysCount",
title: "待开展审查",
value: qualOnSiteReviewStats.pendingReviewNextThirtyDaysCount,
valueColor: "#2563eb",
hint: "未来30日内",
iconBg: "#eff6ff",
iconColor: "#2563eb",
iconText: "待",
},
{
key: "completedArchivedCount",
title: "已完成",
value: qualOnSiteReviewStats.completedArchivedCount,
valueColor: "#059669",
hint: "审查结果已归档",
iconBg: "#ecfdf5",
iconColor: "#059669",
iconText: "完",
},
]}
/>
<SearchForm
form={searchForm}

View File

@ -4,15 +4,12 @@ import {
Table,
Button,
Tag,
Row,
Col,
Card,
Statistic,
Space,
} from "antd";
import { AntdTableFuncControl } from "@cqsjjb/jjb-common-decorator/antd";
import PageLayout from "@cqsjjb/jjb-react-admin-component/PageLayout";
import SearchForm from "~/components/SearchForm";
import StatCardGroup from "~/components/StatCardGroup";
import ControlWrapper from "@cqsjjb/jjb-react-admin-component/ControlWrapper";
import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace";
import { WARING_STATUS_MAP, WARING_STATUS_OPTIONS } from "~/enumerate/constant";
@ -146,47 +143,50 @@ const BusinessReminder = (props) => {
return (
<PageLayout title="安评业务提醒">
<Row gutter={16} className="br-stat-row">
<Col span={6}>
<Card size="small">
<Statistic
title="纳入提醒客户"
value={statData.remindCount ?? "-"}
suffix={<span className="br-stat-suffix">按行业周期和属地要求维护</span>}
/>
</Card>
</Col>
<Col span={6}>
<Card size="small">
<Statistic
title="首次预警"
value={statData.firstWaringCount ?? "-"}
valueStyle={{ color: "#52c41a" }}
suffix={<span className="br-stat-suffix">到期前6个月启动商务对接</span>}
/>
</Card>
</Col>
<Col span={6}>
<Card size="small">
<Statistic
title="二次提醒"
value={statData.secondWaringCount ?? "-"}
valueStyle={{ color: "#faad14" }}
suffix={<span className="br-stat-suffix">到期前3个月正式委托启动</span>}
/>
</Card>
</Col>
<Col span={6}>
<Card size="small">
<Statistic
title="紧急预警"
value={statData.emergencyWaringCount ?? "-"}
valueStyle={{ color: "#ff4d4f" }}
suffix={<span className="br-stat-suffix">到期前1个月加快编制评审</span>}
/>
</Card>
</Col>
</Row>
<StatCardGroup
items={[
{
key: "remindCount",
title: "纳入提醒客户",
value: statData.remindCount,
valueColor: "#1e293b",
hint: "按行业周期和属地要求维护",
iconBg: "#eef2ff",
iconColor: "#4f46e5",
iconText: "客",
},
{
key: "firstWaringCount",
title: "首次预警",
value: statData.firstWaringCount,
valueColor: "#52c41a",
hint: "到期前6个月启动商务对接",
iconBg: "#f6ffed",
iconColor: "#52c41a",
iconText: "首",
},
{
key: "secondWaringCount",
title: "二次提醒",
value: statData.secondWaringCount,
valueColor: "#faad14",
hint: "到期前3个月正式委托启动",
iconBg: "#fffbe6",
iconColor: "#faad14",
iconText: "二",
},
{
key: "emergencyWaringCount",
title: "紧急预警",
value: statData.emergencyWaringCount,
valueColor: "#ff4d4f",
hint: "到期前1个月加快编制评审",
iconBg: "#fff1f0",
iconColor: "#ff4d4f",
iconText: "急",
},
]}
/>
<div className="br-note">
<strong>提醒时间规则</strong>

View File

@ -5,15 +5,6 @@
margin-bottom: 16px;
}
&-stat-row {
margin-bottom: 16px;
}
&-stat-suffix {
font-size: 14px;
color: #999;
}
&-note {
padding: 8px 12px;
background: #f6f8fa;

View File

@ -891,7 +891,7 @@ const EvalReportLibrary = (props) => {
okText="确认上传"
cancelText="取消"
width={820}
destroyOnClose
destroyOnHidden
className="erl-upload-modal"
>
<Form
@ -1123,7 +1123,7 @@ const EvalReportLibrary = (props) => {
onCancel={() => setDetailVisible(false)}
footer={<Button onClick={() => setDetailVisible(false)}>关闭</Button>}
width={820}
destroyOnClose
destroyOnHidden
className="erl-upload-modal"
>
{detailData ? (
@ -1309,7 +1309,7 @@ const EvalReportLibrary = (props) => {
<Button onClick={() => setSpotcheckVisible(false)}>关闭</Button>
}
width={980}
destroyOnClose
destroyOnHidden
>
<Table
rowKey="id"
@ -1333,7 +1333,7 @@ const EvalReportLibrary = (props) => {
okText="提交整改"
cancelText="取消"
width={560}
destroyOnClose
destroyOnHidden
>
{rectifyRecord && (
<div className="erl-rectify-meta">

View File

@ -144,16 +144,7 @@
overflow: hidden;
}
.micro-temp-modal-body {
max-height: 72vh;
overflow-y: auto;
&::-webkit-scrollbar {
width: 0;
height: 0;
display: none;
}
}
}
/* 原型单层虚线框,避免 Dragger 内外双边框 */

View File

@ -1,6 +1,6 @@
import React, { useState, useEffect } from "react";
import {
Form, Table, Tag, Button, Card, Row, Col, Statistic, Select, Modal, message, Tooltip,
Form, Table, Tag, Button, Select, Modal, message, Tooltip,
} from "antd";
import PageLayout from "@cqsjjb/jjb-react-admin-component/PageLayout";
import SearchForm from "~/components/SearchForm";
@ -11,6 +11,7 @@ import { NODE_LABELS } from "~/enumerate/constant";
import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace";
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { tools } from "@cqsjjb/jjb-common-lib";
import StatCardGroup from "~/components/StatCardGroup";
import "./index.less";
const { router } = tools;
@ -138,32 +139,50 @@ const MyProject = (props) => {
return (
<PageLayout title="我的项目工作">
<Row gutter={16} style={{ marginBottom: 16 }}>
<Col span={6}>
<Card size="small">
<Statistic title="参与项目" value={evalProjectStatisticsData.participatingProjectSum ?? "-"} suffix="个" />
<div style={{ fontSize: 14, color: "#999", marginTop: 4 }}>负责人/编制人/审核人</div>
</Card>
</Col>
<Col span={6}>
<Card size="small">
<Statistic title="待我处理" value={evalProjectStatisticsData.pendingMyHandlingSum ?? "-"} valueStyle={{ color: "#faad14" }} suffix="项" />
<div style={{ fontSize: 14, color: "#999", marginTop: 4 }}>当前角色可操作节点</div>
</Card>
</Col>
<Col span={6}>
<Card size="small">
<Statistic title="现场任务" value={evalProjectStatisticsData.onSiteTaskSum ?? "-"} valueStyle={{ color: "#52c41a" }} suffix="项" />
<div style={{ fontSize: 14, color: "#999", marginTop: 4 }}>需定位打卡和人脸识别</div>
</Card>
</Col>
<Col span={6}>
<Card size="small">
<Statistic title="延期项目" value={evalProjectStatisticsData.delayedProjectSum ?? "-"} valueStyle={{ color: "#ff4d4f" }} suffix="项" />
<div style={{ fontSize: 14, color: "#999", marginTop: 4 }}>需优先处理</div>
</Card>
</Col>
</Row>
<StatCardGroup
items={[
{
key: "participatingProjectSum",
title: "参与项目",
value: evalProjectStatisticsData.participatingProjectSum,
valueColor: "#1e293b",
hint: "负责人/编制人/审核人",
iconBg: "#eff6ff",
iconColor: "#1677ff",
iconText: "参",
},
{
key: "pendingMyHandlingSum",
title: "待我处理",
value: evalProjectStatisticsData.pendingMyHandlingSum,
valueColor: "#faad14",
hint: "当前角色可操作节点",
iconBg: "#fffbe6",
iconColor: "#faad14",
iconText: "待",
},
{
key: "onSiteTaskSum",
title: "现场任务",
value: evalProjectStatisticsData.onSiteTaskSum,
valueColor: "#52c41a",
hint: "需定位打卡和人脸识别",
iconBg: "#f6ffed",
iconColor: "#52c41a",
iconText: "现",
},
{
key: "delayedProjectSum",
title: "延期项目",
value: evalProjectStatisticsData.delayedProjectSum,
valueColor: "#ff4d4f",
hint: "需优先处理",
iconBg: "#fff1f0",
iconColor: "#ff4d4f",
iconText: "延",
},
]}
/>
<SearchForm
form={searchForm}

View File

@ -5,10 +5,6 @@ import {
Button,
Tag,
Modal,
Row,
Col,
Card,
Statistic,
Descriptions,
Steps,
Tooltip,
@ -16,6 +12,7 @@ import {
import { AntdTableFuncControl } from "@cqsjjb/jjb-common-decorator/antd";
import PageLayout from "@cqsjjb/jjb-react-admin-component/PageLayout";
import SearchForm from "~/components/SearchForm";
import StatCardGroup from "~/components/StatCardGroup";
import ControlWrapper from "@cqsjjb/jjb-react-admin-component/ControlWrapper";
import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace";
import {
@ -188,55 +185,50 @@ const ProjectProgress = (props) => {
return (
<PageLayout title="项目进度管理">
<Row gutter={16} className="pp-stat-row">
<Col span={6}>
<Card size="small">
<Statistic
title="项目总数"
value={statData.totalCount ?? "-"}
suffix={
<span className="pp-stat-suffix">当前机构名下评价项目</span>
}
/>
</Card>
</Col>
<Col span={6}>
<Card size="small">
<Statistic
title="正常项目"
value={statData.normalCount ?? "-"}
valueStyle={{ color: "#52c41a" }}
suffix={
<span className="pp-stat-suffix">距项目结束日期超过3天</span>
}
/>
</Card>
</Col>
<Col span={6}>
<Card size="small">
<Statistic
title="项目临期"
value={statData.nearExpiryCount ?? "-"}
valueStyle={{ color: "#faad14" }}
suffix={
<span className="pp-stat-suffix">项目结束前3天自动提醒</span>
}
/>
</Card>
</Col>
<Col span={6}>
<Card size="small">
<Statistic
title="项目延期"
value={statData.delayedCount ?? "-"}
valueStyle={{ color: "#ff4d4f" }}
suffix={
<span className="pp-stat-suffix">已超过项目结束日期</span>
}
/>
</Card>
</Col>
</Row>
<StatCardGroup
items={[
{
key: "totalCount",
title: "项目总数",
value: statData.totalCount,
valueColor: "#1e293b",
hint: "当前机构名下评价项目",
iconBg: "#eff6ff",
iconColor: "#1677ff",
iconText: "总",
},
{
key: "normalCount",
title: "正常项目",
value: statData.normalCount,
valueColor: "#52c41a",
hint: "距项目结束日期超过3天",
iconBg: "#f6ffed",
iconColor: "#52c41a",
iconText: "正",
},
{
key: "nearExpiryCount",
title: "项目临期",
value: statData.nearExpiryCount,
valueColor: "#faad14",
hint: "项目结束前3天自动提醒",
iconBg: "#fffbe6",
iconColor: "#faad14",
iconText: "临",
},
{
key: "delayedCount",
title: "项目延期",
value: statData.delayedCount,
valueColor: "#ff4d4f",
hint: "已超过项目结束日期",
iconBg: "#fff1f0",
iconColor: "#ff4d4f",
iconText: "延",
},
]}
/>
<SearchForm
form={searchForm}

View File

@ -1,14 +1,4 @@
.pp {
// 统计卡片区域
&-stat-row {
margin-bottom: 16px;
}
&-stat-suffix {
font-size: 14px;
color: #999;
}
// 进度圆点容器
&-progress-dots {
display: flex;

View File

@ -2,11 +2,7 @@ import React, { useEffect, useState } from "react";
import {
Tag,
Button,
Card,
Row,
Col,
Table,
Statistic,
Flex,
Modal,
Radio,
@ -18,6 +14,7 @@ import { Connect } from "@cqsjjb/jjb-dva-runtime";
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";
const { router } = tools;
@ -265,55 +262,48 @@ const TeamContent = ({ readOnly, ...props }) => {
</span>
</div>
<Row gutter={16} className="pf-stats-row">
<Col span={6}>
<Card size="small">
<Statistic
title="已配置人员"
value={teamMembers.length}
suffix="人"
/>
</Card>
</Col>
<Col span={6}>
<Card size="small">
<Statistic
title="已覆盖角色"
value={new Set(allRoles).size + " / 11"}
/>
</Card>
</Col>
<Col span={6}>
<Card size="small">
<Statistic
title="项目负责人"
value={allRoles.includes("PROJECT_LEAD") ? "已配置" : "待配置"}
valueStyle={{
color: allRoles.includes("PROJECT_LEAD")
? "#52c41a"
: "#faad14",
}}
/>
</Card>
</Col>
<Col span={6}>
<Card size="small">
<Statistic
title="过程控制负责人"
value={
allRoles.includes("PROCESS_CONTROL_LEAD")
? "已配置"
: "待配置"
}
valueStyle={{
color: allRoles.includes("PROCESS_CONTROL_LEAD")
? "#52c41a"
: "#faad14",
}}
/>
</Card>
</Col>
</Row>
<StatCardGroup
items={[
{
key: "memberCount",
title: "已配置人员",
value: `${teamMembers.length}`,
valueColor: "#1e293b",
iconBg: "#eff6ff",
},
{
key: "roleCoverage",
title: "已覆盖角色",
value: `${new Set(allRoles).size} / 11`,
valueColor: "#1677ff",
iconBg: "#e6f4ff",
},
{
key: "projectLead",
title: "项目负责人",
value: allRoles.includes("PROJECT_LEAD") ? "已配置" : "待配置",
valueColor: allRoles.includes("PROJECT_LEAD")
? "#52c41a"
: "#faad14",
},
{
key: "processControlLead",
title: "过程控制负责人",
value: allRoles.includes("PROCESS_CONTROL_LEAD")
? "已配置"
: "待配置",
valueColor: allRoles.includes("PROCESS_CONTROL_LEAD")
? "#52c41a"
: "#faad14",
},
]}
/>
<Flex justify="flex-end" className="pf-add-bar">
{!readOnly && (

View File

@ -262,6 +262,7 @@ const ProjectFlow = (props) => {
activeKey={activeKey}
onChange={handleTabChange}
items={tabItems}
className="pf-tabs"
destroyOnHidden
/>
{visible && (

View File

@ -1,4 +1,10 @@
.pf-tabs{
.micro-temp-tabs-tab {
padding-top: 0px;
}
}
.pf {
// 区块头部
&-section-header {
display: flex;
@ -47,7 +53,7 @@
// 权限标签区域
&-permission {
margin-bottom: 12px;
margin-bottom: 8px;
.pf-tag {
margin-right: 8px;

View File

@ -3,10 +3,6 @@ import {
Form,
Table,
Tag,
Row,
Col,
Card,
Statistic,
Button,
Modal,
Upload,
@ -19,6 +15,7 @@ import { UploadOutlined } from "@ant-design/icons";
import { AntdTableFuncControl } from "@cqsjjb/jjb-common-decorator/antd";
import PageLayout from "@cqsjjb/jjb-react-admin-component/PageLayout";
import SearchForm from "~/components/SearchForm";
import StatCardGroup from "~/components/StatCardGroup";
import ControlWrapper from "@cqsjjb/jjb-react-admin-component/ControlWrapper";
import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace";
import {
@ -185,27 +182,30 @@ const RiskWarning = (props) => {
return (
<PageLayout title="风险预警管理">
<Row gutter={16} className="rw-stat-row">
<Col span={12}>
<Card size="small">
<Statistic
title="预警总数"
value={statData.totalCount ?? "-"}
suffix={<span className="rw-stat-suffix">来自项目过程控制与周期规则</span>}
/>
</Card>
</Col>
<Col span={12}>
<Card size="small">
<Statistic
title="本周新增"
value={statData.weekNewCount ?? "-"}
valueStyle={{ color: "#52c41a" }}
suffix={<span className="rw-stat-suffix">需在周例会确认</span>}
/>
</Card>
</Col>
</Row>
<StatCardGroup
items={[
{
key: "totalCount",
title: "预警总数",
value: statData.totalCount,
valueColor: "#1e293b",
hint: "来自项目过程控制与周期规则",
iconBg: "#fff1f0",
iconColor: "#ff4d4f",
iconText: "警",
},
{
key: "weekNewCount",
title: "本周新增",
value: statData.weekNewCount,
valueColor: "#52c41a",
hint: "需在周例会确认",
iconBg: "#f6ffed",
iconColor: "#52c41a",
iconText: "周",
},
]}
/>
<SearchForm
form={searchForm}
@ -255,7 +255,7 @@ const RiskWarning = (props) => {
onOk={handleModalOk}
onCancel={handleModalCancel}
confirmLoading={riskWarningHandleLoading}
destroyOnClose
destroyOnHidden
>
<Form form={modalForm} layout="vertical">
<Form.Item label="项目编号">

View File

@ -1,13 +1,4 @@
.rw {
&-stat-row {
margin-bottom: 16px;
}
&-stat-suffix {
font-size: 14px;
color: #999;
}
&-note {
padding: 8px 12px;
background: #f6f8fa;

View File

@ -1,7 +1,8 @@
import { Button, Card, Col, Descriptions, Form, Modal, Row, Statistic, Table, Tag } from "antd";
import { Button, Descriptions, Form, Modal, Table, Tag } from "antd";
import { useEffect, useState } from "react";
import PageLayout from "@cqsjjb/jjb-react-admin-component/PageLayout";
import SearchForm from "~/components/SearchForm";
import StatCardGroup from "~/components/StatCardGroup";
import ControlWrapper from "@cqsjjb/jjb-react-admin-component/ControlWrapper";
import { AntdTableFuncControl } from "@cqsjjb/jjb-common-decorator/antd";
import { CHONGQING_DISTRICTS } from "~/enumerate/enterpriseOptions";
@ -183,45 +184,54 @@ function EnterprisePortraitPage(props) {
</p>
</div>
</div>
<Row gutter={16}>
<Col span={6}>
<Card size="small">
<Statistic title="项目按时完成率" value={detail.projectOnTimeRate} />
<div style={{ marginTop: 8, color: "#52c41a", fontSize: 14 }}>
{" "}
{detail.projectOnTime}
</div>
</Card>
</Col>
<Col span={6}>
<Card size="small">
<Statistic title="报告质量" value={detail.reportQuality} />
<div style={{ marginTop: 8, color: "rgba(0,0,0,0.45)", fontSize: 14 }}>
{detail.reportQualityDesc}
</div>
</Card>
</Col>
<Col span={6}>
<Card size="small">
<Statistic
title="投诉/处罚"
value={detail.complaintCount + detail.penaltyCount}
/>
<div style={{ marginTop: 8, color: "rgba(0,0,0,0.45)", fontSize: 14 }}>
{detail.penaltyDesc}
</div>
</Card>
</Col>
<Col span={6}>
<Card size="small">
<Statistic title="评价次数" value={detail.evalCount} />
<div style={{ marginTop: 8, color: "rgba(0,0,0,0.45)", fontSize: 14 }}>
{detail.evalCountDesc}
</div>
</Card>
</Col>
</Row>
<StatCardGroup
items={[
{
key: "projectOnTimeRate",
title: "项目按时完成率",
value: detail.projectOnTimeRate,
valueColor: "#1e293b",
hint: (
<span style={{ color: "#52c41a" }}>
{detail.projectOnTime}
</span>
),
iconBg: "#f6ffed",
iconColor: "#52c41a",
iconText: "时",
},
{
key: "reportQuality",
title: "报告质量",
value: detail.reportQuality,
valueColor: "#1e293b",
hint: detail.reportQualityDesc,
iconBg: "#eff6ff",
iconColor: "#1677ff",
iconText: "质",
},
{
key: "complaintPenalty",
title: "投诉/处罚",
value: detail.complaintCount + detail.penaltyCount,
valueColor: "#faad14",
hint: detail.penaltyDesc,
iconBg: "#fffbe6",
iconColor: "#faad14",
iconText: "诉",
},
{
key: "evalCount",
title: "评价次数",
value: detail.evalCount,
valueColor: "#1e293b",
hint: detail.evalCountDesc,
iconBg: "#eef2ff",
iconColor: "#4f46e5",
iconText: "评",
},
]}
/>
<Descriptions bordered column={2} size="small" style={{ marginTop: 24 }}>
<Descriptions.Item label="信息等级">
<Tag color={INFO_LEVEL_COLOR[detail.infoLevelCode] || "default"}>

View File

@ -278,7 +278,7 @@ function OrgAccountPage(props) {
</Tag>
),
},
{ title: "开户时间", dataIndex: "createTime", width: 110 },
{ title: "开户时间", dataIndex: "createTime", width: 155 },
{
title: "操作",
width: 200,
@ -414,7 +414,7 @@ function OrgAccountPage(props) {
open={viewOpen}
destroyOnHidden
title="机构信息查看"
width={900}
width={1000}
loading={detailLoading}
cancelText="关闭"
okButtonProps={{ style: { display: "none" } }}
@ -424,7 +424,7 @@ function OrgAccountPage(props) {
}}
>
{detail && (
<Descriptions bordered column={2} size="small">
<Descriptions bordered column={2} size="small" labelStyle={{ width: 165 }}>
<Descriptions.Item label="单位名称">
{detail.unitName}
</Descriptions.Item>

View File

@ -133,7 +133,7 @@ function RegisteredOrgListPage(props) {
{ title: "统一社会信用代码", dataIndex: "creditCode", width: 170, ellipsis: true },
{
title: "是否本地单位",
width: 100,
width: 120,
// 由 filingUnitTypeName本地单位/异地单位判断变更时间2026-08-10
render: (_, record) =>
record.filingUnitTypeName === "本地单位"

View File

@ -288,7 +288,7 @@ const EvalPortrait = (props) => {
open={detailOpen}
onCancel={() => setDetailOpen(false)}
width={980}
destroyOnClose
destroyOnHidden
className="ep-modal"
footer={
<Space>
@ -348,7 +348,7 @@ const EvalPortrait = (props) => {
open={rulesOpen}
onCancel={() => setRulesOpen(false)}
width={720}
destroyOnClose
destroyOnHidden
className="ep-modal"
footer={
<Button onClick={() => setRulesOpen(false)}>关闭</Button>

View File

@ -42,40 +42,7 @@
color: #92400e;
}
/* 原型 modal */
.ep-modal {
.micro-temp-modal-content {
border-radius: 12px;
overflow: hidden;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.15);
}
.micro-temp-modal-header {
padding: 14px 21px;
border-bottom: 1px solid #e2e8f0;
margin-bottom: 0;
}
.micro-temp-modal-body {
padding: 21px;
max-height: 72vh;
overflow-y: auto;
scrollbar-width: none;
-ms-overflow-style: none;
&::-webkit-scrollbar {
width: 0;
height: 0;
display: none;
}
}
.micro-temp-modal-footer {
padding: 14px 21px;
border-top: 1px solid #e2e8f0;
margin-top: 0;
}
}
/* 原型 .reg-modal-section */
.ep-modal-section {

View File

@ -81,7 +81,7 @@ const SpotCheckDetailModal = ({ open, record, onCancel }) => {
open={open}
onCancel={onCancel}
width={980}
destroyOnClose
destroyOnHidden
className="redb-modal"
footer={
<Space>

View File

@ -1073,7 +1073,7 @@ const EvalReportDatabase = (props) => {
open={aiVisible}
onCancel={() => setAiVisible(false)}
width={980}
destroyOnClose
destroyOnHidden
className="redb-modal"
footer={
<Space>
@ -1149,7 +1149,7 @@ const EvalReportDatabase = (props) => {
okText="生成文件"
cancelText="关闭"
width={720}
destroyOnClose
destroyOnHidden
className="redb-modal"
>
<ModalSection
@ -1211,7 +1211,7 @@ const EvalReportDatabase = (props) => {
okText="确认执行"
cancelText="关闭"
width={720}
destroyOnClose
destroyOnHidden
className="redb-modal"
>
<ModalSection
@ -1265,7 +1265,7 @@ const EvalReportDatabase = (props) => {
open={spotcheckVisible}
onCancel={() => setSpotcheckVisible(false)}
width={980}
destroyOnClose
destroyOnHidden
className="redb-modal"
footer={
<Space>
@ -1306,7 +1306,7 @@ const EvalReportDatabase = (props) => {
confirmLoading={regulatorSpotcheckStartLoading}
okText="提交抽查"
width={640}
destroyOnClose
destroyOnHidden
className="redb-modal"
>
<Form
@ -1372,7 +1372,7 @@ const EvalReportDatabase = (props) => {
confirmLoading={regulatorSpotcheckReviewLoading}
okText="提交复核结果"
width={520}
destroyOnClose
destroyOnHidden
className="redb-modal"
>
{reviewRecord && (
@ -1554,7 +1554,7 @@ const EvalReportDatabase = (props) => {
width: 90,
render: (_, record) => (
<Button
type="primary"
type="link"
size="small"
onClick={() => handleViewSpotDetail(record)}
>

View File

@ -10,8 +10,10 @@ import {
ConfigProvider,
message,
Upload,
Tag,
} from "antd";
import { UploadOutlined } from "@ant-design/icons";
import TableAction from "@cqsjjb/jjb-react-admin-component/TableAction";
import PageLayout from "@cqsjjb/jjb-react-admin-component/PageLayout";
import SearchForm from "~/components/SearchForm";
import ControlWrapper from "@cqsjjb/jjb-react-admin-component/ControlWrapper";
@ -572,12 +574,12 @@ const InspectionNotice = (props) => {
{
title: "来源",
dataIndex: "sourceTypeName",
width: 140,
width: 180,
render: (_, record) => (
<div>
<div>{record.sourceTypeName || "-"}</div>
{record.sourceRefNo ? (
<span className="insp-source-pill">{record.sourceRefNo}</span>
<Tag >{record.sourceRefNo}</Tag>
) : null}
</div>
),
@ -614,64 +616,46 @@ const InspectionNotice = (props) => {
title: "操作",
key: "action",
fixed: "right",
width: 240,
width: 200,
render: (_, record) => {
const code = record.statusCode;
const processViewBtn =
record.confirmFlag === 1 ? (
<Button size="small" onClick={() => openProcessView(record)}>
处理查看
</Button>
<a onClick={() => openProcessView(record)}>处理查看</a>
) : null;
if (code === 0) {
return (
<span className="insp-actions">
<Button type="primary" size="small" onClick={() => openCreate(record)}>
编辑
</Button>
<Button size="small" onClick={() => handleIssueRow(record)}>
下发
</Button>
<TableAction>
<a onClick={() => openCreate(record)}>编辑</a>
<a onClick={() => handleIssueRow(record)}>下发</a>
{processViewBtn}
</span>
</TableAction>
);
}
if (code === 1) {
return (
<span className="insp-actions">
<Button type="primary" size="small" onClick={() => openDetail(record)}>
查看
</Button>
<Button size="small" onClick={() => handleUrge(record)}>
提醒
</Button>
<TableAction>
<a onClick={() => openDetail(record)}>查看</a>
<a onClick={() => handleUrge(record)}>提醒</a>
{processViewBtn}
</span>
</TableAction>
);
}
if (code === 2 || code === 3) {
return (
<span className="insp-actions">
<Button type="primary" size="small" onClick={() => openDetail(record)}>
查看
</Button>
<Button size="small" onClick={() => openResult(record)}>
登记结果
</Button>
<TableAction>
<a onClick={() => openDetail(record)}>查看</a>
<a onClick={() => openResult(record)}>登记结果</a>
{processViewBtn}
</span>
</TableAction>
);
}
return (
<span className="insp-actions">
<Button type="primary" size="small" onClick={() => openDetail(record)}>
查看
</Button>
<Button size="small" onClick={() => handleDownloadRecord(record)}>
下载记录
</Button>
<TableAction>
<a onClick={() => openDetail(record)}>查看</a>
<a onClick={() => handleDownloadRecord(record)}>下载记录</a>
{processViewBtn}
</span>
</TableAction>
);
},
},
@ -820,7 +804,7 @@ const InspectionNotice = (props) => {
open={createOpen}
onCancel={() => setCreateOpen(false)}
width={820}
destroyOnClose
destroyOnHidden
className="insp-modal"
footer={
<Button
@ -901,7 +885,7 @@ const InspectionNotice = (props) => {
open={detailOpen}
onCancel={() => setDetailOpen(false)}
width={980}
destroyOnClose
destroyOnHidden
className="insp-modal"
footer={
<Button
@ -972,7 +956,7 @@ const InspectionNotice = (props) => {
open={processViewOpen}
onCancel={() => setProcessViewOpen(false)}
width={820}
destroyOnClose
destroyOnHidden
className="insp-modal"
footer={<Button onClick={() => setProcessViewOpen(false)}>关闭</Button>}
>
@ -1047,7 +1031,7 @@ const InspectionNotice = (props) => {
open={resultOpen}
onCancel={() => setResultOpen(false)}
width={820}
destroyOnClose
destroyOnHidden
className="insp-modal"
footer={
<Button
@ -1120,7 +1104,7 @@ const InspectionNotice = (props) => {
open={exportOpen}
onCancel={() => setExportOpen(false)}
width={560}
destroyOnClose
destroyOnHidden
className="insp-modal"
footer={
<Button type="primary" onClick={handleExport}>

View File

@ -74,39 +74,7 @@
border: 1px solid #bfdbfe;
}
.insp-modal {
.micro-temp-modal-content {
border-radius: 12px;
overflow: hidden;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.15);
}
.micro-temp-modal-header {
padding: 14px 21px;
border-bottom: 1px solid #e2e8f0;
margin-bottom: 0;
}
.micro-temp-modal-body {
padding: 21px;
max-height: 72vh;
overflow-y: auto;
scrollbar-width: none;
-ms-overflow-style: none;
&::-webkit-scrollbar {
width: 0;
height: 0;
display: none;
}
}
.micro-temp-modal-footer {
padding: 14px 21px;
border-top: 1px solid #e2e8f0;
margin-top: 0;
}
}
.insp-modal-section {
border: 1px solid #e2e8f0;

View File

@ -46,6 +46,7 @@ export default class Container extends React.Component {
theme={{
token: this.token,
algorithm: this.algorithm,
}}
locale={language}
prefixCls={window.process.env.app.antd["ant-prefix"]}

View File

@ -12,6 +12,7 @@
max-height: 66vh;
overflow-y: auto;
overflow-x: hidden;
padding-right: 2px;
scrollbar-width: thin;
}
body {