Implement plugin dynamic settings routes architecture

Plugins can now register their settings pages dynamically via get_settings_routes()
hook, eliminating hardcoded imports that break lean builds.

Backend:
- Add get_settings_routes() hook to BasePlugin (shopdb/plugins/base.py)
- Implement in ComputersPlugin for Operating Systems management
- Add /api/plugins/settings-routes endpoint to expose plugin routes

Frontend:
- ModelCatalogHub fetches plugin routes and dynamically adds them via router.addRoute()
- Tabs render dynamically from pluginTabs ref
- Components lazy-load when clicked

Benefits:
- Lean builds work without manual route exclusions
- Plugins self-contain their UI extensions
- No core code changes needed when adding plugin settings pages
- Follows plugin architecture best practices

Fixes TODO from commit a03fd3de4f

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Proudlock
2026-09-11 16:49:10 -04:00
parent 4943e182c3
commit fe09d2745e
5 changed files with 95 additions and 15 deletions

View File

@@ -218,6 +218,16 @@ class ComputersPlugin(BasePlugin):
self._register_import_hook()
logger.info(f"Computers plugin initialized (v{self.meta.version})")
def get_settings_routes(self) -> List[Dict]:
"""Register Operating Systems management page in Model Catalog."""
return [{
'hub': 'model-catalog',
'path': 'operatingsystems',
'name': 'model-catalog-os',
'tab': 'Operating Systems',
'component': '.plugins-staged/computers/views/OperatingSystemsList.vue'
}]
# -- bulk-import machine link -------------------------------------------
def _register_import_hook(self):