diff --git a/README.md b/README.md index e69de29..c4735c7 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,47 @@ +# Front - OPS 前端 + +`front` 是 OPS 平台的统一前端入口,基于 Vue 3、Vite、Arco Design Vue、Pinia 和 Vue Router。页面以动态菜单为主,RBAC 菜单接口不可用时使用本地菜单数据兜底。 + +## 当前代码入口 + +| 类型 | 路径 | +| --- | --- | +| 应用入口 | `front/src/main.ts` | +| 路由入口 | `front/src/router/index.ts` | +| 静态路由 | `front/src/router/routes/modules/` | +| 动态菜单转换 | `front/src/router/menu-data.ts` | +| 本地菜单兜底 | `front/src/router/local-menu-items.ts`、`front/src/router/local-menu-flat.ts` | +| 页面目录 | `front/src/views/` | +| API 模块 | `front/src/api/module/` | +| 构建配置 | `front/config/` | + +## 主要页面域 + +| 页面域 | 目录 | +| --- | --- | +| 首页与概览 | `front/src/views/home`、`front/src/views/ops/pages/overview` | +| 数据中心与资源 | `front/src/views/ops/pages/dc`、`datacenter`、`resource-context` | +| 告警与治理 | `front/src/views/ops/pages/alert`、`governance` | +| 工单闭环 | `front/src/views/ops/pages/feedback` | +| 知识库 | `front/src/views/ops/pages/kb` | +| 报表与自动化 | `front/src/views/ops/pages/report`、`automation` | +| 业务系统与拓扑 | `front/src/views/ops/pages/business-system`、`business-topology` | +| 大屏 | `front/src/views/ops/pages/big-screen`、`front/src/views/visualization` | +| 日志管理 | `front/src/views/ops/pages/log-mgmt` | +| 系统设置 | `front/src/views/ops/pages/system-settings` | + +## 常用命令 + +```powershell +cd D:\work\ops\front +pnpm.cmd install +pnpm.cmd dev +pnpm.cmd build +``` + +## 相关文档 + +- `front/PAGES_README.md`:页面清单和路由说明。 +- `front/QUICK_START.md`:本地启动说明。 +- `front/docs/`:页面设计、适配验收和部分接口对接文档。 +- `docs/模块文档索引.md`:全工作区模块边界与文档入口。 diff --git a/src/router/local-menu-flat.ts b/src/router/local-menu-flat.ts index ccf0870..c90623f 100644 --- a/src/router/local-menu-flat.ts +++ b/src/router/local-menu-flat.ts @@ -45,7 +45,7 @@ export const localMenuFlatItems: MenuItem[] = [ type: 1, sort_key: 3, is_web_page: true, - web_url: 'https://ops.apinb.com/view/#/project/items', + web_url: 'https://ops2.apinb.com/view/#/project/items', created_at: '2025-12-26T13:23:51.644296+08:00', }, { @@ -60,7 +60,7 @@ export const localMenuFlatItems: MenuItem[] = [ type: 1, sort_key: 4, is_web_page: true, - web_url: 'https://ops.apinb.com/view/#/project/management', + web_url: 'https://ops2.apinb.com/view/#/project/management', created_at: '2026-01-25T10:44:15.33024+08:00', }, { diff --git a/src/router/local-menu-items.ts b/src/router/local-menu-items.ts index 41ac35a..b0a99c8 100644 --- a/src/router/local-menu-items.ts +++ b/src/router/local-menu-items.ts @@ -78,7 +78,7 @@ export const localMenuItems: MenuItem[] = [ type: 1, sort_key: 2, is_web_page: true, - web_url: 'https://ops.apinb.com/view/#/project/items', + web_url: 'https://ops2.apinb.com/view/#/project/items', created_at: '2025-12-26T13:23:51.644296+08:00', children: [], }, @@ -94,7 +94,7 @@ export const localMenuItems: MenuItem[] = [ type: 1, sort_key: 2, is_web_page: true, - web_url: 'https://ops.apinb.com/view/#/project/management', + web_url: 'https://ops2.apinb.com/view/#/project/management', created_at: '2026-01-25T10:44:15.33024+08:00', children: [], }, diff --git a/src/views/ops/pages/report/statistics/content.ts b/src/views/ops/pages/report/statistics/content.ts new file mode 100644 index 0000000..e8eaae8 --- /dev/null +++ b/src/views/ops/pages/report/statistics/content.ts @@ -0,0 +1,54 @@ +export type StatisticsReportOutputMode = 'scalar' | 'timeseries' | '' + +export interface StatisticsReportViewContent { + outputMode: StatisticsReportOutputMode + scalarRows: Record[] + seriesRows: Record[] + hasContent: boolean +} + +const toRows = (value: unknown): Record[] => { + if (!Array.isArray(value)) return [] + return value.filter((item): item is Record => item !== null && typeof item === 'object' && !Array.isArray(item)) +} + +const normalizeOutputMode = (value: unknown): StatisticsReportOutputMode => { + if (value === 'scalar' || value === 'timeseries') return value + return '' +} + +/** 将后端统计报表 payload 归一化为弹窗可渲染的数据结构。 */ +export const normalizeStatisticsReportContent = (content: Record | null | undefined): StatisticsReportViewContent => { + if (!content) { + return { + outputMode: '', + scalarRows: [], + seriesRows: [], + hasContent: false, + } + } + + const scalarRows = toRows(content.rows) + const legacyScalarRows = + content.scalars && typeof content.scalars === 'object' && !Array.isArray(content.scalars) ? [content.scalars] : [] + const seriesRows = toRows(content.series) + let outputMode = normalizeOutputMode(content.output_mode || content.params?.output_mode) + + if (!outputMode) { + if (seriesRows.length > 0) { + outputMode = 'timeseries' + } else if (scalarRows.length > 0 || legacyScalarRows.length > 0) { + outputMode = 'scalar' + } + } + + const normalizedScalarRows = scalarRows.length > 0 ? scalarRows : legacyScalarRows + const hasContent = outputMode === 'timeseries' ? seriesRows.length > 0 : normalizedScalarRows.length > 0 + + return { + outputMode, + scalarRows: normalizedScalarRows, + seriesRows, + hasContent, + } +} diff --git a/src/views/ops/pages/report/statistics/index.vue b/src/views/ops/pages/report/statistics/index.vue index 4e3e51f..245ebd1 100644 --- a/src/views/ops/pages/report/statistics/index.vue +++ b/src/views/ops/pages/report/statistics/index.vue @@ -215,22 +215,23 @@
-
+
-