Initial commit
This commit is contained in:
260
backup 24.2.26 - Kopie (61)/web/browser_aza_mvp.html
Normal file
260
backup 24.2.26 - Kopie (61)/web/browser_aza_mvp.html
Normal file
@@ -0,0 +1,260 @@
|
||||
<!doctype html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>AZA – Browser MVP</title>
|
||||
<style>
|
||||
:root {
|
||||
--bg: #f6f7fb;
|
||||
--card: #ffffff;
|
||||
--text: #1f2937;
|
||||
--muted: #6b7280;
|
||||
--border: #d1d5db;
|
||||
--accent: #2563eb;
|
||||
--accent-hover: #1d4ed8;
|
||||
--danger-bg: #fef2f2;
|
||||
--danger-text: #991b1b;
|
||||
--ok-bg: #ecfdf5;
|
||||
--ok-text: #065f46;
|
||||
}
|
||||
|
||||
* { box-sizing: border-box; }
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
background: var(--bg);
|
||||
color: var(--text);
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
.page {
|
||||
max-width: 920px;
|
||||
margin: 0 auto;
|
||||
padding: 32px 20px 48px;
|
||||
}
|
||||
|
||||
.hero {
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.hero h1 {
|
||||
margin: 0 0 8px;
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
.hero p {
|
||||
margin: 0;
|
||||
color: var(--muted);
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.card {
|
||||
background: var(--card);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 14px;
|
||||
padding: 20px;
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
margin: 0 0 14px;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.field {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.field label {
|
||||
display: block;
|
||||
font-weight: 700;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.field select,
|
||||
.field input[type="file"],
|
||||
.result-box {
|
||||
width: 100%;
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 10px;
|
||||
padding: 12px;
|
||||
font-size: 15px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.result-box {
|
||||
min-height: 220px;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
.actions {
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
button {
|
||||
border: 0;
|
||||
border-radius: 10px;
|
||||
padding: 12px 18px;
|
||||
font-size: 15px;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.primary {
|
||||
background: var(--accent);
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.primary:hover {
|
||||
background: var(--accent-hover);
|
||||
}
|
||||
|
||||
.secondary {
|
||||
background: #eef2ff;
|
||||
color: #1e3a8a;
|
||||
}
|
||||
|
||||
.status {
|
||||
border-radius: 10px;
|
||||
padding: 12px 14px;
|
||||
font-size: 14px;
|
||||
margin-bottom: 16px;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.status.error {
|
||||
display: block;
|
||||
background: var(--danger-bg);
|
||||
color: var(--danger-text);
|
||||
}
|
||||
|
||||
.status.success {
|
||||
display: block;
|
||||
background: var(--ok-bg);
|
||||
color: var(--ok-text);
|
||||
}
|
||||
|
||||
.footer-links {
|
||||
display: flex;
|
||||
gap: 18px;
|
||||
flex-wrap: wrap;
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
.footer-links a {
|
||||
color: var(--accent);
|
||||
text-decoration: none;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.hint {
|
||||
color: var(--muted);
|
||||
font-size: 14px;
|
||||
margin-top: 8px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="page">
|
||||
<section class="hero">
|
||||
<h1>AZA</h1>
|
||||
<p>Browser-MVP für medizinische Transkription.</p>
|
||||
</section>
|
||||
|
||||
<section class="card">
|
||||
<h2 class="section-title">Eingabe</h2>
|
||||
|
||||
<div class="field">
|
||||
<label for="specialty">Fachrichtung</label>
|
||||
<select id="specialty" name="specialty">
|
||||
<option value="">Bitte wählen</option>
|
||||
<option value="allgemeinmedizin">Allgemeinmedizin</option>
|
||||
<option value="innere-medizin">Innere Medizin</option>
|
||||
<option value="dermatologie">Dermatologie</option>
|
||||
<option value="kardiologie">Kardiologie</option>
|
||||
<option value="orthopaedie">Orthopädie</option>
|
||||
<option value="psychiatrie">Psychiatrie</option>
|
||||
<option value="radiologie">Radiologie</option>
|
||||
<option value="chirurgie">Chirurgie</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<label for="audioFile">Audio-Datei</label>
|
||||
<input id="audioFile" name="audioFile" type="file" accept=".m4a,.wav,.mp3,audio/*" />
|
||||
<div class="hint">MVP-Web-Shell: Dateiauswahl ist vorbereitet, Backend-Verdrahtung folgt im nächsten Slice.</div>
|
||||
</div>
|
||||
|
||||
<div id="statusBox" class="status success">Bereit für Upload.</div>
|
||||
|
||||
<div class="actions">
|
||||
<button id="uploadButton" class="primary" type="button">Upload starten</button>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="card">
|
||||
<h2 class="section-title">Ergebnis</h2>
|
||||
<div id="resultBox" class="result-box">Hier erscheint das Transkript.</div>
|
||||
<div class="actions" style="margin-top: 14px;">
|
||||
<button id="copyButton" class="secondary" type="button">Transkript kopieren</button>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="card">
|
||||
<h2 class="section-title">Support & Rechtliches</h2>
|
||||
<div class="footer-links">
|
||||
<a href="/support">Support</a>
|
||||
<a href="/privacy">Privacy</a>
|
||||
<a href="/terms">Terms</a>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<script>
|
||||
(function () {
|
||||
const statusBox = document.getElementById("statusBox");
|
||||
const resultBox = document.getElementById("resultBox");
|
||||
const copyButton = document.getElementById("copyButton");
|
||||
const uploadButton = document.getElementById("uploadButton");
|
||||
const specialty = document.getElementById("specialty");
|
||||
const audioFile = document.getElementById("audioFile");
|
||||
|
||||
function setStatus(message, kind) {
|
||||
statusBox.textContent = message;
|
||||
statusBox.className = "status " + kind;
|
||||
}
|
||||
|
||||
uploadButton.addEventListener("click", function () {
|
||||
if (!specialty.value) {
|
||||
setStatus("Bitte zuerst eine Fachrichtung wählen.", "error");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!audioFile.files || audioFile.files.length === 0) {
|
||||
setStatus("Bitte zuerst eine Audio-Datei auswählen.", "error");
|
||||
return;
|
||||
}
|
||||
|
||||
setStatus("Upload-Flow ist als nächster Slice vorgesehen. Diese Seite ist die erste MVP-Web-Shell.", "success");
|
||||
resultBox.textContent =
|
||||
"Ausgewählte Fachrichtung: " + specialty.value + "\n" +
|
||||
"Ausgewählte Datei: " + audioFile.files[0].name + "\n\n" +
|
||||
"Backend-Anbindung an /v1/transcribe folgt im nächsten Patch.";
|
||||
});
|
||||
|
||||
copyButton.addEventListener("click", async function () {
|
||||
try {
|
||||
await navigator.clipboard.writeText(resultBox.textContent);
|
||||
setStatus("Transkripttext wurde in die Zwischenablage kopiert.", "success");
|
||||
} catch (error) {
|
||||
setStatus("Kopieren war nicht möglich.", "error");
|
||||
}
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user