Allg Fotoliste.html 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. {#each chunk(schueler, 25) as slice}
  2. <div class="page grid" orientation="portrait" size="A4">
  3. <div class="main">
  4. <b>{slice[0].Klasse}</b>
  5. Stand: {datum(new Date())}
  6. <div class="grid" style="font-size: 0.8rem">
  7. {#each slice as s}
  8. <div>
  9. {#if s.Foto}
  10. <img src="data:image/jpg;base64,{buffer(s.Foto)}" alt="Foto" style="width: 120px">
  11. {:else}
  12. Kein Foto
  13. {/if}
  14. <br>
  15. {s.Name}, {s.Vorname}
  16. </div>
  17. {/each}
  18. </div>
  19. </div>
  20. </div>
  21. {/each}
  22. <script>
  23. import { datum, chunk } from './helfer'
  24. export let schueler, knexConfig
  25. const mysql = R('mysql')
  26. var connection = mysql.createConnection(knexConfig.connection)
  27. connection.connect()
  28. connection.query({
  29. sql: 'SELECT Foto, Schueler_ID FROM `schuelerfotos` WHERE `Schueler_ID` IN (?)',
  30. values: [schueler.map(s => s.ID)]},
  31. (e, res) => schueler = mergeById(schueler, res))
  32. const mergeById = (a1, a2) =>
  33. a1.map(itm => ({
  34. ...a2.find((item) => (item.Schueler_ID === itm.ID) && item),
  35. ...itm
  36. }))
  37. const buffer = (d) => Buffer.from(d, 'binary').toString('base64')
  38. </script>
  39. <style>
  40. @import 'css/main.css';
  41. .grid {
  42. display: grid;
  43. grid-template-columns: repeat(5, 1fr);
  44. grid-gap: 10px;
  45. }
  46. </style>