diff --git a/apigateway/pom.xml b/apigateway/pom.xml index cf0c6cff..b8f7613f 100644 --- a/apigateway/pom.xml +++ b/apigateway/pom.xml @@ -16,7 +16,7 @@ ${java.version} ${java.version} ${java.version} - 3.3.3 + 3.3.4 2023.0.3 1.18.34 @@ -158,7 +158,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.2.2 + 3.5.1 ${jvm.options} diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 10794998..3f1ac776 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -10,31 +10,32 @@ "dependencies": { "@fontsource/roboto": "^4.5.8", "@mdi/font": "7.3.67", + "@vuepic/vue-datepicker": "^10.0.0", "moment": "^2.29.4", "pinia": "^2.1.7", "sass": "^1.77.6", "vue": "^3.4.31", - "vue-router": "^4.4.0", + "vue-router": "^4.4.5", "vuetify": "^3.7.1" }, "devDependencies": { "@babel/types": "^7.23.0", - "@ianvs/prettier-plugin-sort-imports": "^4.1.1", + "@ianvs/prettier-plugin-sort-imports": "^4.3.1", "@muenchen/prettier-codeformat": "^1.0.1", "@svgdotjs/svg.js": "3.0.16", "@types/jsdom": "^21.1.4", "@types/leaflet": "^1.9.12", "@types/leaflet.fullscreen": "^3.0.2", "@types/leaflet.markercluster": "^1.5.4", - "@types/lodash": "^4.17.6", - "@types/node": "^18.18.8", + "@types/lodash": "^4.17.10", + "@types/node": "^18.19.55", "@vitejs/plugin-vue": "^4.4.0", "@vue/eslint-config-prettier": "^8.0.0", "@vue/eslint-config-typescript": "^12.0.0", "@vue/test-utils": "^2.4.1", "base64-blob": "1.4.1", "echarts": "^5.5.1", - "eslint": "^8.52.0", + "eslint": "^8.57.1", "eslint-plugin-vue": "^9.18.1", "html2canvas": "^1.4.1", "jsdom": "^22.1.0", @@ -43,11 +44,11 @@ "leaflet.markercluster": "^1.5.3", "leaflet.nontiledlayer": "^1.0.9", "lodash": "^4.17.21", - "prettier": "^3.0.3", + "prettier": "^3.3.3", "save-svg-as-png": "1.4.17", "typescript": "^5.2.2", "unplugin-fonts": "^1.0.3", - "vite": "^4.5.0", + "vite": "^4.5.5", "vite-plugin-vuetify": "^1.0.2", "vitest": "^0.34.6", "vue-echarts": "^6.6.1", @@ -882,9 +883,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -896,13 +897,13 @@ "integrity": "sha512-CnD7zLItIzt86q4Sj3kZUiLcBk1dSk81qcqgMGaZe7SQ1P8hFNxhMl5AZthK1zrDM5m74VVhaOpuMGIL4gagaA==" }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", "deprecated": "Use @eslint/config-array instead", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" }, @@ -931,9 +932,9 @@ "dev": true }, "node_modules/@ianvs/prettier-plugin-sort-imports": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@ianvs/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.3.0.tgz", - "integrity": "sha512-OOMtUcO4J3LoL63dOKAe7bn+lSRRPeit2DqNHpx+wvBp3Grejo2PMaK4Mp1mwy8pnat64ccSgk/lBZbsAdLErw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@ianvs/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.3.1.tgz", + "integrity": "sha512-ZHwbyjkANZOjaBm3ZosADD2OUYGFzQGxfy67HmGZU94mHqe7g1LCMA7YYKB1Cq+UTPCBqlAYapY0KXAjKEw8Sg==", "dev": true, "dependencies": { "@babel/core": "^7.24.0", @@ -1346,15 +1347,15 @@ } }, "node_modules/@types/lodash": { - "version": "4.17.6", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.6.tgz", - "integrity": "sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==", + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-YpS0zzoduEhuOWjAotS6A5AVCva7X4lVlYLF0FYHAY9sdraBfnatttHItlWeZdGhuEkf+OzMNg2ZYAx8t+52uQ==", "dev": true }, "node_modules/@types/node": { - "version": "18.19.39", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.39.tgz", - "integrity": "sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==", + "version": "18.19.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.55.tgz", + "integrity": "sha512-zzw5Vw52205Zr/nmErSEkN5FLqXPuKX/k5d1D7RKHATGqU7y6YfX9QxZraUzUrFGqH6XzOzG196BC35ltJC4Cw==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -1812,9 +1813,9 @@ } }, "node_modules/@vue/devtools-api": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.1.tgz", - "integrity": "sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==" + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" }, "node_modules/@vue/eslint-config-prettier": { "version": "8.0.0", @@ -1957,6 +1958,20 @@ "vue-component-type-helpers": "^2.0.0" } }, + "node_modules/@vuepic/vue-datepicker": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@vuepic/vue-datepicker/-/vue-datepicker-10.0.0.tgz", + "integrity": "sha512-ujlk3ahftVQpyCJ8hq7TmOOHrf/XFJI1ZcAh/FRB5Ci62Vq5HmHf6xux5KVi5SPUFRTJY78m+uDhYy1M+8RZ9w==", + "dependencies": { + "date-fns": "^4.1.0" + }, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "vue": ">=3.2.0" + } + }, "node_modules/@vuetify/loader-shared": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/@vuetify/loader-shared/-/loader-shared-1.7.1.tgz", @@ -2569,6 +2584,15 @@ "node": ">=14" } }, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, "node_modules/de-indent": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", @@ -2817,16 +2841,17 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -4639,9 +4664,9 @@ } }, "node_modules/prettier": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", - "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -5654,9 +5679,9 @@ } }, "node_modules/vite": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.3.tgz", - "integrity": "sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==", + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.5.tgz", + "integrity": "sha512-ifW3Lb2sMdX+WU91s3R0FyQlAyLxOzCSCP37ujw0+r5POeHPwe6udWVIElKQq8gk3t7b8rkmvqC6IHBpCff4GQ==", "devOptional": true, "dependencies": { "esbuild": "^0.18.10", @@ -6077,11 +6102,11 @@ } }, "node_modules/vue-router": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.4.0.tgz", - "integrity": "sha512-HB+t2p611aIZraV2aPSRNXf0Z/oLZFrlygJm+sZbdJaW6lcFqEDQwnzUBXn+DApw+/QzDU/I9TeWx9izEjTmsA==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.4.5.tgz", + "integrity": "sha512-4fKZygS8cH1yCyuabAXGUAsyi1b2/o/OKgu/RUb+znIYOxPRxdkytJEx+0wGcpBE1pX6vUgh5jwWOKRGvuA/7Q==", "dependencies": { - "@vue/devtools-api": "^6.5.1" + "@vue/devtools-api": "^6.6.4" }, "funding": { "url": "https://github.com/sponsors/posva" diff --git a/frontend/package.json b/frontend/package.json index dd157264..0d3bfb84 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -14,31 +14,32 @@ "dependencies": { "@fontsource/roboto": "^4.5.8", "@mdi/font": "7.3.67", + "@vuepic/vue-datepicker": "^10.0.0", "moment": "^2.29.4", "pinia": "^2.1.7", "sass": "^1.77.6", "vue": "^3.4.31", - "vue-router": "^4.4.0", + "vue-router": "^4.4.5", "vuetify": "^3.7.1" }, "devDependencies": { "@babel/types": "^7.23.0", - "@ianvs/prettier-plugin-sort-imports": "^4.1.1", + "@ianvs/prettier-plugin-sort-imports": "^4.3.1", "@muenchen/prettier-codeformat": "^1.0.1", "@svgdotjs/svg.js": "3.0.16", "@types/jsdom": "^21.1.4", "@types/leaflet": "^1.9.12", "@types/leaflet.fullscreen": "^3.0.2", "@types/leaflet.markercluster": "^1.5.4", - "@types/lodash": "^4.17.6", - "@types/node": "^18.18.8", + "@types/lodash": "^4.17.10", + "@types/node": "^18.19.55", "@vitejs/plugin-vue": "^4.4.0", "@vue/eslint-config-prettier": "^8.0.0", "@vue/eslint-config-typescript": "^12.0.0", "@vue/test-utils": "^2.4.1", "base64-blob": "1.4.1", "echarts": "^5.5.1", - "eslint": "^8.52.0", + "eslint": "^8.57.1", "eslint-plugin-vue": "^9.18.1", "html2canvas": "^1.4.1", "jsdom": "^22.1.0", @@ -47,11 +48,11 @@ "leaflet.markercluster": "^1.5.3", "leaflet.nontiledlayer": "^1.0.9", "lodash": "^4.17.21", - "prettier": "^3.0.3", + "prettier": "^3.3.3", "save-svg-as-png": "1.4.17", "typescript": "^5.2.2", "unplugin-fonts": "^1.0.3", - "vite": "^4.5.0", + "vite": "^4.5.5", "vite-plugin-vuetify": "^1.0.2", "vitest": "^0.34.6", "vue-echarts": "^6.6.1", diff --git a/frontend/pom.xml b/frontend/pom.xml index 706ebab9..eec7f33e 100644 --- a/frontend/pom.xml +++ b/frontend/pom.xml @@ -15,8 +15,8 @@ ${java.version} ${java.version} ${java.version} - 3.0.0 - 3.1.0 + 3.4.1 + 3.4.0 src,public src,public diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 11ee2cb2..bb563a3b 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -58,7 +58,7 @@ @@ -69,6 +69,7 @@ diff --git a/frontend/src/components/common/DateRangePicker.vue b/frontend/src/components/common/DateRangePicker.vue new file mode 100644 index 00000000..4b52a8c7 --- /dev/null +++ b/frontend/src/components/common/DateRangePicker.vue @@ -0,0 +1,223 @@ + + + diff --git a/frontend/src/components/map/ZaehlstelleMap.vue b/frontend/src/components/map/ZaehlstelleMap.vue index bb044f3f..0fce03cc 100644 --- a/frontend/src/components/map/ZaehlstelleMap.vue +++ b/frontend/src/components/map/ZaehlstelleMap.vue @@ -77,6 +77,7 @@ const zaehlstelleStore = useZaehlstelleStore(); const searchStore = useSearchStore(); const snackbarStore = useSnackbarStore(); const router = useRouter(); +const dateUtils = useDateUtils(); const mapRef = ref(null); @@ -510,17 +511,17 @@ function createTooltipMessstelle(tooltipDto: TooltipMessstelleDTO): string { tooltip = `${tooltip}${tooltipDto.stadtbezirk}
`; } if (tooltipDto.realisierungsdatum) { - tooltip = `${tooltip} Aufbau: ${useDateUtils().formatDate( + tooltip = `${tooltip} Aufbau: ${dateUtils.formatDate( tooltipDto.realisierungsdatum )}
`; } if (tooltipDto.abbaudatum) { - tooltip = `${tooltip}Abbau: ${useDateUtils().formatDate( + tooltip = `${tooltip}Abbau: ${dateUtils.formatDate( tooltipDto.abbaudatum )}
`; } if (tooltipDto.datumLetztePlausibleMessung) { - tooltip = `${tooltip}Letzte plausible Messung: ${useDateUtils().formatDate( + tooltip = `${tooltip}Letzte plausible Messung: ${dateUtils.formatDate( tooltipDto.datumLetztePlausibleMessung )}
`; } diff --git a/frontend/src/components/messstelle/MessstelleInfo.vue b/frontend/src/components/messstelle/MessstelleInfo.vue index eacdbf87..0711ff81 100644 --- a/frontend/src/components/messstelle/MessstelleInfo.vue +++ b/frontend/src/components/messstelle/MessstelleInfo.vue @@ -36,7 +36,7 @@ class="mb-1 mr-1" :icon="aufbauIcon.iconPath" /> - {{ formatDate(messstelle.realisierungsdatum) }} + {{ dateUtils.formatDate(messstelle.realisierungsdatum) }} - {{ formatDate(messstelle.abbaudatum) }} + {{ dateUtils.formatDate(messstelle.abbaudatum) }} @@ -103,6 +103,7 @@ import FahrzeugklassenIcon from "@/components/messstelle/icons/FahrzeugklassenIc import MessstelleGeometrie from "@/components/messstelle/MessstelleGeometrie.vue"; import MessstelleKommentar from "@/components/messstelle/MessstelleKommentar.vue"; import IconTooltip from "@/types/util/IconTooltip"; +import { useDateUtils } from "@/util/DateUtils"; interface Props { messstelle: MessstelleInfoDTO; @@ -110,21 +111,15 @@ interface Props { const props = defineProps(); +const dateUtils = useDateUtils(); + const aufbauIcon = new IconTooltip("mdi-elevator-up", "Aufbaudatum"); const abbauIcon = new IconTooltip("mdi-elevator-down", "Abbaudatum"); const datumLetztePlausibleMessung = computed(() => { - return formatDate(props.messstelle.datumLetztePlausibleMessung.toString()); + return dateUtils.formatDate(props.messstelle.datumLetztePlausibleMessung); }); -function formatDate(date: string): string { - if (!date) { - return ""; - } - const [year, month, day] = date.split("-"); - return `${day}.${month}.${year}`; -} - const fahrzeugKlasse = computed(() => { if (props.messstelle.messquerschnitte.length > 0) { return props.messstelle.fahrzeugKlassen; diff --git a/frontend/src/components/messstelle/ValidWochentage.vue b/frontend/src/components/messstelle/ValidWochentage.vue index ab27cb4e..0eb2b15f 100644 --- a/frontend/src/components/messstelle/ValidWochentage.vue +++ b/frontend/src/components/messstelle/ValidWochentage.vue @@ -5,106 +5,27 @@ > - Von den ausgewählten {{ zeitraumRange }} Tagen - {{ getChosenWochentageNumberText }} in die Auswertung eingeflossen + {{ message }} diff --git a/frontend/src/components/messstelle/charts/BannerMesstelleTabs.vue b/frontend/src/components/messstelle/charts/BannerMesstelleTabs.vue index a64ccd28..dc085ddf 100644 --- a/frontend/src/components/messstelle/charts/BannerMesstelleTabs.vue +++ b/frontend/src/components/messstelle/charts/BannerMesstelleTabs.vue @@ -5,10 +5,14 @@ size="36" icon="mdi-alert-decagram-outline" /> - {{ ZEITRAUM_GROESSER_FUENF_JAHRE }} +

+ {{ message }} +

diff --git a/frontend/src/components/messstelle/charts/BelastungsplanMessquerschnittCard.vue b/frontend/src/components/messstelle/charts/BelastungsplanMessquerschnittCard.vue index eead1ffc..cb8f0d9f 100644 --- a/frontend/src/components/messstelle/charts/BelastungsplanMessquerschnittCard.vue +++ b/frontend/src/components/messstelle/charts/BelastungsplanMessquerschnittCard.vue @@ -145,7 +145,7 @@ function drawArrowsPointingSouth( ) .stroke({ width: calcStrokeSize(mq), - color: getLineColor(mq.direction), + color: getLineColor(mq.mqId, mq.direction), }) ); querschnittGroup.value.add( @@ -280,7 +280,7 @@ function drawArrowsPointingNorth( ) .stroke({ width: calcStrokeSize(mq), - color: getLineColor(mq.direction), + color: getLineColor(mq.mqId, mq.direction), }) ); querschnittGroup.value.add( @@ -377,7 +377,13 @@ function addTextToQuerschnittGroup( y: number ) { querschnittGroup.value.add( - SVG.SVG().text(`${text}`).rotate(270, x, y).move(x, y) + SVG.SVG() + .text(`${text}`) + .font({ + weight: "bold", + }) + .rotate(270, x, y) + .move(x, y) ); } @@ -497,10 +503,19 @@ function addTextNorthSide( function drawNorthSymbol() { canvas.value - .path("M 45 10 L 20 80 L 70 80 L 45 10") + .path("M 93 93 L 121 93 L 107 32 z") .stroke({ width: 1, color: "black" }) .attr("fill", "none"); - canvas.value.text("N").move(37.5, 45).font({ size: 20 }); + canvas.value + .text((add) => { + add.tspan("N").x(107).dy(83); + }) + .font({ + family: fontfamily, + size: defaultFontSize, + anchor: "middle", + fill: "#757575", + }); } function drawMessstelleInfo() { @@ -697,10 +712,14 @@ function storeImageForPrinting() { emits("print", new Blob([ex], { type: "image/svg+xml;charset=utf-8" })); } -function getLineColor(direction: string) { - return chosenOptionsCopy.value.blackPrintMode - ? "#000000" - : farben.get(direction); +function getLineColor(mqId: string, direction: string) { + if (chosenOptionsCopy.value.messquerschnittIds.includes(mqId)) { + return chosenOptionsCopy.value.blackPrintMode + ? "#000000" + : farben.get(direction); + } else { + return "#E0E0E0"; + } } const getSizeInPx = computed(() => { diff --git a/frontend/src/components/messstelle/charts/MessstelleDiagramme.vue b/frontend/src/components/messstelle/charts/MessstelleDiagramme.vue index 3f636079..ffa2bc3e 100644 --- a/frontend/src/components/messstelle/charts/MessstelleDiagramme.vue +++ b/frontend/src/components/messstelle/charts/MessstelleDiagramme.vue @@ -40,16 +40,17 @@ width="100%" class="overflow-y-auto" > - - -

- {{ globalInfoMessage.NO_BELASTUNGSPLAN }} -

-
+ + - + + @@ -78,13 +86,20 @@ - + + @@ -92,14 +107,21 @@ - + + @@ -127,7 +149,6 @@ diff --git a/frontend/src/components/messstelle/optionsmenue/panels/ZeitPanel.vue b/frontend/src/components/messstelle/optionsmenue/panels/ZeitPanel.vue index 83eb8a51..5e95922d 100644 --- a/frontend/src/components/messstelle/optionsmenue/panels/ZeitPanel.vue +++ b/frontend/src/components/messstelle/optionsmenue/panels/ZeitPanel.vue @@ -18,58 +18,28 @@ /> - - - - - - - - - - - - + -
+

Hinweise:

Als Anwender beträgt der maximal mögliche Auswahlzeitraum 5 Jahre.

-

+

Alle Auswertungen stellen Durchschnittswerte des ausgewählten Zeitraums dar.

@@ -79,11 +49,11 @@ - + 1); + +const isDateRange = computed(() => { + const startDate = head(chosenOptionsCopy.value.zeitraum); + const isValidStartDate = moment(startDate, "YYYY-MM-DD", true).isValid(); + const endDate = last(chosenOptionsCopy.value.zeitraum); + const isValidEndDate = moment(endDate, "YYYY-MM-DD", true).isValid(); + return isValidStartDate && isValidEndDate && !isEqual(startDate, endDate); +}); onMounted(() => { const messstelleId = route.params.messstelleId as string; @@ -162,46 +141,35 @@ const isAnwender = computed(() => { }); const minDate = computed(() => { - if (messstelleInfo.value.realisierungsdatum >= "2006-01-01") - return messstelleInfo.value.realisierungsdatum; - else return "2006-01-01"; -}); - -const minDateRange = computed(() => { - return dateUtils.formatDateToISO(nextDayOfVon.value); -}); - -const nextDayOfVon = computed(() => { - const nextDay = new Date(dateVon.value); - nextDay.setDate(dateVon.value.getDate() + 1); - return nextDay; + const startdatum = new Date("2006-01-01"); + const realisierungsdatum = new Date(messstelleInfo.value.realisierungsdatum); + if ( + !isNil(messstelleInfo.value.realisierungsdatum) && + realisierungsdatum >= startdatum + ) + return realisierungsdatum; + else return startdatum; }); const maxDate = computed(() => { - const yesterday = new Date(new Date().setDate(new Date().getDate() - 1)) - .toISOString() - .slice(0, 10); - return messstelleInfo.value.abbaudatum ?? yesterday; + const yesterday = new Date(new Date().setDate(new Date().getDate() - 1)); + return isNil(messstelleInfo.value.abbaudatum) + ? yesterday + : new Date(messstelleInfo.value.abbaudatum); }); -const dateVon = computed({ - get() { - return new Date(chosenOptionsCopy.value.zeitraum[0]); - }, - - set(value: Date) { - saveDateValueVon(value); - }, -}); -const dateBis = computed({ +const zeitraum = computed({ get() { - return chosenOptionsCopy.value.zeitraum.length === 2 - ? new Date(chosenOptionsCopy.value.zeitraum[1]) - : nextDayOfVon.value; + return toArray(chosenOptionsCopy.value.zeitraum).map( + (date) => new Date(date) + ); }, - set(value: Date) { - saveDateValueBis(value); + set(dates: Array | undefined) { + const newZeitraum = toArray(dates).map((date) => + dateUtils.formatDateToISO(date) + ); + chosenOptionsCopy.value.zeitraum = newZeitraum; }, }); @@ -234,33 +202,4 @@ function calculateChoosableOptions(): void { chosenOptionsCopy.value.zeitraum[0] ); } - -function resetDates() { - if (needRange.value) { - saveDateValueBis(dateBis.value); - } else { - if (chosenOptionsCopy.value.zeitraum.length === 2) { - chosenOptionsCopy.value.zeitraum.pop(); - } - chosenOptionsCopy.value.tagesTyp = ""; - } -} - -function saveDateValueVon(toSave: Date) { - const dateToSave = dateUtils.formatDateToISO(toSave); - if (chosenOptionsCopy.value.zeitraum.length === 0) { - chosenOptionsCopy.value.zeitraum.push(dateToSave); - } else { - chosenOptionsCopy.value.zeitraum[0] = dateToSave; - } -} - -function saveDateValueBis(toSave: Date) { - const dateToSave = dateUtils.formatDateToISO(toSave); - if (chosenOptionsCopy.value.zeitraum.length === 2) { - chosenOptionsCopy.value.zeitraum[1] = dateToSave; - } else { - chosenOptionsCopy.value.zeitraum.push(dateToSave); - } -} diff --git a/frontend/src/components/messstelle/optionsmenue/panels/ZeitauswahlRadiogroup.vue b/frontend/src/components/messstelle/optionsmenue/panels/ZeitauswahlRadiogroup.vue index 4a214ac7..3b38fd7f 100644 --- a/frontend/src/components/messstelle/optionsmenue/panels/ZeitauswahlRadiogroup.vue +++ b/frontend/src/components/messstelle/optionsmenue/panels/ZeitauswahlRadiogroup.vue @@ -123,11 +123,39 @@ function zeitauswahlChanged() { } else if (chosenOptionsCopy.value.zeitauswahl === Zeitauswahl.STUNDE) { chosenOptionsCopy.value.zeitblock = ZeitblockStuendlich.ZB_00_01; } else if ( - chosenOptionsCopy.value.zeitauswahl === Zeitauswahl.SPITZENSTUNDE_KFZ || - chosenOptionsCopy.value.zeitauswahl === Zeitauswahl.SPITZENSTUNDE_RAD || + chosenOptionsCopy.value.zeitauswahl === Zeitauswahl.SPITZENSTUNDE_KFZ + ) { + chosenOptionsCopy.value.zeitblock = Zeitblock.ZB_00_06; + resetFahrzeuge(); + chosenOptionsCopy.value.fahrzeuge.kraftfahrzeugverkehr = true; + } else if ( + chosenOptionsCopy.value.zeitauswahl === Zeitauswahl.SPITZENSTUNDE_RAD + ) { + chosenOptionsCopy.value.zeitblock = Zeitblock.ZB_00_06; + resetFahrzeuge(); + chosenOptionsCopy.value.fahrzeuge.radverkehr = true; + } else if ( chosenOptionsCopy.value.zeitauswahl === Zeitauswahl.SPITZENSTUNDE_FUSS ) { chosenOptionsCopy.value.zeitblock = Zeitblock.ZB_00_06; + resetFahrzeuge(); + chosenOptionsCopy.value.fahrzeuge.fussverkehr = true; + } + + function resetFahrzeuge() { + chosenOptionsCopy.value.fahrzeuge.kraftfahrzeugverkehr = false; + chosenOptionsCopy.value.fahrzeuge.schwerverkehr = false; + chosenOptionsCopy.value.fahrzeuge.gueterverkehr = false; + chosenOptionsCopy.value.fahrzeuge.schwerverkehrsanteilProzent = false; + chosenOptionsCopy.value.fahrzeuge.gueterverkehrsanteilProzent = false; + chosenOptionsCopy.value.fahrzeuge.radverkehr = false; + chosenOptionsCopy.value.fahrzeuge.fussverkehr = false; + chosenOptionsCopy.value.fahrzeuge.lastkraftwagen = false; + chosenOptionsCopy.value.fahrzeuge.lastzuege = false; + chosenOptionsCopy.value.fahrzeuge.busse = false; + chosenOptionsCopy.value.fahrzeuge.kraftraeder = false; + chosenOptionsCopy.value.fahrzeuge.personenkraftwagen = false; + chosenOptionsCopy.value.fahrzeuge.lieferwagen = false; } } diff --git a/frontend/src/components/zaehlstelle/ZaehldatenDiagramme.vue b/frontend/src/components/zaehlstelle/ZaehldatenDiagramme.vue index 1e9c3953..06a549bc 100644 --- a/frontend/src/components/zaehlstelle/ZaehldatenDiagramme.vue +++ b/frontend/src/components/zaehlstelle/ZaehldatenDiagramme.vue @@ -131,7 +131,7 @@ { - res.blob().then((blob) => { - // Erster Buchstabe soll im Dateinamen groß geschrieben sein, also z. B. Ganglinie statt ganglinie. - const typeForFilename: string = - type.charAt(0).toUpperCase() + type.slice(1); - const filename = `${reportTools.getFileName( - Erhebungsstelle.ZAEHLSTELLE, - typeForFilename, - [selectedZaehlung.value.datum] - )}.pdf`; - downloadUtils.downloadFile(blob, filename); - }); + .then((blob) => { + // Erster Buchstabe soll im Dateinamen groß geschrieben sein, also z. B. Ganglinie statt ganglinie. + const typeForFilename: string = + type.charAt(0).toUpperCase() + type.slice(1); + const filename = `${reportTools.getFileName( + Erhebungsstelle.ZAEHLSTELLE, + typeForFilename, + [selectedZaehlung.value.datum] + )}.pdf`; + downloadUtils.downloadFile(blob, filename); }) .catch((error) => snackbarStore.showApiError(error)) .finally(() => (loadingFile.value = false)); diff --git a/frontend/src/components/zaehlstelle/optionsmenue/OptionsmenueZaehlstelle.vue b/frontend/src/components/zaehlstelle/optionsmenue/OptionsmenueZaehlstelle.vue index a75086be..9a6d97f3 100644 --- a/frontend/src/components/zaehlstelle/optionsmenue/OptionsmenueZaehlstelle.vue +++ b/frontend/src/components/zaehlstelle/optionsmenue/OptionsmenueZaehlstelle.vue @@ -162,9 +162,9 @@ const options = computed(() => { const getContentSheetHeight = computed(() => { if (display.xl.value) { - return "650px"; + return "750px"; } - return "400px"; + return "500px"; }); /** diff --git a/frontend/src/store/MessstelleStore.ts b/frontend/src/store/MessstelleStore.ts index baf24907..06e222f7 100644 --- a/frontend/src/store/MessstelleStore.ts +++ b/frontend/src/store/MessstelleStore.ts @@ -26,6 +26,8 @@ export const useMessstelleStore = defineStore("messstelleStore", () => { const activeMessfaehigkeit = ref( DefaultObjectCreator.createDefaultMessfaehigkeitDTO() ); + const includedMeasuringDays = ref(0); + const requestedMeasuringDays = ref(0); const getMessstelleInfo = computed(() => messstelleInfo.value); const getActiveTab = computed(() => activeTab.value); @@ -43,6 +45,10 @@ export const useMessstelleStore = defineStore("messstelleStore", () => { () => belastungsplanChosenSize.value ); const getActiveMessfaehigkeit = computed(() => activeMessfaehigkeit.value); + const getIncludedMeasuringDays = computed(() => includedMeasuringDays.value); + const getRequestedMeasuringDays = computed( + () => requestedMeasuringDays.value + ); function setActiveTab(payload: number) { activeTab.value = payload; @@ -88,6 +94,12 @@ export const useMessstelleStore = defineStore("messstelleStore", () => { } ); } + function setIncludedMeasuringDays(payload: number) { + includedMeasuringDays.value = payload; + } + function setRequestedMeasuringDays(payload: number) { + requestedMeasuringDays.value = payload; + } return { getMessstelleInfo, @@ -100,6 +112,8 @@ export const useMessstelleStore = defineStore("messstelleStore", () => { getBelastungsplanMaxSize, getBelastungsplanChosenSize, getActiveMessfaehigkeit, + getIncludedMeasuringDays, + getRequestedMeasuringDays, setActiveTab, setMessstelleInfo, setFilteroptions, @@ -110,5 +124,7 @@ export const useMessstelleStore = defineStore("messstelleStore", () => { setBelastungsplanMaxSize, setBelastungsplanChosenSize, calculateActiveMessfaehigkeit, + setIncludedMeasuringDays, + setRequestedMeasuringDays, }; }); diff --git a/frontend/src/types/common/KeyValObject.ts b/frontend/src/types/common/KeyValObject.ts new file mode 100644 index 00000000..31b3c3dd --- /dev/null +++ b/frontend/src/types/common/KeyValObject.ts @@ -0,0 +1,4 @@ +export default interface KeyValObject { + title: string; + value: object; +} diff --git a/frontend/src/types/enum/TagesTyp.ts b/frontend/src/types/enum/TagesTyp.ts index d87fc336..c798cda7 100644 --- a/frontend/src/types/enum/TagesTyp.ts +++ b/frontend/src/types/enum/TagesTyp.ts @@ -5,6 +5,7 @@ enum TagesTyp { SONNTAG_FEIERTAG = "SONNTAG_FEIERTAG", WERKTAG_FERIEN = "WERKTAG_FERIEN", MO_SO = "MO_SO", + UNSPECIFIED = "UNSPECIFIED", } export const tagesTypText = new Map([ @@ -14,6 +15,7 @@ export const tagesTypText = new Map([ [TagesTyp.SONNTAG_FEIERTAG, "Sonntag/Feiertag in/außerhalb Ferien"], [TagesTyp.WERKTAG_FERIEN, "Mo-Fr Ferien"], [TagesTyp.MO_SO, "DTV (MO - SO)"], + [TagesTyp.UNSPECIFIED, "unspecified"], ]); export default TagesTyp; diff --git a/frontend/src/types/messstelle/LadeProcessedMessdatenDTO.ts b/frontend/src/types/messstelle/LadeProcessedMessdatenDTO.ts index f8065bc0..847c58c7 100644 --- a/frontend/src/types/messstelle/LadeProcessedMessdatenDTO.ts +++ b/frontend/src/types/messstelle/LadeProcessedMessdatenDTO.ts @@ -11,4 +11,7 @@ export default interface LadeProcessedMessdatenDTO { zaehldatenHeatmap: LadeZaehldatenHeatmapDTO; belastungsplanMessquerschnitte: BelastungsplanMessquerschnitteDTO; + + requestedMeasuringDays: number; + includedMeasuringDays: number; } diff --git a/frontend/src/types/messstelle/ValidWochentageInPeriodDto.ts b/frontend/src/types/messstelle/ValidWochentageInPeriodDto.ts deleted file mode 100644 index 24046c65..00000000 --- a/frontend/src/types/messstelle/ValidWochentageInPeriodDto.ts +++ /dev/null @@ -1,8 +0,0 @@ -export interface ValidWochentageInPeriodDto { - numberOfValidTagesTypDiMiDo: number; - numberOfValidTagesTypMoFr: number; - numberOfValidTagesTypSamstag: number; - numberOfValidTagesTypSonntagFeiertag: number; - numberOfValidTagesTypWerktagFerien: number; - numberOfValidTagesTypMoSo: number; -} diff --git a/frontend/src/types/messstelle/ValidWochentageInPeriodRequestDto.ts b/frontend/src/types/messstelle/ValidWochentageInPeriodRequestDto.ts deleted file mode 100644 index 62b8b4bc..00000000 --- a/frontend/src/types/messstelle/ValidWochentageInPeriodRequestDto.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface ValidWochentageInPeriodRequestDto { - startDate: string; - - endDate: string; - - messstelleId: string; -} diff --git a/frontend/src/types/messstelle/auswertung/MessstelleAuswertungIdDTO.ts b/frontend/src/types/messstelle/auswertung/MessstelleAuswertungIdDTO.ts new file mode 100644 index 00000000..8e635ac0 --- /dev/null +++ b/frontend/src/types/messstelle/auswertung/MessstelleAuswertungIdDTO.ts @@ -0,0 +1,4 @@ +export default interface MessstelleAuswertungIdDTO { + mstId: string; + mqIds: Array; +} diff --git a/frontend/src/types/messstelle/auswertung/MessstelleAuswertungOptionsDTO.ts b/frontend/src/types/messstelle/auswertung/MessstelleAuswertungOptionsDTO.ts index bfb23a33..aa188e1b 100644 --- a/frontend/src/types/messstelle/auswertung/MessstelleAuswertungOptionsDTO.ts +++ b/frontend/src/types/messstelle/auswertung/MessstelleAuswertungOptionsDTO.ts @@ -1,3 +1,4 @@ +import type MessstelleAuswertungIdDTO from "@/types/messstelle/auswertung/MessstelleAuswertungIdDTO"; import type FahrzeugOptions from "@/types/messstelle/FahrzeugOptions"; import { AuswertungsZeitraum } from "@/types/enum/AuswertungCategories"; @@ -7,8 +8,7 @@ export default interface MessstelleAuswertungOptionsDTO { jahre: Array; tagesTyp: TagesTyp; zeitraum: Array; - mstIds: Array; - mqIds: Array; + messstelleAuswertungIds: Array; fahrzeuge: FahrzeugOptions; // Nicht fuer das Backend diff --git a/frontend/src/util/DateUtils.ts b/frontend/src/util/DateUtils.ts index 1a0dd9f3..5b3a7787 100644 --- a/frontend/src/util/DateUtils.ts +++ b/frontend/src/util/DateUtils.ts @@ -6,18 +6,26 @@ export function useDateUtils() { function formatDate(date: string): string { if (!date) { - return ""; + return "unbekannt"; + } + if (date.includes("-")) { + const [year, month, day] = date.split("-"); + return `${day}.${month}.${year}`; + } else { + return date; } - const [year, month, day] = date.split("-"); - return `${day}.${month}.${year}`; } function formatDateAsStringToISO(date: string): string { if (!date) { - return ""; + return "unbekannt"; + } + if (date.includes(".")) { + const [day, month, year] = date.split("."); + return `${year}-${month}-${day}`; + } else { + return date; } - const [day, month, year] = date.split("."); - return `${year}-${month}-${day}`; } function formatDateToISO(date: Date): string { if (!date) { diff --git a/frontend/src/util/DefaultObjectCreator.ts b/frontend/src/util/DefaultObjectCreator.ts index fcbc34de..7bddf239 100644 --- a/frontend/src/util/DefaultObjectCreator.ts +++ b/frontend/src/util/DefaultObjectCreator.ts @@ -2,6 +2,7 @@ import type InfoMessageDTO from "@/types/app/InfoMessageDTO"; import type TooltipZaehlstelleDTO from "@/types/karte/TooltipZaehlstelleDTO"; import type ZaehlstelleKarteDTO from "@/types/karte/ZaehlstelleKarteDTO"; import type MessstelleAuswertungOptionsDTO from "@/types/messstelle/auswertung/MessstelleAuswertungOptionsDTO"; +import type BelastungsplanMessquerschnitteDTO from "@/types/messstelle/BelastungsplanMessquerschnitteDTO"; import type FahrzeugOptions from "@/types/messstelle/FahrzeugOptions"; import type MessfaehigkeitDTO from "@/types/messstelle/MessfaehigkeitDTO"; import type MessstelleInfoDTO from "@/types/messstelle/MessstelleInfoDTO"; @@ -11,6 +12,8 @@ import type FahrbeziehungenDTO from "@/types/zaehlung/FahrbeziehungenDTO"; import type LadeZaehlungDTO from "@/types/zaehlung/LadeZaehlungDTO"; import type OptionsDTO from "@/types/zaehlung/OptionsDTO"; import type { StartEndeUhrzeitIntervalls } from "@/types/zaehlung/StartEndeUhrzeitIntervalls"; +import type LadeZaehldatenHeatmapDTO from "@/types/zaehlung/zaehldaten/LadeZaehldatenHeatmapDTO"; +import type LadeZaehldatenSteplineDTO from "@/types/zaehlung/zaehldaten/LadeZaehldatenSteplineDTO"; import type ZeitauswahlDTO from "@/types/zaehlung/ZeitauswahlDTO"; import DetektierteFahrzeugart from "@/types/enum/DetektierteFahrzeugart"; @@ -112,7 +115,7 @@ export default class DefaultObjectCreator { fahrzeuge: this.createDefaultFahrzeugOptions(), intervall: "" as ZaehldatenIntervall, messquerschnittIds: [], - tagesTyp: "" as TagesTyp, + tagesTyp: TagesTyp.UNSPECIFIED, zeitauswahl: "", zeitblock: "", zeitraum: [], @@ -124,8 +127,7 @@ export default class DefaultObjectCreator { jahre: [], tagesTyp: "" as TagesTyp, zeitraum: [], - mstIds: [], - mqIds: [], + messstelleAuswertungIds: [], fahrzeuge: { kraftfahrzeugverkehr: false, schwerverkehr: false, @@ -262,4 +264,43 @@ export default class DefaultObjectCreator { intervall: ZaehldatenIntervall.STUNDE_VIERTEL_EINGESCHRAENKT, } as MessfaehigkeitDTO; } + + public static createDefaultBelastungsplanMessquerschnitteDTO(): BelastungsplanMessquerschnitteDTO { + return { + ladeBelastungsplanMessquerschnittDataDTOList: [], + strassenname: "", + stadtbezirkNummer: "", + mstId: "", + totalKfz: 0, + totalSv: 0, + totalGv: 0, + totalRad: 0, + totalPercentSv: 0, + totalPercentGv: 0, + } as BelastungsplanMessquerschnitteDTO; + } + + public static createDefaultLadeZaehldatenSteplineDTO(): LadeZaehldatenSteplineDTO { + return { + legend: [], + rangeMax: 0, + rangeMaxPercent: 0, + xaxisDataFirstChart: [], + xaxisDataSecondChart: null, + seriesEntriesFirstChart: [], + seriesEntriesSecondChart: null, + } as LadeZaehldatenSteplineDTO; + } + + public static createDefaultLadeZaehldatenHeatmapDTO(): LadeZaehldatenHeatmapDTO { + return { + legend: [], + rangeMin: 0, + rangeMax: 0, + xaxisDataFirstChart: [], + seriesEntriesFirstChart: [], + xaxisDataSecondChart: null, + seriesEntriesSecondChart: null, + } as LadeZaehldatenHeatmapDTO; + } } diff --git a/frontend/src/util/GlobalInfoMessage.ts b/frontend/src/util/GlobalInfoMessage.ts index 09f02ffe..89d459a7 100644 --- a/frontend/src/util/GlobalInfoMessage.ts +++ b/frontend/src/util/GlobalInfoMessage.ts @@ -2,7 +2,15 @@ export function useGlobalInfoMessage() { const NO_BELASTUNGSPLAN = "Bei fehlender Auswahl der Verkehrsart ist eine Anzeige des Belastungsplans nicht möglich."; + const ZEITRAUM_GROESSER_FUENF_JAHRE = + "Da der Zeitraum größer als 5 Jahre ist steht die Anzeige nicht zur Verfügung"; + + const NO_DATA_AVAILABLE = + "Für den angegebenen Zeitpunkt / Zeitraum liegen keine Daten vor."; + return { NO_BELASTUNGSPLAN, + ZEITRAUM_GROESSER_FUENF_JAHRE, + NO_DATA_AVAILABLE, }; } diff --git a/frontend/src/views/AuswertungView.vue b/frontend/src/views/AuswertungView.vue index 2df57024..704fe752 100644 --- a/frontend/src/views/AuswertungView.vue +++ b/frontend/src/views/AuswertungView.vue @@ -49,6 +49,7 @@ import { useDisplay } from "vuetify"; import MessstelleAuswertungService from "@/api/service/MessstelleAuswertungService"; import AuswertungStepper from "@/components/messstelle/gesamtauswertung/stepper/AuswertungStepper.vue"; import DefaultObjectCreator from "@/util/DefaultObjectCreator"; +import { useDownloadUtils } from "@/util/DownloadUtils"; const minWidth = 600; @@ -80,20 +81,11 @@ const isEverythingValid = computed(() => { auswertungsOptions.value.zeitraum.length > 0 && auswertungsOptions.value.tagesTyp.length > 0 && auswertungsOptions.value.jahre.length > 0 && - areMstAndMqValid.value && + auswertungsOptions.value.messstelleAuswertungIds.length > 0 && areFahrzeugeValid.value ); }); -const areMstAndMqValid = computed(() => { - return ( - (auswertungsOptions.value.mstIds.length > 1 && - auswertungsOptions.value.mqIds.length === 0) || - (auswertungsOptions.value.mstIds.length === 1 && - auswertungsOptions.value.mqIds.length > 0) - ); -}); - const areFahrzeugeValid = computed(() => { return ( auswertungsOptions.value.fahrzeuge.kraftfahrzeugverkehr || @@ -118,6 +110,12 @@ function resetAuswertungsOptions() { } function auswertungStarten() { - MessstelleAuswertungService.generate(auswertungsOptions.value); + MessstelleAuswertungService.generate(auswertungsOptions.value).then( + (blob) => { + // Beispiel: 251101K_15-11-2020_Belastungsplan.pdf + const filename = `Gesamtauswertung_${new Date().toISOString().split("T")[0]}.xlsx`; + useDownloadUtils().downloadFile(blob, filename); + } + ); } diff --git a/frontend/src/views/HomeView.vue b/frontend/src/views/HomeView.vue index a2df4763..539ec33d 100644 --- a/frontend/src/views/HomeView.vue +++ b/frontend/src/views/HomeView.vue @@ -15,6 +15,7 @@ { - res.blob().then((blob) => { - pdfSourceAsBlob.value = blob; - downloadPdf(); - }); + .then((blob) => { + pdfSourceAsBlob.value = blob; + downloadPdf(); }) .catch((error) => snackbarStore.showApiError(error)) .finally(() => (loadingPdf.value = false));