feat: add admin panel at /admin for full dashboard configuration

- Backend: ConfigManager write methods (atomic YAML save), admin CRUD
  router for settings (display/odoo/refresh) and nodes, WS broadcast
  on config changes, fix nmap scan blocking event loop with to_thread
- Frontend: admin UI with tab navigation, overview dashboard, node
  CRUD table with modal form, Odoo/display/refresh settings pages,
  typed API wrappers, active views filtering, config_changed WS handler
- Infra: nginx no-cache headers for HTML, cache-forever for hashed assets
- Fixes: WebSocket reconnect loop (ref pattern), rotation index OOB
  when views shrink, mutable node list cache

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-17 02:34:05 +00:00
parent 15f5f87376
commit 81bcdcd696
22 changed files with 1228 additions and 689 deletions

View File

@@ -3,8 +3,15 @@ server {
root /usr/share/nginx/html;
index index.html;
# SPA fallback: all paths serve index.html with no-cache
location / {
try_files $uri $uri/ /index.html;
add_header Cache-Control "no-store, no-cache, must-revalidate";
}
# Hashed static assets: cache forever (filename changes on rebuild)
location /assets/ {
add_header Cache-Control "public, max-age=31536000, immutable";
}
location /api/ {