/** * 企业级页面渲染模块。 * 负责企业总览、企业指标分析、项目图表和项目清单弹窗,数据来自企业监控接口。 */ function renderEnterpriseView() { const enterprise = getEnterprise(state.enterpriseName); const summary = getProjectMasterSummary(); const indicators = getWarningIndicators(); const analysisIndicators = projectMasterDataState.metricDatas.length ? projectMasterDataState.metricDatas : indicators; const projects = (projectMasterDataState.projectAnalysises || []).map((item) => ({ id: item.projectId, unitId: item.unitId, unit: enterprise.name, name: item.name, created: item.isOnline, usageRate: item.usageRate, accuracyRate: item.accuracyRate, warningCount: item.usageRate < 80 ? 1 : 0, systemStatus: item.isOnline ? "已上线" : "未上线", lastUpdate: summary.dataDate || "", owner: "-", risk: item.usageRate < 65 ? "高" : item.usageRate < 80 ? "中" : "低" })); const enterpriseOnlineRate = summary.onlineRate; const belowStandardProjects = summary.failProjectNum; if (projectMasterDataState.loading) { app.innerHTML = '
正在获取企业监控数据...
'; return; } if (!projects.length && projectMasterDataState.error) { app.innerHTML = `

${enterprise.name} · ${dimLabel()}看板

${projectMasterDataState.error}
企业监控接口数据加载失败。
`; return; } app.innerHTML = `
${miniMetric("项目上线率", summary.proInfoText, "", `上线率 ${fmtFixedPercent(enterpriseOnlineRate, 2)}`, "group-online-stats")} ${miniMetric("预立项项目数", summary.preProjectTotal, "个", "点击查看项目上线统计", "group-online-stats")} ${miniMetric("待建项目数", summary.pendingTotal, "个", "点击查看项目上线统计", "group-online-stats")} ${miniMetric("未达标项目数", belowStandardProjects, "个", "指标使用率低于 80% 的项目", "below-standard-projects")} ${miniMetric("项目指标使用率", fmtPercent(summary.usageRate), "", "指标使用率低于 80% 的项目计入未达标项目")} ${miniMetric("项目指标准确率", fmtPercent(summary.accuracyRate), "", "")}
${renderFocusIndicators(indicators.slice(0, 8), 0, { highlightHigh: false })}

企业三率趋势曲线

近 7 日${enterprise.name}上线率、使用率、准确率变化。
上线 使用 准确
${renderTrendChart({ date: projectMasterDataState.trendCurve?.Date || [], online: projectMasterDataState.trendCurve?.OnlineRate || [], usage: projectMasterDataState.trendCurve?.UsageRate || [], accuracy: projectMasterDataState.trendCurve?.AccuracyRate || [] }, 1840, 112)}

${enterprise.name} · 项目分析

项目级不统计上线率,底部圆点表示是否上线;点击项目下钻到字段追踪。
使用率 准确率 已上线
${renderProjectRateChart(projects, { height: 210 })}
企业层用于回答:本单位哪些项目未上线、哪些项目上线后未使用指标、哪些项目数据连续未更新。

指标分析

按${enterprise.name}指标预警项目数、使用率和数据状态展示责任短板。
${renderEnterpriseIndicatorAnalysis(analysisIndicators)}
`; } /** * 企业页顶部小指标卡。 * action 不为空时会写入 data-action,事件代理据此打开项目清单或未上线项目清单弹窗。 */ function miniMetric(label, value, unit, desc, action = "") { return `
${label}
${value}${unit}
${desc}
`; } /** * 企业项目风险表。 * 每行带 data-project,点击后切换到项目明细页;表格主要用于从企业层快速定位异常项目。 */ function renderProjectTable(projectRiskList) { return `
${projectRiskList.map(({ project }) => ` `).join("")}
项目名称 是否上线 使用率 准确率 预警项 最近更新 风险
${project.name} ${project.created ? '已上线' : '未上线'} ${fmtPercent(project.usageRate)} ${fmtPercent(project.accuracyRate)} ${project.warningCount} ${project.lastUpdate} ${riskPill(project.risk)}
`; } /** * 企业项目清单弹窗。 * type=offline 时只展示未建档/未上线项目;其他情况展示当前维度下所有生成项目。 */ function renderEnterpriseProjectListModal(type) { const enterprise = getEnterprise(state.enterpriseName); const projects = (projectMasterDataState.projectAnalysises || []).map((item) => ({ id: item.projectId, unitId: item.unitId, name: item.name, created: item.isOnline, usageRate: item.usageRate, accuracyRate: item.accuracyRate, warningCount: item.usageRate < 80 ? 1 : 0, lastUpdate: getProjectMasterSummary().dataDate || "-", owner: "-", risk: item.usageRate < 65 ? "高" : item.usageRate < 80 ? "中" : "低" })); const rows = type === "offline" ? projects.filter((project) => !project.created) : projects; const title = type === "offline" ? "未上线项目清单" : "所有项目清单"; const emptyText = type === "offline" ? "当前企业暂无未上线项目。" : "当前企业暂无项目。"; if (!rows.length) { return `

${enterprise.name} · ${title}

${emptyText}
`; } return `

${enterprise.name} · ${title}

点击项目行进入项目级看板。
${rows.map((project) => ` `).join("")}
项目名称 是否上线 使用率 准确率 预警项 最近更新 责任人 风险
${project.name} ${project.created ? '已上线' : '未上线'} ${fmtPercent(project.usageRate)} ${fmtPercent(project.accuracyRate)} ${project.warningCount} ${project.lastUpdate} ${project.owner} ${riskPill(project.risk)}
`; }