refactor: standalone dashboard folders with index.html, zip-based import/export (.tsd/.tss/.tsp)
- Each dashboard is now a self-contained folder: manifest.json + index.html - Auto-scan dashboards/ and data/dashboards/ on startup - Export: .tsd (dashboards), .tss (scenes), .tsp (game plugins) - all zip format - Dashboard index.html is complete standalone page (WS + data binding) - Aspect ratio constraints handled in each dashboard's own JS - Removed template-based dashboard rendering in favor of static serve - Import via file upload endpoints, export via direct file download
This commit is contained in:
@@ -57,13 +57,17 @@ async def index(request: Request):
|
||||
@app.get("/dashboard/{theme_id}", response_class=HTMLResponse)
|
||||
async def dashboard_render(request: Request, theme_id: str):
|
||||
from models.dashboard import dashboard_manager
|
||||
index_html = dashboard_manager.get_index_html(theme_id)
|
||||
if index_html:
|
||||
return HTMLResponse(content=index_html)
|
||||
theme = dashboard_manager.get(theme_id)
|
||||
template_html = dashboard_manager.get_template(theme_id)
|
||||
return templates.TemplateResponse("dashboard.html", {
|
||||
"request": request,
|
||||
"theme": theme,
|
||||
"template_html": template_html,
|
||||
})
|
||||
if not theme:
|
||||
raise HTTPException(status_code=404, detail="Dashboard not found")
|
||||
return HTMLResponse(content=f"""
|
||||
<!DOCTYPE html><html><body style="background:#000;color:#888;display:flex;align-items:center;justify-content:center;height:100vh;font-family:sans-serif;">
|
||||
仪表盘 "{theme['name']}" 缺少 index.html
|
||||
</body></html>
|
||||
""")
|
||||
|
||||
|
||||
@app.get("/scene/{scene_id}", response_class=HTMLResponse)
|
||||
|
||||
Reference in New Issue
Block a user