diff --git a/Dockerfile b/Dockerfile
old mode 100644
new mode 100755
index b7684f40..c31ab11e
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,3 +1,4 @@
-FROM registry.access.redhat.com/ubi8/openjdk-11:latest
+# For documentation see https://jboss-container-images.github.io/openjdk/
+FROM registry.access.redhat.com/ubi9/openjdk-21-runtime:latest
COPY apigateway/target/*.jar /deployments/spring-boot-application.jar
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 82b8dd6c..10794998 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -15,7 +15,7 @@
"sass": "^1.77.6",
"vue": "^3.4.31",
"vue-router": "^4.4.0",
- "vuetify": "^3.6.11"
+ "vuetify": "^3.7.1"
},
"devDependencies": {
"@babel/types": "^7.23.0",
@@ -33,10 +33,10 @@
"@vue/eslint-config-typescript": "^12.0.0",
"@vue/test-utils": "^2.4.1",
"base64-blob": "1.4.1",
- "dom-to-image-more": "2.16.0",
"echarts": "^5.5.1",
"eslint": "^8.52.0",
"eslint-plugin-vue": "^9.18.1",
+ "html2canvas": "^1.4.1",
"jsdom": "^22.1.0",
"leaflet": "^1.9.4",
"leaflet.fullscreen": "^3.0.2",
@@ -957,7 +957,7 @@
"version": "9.13.1",
"resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.13.1.tgz",
"integrity": "sha512-+bcQRkJO9pcX8d0gel9ZNfrzU22sZFSA0WVhfXrf5jdJOS24a+Bp8pozuS9sBI9Hk/tGz83pgKfmqcn/Ci7/8w==",
- "devOptional": true,
+ "dev": true,
"dependencies": {
"@intlify/message-compiler": "9.13.1",
"@intlify/shared": "9.13.1"
@@ -973,7 +973,7 @@
"version": "9.13.1",
"resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.13.1.tgz",
"integrity": "sha512-SKsVa4ajYGBVm7sHMXd5qX70O2XXjm55zdZB3VeMFCvQyvLew/dLvq3MqnaIsTMF1VkkOb9Ttr6tHcMlyPDL9w==",
- "devOptional": true,
+ "dev": true,
"dependencies": {
"@intlify/shared": "9.13.1",
"source-map-js": "^1.0.2"
@@ -989,7 +989,7 @@
"version": "9.13.1",
"resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.13.1.tgz",
"integrity": "sha512-u3b6BKGhE6j/JeRU6C/RL2FgyJfy6LakbtfeVF8fJXURpZZTzfh3e05J0bu0XPw447Q6/WUp3C4ajv4TMS4YsQ==",
- "devOptional": true,
+ "dev": true,
"engines": {
"node": ">= 16"
},
@@ -2164,6 +2164,15 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
+ "node_modules/base64-arraybuffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
+ "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
"node_modules/base64-blob": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/base64-blob/-/base64-blob-1.4.1.tgz",
@@ -2508,6 +2517,15 @@
"source-map-resolve": "^0.6.0"
}
},
+ "node_modules/css-line-break": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz",
+ "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
+ "dev": true,
+ "dependencies": {
+ "utrie": "^1.0.2"
+ }
+ },
"node_modules/cssesc": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
@@ -2684,12 +2702,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/dom-to-image-more": {
- "version": "2.16.0",
- "resolved": "https://registry.npmjs.org/dom-to-image-more/-/dom-to-image-more-2.16.0.tgz",
- "integrity": "sha512-RyjtkaM/zVy90uJ20lT+/G7MwBZx6l/ePliq5CQOeAnPeew7aUGS6IqRWBkHpstU+POmhaKA8A9H9qf476gisQ==",
- "dev": true
- },
"node_modules/domexception": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz",
@@ -3489,6 +3501,19 @@
"node": ">=12"
}
},
+ "node_modules/html2canvas": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz",
+ "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
+ "dev": true,
+ "dependencies": {
+ "css-line-break": "^2.1.0",
+ "text-segmentation": "^1.0.3"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
"node_modules/http-proxy-agent": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
@@ -5343,6 +5368,15 @@
"optional": true,
"peer": true
},
+ "node_modules/text-segmentation": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz",
+ "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
+ "dev": true,
+ "dependencies": {
+ "utrie": "^1.0.2"
+ }
+ },
"node_modules/text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -5610,6 +5644,15 @@
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"dev": true
},
+ "node_modules/utrie": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz",
+ "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
+ "dev": true,
+ "dependencies": {
+ "base64-arraybuffer": "^1.0.2"
+ }
+ },
"node_modules/vite": {
"version": "4.5.3",
"resolved": "https://registry.npmjs.org/vite/-/vite-4.5.3.tgz",
@@ -6017,7 +6060,7 @@
"version": "9.13.1",
"resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.13.1.tgz",
"integrity": "sha512-mh0GIxx0wPtPlcB1q4k277y0iKgo25xmDPWioVVYanjPufDBpvu5ySTjP5wOrSvlYQ2m1xI+CFhGdauv/61uQg==",
- "devOptional": true,
+ "dev": true,
"dependencies": {
"@intlify/core-base": "9.13.1",
"@intlify/shared": "9.13.1",
@@ -6065,9 +6108,9 @@
}
},
"node_modules/vuetify": {
- "version": "3.6.11",
- "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-3.6.11.tgz",
- "integrity": "sha512-DMreVZ6+WCVnvRoFVPGtC+Kc4afx+etcTLgX2AqUj6lQ4RrEx0TlQoNAW1oKPH4eViv2wfdvQ3xb/Yw1c86cTw==",
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-3.7.2.tgz",
+ "integrity": "sha512-q0WTcRG977+a9Dqhb8TOaPm+Xmvj0oVhnBJhAdHWFSov3HhHTTxlH2nXP/GBTXZuuMHDbBeIWFuUR2/1Fx0PPw==",
"engines": {
"node": "^12.20 || >=14.13"
},
@@ -6079,7 +6122,6 @@
"typescript": ">=4.7",
"vite-plugin-vuetify": ">=1.0.0",
"vue": "^3.3.0",
- "vue-i18n": "^9.0.0",
"webpack-plugin-vuetify": ">=2.0.0"
},
"peerDependenciesMeta": {
@@ -6089,9 +6131,6 @@
"vite-plugin-vuetify": {
"optional": true
},
- "vue-i18n": {
- "optional": true
- },
"webpack-plugin-vuetify": {
"optional": true
}
diff --git a/frontend/package.json b/frontend/package.json
index d7227339..dd157264 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -19,7 +19,7 @@
"sass": "^1.77.6",
"vue": "^3.4.31",
"vue-router": "^4.4.0",
- "vuetify": "^3.6.11"
+ "vuetify": "^3.7.1"
},
"devDependencies": {
"@babel/types": "^7.23.0",
@@ -37,10 +37,10 @@
"@vue/eslint-config-typescript": "^12.0.0",
"@vue/test-utils": "^2.4.1",
"base64-blob": "1.4.1",
- "dom-to-image-more": "2.16.0",
"echarts": "^5.5.1",
"eslint": "^8.52.0",
"eslint-plugin-vue": "^9.18.1",
+ "html2canvas": "^1.4.1",
"jsdom": "^22.1.0",
"leaflet": "^1.9.4",
"leaflet.fullscreen": "^3.0.2",
diff --git a/frontend/src/components/map/ZaehlstelleMap.vue b/frontend/src/components/map/ZaehlstelleMap.vue
index ad9845d7..bb044f3f 100644
--- a/frontend/src/components/map/ZaehlstelleMap.vue
+++ b/frontend/src/components/map/ZaehlstelleMap.vue
@@ -576,10 +576,7 @@ function markerOptionsZaehlart(zaehlart: string, index: number) {
iconAnchor: calculateIconAnchorCoordinatesForZaehlartMarker(index),
iconSize: [30, 30],
className: `zaehlart-circle-${getColorForZaehlartenMarker(zaehlart)}`,
- html:
- '' +
- zaehlart +
- "",
+ html: '' + zaehlart + "",
});
return { opacity: 1.0, icon: divIcon };
@@ -636,7 +633,7 @@ wurden die Farbe auf schwarz gesetzt */
width: 30px;
line-height: 30px;
border-radius: 50%;
- background: red;
+ background: #f44336;
text-align: center;
}
.zaehlart-circle-secondary {
diff --git a/frontend/src/components/messstelle/ValidWochentage.vue b/frontend/src/components/messstelle/ValidWochentage.vue
index b83ee455..ab27cb4e 100644
--- a/frontend/src/components/messstelle/ValidWochentage.vue
+++ b/frontend/src/components/messstelle/ValidWochentage.vue
@@ -1,9 +1,9 @@
-
-
+
+
Von den ausgewählten {{ zeitraumRange }} Tagen
{{ getChosenWochentageNumberText }} in die Auswertung eingeflossen
diff --git a/frontend/src/components/messstelle/charts/SpeedDial.vue b/frontend/src/components/messstelle/charts/SpeedDial.vue
index a35fbf62..d16e1f04 100644
--- a/frontend/src/components/messstelle/charts/SpeedDial.vue
+++ b/frontend/src/components/messstelle/charts/SpeedDial.vue
@@ -2,7 +2,6 @@
{
}
return summary;
});
+
+watch(
+ () => auswertungOptions.value.verfuegbareVerkehrsarten,
+ (newVerkehrsarten, oldVerkehrsarten) => {
+ const rad = newVerkehrsarten.includes(Fahrzeug.RAD);
+ const removeRad =
+ oldVerkehrsarten.includes(Fahrzeug.RAD) &&
+ !newVerkehrsarten.includes(Fahrzeug.RAD);
+
+ const kfz = newVerkehrsarten.includes(Fahrzeug.KFZ);
+ const removeKfz =
+ oldVerkehrsarten.includes(Fahrzeug.KFZ) &&
+ !newVerkehrsarten.includes(Fahrzeug.KFZ);
+
+ if (removeKfz || (rad && kfz)) {
+ resetFahrzeuge();
+ }
+ if (removeRad || (rad && kfz)) {
+ auswertungOptions.value.fahrzeuge.radverkehr = false;
+ }
+ if (rad && !kfz) {
+ auswertungOptions.value.fahrzeuge.radverkehr = true;
+ } else if (!rad && kfz) {
+ auswertungOptions.value.fahrzeuge.kraftfahrzeugverkehr = true;
+ }
+ }
+);
+
+function resetFahrzeuge() {
+ auswertungOptions.value.fahrzeuge.kraftfahrzeugverkehr = false;
+ auswertungOptions.value.fahrzeuge.schwerverkehr = false;
+ auswertungOptions.value.fahrzeuge.gueterverkehr = false;
+ auswertungOptions.value.fahrzeuge.schwerverkehrsanteilProzent = false;
+ auswertungOptions.value.fahrzeuge.gueterverkehrsanteilProzent = false;
+ auswertungOptions.value.fahrzeuge.radverkehr = false;
+ auswertungOptions.value.fahrzeuge.fussverkehr = false;
+ auswertungOptions.value.fahrzeuge.lastkraftwagen = false;
+ auswertungOptions.value.fahrzeuge.lastzuege = false;
+ auswertungOptions.value.fahrzeuge.busse = false;
+ auswertungOptions.value.fahrzeuge.kraftraeder = false;
+ auswertungOptions.value.fahrzeuge.personenkraftwagen = false;
+ auswertungOptions.value.fahrzeuge.lieferwagen = false;
+}
diff --git a/frontend/src/components/messstelle/gesamtauswertung/stepper/FahrzeugeStepContent.vue b/frontend/src/components/messstelle/gesamtauswertung/stepper/FahrzeugeStepContent.vue
index 87006f7c..b32c08db 100644
--- a/frontend/src/components/messstelle/gesamtauswertung/stepper/FahrzeugeStepContent.vue
+++ b/frontend/src/components/messstelle/gesamtauswertung/stepper/FahrzeugeStepContent.vue
@@ -225,62 +225,22 @@
diff --git a/frontend/src/views/HomeView.vue b/frontend/src/views/HomeView.vue
index 8d689962..a2df4763 100644
--- a/frontend/src/views/HomeView.vue
+++ b/frontend/src/views/HomeView.vue
@@ -10,7 +10,6 @@
{
function takePicture() {
if (map.value != null) {
creatingPicture.value = true;
- domtoimage
- .toJpeg(map.value.$el, { quality: 0.95, cacheBust: true })
- .then((dataUrl: string) => {
- const image = new ImageAsset("Hauptkarte", dataUrl);
+ html2canvas(map.value.$el, { useCORS: true })
+ .then((canvas) => {
+ const image = new ImageAsset(
+ "Hauptkarte",
+ canvas.toDataURL("image/jpeg")
+ );
image.width = 100;
pdfReportStore.addAsset(image);
snackbarStore.showSuccess(
@@ -94,7 +95,7 @@ function takePicture() {
})
.catch(() => {
snackbarStore.showError(
- `Die Karte konnte dem PDF Report nicht hinzugefügt.`
+ `Die Karte konnte dem PDF Report nicht hinzugefügt werden.`
);
})
.finally(() => {