add real-time patient vital signs monitoring dashboard UI and backend integration

This commit is contained in:
2026-09-18 10:37:49 +05:30
parent 2342346d39
commit b35d196ba6
2 changed files with 27 additions and 0 deletions
+6
View File
@@ -210,6 +210,12 @@ def serve_dashboard_root():
from fastapi.staticfiles import StaticFiles
app.mount("/static", StaticFiles(directory="static"), name="static")
from fastapi.responses import Response
@app.get("/favicon.ico", include_in_schema=False)
async def favicon():
return Response(status_code=204, media_type="image/x-icon")
# === WebSocket endpoint for live vitals ===
@app.websocket("/ws/vitals")
+21
View File
@@ -8,6 +8,17 @@
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&family=JetBrains+Mono:wght@400;600;700&display=swap" rel="stylesheet">
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🩺</text></svg>">
<script>
// Suppress browser extension message channel port errors inside telemetry embed
window.addEventListener('unhandledrejection', function(event) {
var msg = (event && event.reason && (event.reason.message || event.reason)) || '';
if (typeof msg === 'string' && msg.indexOf('A listener indicated an asynchronous response') !== -1) {
event.preventDefault();
}
});
</script>
<style>
/* === CSS Reset & Base === */
*, *::before, *::after {
@@ -2801,6 +2812,12 @@
}
function stepContecMachineSweep(timestamp) {
if (document.hidden) {
machLastFrameTime = timestamp;
requestAnimationFrame(stepContecMachineSweep);
return;
}
if (!ctxMachEcg || !canvasMachEcg) {
requestAnimationFrame(stepContecMachineSweep);
return;
@@ -4787,6 +4804,10 @@
}
function animateWaveforms() {
if (isMinimal || document.hidden) {
requestAnimationFrame(animateWaveforms);
return;
}
waveformPhase += 0.05;
// Generate idle waveforms for cards with no data