From 95cf7e126d1278b2e58f5e9287a9dc5c2d222a83 Mon Sep 17 00:00:00 2001 From: nfebe Date: Mon, 5 Jan 2026 22:11:58 +0100 Subject: [PATCH 1/3] feat(ui): Add dedicated cron jobs management page - Add CronJobsView.vue with full CRUD for scheduled tasks - Support both command and backup task types - Add search, filter by deployment/type, and pagination - Show execution history with output/error details - Add route /cron-jobs and navigation in System group - Uses existing schedulerApi endpoints (no agent changes) Signed-off-by: nfebe --- src/layouts/DashboardLayout.vue | 4 +- src/router/index.ts | 5 + src/views/CronJobsView.vue | 1491 +++++++++++++++++++++++++++++++ 3 files changed, 1499 insertions(+), 1 deletion(-) create mode 100644 src/views/CronJobsView.vue diff --git a/src/layouts/DashboardLayout.vue b/src/layouts/DashboardLayout.vue index ea32cf4..c66e5fe 100644 --- a/src/layouts/DashboardLayout.vue +++ b/src/layouts/DashboardLayout.vue @@ -94,6 +94,7 @@ {{ stats.services }} Services + Cron Jobs @@ -316,6 +317,7 @@ const currentPageTitle = computed(() => { infrastructure: "Infrastructure", "system-ports": "System Ports", services: "System Services", + "cron-jobs": "Cron Jobs", databases: "Database Servers", security: "Security & Monitoring", certificates: "SSL Certificates", @@ -337,7 +339,7 @@ const breadcrumbs = computed(() => { } else if (["containers", "images", "volumes", "networks", "docker-ports"].includes(routeName)) { crumbs.push({ label: "Docker", path: "" }); crumbs.push({ label: currentPageTitle.value, path: "" }); - } else if (["infrastructure", "system-ports", "services"].includes(routeName)) { + } else if (["infrastructure", "system-ports", "services", "cron-jobs"].includes(routeName)) { crumbs.push({ label: "System", path: "" }); crumbs.push({ label: currentPageTitle.value, path: "" }); } else if (routeName === "databases") { diff --git a/src/router/index.ts b/src/router/index.ts index d645c2f..2d988c2 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -109,6 +109,11 @@ const routes: RouteRecordRaw[] = [ name: "security", component: () => import("@/views/SecurityView.vue"), }, + { + path: "cron-jobs", + name: "cron-jobs", + component: () => import("@/views/CronJobsView.vue"), + }, ], }, ]; diff --git a/src/views/CronJobsView.vue b/src/views/CronJobsView.vue new file mode 100644 index 0000000..a0842c1 --- /dev/null +++ b/src/views/CronJobsView.vue @@ -0,0 +1,1491 @@ +