1
This commit is contained in:
+24
-48
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user