dev-tmp1
tangjie 2026-08-17 14:43:35 +08:00
parent 8e35c0f289
commit 81ddf115ff
17 changed files with 89 additions and 72 deletions

1
.gitignore vendored
View File

@ -10,6 +10,7 @@
/doc
/docs
/.trae/
/.qoder/
npm-debug.log*
yarn-debug.log*
yarn-error.log*

View File

@ -25,11 +25,9 @@
"@cqsjjb/jjb-common-lib": "latest",
"@cqsjjb/jjb-dva-runtime": "latest",
"@cqsjjb/jjb-react-admin-component": "latest",
"@eigenpal/docx-editor-react": "^1.9.0",
"@rc-component/motion": "^1.0.0",
"@rc-component/util": "^1.11.1",
"antd": "^5.29.2",
"china-division": "^2.7.0",
"dayjs": "^1.11.7",
"docxtemplater": "latest",
"echarts": "^6.1.0",

View File

@ -1,4 +1,4 @@
import pcaCode from "china-division/dist/pca-code.json";
/**
* 全局常量定义
*/
@ -563,21 +563,7 @@ export const ROLE_DEFINITIONS_MAP = ROLE_DEFINITIONS.reduce((acc, cur) => {
return acc;
}, {});
export const NATIONAL_COUNTIES = (() => {
const result = [];
pcaCode.forEach((province) => {
province.children?.forEach((city) => {
city.children?.forEach((county) => {
result.push({
label: `${province.name}/${city.name}/${county.name}`,
value: county.code,
name: county.name,
});
});
});
});
return result;
})();
/** 专业能力枚举 */
export const CAPABILITY_OPTIONS = [

View File

@ -66,12 +66,12 @@
}
.inst-metric-card .label {
font-size: 14px;
font-size: 16px;
color: #64748b;
}
.inst-metric-card .value {
font-size: 24px;
font-size: 20px;
font-weight: 700;
color: #0f172a;
margin: 4px 0;
@ -91,7 +91,7 @@
}
.inst-metric-card .hint {
font-size: 14px;
font-size: 16px;
color: #94a3b8;
}

View File

@ -29,19 +29,19 @@
.stat-info {
.stat-label {
font-size: 14px;
font-size: 16px;
color: #64748b;
}
.stat-value {
font-size: 24.5px;
font-size: 20px;
font-weight: 700;
line-height: 1.15;
margin-top: 6px;
}
.stat-hint {
font-size: 14px;
font-size: 16px;
color: #64748b;
margin-top: 4px;
}

View File

@ -18,11 +18,12 @@
.stat-info {
.stat-label {
font-size: 16px;
color: #64748b;
}
.stat-value {
font-size: 28px;
font-size: 20px;
font-weight: 700;
line-height: 1.15;
margin-top: 6px;
@ -41,7 +42,7 @@
}
.stat-hint {
font-size: 14px;
font-size: 16px;
color: #64748b;
margin-top: 4px;
}

View File

@ -169,7 +169,6 @@ const ExpertVerification = (props) => {
<SearchForm
style={{ marginBottom: 24 }}
form={form}
defaultExpand
loading={qualReviewLoading}
formLine={[
<Form.Item key="filingUnitName" name="filingUnitName">

View File

@ -122,7 +122,6 @@ const QualChange = (props) => {
<SearchForm
style={{ marginBottom: 24 }}
form={form}
defaultExpand
loading={qualReviewLoading}
formLine={[
<Form.Item key="filingUnitName" name="filingUnitName">

View File

@ -124,7 +124,6 @@ const QualConfirm = (props) => {
<SearchForm
style={{ marginBottom: 24 }}
form={form}
defaultExpand
loading={qualReviewLoading}
formLine={[
<Form.Item key="filingUnitName" name="filingUnitName">

View File

@ -160,7 +160,6 @@ const QualReview = (props) => {
<SearchForm
style={{ marginBottom: 24 }}
form={form}
defaultExpand
loading={qualReviewLoading}
formLine={[
<Form.Item key="filingUnitName" name="filingUnitName">

View File

@ -76,7 +76,6 @@ function RegisteredOrgListPage(props) {
<SearchForm
form={searchForm}
loading={loading}
defaultExpand
formLine={[
<Form.Item key="filingUnitName" name="filingUnitName">
<ControlWrapper.Input label="单位名称" allowClear placeholder="关键字搜索" />

View File

@ -1,4 +1,4 @@
.cockpit-page {
.cockpit-page {
min-height: 100%;
background: #010817;
color: #d8eeff;
@ -172,8 +172,8 @@
box-shadow: inset 0 0 14px rgba(46, 204, 255, .34);
}
.life-stat p { margin: 0 0 3px; color: #cde9ff; font-size: 14px; white-space: normal; line-height: 1.1; overflow-wrap: anywhere; }
.life-stat strong { color: #20caff; font-size: 14px; font-family: Arial, sans-serif; }
.life-stat p { margin: 0 0 3px; color: #cde9ff; font-size: 16px; white-space: normal; line-height: 1.1; overflow-wrap: anywhere; }
.life-stat strong { color: #20caff; font-size: 20px; font-family: Arial, sans-serif; }
.progress-list { padding: 2px 8px 10px; border-top: 1px solid rgba(54, 142, 219, .18); }
.progress-row { height: 31px; display: grid; grid-template-columns: 122px 1fr 34px; align-items: center; gap: 8px; font-size: 14px; color: #e2f5ff; }
.progress-track { height: 9px; border-radius: 999px; background: rgba(5, 35, 83, .88); overflow: hidden; box-shadow: inset 0 0 9px rgba(5, 17, 44, .9); }
@ -195,8 +195,8 @@
}
.risk-item:nth-child(3), .risk-item:nth-child(4) { border-color: rgba(255, 207, 43, .45); background: linear-gradient(90deg, rgba(116, 89, 15, .54), rgba(6, 32, 73, .62)); }
.risk-item:nth-child(5) { grid-column: 1 / -1; }
.risk-item span { color: #e8f7ff; font-size: 14px; line-height: 1.3; }
.risk-item b { color: #21caff; font-size: 17px; }
.risk-item span { color: #e8f7ff; font-size: 16px; line-height: 1.3; }
.risk-item b { color: #21caff; font-size: 20px; }
.risk-pie { height: 118px; }
.kpi-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; height: 58px; }
@ -208,9 +208,9 @@
box-shadow: inset 0 0 20px rgba(42, 208, 255, .16), 0 0 10px rgba(0, 161, 255, .18);
}
.kpi-card::before { content: ""; position: absolute; top: -1px; left: 28px; width: 54px; height: 4px; background: repeating-linear-gradient(90deg, #2adfff 0 9px, transparent 9px 15px); }
.kpi-card p { margin: 0 0 6px; text-align: center; color: #d6f7ff; font-weight: 700; font-size: 14px; }
.kpi-card strong { font-size: 22px; color: #fff; letter-spacing: 1px; }
.kpi-card span { float: right; margin-top: 7px; color: #d9ebff; font-size: 14px; }
.kpi-card p { margin: 0 0 6px; text-align: center; color: #d6f7ff; font-weight: 700; font-size: 16px; }
.kpi-card strong { font-size: 20px; color: #fff; letter-spacing: 1px; }
.kpi-card span { float: right; margin-top: 7px; color: #d9ebff; font-size: 16px; }
.kpi-card b { color: #fff; }
.map-chart { position: absolute; inset: 0 0 0; }
@ -240,8 +240,8 @@
.todo-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px 10px; }
.todo-item { display: grid; grid-template-columns: 34px 1fr; grid-template-rows: 18px 18px; align-items: center; column-gap: 8px; }
.todo-item span { grid-row: 1 / 3; width: 32px; height: 32px; display: grid; place-items: center; border-radius: 50%; color: #fff; font-size: 16px; background: radial-gradient(circle, rgba(73, 198, 255, .5), rgba(7, 51, 112, .95)); border: 1px solid rgba(69, 204, 255, .64); box-shadow: inset 0 0 15px rgba(53, 202, 255, .3); }
.todo-item p { margin: 0; color: #d8edff; font-size: 14px; white-space: normal; line-height: 1.1; overflow-wrap: anywhere; }
.todo-item b { color: #13c8ff; font-size: 15px; }
.todo-item p { margin: 0; color: #d8edff; font-size: 16px; white-space: normal; line-height: 1.1; overflow-wrap: anywhere; }
.todo-item b { color: #13c8ff; font-size: 20px; }
.period-tabs { position: absolute; left: 14px; top: 42px; display: flex; z-index: 2; }
.period-tabs span { width: 34px; height: 19px; display: grid; place-items: center; color: #d8f2ff; border: 1px solid rgba(46, 159, 232, .48); background: rgba(7, 37, 88, .6); font-size: 14px; cursor: pointer; }
.period-tabs span + span { border-left: none; }
@ -251,8 +251,8 @@
.review-stats { display: grid; grid-template-columns: 1fr 1fr; gap: 11px 14px; }
.review-stat { display: flex; align-items: center; gap: 8px; min-width: 0; }
.review-stat span { width: 37px; height: 37px; display: grid; place-items: center; color: #20d3ff; font-size: 17px; border-radius: 50%; background: radial-gradient(circle, rgba(26, 188, 255, .35), rgba(5, 37, 93, .9)); border: 2px solid rgba(35, 210, 255, .65); }
.review-stat p { margin: 0; color: #e1f5ff; font-size: 14px; white-space: normal; line-height: 1.1; overflow-wrap: anywhere; }
.review-stat b { color: #18c9ff; font-size: 15px; }
.review-stat p { margin: 0; color: #e1f5ff; font-size: 16px; white-space: normal; line-height: 1.1; overflow-wrap: anywhere; }
.review-stat b { color: #18c9ff; font-size: 20px; }
.review-stat b.danger { color: #ff3e53; }
.review-pie { height: 144px; }

View File

@ -1,4 +1,4 @@
.supervision-dashboard-page {
.supervision-dashboard-page {
min-height: 100%;
background: #f4f4f4;
padding: 0;
@ -55,13 +55,13 @@
.overview-item p {
margin: 0 0 8px;
color: #8b8f99;
font-size: 14px;
font-size: 16px;
}
.overview-item strong {
display: block;
margin-bottom: 6px;
font-size: 21px;
font-size: 20px;
line-height: 24px;
color: #24272d;
font-weight: 700;
@ -71,7 +71,7 @@
display: flex;
gap: 14px;
color: #8b8f99;
font-size: 14px;
font-size: 16px;
}
.overview-item i {
@ -105,12 +105,12 @@
.todo-home-item p {
margin: 0 0 4px;
color: #8b8f99;
font-size: 14px;
font-size: 16px;
}
.todo-home-item strong {
color: #2d2f33;
font-size: 18px;
font-size: 20px;
line-height: 22px;
}
@ -154,7 +154,7 @@
.filing-item p {
margin: 0 0 3px;
color: #555;
font-size: 14px;
font-size: 16px;
font-weight: 600;
}

View File

@ -812,20 +812,26 @@ const EvalReportDatabase = (props) => {
<ConfigProvider theme={PROTO_THEME}>
<PageLayout title="安评报告数据库">
<div className="redb-page">
<div className="redb-summary-strip">
<span>
近三年报告
<strong>{statData.recentThreeYearCount ?? "-"}</strong>
</span>
<span>
{currentYear}年度
<strong>{statData.currentYearCount ?? "-"}</strong>
</span>
<div className="redb-summary-cards">
<div className="redb-summary-card">
<div className="label">近三年报告</div>
<div className="value">
<strong>{statData.recentThreeYearCount ?? "-"}</strong>
</div>
</div>
<div className="redb-summary-card">
<div className="label">{currentYear}年度</div>
<div className="value">
<strong>{statData.currentYearCount ?? "-"}</strong>
</div>
</div>
{statData.submittedTotalCount != null && (
<span>
已报送合计
<strong>{statData.submittedTotalCount}</strong>
</span>
<div className="redb-summary-card">
<div className="label">已报送合计</div>
<div className="value">
<strong>{statData.submittedTotalCount}</strong>
</div>
</div>
)}
</div>

View File

@ -2,14 +2,47 @@
min-width: 0;
}
/* 原型 .training-summary-strip */
/* 统计卡片标题16px / 数字20px */
.redb-summary-cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 11.2px;
margin-bottom: 11.2px;
}
.redb-summary-card {
border: 1px solid #93c5fd;
background: #eff8ff;
border-radius: 8px;
padding: 9.1px 14px;
display: flex;
flex-direction: column;
gap: 2.8px;
min-width: 0;
}
.redb-summary-card .label {
font-size: 16px;
color: #64748b;
}
.redb-summary-card .value {
font-size: 20px;
color: #0f172a;
}
.redb-summary-card .value strong {
color: #2563eb;
font-size: 20px;
}
/* AI 分析概览横向条(弹窗内使用) */
.redb-summary-strip {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 28px;
padding: 9.1px 14px;
margin-bottom: 11.2px;
border: 1px solid #93c5fd;
background: #eff8ff;
border-radius: 4px;
@ -179,8 +212,8 @@
}
@media (max-width: 768px) {
.redb-summary-strip {
gap: 11.2px 16.8px;
.redb-summary-cards {
grid-template-columns: 1fr;
}
.redb-form-grid {

View File

@ -559,7 +559,7 @@ const InspectionNotice = (props) => {
title: "告知编号",
dataIndex: "noticeNo",
width: 140,
render: (t) => <span className="insp-mono">{t || "-"}</span>,
},
{ title: "评价机构", dataIndex: "orgName", ellipsis: true, width: 200 },
{ title: "检查类型", dataIndex: "inspTypeName", width: 120 },

View File

@ -30,10 +30,7 @@
color: #64748b;
}
.insp-mono {
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
font-size: 14px;
}
.insp-loading {
text-align: center;