完善权限监控与安全中心

This commit is contained in:
Cheng Zhou
2026-06-17 17:21:48 +08:00
parent 1886765db8
commit 061792c73f
15 changed files with 2837 additions and 160 deletions
@@ -48,6 +48,7 @@ describe("PermissionMonitoring.vue", () => {
PermissionTrendCharts: true,
PermissionAccessLogs: true,
PermissionIpLocations: true,
SecurityCenter: true,
},
},
});
@@ -64,6 +65,7 @@ describe("PermissionMonitoring.vue", () => {
PermissionTrendCharts: true,
PermissionAccessLogs: true,
PermissionIpLocations: true,
SecurityCenter: true,
},
},
});
@@ -78,13 +80,38 @@ describe("PermissionMonitoring.vue", () => {
expect(source).toContain(':show-security-log="props.isAdmin"');
});
it("uses a full-height source-analysis tab without forcing scroll on other tabs", () => {
const source = readFileSync(resolve(__dirname, "./PermissionMonitoring.vue"), "utf8");
expect(source).toContain(":class=\"{ 'is-source-tab': activeTab === 'ip-locations' }\"");
expect(source).toContain('class="ip-locations-pane"');
expect(source).toContain(".permission-monitoring.is-source-tab .soybean-monitoring-tabs :deep(.el-tabs__content)");
expect(source).toContain("overflow: hidden");
expect(source).toContain(".soybean-monitoring-tabs :deep(.el-tabs__content)");
expect(source).toContain("overflow: auto");
});
it("resizes the source-analysis chart when its tab becomes active", () => {
const source = readFileSync(resolve(__dirname, "./PermissionMonitoring.vue"), "utf8");
expect(source).toContain('import { ref, computed, h, nextTick, onMounted } from "vue"');
expect(source).toContain("type IpLocationsExpose");
expect(source).toContain("resize: () => void | Promise<void>");
expect(source).toContain('if (tab === "ip-locations")');
expect(source).toContain("await nextTick()");
expect(source).toContain("await ipLocationsRef.value?.resize()");
});
it("uses system monitoring tab names and operation-oriented overview copy", () => {
const source = readFileSync(resolve(__dirname, "./PermissionMonitoring.vue"), "utf8");
expect(source).toContain('label="运行概览"');
expect(source).toContain('label="安全中心"');
expect(source).toContain('label="性能趋势"');
expect(source).toContain('label="访问审计"');
expect(source).toContain('label="来源分析"');
expect(source).toContain('<SecurityCenter v-if="props.isAdmin"');
expect(source).toContain('name="security"');
expect(source).toContain('label: "今日监测事件"');
expect(source).toContain('label: "每分钟事件"');
expect(source).toContain('label: "今日通过率"');