diff --git a/components.d.ts b/components.d.ts index 4db8f92..06a2b1e 100644 --- a/components.d.ts +++ b/components.d.ts @@ -55,6 +55,7 @@ declare module 'vue' { ElRadioButton: typeof import('element-plus/es')['ElRadioButton'] ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup'] ElRow: typeof import('element-plus/es')['ElRow'] + ElSegmented: typeof import('element-plus/es')['ElSegmented'] ElSelect: typeof import('element-plus/es')['ElSelect'] ElSkeleton: typeof import('element-plus/es')['ElSkeleton'] ElSubMenu: typeof import('element-plus/es')['ElSubMenu'] diff --git a/src/api/statistics/index.js b/src/api/statistics/index.js index e7e96c6..9ec2ce1 100644 --- a/src/api/statistics/index.js +++ b/src/api/statistics/index.js @@ -659,3 +659,31 @@ export function adminGetTodayCertifiedEnterprises(params = {}) { params }) } + +// ================ 管理员安全可视化接口 ================ + +/** + * 获取可疑IP列表 + * @param {Object} params - 查询参数 + * @returns {Promise} + */ +export function adminGetSuspiciousIPList(params = {}) { + return request({ + url: '/admin/security/suspicious-ip/list', + method: 'get', + params + }) +} + +/** + * 获取可疑IP地球请求流 + * @param {Object} params - 查询参数 + * @returns {Promise} + */ +export function adminGetSuspiciousIPGeoStream(params = {}) { + return request({ + url: '/admin/security/suspicious-ip/geo-stream', + method: 'get', + params + }) +} diff --git a/src/pages/admin/statistics/SystemStatisticsPage.vue b/src/pages/admin/statistics/SystemStatisticsPage.vue index 8b6f043..0ba9c26 100644 --- a/src/pages/admin/statistics/SystemStatisticsPage.vue +++ b/src/pages/admin/statistics/SystemStatisticsPage.vue @@ -1,5 +1,17 @@ @@ -480,6 +493,7 @@ import { adminGetUserCallRanking, adminGetUserDomainStatistics } from '@/api/statistics' +import RequestFlowGlobe from '@/pages/admin/statistics/components/RequestFlowGlobe.vue' import DanmakuBar from '@/components/common/DanmakuBar.vue' import { Check, Loading, Money, Refresh, TrendCharts, User } from '@element-plus/icons-vue' import * as echarts from 'echarts' @@ -488,6 +502,7 @@ import { nextTick, onMounted, onUnmounted, ref } from 'vue' import { useRouter } from 'vue-router' const router = useRouter() +const viewMode = ref('dashboard') // 响应式数据 const loading = ref(false) const error = ref('') diff --git a/src/pages/admin/statistics/components/RequestFlowGlobe.vue b/src/pages/admin/statistics/components/RequestFlowGlobe.vue new file mode 100644 index 0000000..9e33de8 --- /dev/null +++ b/src/pages/admin/statistics/components/RequestFlowGlobe.vue @@ -0,0 +1,337 @@ + + + + + +