diff --git a/package.json b/package.json index 5f12778..4393493 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,8 @@ "vue": "^3.5.29", "vue-echarts": "^8.0.1", "vue-i18n": "^11.2.8", - "vue-router": "5" + "vue-router": "5", + "vue-web-terminal": "^3.4.1" }, "devDependencies": { "@arco-plugins/vite-vue": "^1.4.6", diff --git a/src/api/module/pmn.ts b/src/api/module/pmn.ts index 59646a3..acfc5c2 100644 --- a/src/api/module/pmn.ts +++ b/src/api/module/pmn.ts @@ -20,6 +20,8 @@ export interface MenuItem { web_url?: string; // 嵌入的网页URL component?: string; // 路由文件地址 is_new_tab?: boolean; // 是否在新窗口打开 + is_full?: boolean; // 单独的页面,不包含菜单 + hide_menu?: boolean; // 隐藏菜单栏的菜单 } /** 获取菜单 */ diff --git a/src/api/ops/pc.ts b/src/api/ops/pc.ts new file mode 100644 index 0000000..3a50736 --- /dev/null +++ b/src/api/ops/pc.ts @@ -0,0 +1,40 @@ +import { request } from "@/api/request"; + +/** 获取PC列表(分页) */ +export const fetchPCList = (data?: { + page?: number; + page_size?: number; + keyword?: string; + datacenter_id?: number; + rack_id?: number; + status?: string; + sort?: string; + order?: string; +}) => { + return request.post("/Assets/v1/pc/list", data || {}); +}; + +/** 获取PC详情 */ +export const fetchPCDetail = (id: number) => { + return request.get(`/Assets/v1/pc/detail/${id}`); +}; + +/** 创建PC */ +export const createPC = (data: any) => { + return request.post("/Assets/v1/pc/create", data); +}; + +/** 更新PC */ +export const updatePC = (data: any) => { + return request.put("/Assets/v1/pc/update", data); +}; + +/** 删除PC */ +export const deletePC = (id: number) => { + return request.delete(`/Assets/v1/pc/delete/${id}`); +}; + +/** 获取机柜列表(用于下拉选择) */ +export const fetchRackListForSelect = (datacenterId?: number) => { + return request.get("/Assets/v1/rack/all", { params: { datacenter_id: datacenterId } }); +}; diff --git a/src/api/ops/report.ts b/src/api/ops/report.ts new file mode 100644 index 0000000..55b43ef --- /dev/null +++ b/src/api/ops/report.ts @@ -0,0 +1,39 @@ +import { request } from "@/api/request"; + +// ============ 监测指标类接口 ============ + +/** 监测指标TOPN */ +export const fetchMetricsTopN = (params: any) => + request.get("/DC-Control/v1/reports/metrics/topn", { params }); + +/** 监测指标汇总 */ +export const fetchMetricsSummary = (params: any) => + request.get("/DC-Control/v1/reports/metrics/summary", { params }); + +/** 监测指标汇总导出 */ +export const exportMetricsSummary = (params: any) => + request.get("/DC-Control/v1/reports/metrics/export", { params, responseType: 'blob' }); + +// ============ 流量报表接口 ============ + +/** 流量报表汇总 */ +export const fetchTrafficSummary = (params: any) => + request.get("/DC-Control/v1/reports/traffic/summary", { params }); + +/** 流量报表趋势 */ +export const fetchTrafficTrend = (params: any) => + request.get("/DC-Control/v1/reports/traffic/trend", { params }); + +/** 流量报表导出 */ +export const exportTrafficReport = (params: any) => + request.get("/DC-Control/v1/reports/traffic/export", { params, responseType: 'blob' }); + +// ============ 状态报表接口 ============ + +/** 服务器状态报表 */ +export const fetchServerStatus = (params: any) => + request.get("/DC-Control/v1/reports/servers/status", { params }); + +/** 网络设备状态报表 */ +export const fetchNetworkDeviceStatus = (params: any) => + request.get("/DC-Control/v1/reports/network-devices/status", { params }); diff --git a/src/api/ops/server.ts b/src/api/ops/server.ts new file mode 100644 index 0000000..94868c6 --- /dev/null +++ b/src/api/ops/server.ts @@ -0,0 +1,40 @@ +import { request } from "@/api/request"; + +/** 获取服务器列表(分页) */ +export const fetchServerList = (data?: { + page?: number; + page_size?: number; + keyword?: string; + datacenter_id?: number; + rack_id?: number; + status?: string; + sort?: string; + order?: string; +}) => { + return request.post("/Assets/v1/server/list", data || {}); +}; + +/** 获取服务器详情 */ +export const fetchServerDetail = (id: number) => { + return request.get(`/Assets/v1/server/detail/${id}`); +}; + +/** 创建服务器 */ +export const createServer = (data: any) => { + return request.post("/Assets/v1/server/create", data); +}; + +/** 更新服务器 */ +export const updateServer = (data: any) => { + return request.put("/Assets/v1/server/update", data); +}; + +/** 删除服务器 */ +export const deleteServer = (id: number) => { + return request.delete(`/Assets/v1/server/delete/${id}`); +}; + +/** 获取机柜列表(用于下拉选择) */ +export const fetchRackListForSelect = (datacenterId?: number) => { + return request.get("/Assets/v1/rack/all", { params: { datacenter_id: datacenterId } }); +}; diff --git a/src/api/ops/template.ts b/src/api/ops/template.ts new file mode 100644 index 0000000..4ea2a99 --- /dev/null +++ b/src/api/ops/template.ts @@ -0,0 +1,31 @@ +import { request } from "@/api/request"; + +/** 获取工单模板列表 */ +export const fetchTemplates = (data?: { + page?: number, + page_size?: number, + status?: string +}) => { + return request.get("/Feedback/v1/templates", data ? { params: data } : undefined); +}; + +/** 创建工单模板 */ +export const createTemplate = (data: any) => request.post("/Feedback/v1/templates", data); + +/** 更新工单模板 */ +export const updateTemplate = (id: number, data: any) => request.put(`/Feedback/v1/templates/${id}`, data); + +/** 获取工单模板详情 */ +export const fetchTemplateDetail = (id: number) => request.get(`/Feedback/v1/templates/${id}`); + +/** 删除工单模板 */ +export const deleteTemplate = (id: number) => request.delete(`/Feedback/v1/templates/${id}`); + +/** 启用工单模板 */ +export const activateTemplate = (id: number) => request.post(`/Feedback/v1/templates/${id}/activate`); + +/** 禁用工单模板 */ +export const deactivateTemplate = (id: number) => request.post(`/Feedback/v1/templates/${id}/deactivate`); + +/** 按模板创建工单 */ +export const createTicketByTemplate = (id: number) => request.post(`/Feedback/v1/templates/${id}/create-ticket`); diff --git a/src/layout/default-layout.vue b/src/layout/default-layout.vue index d359552..8589465 100644 --- a/src/layout/default-layout.vue +++ b/src/layout/default-layout.vue @@ -1,13 +1,13 @@