style
parent
81ddf115ff
commit
d74349355a
|
|
@ -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;
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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}>
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -1,3 +0,0 @@
|
|||
.epm-stat-row {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
|
@ -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>
|
||||
]}
|
||||
/>
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -1,3 +1 @@
|
|||
.sm-stat-row {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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 内外双边框 */
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -1,14 +1,4 @@
|
|||
.pp {
|
||||
// 统计卡片区域
|
||||
&-stat-row {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
&-stat-suffix {
|
||||
font-size: 14px;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
// 进度圆点容器
|
||||
&-progress-dots {
|
||||
display: flex;
|
||||
|
|
|
|||
|
|
@ -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 && (
|
||||
|
|
|
|||
|
|
@ -262,6 +262,7 @@ const ProjectFlow = (props) => {
|
|||
activeKey={activeKey}
|
||||
onChange={handleTabChange}
|
||||
items={tabItems}
|
||||
className="pf-tabs"
|
||||
destroyOnHidden
|
||||
/>
|
||||
{visible && (
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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="项目编号">
|
||||
|
|
|
|||
|
|
@ -1,13 +1,4 @@
|
|||
.rw {
|
||||
&-stat-row {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
&-stat-suffix {
|
||||
font-size: 14px;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
&-note {
|
||||
padding: 8px 12px;
|
||||
background: #f6f8fa;
|
||||
|
|
|
|||
|
|
@ -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"}>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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 === "本地单位"
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@ const SpotCheckDetailModal = ({ open, record, onCancel }) => {
|
|||
open={open}
|
||||
onCancel={onCancel}
|
||||
width={980}
|
||||
destroyOnClose
|
||||
destroyOnHidden
|
||||
className="redb-modal"
|
||||
footer={
|
||||
<Space>
|
||||
|
|
|
|||
|
|
@ -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)}
|
||||
>
|
||||
|
|
|
|||
|
|
@ -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}>
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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"]}
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@
|
|||
max-height: 66vh;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
padding-right: 2px;
|
||||
scrollbar-width: thin;
|
||||
}
|
||||
body {
|
||||
|
|
|
|||
Loading…
Reference in New Issue