diff --git a/src/service/api/auth.ts b/src/service/api/auth.ts index 67734f0..e46bee5 100644 --- a/src/service/api/auth.ts +++ b/src/service/api/auth.ts @@ -202,6 +202,14 @@ export function updateBillRule(data: Api.Billing.BillRuleUpdate) { data }); } +/** 获取仪表盘概览数据 */ +export function getDashboardOverview() { + return request({ + url: '/system/dashboard/overview', + method: 'get' + }); +} + diff --git a/src/typings/api.d.ts b/src/typings/api.d.ts index 8bcfa0b..475b304 100644 --- a/src/typings/api.d.ts +++ b/src/typings/api.d.ts @@ -607,4 +607,45 @@ declare namespace Api { enable: boolean; } } + + interface DashboardOverview { + cloud: { + connected: boolean; + }; + sites: { + total: number; + countries: number; + connected: number; + disconnected: number; + }; + devices: { + gateways: { + connected: number; + disconnected: number; + }; + switches: { + connected: number; + disconnected: number; + }; + olts: { + connected: number; + disconnected: number; + }; + ap: { + connected: number; + disconnected: number; + isolated: number; + }; + }; + client: { + wiredUsers: number; + wirelessUsers: number; + wirelessGuests: number; + }; + alerts: number; + users: { + registered: number; + online: number; + }; + } } diff --git a/src/typings/auto-imports.d.ts b/src/typings/auto-imports.d.ts index dc8316c..05bd787 100644 --- a/src/typings/auto-imports.d.ts +++ b/src/typings/auto-imports.d.ts @@ -152,6 +152,7 @@ declare global { const getCacheRouteNames: typeof import('../store/modules/route/shared')['getCacheRouteNames'] const getCurrentInstance: typeof import('vue')['getCurrentInstance'] const getCurrentScope: typeof import('vue')['getCurrentScope'] + const getDashboardOverview: typeof import('../service/api/auth')['getDashboardOverview'] const getData: typeof import('../service/api/dictData')['getData'] const getDefaultHomeTab: typeof import('../store/modules/tab/shared')['getDefaultHomeTab'] const getDictDataType: typeof import('../service/api/dict')['getDictDataType'] diff --git a/src/typings/components.d.ts b/src/typings/components.d.ts index ba4e03c..1f73c16 100644 --- a/src/typings/components.d.ts +++ b/src/typings/components.d.ts @@ -45,7 +45,6 @@ declare module 'vue' { ASelectOption: typeof import('ant-design-vue/es')['SelectOption'] ASpace: typeof import('ant-design-vue/es')['Space'] ASpin: typeof import('ant-design-vue/es')['Spin'] - AStatistic: typeof import('ant-design-vue/es')['Statistic'] AStep: typeof import('ant-design-vue/es')['Step'] ASteps: typeof import('ant-design-vue/es')['Steps'] ASwitch: typeof import('ant-design-vue/es')['Switch'] @@ -77,7 +76,11 @@ declare module 'vue' { IconIcRoundSearch: typeof import('~icons/ic/round-search')['default'] IconLocalBanner: typeof import('~icons/local/banner')['default'] IconLocalLogo: typeof import('~icons/local/logo')['default'] + IconMdiAccessPoint: typeof import('~icons/mdi/access-point')['default'] + IconMdiAlert: typeof import('~icons/mdi/alert')['default'] + IconMdiCloud: typeof import('~icons/mdi/cloud')['default'] IconMdiDrag: typeof import('~icons/mdi/drag')['default'] + IconMdiLaptop: typeof import('~icons/mdi/laptop')['default'] IconMdiRefresh: typeof import('~icons/mdi/refresh')['default'] IconMdiSearch: typeof import('~icons/mdi/search')['default'] LangSwitch: typeof import('./../components/common/lang-switch.vue')['default'] diff --git a/src/views/dashboard/modules/card-data.vue b/src/views/dashboard/modules/card-data.vue index ba6a15a..670e7d2 100644 --- a/src/views/dashboard/modules/card-data.vue +++ b/src/views/dashboard/modules/card-data.vue @@ -1,109 +1,231 @@ - + diff --git a/src/views/dashboard/modules/header-banner.vue b/src/views/dashboard/modules/header-banner.vue index df1e80c..149105a 100644 --- a/src/views/dashboard/modules/header-banner.vue +++ b/src/views/dashboard/modules/header-banner.vue @@ -1,62 +1,263 @@ - + diff --git a/src/views/device/dashboard/index.vue b/src/views/device/dashboard/index.vue new file mode 100644 index 0000000..0b0fc85 --- /dev/null +++ b/src/views/device/dashboard/index.vue @@ -0,0 +1,8 @@ + + + + +