diff --git a/frontend/src/request/batch.ts b/frontend/src/request/batch.ts index 2344750283288106554c3e411cc3f9b1af5f0e2b..0018ba8b4df7a8cc4f44c80bcd8303f8d4a8f8c3 100644 --- a/frontend/src/request/batch.ts +++ b/frontend/src/request/batch.ts @@ -1,53 +1,61 @@ -/* +/* * Copyright (c) KylinSoft Co., Ltd. 2024.All rights reserved. - * PilotGo licensed under the Mulan Permissive Software License, Version 2. + * PilotGo licensed under the Mulan Permissive Software License, Version 2. * See LICENSE file for more details. * Author: Gzx1999 * Date: Wed Jan 3 18:00:12 2024 +0800 */ -import request from './request'; +import request from "./request"; -// 获取批次 +// 获取批次分页 export function getBatches(data: any) { - return request({ - url: '/batchmanager/batchinfo', - method: 'get', - params: data - }) + return request({ + url: "/batchmanager/batchinfo", + method: "get", + params: data, + }); +} + +// 获取所有批次不分页 +export function getAllBatches() { + return request({ + url: "/batchmanager/batchinfo_nopage", + method: "get", + }); } // 获取批次详情 export function getBatchDetail(data: any) { - return request({ - url: '/batchmanager/batchmachineinfo', - method: 'get', - params: data - }) + return request({ + url: "/batchmanager/batchmachineinfo", + method: "get", + params: data, + }); } // 删除批次 export function deleteBatch(data: any) { - return request({ - url: '/batchmanager/deletebatch', - method: 'post', - data, - }) + return request({ + url: "/batchmanager/deletebatch", + method: "post", + data, + }); } // 创建批次 export function createBatch(data: any) { - return request({ - url: 'batchmanager/createbatch', - method: 'post', - data - }) + return request({ + url: "batchmanager/createbatch", + method: "post", + data, + }); } // 编辑批次信息 export function updateBatch(data: any) { - return request({ - url: 'batchmanager/updatebatch', - method: 'post', - data - }) + return request({ + url: "batchmanager/updatebatch", + method: "post", + data, + }); } diff --git a/frontend/src/request/cluster.ts b/frontend/src/request/cluster.ts index 91120b9b6c6d0ae47851da24abd8c19940b40418..19b9bc2733df37cc7608292343f5f761dc3aa843 100644 --- a/frontend/src/request/cluster.ts +++ b/frontend/src/request/cluster.ts @@ -1,224 +1,232 @@ -/* +/* * Copyright (c) KylinSoft Co., Ltd. 2024.All rights reserved. - * PilotGo licensed under the Mulan Permissive Software License, Version 2. + * PilotGo licensed under the Mulan Permissive Software License, Version 2. * See LICENSE file for more details. * Author: Gzx1999 * Date: Wed Jan 3 18:00:12 2024 +0800 */ -import request from './request'; +import request from "./request"; // 分页获取部门机器信息 export function getPagedDepartMachines(data: any) { - return request({ - url: 'macList/machineinfo', - method: 'get', - params: data - }) + return request({ + url: "macList/machineinfo", + method: "get", + params: data, + }); } // 获取部门所有机器信息 export function getDepartMachines(data: any) { - return request({ - url: 'macList/selectmachine', - method: 'get', - params: data - }) + return request({ + url: "macList/selectmachine", + method: "get", + params: data, + }); +} + +// 获取平台所有机器 +export function getAllMachines() { + return request({ + url: "macList/machineinfo_nopage", + method: "get", + }); } // 删除机器接口 -export function deleteMachine(data:any) { +export function deleteMachine(data: any) { return request({ - url: 'macList/deletemachine', - method: 'post', - data - }) + url: "macList/deletemachine", + method: "post", + data, + }); } // 获取指定部门下的子部门 export function getSubDepartment(data: any) { - return request({ - url: 'macList/depart', - method: 'get', - params: data - }) + return request({ + url: "macList/depart", + method: "get", + params: data, + }); } // 编辑部门节点 export function updateDepartment(data: any) { - return request({ - url: 'macList/updatedepart', - method: 'post', - data - }) + return request({ + url: "macList/updatedepart", + method: "post", + data, + }); } // 删除部门节点 export function deleteDepartment(data: any) { - return request({ - url: 'macList/deletedepartdata', - method: 'post', - data - }) + return request({ + url: "macList/deletedepartdata", + method: "post", + data, + }); } // 添加部门节点 export function addDepartment(data: any) { - return request({ - url: 'macList/adddepart', - method: 'post', - data - }) + return request({ + url: "macList/adddepart", + method: "post", + data, + }); } // 更换机器所属部门 export function changeDepartment(data: any) { - return request({ - url: 'macList/modifydepart', - method: 'post', - data - }) + return request({ + url: "macList/modifydepart", + method: "post", + data, + }); } // 获取机器overview信息 export function getMachineOverview(data: any) { - return request({ - url: 'api/agent_overview', - method: 'get', - params: data - }) + return request({ + url: "api/agent_overview", + method: "get", + params: data, + }); } // 获取所有服务 export function getserviceList(data: any) { - return request({ - url: 'api/service_list', - method: 'get', - params: data - }) + return request({ + url: "api/service_list", + method: "get", + params: data, + }); } // 获取当前机器登录user export function getCurrentUser(data: any) { - return request({ - url: 'api/user_info', - method: 'get', - params: data - }) + return request({ + url: "api/user_info", + method: "get", + params: data, + }); } // 获取机器上所有user export function getMachineAllUser(data: any) { - return request({ - url: 'api/user_all', - method: 'get', - params: data - }) + return request({ + url: "api/user_all", + method: "get", + params: data, + }); } // 获取所有服务 export function getServiceList(data: any) { - return request({ - url: 'api/service_list', - method: 'get', - params: data - }) + return request({ + url: "api/service_list", + method: "get", + params: data, + }); } // 关闭一项服务 export function stopService(data: any) { - return request({ - url: 'agent/service_stop', - method: 'post', - data - }) + return request({ + url: "agent/service_stop", + method: "post", + data, + }); } // 开启一项服务 export function startService(data: any) { - return request({ - url: 'agent/service_start', - method: 'post', - data - }) + return request({ + url: "agent/service_start", + method: "post", + data, + }); } // 重启一项服务 export function restartService(data: any) { - return request({ - url: 'agent/service_restart', - method: 'post', - data - }) + return request({ + url: "agent/service_restart", + method: "post", + data, + }); } // 获取网络信息 export function getNetworkInfo(data: any) { - return request({ - url: 'api/net', - method: 'get', - params: data - }) + return request({ + url: "api/net", + method: "get", + params: data, + }); } // 获取内核信息 export function getSysctlInfo(data: any) { - return request({ - url: 'api/sysctl_info', - method: 'get', - params: data - }) + return request({ + url: "api/sysctl_info", + method: "get", + params: data, + }); } // 获取所有repo源 export function getRepos(data: any) { - return request({ - url: 'api/repos', - method: 'get', - params: data - }) + return request({ + url: "api/repos", + method: "get", + params: data, + }); } // 获取所有已安装的package export function getInstalledPackages(data: any) { - return request({ - url: 'api/rpm_all', - method: 'get', - params: data - }) + return request({ + url: "api/rpm_all", + method: "get", + params: data, + }); } // 获取单个packge的详情 export function getPackageDetail(data: any) { - return request({ - url: 'api/rpm_info', - method: 'get', - params: data - }) + return request({ + url: "api/rpm_info", + method: "get", + params: data, + }); } // 安装软件包 export function installPackage(data: any) { - return request({ - url: 'agent/rpm_install', - method: 'post', - data - }) + return request({ + url: "agent/rpm_install", + method: "post", + data, + }); } // 卸载软件包 -export function removePackage(data:any) { +export function removePackage(data: any) { return request({ - url: 'agent/rpm_remove', - method: 'post', - data - }) + url: "agent/rpm_remove", + method: "post", + data, + }); } // 获取给定主机列表的tag标签 export function getMachineTags(data: any) { - return request({ - url: 'macList/gettags', - method: 'post', - data - }) + return request({ + url: "macList/gettags", + method: "post", + data, + }); } diff --git a/frontend/src/request/script.ts b/frontend/src/request/script.ts new file mode 100644 index 0000000000000000000000000000000000000000..cac16385a7018278c9aa6647773e756c24da1f57 --- /dev/null +++ b/frontend/src/request/script.ts @@ -0,0 +1,79 @@ +/* + * Copyright (c) KylinSoft Co., Ltd. 2024.All rights reserved. + * PilotGo licensed under the Mulan Permissive Software License, Version 2. + * See LICENSE file for more details. + * Author: Gzx1999 + * Date: Wed Jan 3 18:00:12 2024 +0800 + */ +import request from "./request"; + +// 获取全部脚本信息 +export function getScripts(data: { page: number; size: number }) { + return request({ + url: "/script/list_all", + method: "get", + params: data, + }); +} + +// 获取脚本历史信息 +export function getScriptHistorys(data: { script_id: number }) { + return request({ + url: "/script/list_history", + method: "get", + params: data, + }); +} + +// 添加脚本 +export function addScript(data: any) { + return request({ + url: "/script/create", + method: "post", + data, + }); +} + +// 更新脚本信息 +export function updateScript(data: any) { + return request({ + url: "/script/update", + method: "put", + data, + }); +} + +// 删除脚本 +export function deleteScript(data: { script_id: number; version?: string }) { + return request({ + url: "/script/delete", + method: "delete", + data, + }); +} + +// 运行脚本 +export function runScript(data: any) { + return request({ + url: "/script_auth/run", + method: "post", + data, + }); +} + +// 获取黑名单列表 +export function getScriptBlackList() { + return request({ + url: "/script/blacklist", + method: "get", + }); +} + +// 更新黑名单列表 +export function updateScriptBlackList(data: { white_list: number[] }) { + return request({ + url: "/script_auth/update_blacklist", + method: "put", + data, + }); +} diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index b3adc1bb64e2555c67d9cc31863e59dca1ba5040..1a8d8eaca3171cc5c249533716e75b604e77156a 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -42,7 +42,7 @@ let sidebarRoutes = [ meta: { title: "概览", panel: "overview", - icon: "HomeFilled", + icon: "House", breadcrumb: [{ name: "概览" }], }, }, @@ -179,10 +179,21 @@ let sidebarRoutes = [ meta: { title: "角色管理", panel: "role", - icon: "Ticket", + icon: "Lock", breadcrumb: [{ name: "角色管理" }], }, }, + { + path: "/script", + name: "Script", + component: () => import("../views/CustomScript/index.vue"), + meta: { + title: "自定义脚本", + panel: "batch", + icon: "Management", + breadcrumb: [{ name: "自定义脚本" }], + }, + }, { path: "/audit", name: "Audit", diff --git a/frontend/src/styles/main.scss b/frontend/src/styles/main.scss index 58b569d77acc3de5bd3eec8c5225041f804cb922..01683e61a93a96c2a58895eed06e43bf74a182a2 100644 --- a/frontend/src/styles/main.scss +++ b/frontend/src/styles/main.scss @@ -56,3 +56,8 @@ pre { .el-table .warning-row { --el-table-tr-bg-color: var(--el-color-info-light-8); } + +.custom-popover { + max-height: 500px; + overflow: auto; +} diff --git a/frontend/src/types/batch.ts b/frontend/src/types/batch.ts index 28711766f2baa4c07b4882d404bf4eb3e3685edd..c48311faa944fb04f52723b4e79ce0470034a6ba 100644 --- a/frontend/src/types/batch.ts +++ b/frontend/src/types/batch.ts @@ -1,17 +1,18 @@ -/* +/* * Copyright (c) KylinSoft Co., Ltd. 2024.All rights reserved. - * PilotGo licensed under the Mulan Permissive Software License, Version 2. + * PilotGo licensed under the Mulan Permissive Software License, Version 2. * See LICENSE file for more details. * Author: zhaozhenfang * Date: Fri Mar 15 11:38:55 2024 +0800 */ // 批次列表 export interface BatchItem { - CreatedAt:String; - DeletedAt:null; - Depart:String; + CreatedAt: String; + DeletedAt: null; + Depart: String; DepartName: String; ID: number; + id: number; UpdatedAt: String; description: String; manager: String; @@ -22,10 +23,10 @@ export interface BatchItem { export interface BatchMachineInfo { CPU: String; departid: number; - id:number; + id: number; ip: String; machineuuid: String; maintstatus: String; runstatus: String; sysinfo: String; -} \ No newline at end of file +} diff --git a/frontend/src/types/script.ts b/frontend/src/types/script.ts new file mode 100644 index 0000000000000000000000000000000000000000..98503bc37a4bafd457ffbbea7b807352d4ad0d1d --- /dev/null +++ b/frontend/src/types/script.ts @@ -0,0 +1,9 @@ +// 历史版本清单 +export interface HistoryItem { + description: string; + content: string; + version: string; + UpdatedAt: string; + id: number; // 版本id + scriptid?: number; // 脚本id +} diff --git a/frontend/src/views/CustomScript/components/BlackList.vue b/frontend/src/views/CustomScript/components/BlackList.vue new file mode 100644 index 0000000000000000000000000000000000000000..d3fed3b26936a978afa041e71eafb3e2c6572b7e --- /dev/null +++ b/frontend/src/views/CustomScript/components/BlackList.vue @@ -0,0 +1,98 @@ + + + + + diff --git a/frontend/src/views/CustomScript/components/VersionList.vue b/frontend/src/views/CustomScript/components/VersionList.vue new file mode 100644 index 0000000000000000000000000000000000000000..3e7a4f4abad57e5dbab1d0645b3203f6ce7b9fe6 --- /dev/null +++ b/frontend/src/views/CustomScript/components/VersionList.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/frontend/src/views/CustomScript/components/addScript.vue b/frontend/src/views/CustomScript/components/addScript.vue new file mode 100644 index 0000000000000000000000000000000000000000..a8b0ff02041374c526a420097f889e4d0c1d7197 --- /dev/null +++ b/frontend/src/views/CustomScript/components/addScript.vue @@ -0,0 +1,150 @@ + + + + + + diff --git a/frontend/src/views/CustomScript/components/runScript.vue b/frontend/src/views/CustomScript/components/runScript.vue new file mode 100644 index 0000000000000000000000000000000000000000..5445afdd3f10fcb08a4885179008d906a5a95a6f --- /dev/null +++ b/frontend/src/views/CustomScript/components/runScript.vue @@ -0,0 +1,222 @@ + + + + + + diff --git a/frontend/src/views/CustomScript/index.vue b/frontend/src/views/CustomScript/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..e9f9f95c33a1e6e8f8dc416a2f5d80891a11b79e --- /dev/null +++ b/frontend/src/views/CustomScript/index.vue @@ -0,0 +1,247 @@ + + + + + + diff --git a/frontend/src/views/Role/components/authData.ts b/frontend/src/views/Role/components/authData.ts index dd6fbebd4ea90aeae6f03863f6e4a18bcfedcb17..81db03cad26a981d9f9038d92b1deec5e551a185 100644 --- a/frontend/src/views/Role/components/authData.ts +++ b/frontend/src/views/Role/components/authData.ts @@ -168,24 +168,33 @@ export let authData = [ }, ], }, - /* { - id: '6', - label: '配置管理', - isMenu: true,display:true, - menuName: 'config', - operations: [{ - id: '21', - btnId: '14', - label: '配置下发', - menuName: 'config_install', - }] -}, */ + { + id: "6", + label: "自定义脚本管理", + isMenu: true, + display: true, + menuName: "script", + operations: [ + { + id: "28", + btnId: "21", + label: "执行脚本", + menuName: "run_script", + }, + { + id: "29", + btnId: "22", + label: "更新黑名单", + menuName: "update_script_blacklist", + }, + ], + }, { id: "7", label: "日志管理", isMenu: true, display: true, - menuName: "log", + menuName: "audit", operations: [], }, { diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 1ca2e9b56a2db1d1bbafa2a60619f101ad093957..6a4bf7c9e0c36512fe0d337c33061fd041388536 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -9,8 +9,10 @@ import { fileURLToPath, URL } from "node:url"; import { defineConfig } from "vite"; import vue from "@vitejs/plugin-vue"; +import { createSvgIconsPlugin } from "vite-plugin-svg-icons"; import postCssPxToRem from "postcss-pxtorem"; +import { resolve } from "node:path"; export default defineConfig({ plugins: [ @@ -21,6 +23,10 @@ export default defineConfig({ }, }, }), + createSvgIconsPlugin({ + iconDirs: [resolve(resolve("src", "assets/icons"))], + symbolId: "icon-[dir]-[name]", + }), ], resolve: { alias: { @@ -33,7 +39,7 @@ export default defineConfig({ cors: true, proxy: { "/api/v1": { - target: "http://10.44.43.181:8888", //10.41.107.196 + target: "https://10.41.107.29:8888", //10.41.107.29:8888 \ 10.44.43.181:8888 \ 10.41.161.101:8888" secure: false, // 如果是https接口,需要配置这个参数 changeOrigin: true, // 如果接口跨域,需要进行这个参数配置 // rewrite: path => path.replace(/^\/demo/, '/demo')