From 7089a61b500db3204c4dff75bd599e85379751dd Mon Sep 17 00:00:00 2001 From: cproudlock Date: Sun, 12 Jul 2026 21:12:57 -0400 Subject: [PATCH] Move GE-Enforce to its own top-level section; fix overflow + input theming GE-Enforce is a large operational surface (manifest authoring + fleet compliance), not a setting, and it was squished in the settings two-pane shell. Promote it to a dedicated full-width top-level section: - New sidebar entry "GE-Enforce" (plugin get_navigation_items, shield icon, auto-gated to the enabled plugin) instead of two Settings > Integrations cards. - Tabbed shell GeEnforceLayout.vue (Manifests | Enforcement Reports) with full-width children under AppLayout, not the narrow settings rail. - Views moved settings/ -> geenforce/ (ManifestEditor.vue, EnforcementReports.vue). Theming + overflow fixes (the "chaotic / cut off / different inputs" report): - Inputs/selects/textareas now match the stock settings look (border, radius, --bg, focus color) instead of browser defaults. - No horizontal overflow: editor grid uses minmax(0,1fr) + min-width:0 on children, collapses to one column under 1000px; entry table and reports table scroll inside their own overflow-x containers; detail actions wrap. Verified at 1280px: no page overflow, detail pane + tables fit. Co-Authored-By: Claude Opus 4.8 --- frontend/src/router/routes/geenforce.js | 35 +- .../views/geenforce/EnforcementReports.vue | 142 +++ .../src/views/geenforce/GeEnforceLayout.vue | 43 + .../src/views/geenforce/ManifestEditor.vue | 632 ++++++++++++++ .../src/views/settings/EnforcementReports.vue | 162 ++-- .../src/views/settings/ImagingPCTypes.vue | 818 ++++++++++++------ plugins/geenforce/plugin.py | 26 +- 7 files changed, 1475 insertions(+), 383 deletions(-) create mode 100644 frontend/src/views/geenforce/EnforcementReports.vue create mode 100644 frontend/src/views/geenforce/GeEnforceLayout.vue create mode 100644 frontend/src/views/geenforce/ManifestEditor.vue diff --git a/frontend/src/router/routes/geenforce.js b/frontend/src/router/routes/geenforce.js index a06b4d7..a3953c2 100644 --- a/frontend/src/router/routes/geenforce.js +++ b/frontend/src/router/routes/geenforce.js @@ -1,21 +1,30 @@ /** * GE-Enforce plugin routes. * - * The imaging-PC-type manifest editor lives under /settings. meta.plugin = - * 'geenforce' so the ADR-009 router guard hides it when the plugin is disabled. - * Admin-only, like the other settings pages. + * A top-level section (not under /settings) - the manifest editor + fleet + * reports are a large operational surface, so they get their own full-width + * shell with tabs. meta.plugin = 'geenforce' so the ADR-009 guard hides the + * section when the plugin is disabled. Admin-only. */ export default [ { - path: 'settings/imagingpctypes', - name: 'imagingpctypes', - component: () => import('../../views/settings/ImagingPCTypes.vue'), - meta: { requiresAuth: true, requiresAdmin: true, plugin: 'geenforce' } - }, - { - path: 'settings/enforcementreports', - name: 'enforcementreports', - component: () => import('../../views/settings/EnforcementReports.vue'), - meta: { requiresAuth: true, requiresAdmin: true, plugin: 'geenforce' } + path: 'geenforce', + component: () => import('../../views/geenforce/GeEnforceLayout.vue'), + meta: { requiresAuth: true, requiresAdmin: true, plugin: 'geenforce' }, + children: [ + { path: '', redirect: '/geenforce/manifests' }, + { + path: 'manifests', + name: 'geenforce-manifests', + component: () => import('../../views/geenforce/ManifestEditor.vue'), + meta: { requiresAuth: true, requiresAdmin: true, plugin: 'geenforce' } + }, + { + path: 'reports', + name: 'geenforce-reports', + component: () => import('../../views/geenforce/EnforcementReports.vue'), + meta: { requiresAuth: true, requiresAdmin: true, plugin: 'geenforce' } + } + ] } ] diff --git a/frontend/src/views/geenforce/EnforcementReports.vue b/frontend/src/views/geenforce/EnforcementReports.vue new file mode 100644 index 0000000..5a51f48 --- /dev/null +++ b/frontend/src/views/geenforce/EnforcementReports.vue @@ -0,0 +1,142 @@ + + + + + diff --git a/frontend/src/views/geenforce/GeEnforceLayout.vue b/frontend/src/views/geenforce/GeEnforceLayout.vue new file mode 100644 index 0000000..b5c74af --- /dev/null +++ b/frontend/src/views/geenforce/GeEnforceLayout.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/frontend/src/views/geenforce/ManifestEditor.vue b/frontend/src/views/geenforce/ManifestEditor.vue new file mode 100644 index 0000000..ba57bf8 --- /dev/null +++ b/frontend/src/views/geenforce/ManifestEditor.vue @@ -0,0 +1,632 @@ +