test.html 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. <!DOCTYPE html>
  2. <html lang="de" xmlns:th="http://www.thymeleaf.org">
  3. <head><meta charset="UTF-8"/><title>Vergleich – Test</title><link rel="stylesheet" href="/styles.css"/></head>
  4. <body>
  5. <h1>Vergleich – Testseite</h1>
  6. <div class="row" style="margin-bottom: 1rem;">
  7. <label>Schema auswählen:
  8. <select id="schemaSelect" onchange="updateSchema()">
  9. <option value="haushalt-einkommen">Haushalt/Einkommen</option>
  10. <option value="miete">Miete</option>
  11. </select>
  12. </label>
  13. <button type="button" onclick="loadExamples()">📄 Beispiel-JSONs laden</button>
  14. <button type="button" onclick="clearTextareas()">🗑️ Leeren</button>
  15. </div>
  16. <div th:if="${schemaErrors != null}" class="error-box">
  17. <strong>Schema-Fehler</strong>
  18. <ul><li th:each="e : ${schemaErrors}" th:text="${e}"></li></ul>
  19. </div>
  20. <form method="post" id="mainForm" action="/hhm-einkommen" class="grid-2">
  21. <div><label>Left JSON (Basis/Alt)</label><textarea id="leftJson" name="leftJson" th:text="${leftJson}" rows="20"></textarea></div>
  22. <div><label>Right JSON (Neu/Wahrheit)</label><textarea id="rightJson" name="rightJson" th:text="${rightJson}" rows="20"></textarea></div>
  23. <div class="full row">
  24. <label><input type="checkbox" name="validate" th:checked="${validate ?: true}"> Gegen Schema validieren</label>
  25. <label>Schema-Name: <input type="text" id="schemaNameInput" name="schemaName" th:value="${schemaName ?: 'haushalt-einkommen'}"></label>
  26. <label>Kunde/Bundesland:
  27. <select name="kunde">
  28. <option value="">-- Kein Logo --</option>
  29. <option value="Berlin">Berlin</option>
  30. </select>
  31. </label>
  32. <button type="submit">Vergleichen & anzeigen</button>
  33. </div>
  34. </form>
  35. <!-- Nach erstem Submit: Vorgang/Zeitraum-Auswahl -->
  36. <div class="full" th:if="${leftCandidates != null}">
  37. <h2>Baseline-Auswahl (links)</h2>
  38. <form method="post" action="/vergleich" class="row">
  39. <input type="hidden" name="leftJson" th:value="${leftJson}"/>
  40. <input type="hidden" name="rightJson" th:value="${rightJson}"/>
  41. <input type="hidden" name="validate" th:value="${validate}"/>
  42. <input type="hidden" name="schemaName" th:value="${schemaName}"/>
  43. <input type="hidden" name="kunde" th:value="${activeKunde}"/>
  44. <label>Vorgang (links):
  45. <select name="leftVorgangId">
  46. <option th:each="v : ${leftCandidates}" th:value="${v.id}"
  47. th:text="${v.aktenzeichen != null ? v.aktenzeichen : v.id}"
  48. th:selected="${v.id == leftVorgangId}"></option>
  49. </select>
  50. </label>
  51. <label>Zeitraum (links):
  52. <select name="leftZeitraumId">
  53. <option th:each="z : ${leftZeitraeumeOfSelected}" th:value="${z.id}"
  54. th:text="${z.beginn} + ' – ' + ${z.ende}"
  55. th:selected="${z.id == leftZeitraumId}"></option>
  56. </select>
  57. </label>
  58. <label>Zeitraum (rechts):
  59. <select name="rightZeitraumId">
  60. <option th:each="z : ${zeitraeumeRight}" th:value="${z.id}"
  61. th:text="${z.beginn} + ' – ' + ${z.ende}"
  62. th:selected="${z.id == rightZeitraumId}"></option>
  63. </select>
  64. </label>
  65. <button type="submit">Ansicht aktualisieren</button>
  66. </form>
  67. </div>
  68. <script>
  69. function updateSchema() {
  70. const schemaSelect = document.getElementById('schemaSelect');
  71. const schemaNameInput = document.getElementById('schemaNameInput');
  72. const mainForm = document.getElementById('mainForm');
  73. const selectedSchema = schemaSelect.value;
  74. schemaNameInput.value = selectedSchema;
  75. // Form-Action je nach Schema anpassen
  76. if (selectedSchema === 'miete') {
  77. mainForm.action = '/miete';
  78. } else {
  79. mainForm.action = '/hhm-einkommen';
  80. }
  81. // Automatisch Beispieldaten laden
  82. loadExamples();
  83. }
  84. async function loadExamples() {
  85. try {
  86. const schemaSelect = document.getElementById('schemaSelect');
  87. const selectedSchema = schemaSelect.value;
  88. let altFile, neuFile;
  89. if (selectedSchema === 'miete') {
  90. altFile = '/example-miete-alt.json';
  91. neuFile = '/example-miete-neu.json';
  92. } else {
  93. altFile = '/example-alt.json';
  94. neuFile = '/example-neu.json';
  95. }
  96. // Lade Alt-Beispiel
  97. const altResponse = await fetch(altFile);
  98. const altJson = await altResponse.json();
  99. // Lade Neu-Beispiel
  100. const neuResponse = await fetch(neuFile);
  101. const neuJson = await neuResponse.json();
  102. // Fülle Textareas mit formatierten JSONs
  103. document.getElementById('leftJson').value = JSON.stringify(altJson, null, 2);
  104. document.getElementById('rightJson').value = JSON.stringify(neuJson, null, 2);
  105. console.log('Beispiel-JSONs für Schema "' + selectedSchema + '" erfolgreich geladen');
  106. } catch (error) {
  107. console.error('Fehler beim Laden der Beispiel-JSONs:', error);
  108. alert('Fehler beim Laden der Beispiel-JSONs: ' + error.message);
  109. }
  110. }
  111. function clearTextareas() {
  112. document.getElementById('leftJson').value = '';
  113. document.getElementById('rightJson').value = '';
  114. }
  115. // Automatisches Laden beim Seitenaufruf, falls Textareas leer sind
  116. window.addEventListener('load', function() {
  117. const leftJson = document.getElementById('leftJson');
  118. const rightJson = document.getElementById('rightJson');
  119. // Schema-Wert aus Input übernehmen falls vorhanden
  120. const schemaNameInput = document.getElementById('schemaNameInput');
  121. const schemaSelect = document.getElementById('schemaSelect');
  122. if (schemaNameInput.value) {
  123. schemaSelect.value = schemaNameInput.value;
  124. updateSchema();
  125. }
  126. if (!leftJson.value.trim() && !rightJson.value.trim()) {
  127. loadExamples();
  128. }
  129. });
  130. </script>
  131. </body></html>