diff --git a/web/delivery-platform-ui/src/router/index.js b/web/delivery-platform-ui/src/router/index.js
index ac5be2d..f5b1722 100644
--- a/web/delivery-platform-ui/src/router/index.js
+++ b/web/delivery-platform-ui/src/router/index.js
@@ -140,6 +140,24 @@ const routes = [
component: () => import("../views/NotificationSettingsView.vue"),
meta: { roles: ["SYS_ADMIN"], title: "通知设置" },
},
+ {
+ path: "reports/contract-sn",
+ name: "contract-sn-report",
+ component: () => import("../views/ContractSnReportView.vue"),
+ meta: { roles: ["SYS_ADMIN", "DEVELOPER"], title: "合同 SN 报表" },
+ },
+ {
+ path: "reports/callback-stats",
+ name: "callback-stats",
+ component: () => import("../views/CallbackStatsView.vue"),
+ meta: { roles: ["SYS_ADMIN", "OPS"], title: "Callback 统计" },
+ },
+ {
+ path: "reports/project-health",
+ name: "project-health",
+ component: () => import("../views/ProjectHealthView.vue"),
+ meta: { roles: ["SYS_ADMIN"], title: "项目健康度" },
+ },
],
},
{ path: "/403", name: "forbidden", component: () => import("../views/ForbiddenView.vue") },
diff --git a/web/delivery-platform-ui/src/views/CallbackStatsView.vue b/web/delivery-platform-ui/src/views/CallbackStatsView.vue
new file mode 100644
index 0000000..b5ee93d
--- /dev/null
+++ b/web/delivery-platform-ui/src/views/CallbackStatsView.vue
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/delivery-platform-ui/src/views/ContractSnReportView.vue b/web/delivery-platform-ui/src/views/ContractSnReportView.vue
new file mode 100644
index 0000000..1c847ae
--- /dev/null
+++ b/web/delivery-platform-ui/src/views/ContractSnReportView.vue
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ row.gapCount ?? 0 }}
+
+
+
+
+ {{ (row.gapCount ?? 0) > 0 ? '缺额' : '正常' }}
+
+
+
+
+
+
+
+
+
diff --git a/web/delivery-platform-ui/src/views/ProjectHealthView.vue b/web/delivery-platform-ui/src/views/ProjectHealthView.vue
new file mode 100644
index 0000000..25ce17e
--- /dev/null
+++ b/web/delivery-platform-ui/src/views/ProjectHealthView.vue
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+ {{ formatPercent(row.deliveryRate) }}
+
+
+ {{ formatPercent(row.snIssuedRate) }}
+
+
+ {{ formatPercent(row.activationRate) }}
+
+
+
+ {{ healthLabel(row.healthLevel) }}
+
+
+
+
+
+
+
+
+