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 /doc
/docs /docs
/.trae/ /.trae/
/.qoder/
npm-debug.log* npm-debug.log*
yarn-debug.log* yarn-debug.log*
yarn-error.log* yarn-error.log*

View File

@ -25,11 +25,9 @@
"@cqsjjb/jjb-common-lib": "latest", "@cqsjjb/jjb-common-lib": "latest",
"@cqsjjb/jjb-dva-runtime": "latest", "@cqsjjb/jjb-dva-runtime": "latest",
"@cqsjjb/jjb-react-admin-component": "latest", "@cqsjjb/jjb-react-admin-component": "latest",
"@eigenpal/docx-editor-react": "^1.9.0",
"@rc-component/motion": "^1.0.0", "@rc-component/motion": "^1.0.0",
"@rc-component/util": "^1.11.1", "@rc-component/util": "^1.11.1",
"antd": "^5.29.2", "antd": "^5.29.2",
"china-division": "^2.7.0",
"dayjs": "^1.11.7", "dayjs": "^1.11.7",
"docxtemplater": "latest", "docxtemplater": "latest",
"echarts": "^6.1.0", "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; 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 = [ export const CAPABILITY_OPTIONS = [

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,4 +1,4 @@
.cockpit-page { .cockpit-page {
min-height: 100%; min-height: 100%;
background: #010817; background: #010817;
color: #d8eeff; color: #d8eeff;
@ -172,8 +172,8 @@
box-shadow: inset 0 0 14px rgba(46, 204, 255, .34); 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 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: 14px; font-family: Arial, sans-serif; } .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-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-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); } .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(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:nth-child(5) { grid-column: 1 / -1; }
.risk-item span { color: #e8f7ff; font-size: 14px; line-height: 1.3; } .risk-item span { color: #e8f7ff; font-size: 16px; line-height: 1.3; }
.risk-item b { color: #21caff; font-size: 17px; } .risk-item b { color: #21caff; font-size: 20px; }
.risk-pie { height: 118px; } .risk-pie { height: 118px; }
.kpi-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; height: 58px; } .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); 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::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 p { margin: 0 0 6px; text-align: center; color: #d6f7ff; font-weight: 700; font-size: 16px; }
.kpi-card strong { font-size: 22px; color: #fff; letter-spacing: 1px; } .kpi-card strong { font-size: 20px; color: #fff; letter-spacing: 1px; }
.kpi-card span { float: right; margin-top: 7px; color: #d9ebff; font-size: 14px; } .kpi-card span { float: right; margin-top: 7px; color: #d9ebff; font-size: 16px; }
.kpi-card b { color: #fff; } .kpi-card b { color: #fff; }
.map-chart { position: absolute; inset: 0 0 0; } .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-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 { 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 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 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: 15px; } .todo-item b { color: #13c8ff; font-size: 20px; }
.period-tabs { position: absolute; left: 14px; top: 42px; display: flex; z-index: 2; } .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 { 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; } .period-tabs span + span { border-left: none; }
@ -251,8 +251,8 @@
.review-stats { display: grid; grid-template-columns: 1fr 1fr; gap: 11px 14px; } .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 { 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 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 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: 15px; } .review-stat b { color: #18c9ff; font-size: 20px; }
.review-stat b.danger { color: #ff3e53; } .review-stat b.danger { color: #ff3e53; }
.review-pie { height: 144px; } .review-pie { height: 144px; }

View File

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

View File

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

View File

@ -2,14 +2,47 @@
min-width: 0; 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 { .redb-summary-strip {
display: flex; display: flex;
align-items: center; align-items: center;
flex-wrap: wrap; flex-wrap: wrap;
gap: 28px; gap: 28px;
padding: 9.1px 14px; padding: 9.1px 14px;
margin-bottom: 11.2px;
border: 1px solid #93c5fd; border: 1px solid #93c5fd;
background: #eff8ff; background: #eff8ff;
border-radius: 4px; border-radius: 4px;
@ -179,8 +212,8 @@
} }
@media (max-width: 768px) { @media (max-width: 768px) {
.redb-summary-strip { .redb-summary-cards {
gap: 11.2px 16.8px; grid-template-columns: 1fr;
} }
.redb-form-grid { .redb-form-grid {

View File

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

View File

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