This commit is contained in:
2026-07-12 00:53:38 +08:00
parent d254377951
commit 25ae6f610c
14 changed files with 1208 additions and 835 deletions
+24 -48
View File
@@ -1,21 +1,26 @@
/**
* 项目级页面渲染模块。
* 展示单个项目的上线状态、指标启用数量、准确数量和预警指标,并列出项目下所有治理指标。
* 展示单个项目的达标状态、指标使用数量、准确数量和预警指标,并列出项目下所有治理指标。
*/
function renderProjectView() {
const enterprise = getEnterprise(state.enterpriseName);
const project = getProjectById(state.projectId);
const rows = buildIndicatorRows(project);
const enabledCount = rows.filter((row) => row.enabled).length;
const accurateCount = rows.filter((row) => row.enabled && !row.isWarning).length;
const warningIndicatorCount = rows.filter((row) => row.isWarning).length;
if (projectMonitoringState.loading) {
app.innerHTML = '<div class="empty-state">正在获取项目监控数据...</div>';
return;
}
if (projectMonitoringState.error || !projectMonitoringState.data) {
app.innerHTML = `<div class="empty-state">项目监控数据加载失败:${projectMonitoringState.error || "暂无数据"}</div>`;
return;
}
const data = projectMonitoringState.data;
const project = data.MetricProjectInfo || {};
const rows = Array.isArray(data.MetricDataAnalysises) ? data.MetricDataAnalysises : [];
app.innerHTML = `
<section class="metric-cards">
${miniMetric("项目上线状态", project.systemStatus, "", project.created ? "已创建项目档案并进入系统" : "未创建项目档案,需先完成上线")}
${miniMetric("指标使用数量", `${enabledCount}/${rows.length}`, "", "项目内治理指标动没动")}
${miniMetric("数据准确数量", `${accurateCount}/${rows.length}`, "", "数据准不准")}
${miniMetric("预警指标", warningIndicatorCount, "项", "")}
<section class="metric-cards project-metric-cards">
${miniMetric("达标状态", data.UsageState || "-", "", "")}
${miniMetric("指标使用数量", data.MetricUsageInfo || "-", "", "")}
${miniMetric("准确数量", data.MetricAccuracyInfo || "-", "", "")}
${miniMetric("预警指标", toSafeNumber(data.AbnormalNum), "项", "")}
</section>
<section class="project-layout">
@@ -26,11 +31,13 @@
</div>
</div>
<div class="field-list">
${fieldRow("所属企业", enterprise.name)}
${fieldRow("项目名称", project.name)}
${fieldRow("系统状态", project.systemStatus)}
${fieldRow("开工日期", project.startDate)}
${fieldRow("最近更新", project.lastUpdate)}
${fieldRow("所属企业", project.UnitName || state.enterpriseName)}
${fieldRow("项目名称", project.ProjectName || project.ProjectShortName || "-")}
${fieldRow("项目编号", project.ProjectCode || "-")}
${fieldRow("项目地址", project.ProjectAddress || "-")}
${fieldRow("项目状态", project.ProjectState || data.OnlineState || "-")}
${fieldRow("开工日期", formatApiDate(project.StartDate) || "-")}
${fieldRow("数据日期", formatApiDate(data.DataDate) || "-")}
</div>
</article>
@@ -45,34 +52,3 @@
</section>
`;
}
/**
* 统一弹窗渲染入口。
* state.drillView 决定展示集团上线统计、企业项目清单、指标项目穿透或指标趋势;
* 关闭弹窗时清空 body,避免旧内容残留到下一次打开。
*/
function renderDrillModal() {
if (!state.drillOpen) {
drillModal.hidden = true;
drillModalBody.innerHTML = "";
return;
}
const indicator = getSelectedIndicator();
drillModal.hidden = false;
if (state.drillView === "groupOnlineStats") {
drillModalTitle.textContent = "集团项目上线统计";
drillModalBody.innerHTML = renderGroupOnlineStatsModal();
return;
}
if (state.drillView === "enterpriseProjectList") {
drillModalTitle.textContent = `${state.enterpriseName} · 项目清单`;
drillModalBody.innerHTML = renderEnterpriseProjectListModal(state.drillListType);
return;
}
drillModalTitle.textContent = `${indicator.name} · 指标穿透分析`;
if (state.drillView === "project") {
drillModalBody.innerHTML = renderIndicatorProjectView();
return;
}
drillModalBody.innerHTML = renderIndicatorTrendView();
}