diff --git a/webapp/index.html b/webapp/index.html index fff1426..06571d0 100644 --- a/webapp/index.html +++ b/webapp/index.html @@ -3,9 +3,9 @@ - + - FM-12 Form + wis2box diff --git a/webapp/package-lock.json b/webapp/package-lock.json index 76f18ea..3844d3c 100644 --- a/webapp/package-lock.json +++ b/webapp/package-lock.json @@ -10,11 +10,12 @@ "dependencies": { "@mdi/font": "7.0.96", "@vuepic/vue-datepicker": "^5.4.0", - "axios": "^1.4.0", + "apexcharts": "^3.41.1", "core-js": "^3.29.0", "roboto-fontface": "*", "vue": "^3.2.0", "vue-router": "^4.0.0", + "vue3-apexcharts": "^1.4.4", "vuetify": "^3.0.0", "webfontloader": "^1.0.0" }, @@ -745,27 +746,25 @@ "node": ">= 8" } }, + "node_modules/apexcharts": { + "version": "3.41.1", + "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.41.1.tgz", + "integrity": "sha512-kta8fhXrfZYqW7K9kF7FqZ6imQaC6moyRgcUZjwIky/oeHVVISSN/2rjUIvZXnwxWHiSdDHMqLy+TqJhB4DXFA==", + "dependencies": { + "svg.draggable.js": "^2.2.2", + "svg.easing.js": "^2.0.0", + "svg.filter.js": "^2.0.2", + "svg.pathmorphing.js": "^0.1.3", + "svg.resize.js": "^1.4.3", + "svg.select.js": "^3.0.1" + } + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/axios": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", - "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -891,17 +890,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -1001,14 +989,6 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -1342,38 +1322,6 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1679,25 +1627,6 @@ "semver": "bin/semver.js" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -1994,11 +1923,6 @@ "node": ">= 0.8.0" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, "node_modules/punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", @@ -2220,6 +2144,89 @@ "node": ">=8" } }, + "node_modules/svg.draggable.js": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz", + "integrity": "sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==", + "dependencies": { + "svg.js": "^2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.easing.js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/svg.easing.js/-/svg.easing.js-2.0.0.tgz", + "integrity": "sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==", + "dependencies": { + "svg.js": ">=2.3.x" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.filter.js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/svg.filter.js/-/svg.filter.js-2.0.2.tgz", + "integrity": "sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==", + "dependencies": { + "svg.js": "^2.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.js": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/svg.js/-/svg.js-2.7.1.tgz", + "integrity": "sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==" + }, + "node_modules/svg.pathmorphing.js": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz", + "integrity": "sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==", + "dependencies": { + "svg.js": "^2.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.resize.js": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/svg.resize.js/-/svg.resize.js-1.4.3.tgz", + "integrity": "sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==", + "dependencies": { + "svg.js": "^2.6.5", + "svg.select.js": "^2.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.resize.js/node_modules/svg.select.js": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-2.1.2.tgz", + "integrity": "sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==", + "dependencies": { + "svg.js": "^2.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.select.js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-3.0.1.tgz", + "integrity": "sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==", + "dependencies": { + "svg.js": "^2.6.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -2410,6 +2417,15 @@ "vue": "^3.2.0" } }, + "node_modules/vue3-apexcharts": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/vue3-apexcharts/-/vue3-apexcharts-1.4.4.tgz", + "integrity": "sha512-TH89uZrxGjaDvkaYAISvj8+k6Bf1rUKFillc8oJirs5XZEPiwM1ELKZQ786wz0rfPqkSHHny2lqqUCK7Rw+LcQ==", + "peerDependencies": { + "apexcharts": "> 3.0.0", + "vue": "> 3.0.0" + } + }, "node_modules/vuetify": { "version": "3.3.8", "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-3.3.8.tgz", diff --git a/webapp/package.json b/webapp/package.json index 7170ce8..0390de6 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -11,10 +11,12 @@ "dependencies": { "@mdi/font": "7.0.96", "@vuepic/vue-datepicker": "^5.4.0", + "apexcharts": "^3.41.1", "core-js": "^3.29.0", "roboto-fontface": "*", "vue": "^3.2.0", "vue-router": "^4.0.0", + "vue3-apexcharts": "^1.4.4", "vuetify": "^3.0.0", "webfontloader": "^1.0.0" }, diff --git a/webapp/public/favicon.ico b/webapp/public/favicon.ico deleted file mode 100644 index 8fb9f91..0000000 Binary files a/webapp/public/favicon.ico and /dev/null differ diff --git a/webapp/src/App_old.vue b/webapp/src/App_old.vue deleted file mode 100644 index e4e2270..0000000 --- a/webapp/src/App_old.vue +++ /dev/null @@ -1,10 +0,0 @@ - - \ No newline at end of file diff --git a/webapp/src/assets/banner.png b/webapp/src/assets/banner.png new file mode 100644 index 0000000..af1f4bb Binary files /dev/null and b/webapp/src/assets/banner.png differ diff --git a/webapp/src/assets/foot.png b/webapp/src/assets/foot.png new file mode 100644 index 0000000..75f7f7b Binary files /dev/null and b/webapp/src/assets/foot.png differ diff --git a/webapp/src/assets/logo-large.png b/webapp/src/assets/logo-large.png new file mode 100644 index 0000000..ba12a41 Binary files /dev/null and b/webapp/src/assets/logo-large.png differ diff --git a/webapp/src/assets/logo-small.png b/webapp/src/assets/logo-small.png new file mode 100644 index 0000000..174364c Binary files /dev/null and b/webapp/src/assets/logo-small.png differ diff --git a/webapp/src/assets/logo.png b/webapp/src/assets/logo.png deleted file mode 100644 index a5f23ae..0000000 Binary files a/webapp/src/assets/logo.png and /dev/null differ diff --git a/webapp/src/assets/logo.svg b/webapp/src/assets/logo.svg deleted file mode 100644 index d57771c..0000000 --- a/webapp/src/assets/logo.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/webapp/src/components/DownloadButton.vue b/webapp/src/components/DownloadButton.vue index 94ea44c..90e9710 100644 --- a/webapp/src/components/DownloadButton.vue +++ b/webapp/src/components/DownloadButton.vue @@ -1,9 +1,9 @@ + \ No newline at end of file diff --git a/webapp/src/components/NotificationDashboard.vue b/webapp/src/components/NotificationDashboard.vue new file mode 100644 index 0000000..578c6d1 --- /dev/null +++ b/webapp/src/components/NotificationDashboard.vue @@ -0,0 +1,566 @@ + + + + + \ No newline at end of file diff --git a/webapp/src/components/NotificationsButton.vue b/webapp/src/components/NotificationsButton.vue deleted file mode 100644 index 413a30b..0000000 --- a/webapp/src/components/NotificationsButton.vue +++ /dev/null @@ -1,225 +0,0 @@ - - - - - \ No newline at end of file diff --git a/webapp/src/components/SynopForm.vue b/webapp/src/components/SynopForm.vue index c2b6e94..af22b50 100644 --- a/webapp/src/components/SynopForm.vue +++ b/webapp/src/components/SynopForm.vue @@ -1,63 +1,161 @@ \ No newline at end of file diff --git a/webapp/src/components/WIS2Notifications.vue b/webapp/src/components/WIS2Notifications.vue deleted file mode 100644 index 42ec2f6..0000000 --- a/webapp/src/components/WIS2Notifications.vue +++ /dev/null @@ -1,87 +0,0 @@ - - - \ No newline at end of file diff --git a/webapp/src/layouts/default/AppBar.vue b/webapp/src/layouts/default/AppBar.vue index 7339932..572a4b5 100644 --- a/webapp/src/layouts/default/AppBar.vue +++ b/webapp/src/layouts/default/AppBar.vue @@ -1,15 +1,37 @@ + + diff --git a/webapp/src/layouts/default/Default.vue b/webapp/src/layouts/default/Default.vue index 62ba176..c0c4faf 100644 --- a/webapp/src/layouts/default/Default.vue +++ b/webapp/src/layouts/default/Default.vue @@ -1,12 +1,15 @@ diff --git a/webapp/src/layouts/default/Footer.vue b/webapp/src/layouts/default/Footer.vue new file mode 100644 index 0000000..47ea27d --- /dev/null +++ b/webapp/src/layouts/default/Footer.vue @@ -0,0 +1,18 @@ + + + \ No newline at end of file diff --git a/webapp/src/plugins/index.js b/webapp/src/plugins/index.js index 4974223..2e19b97 100644 --- a/webapp/src/plugins/index.js +++ b/webapp/src/plugins/index.js @@ -8,10 +8,12 @@ import { loadFonts } from './webfontloader' import vuetify from './vuetify' import router from '../router' +import VueApexCharts from 'vue3-apexcharts'; export function registerPlugins (app) { loadFonts() app .use(vuetify) .use(router) + .use(VueApexCharts) } diff --git a/webapp/src/router/index.js b/webapp/src/router/index.js index b53996b..3f175ba 100644 --- a/webapp/src/router/index.js +++ b/webapp/src/router/index.js @@ -14,19 +14,29 @@ const routes = [ path: 'synop_form', name: 'SynopForm', component: () => import('@/views/SynopForm.vue'), + meta: {title: 'wis2box - Synop Form'} }, { - path: 'wis2_notifications', // New route for the notifications page - name: 'wis2_notifications', - component: () => import('@/views/WIS2Notifications.vue'), + path: 'monitoring', // New route for the notifications page + name: 'Monitoring', + component: () => import('@/views/MonitoringPage.vue'), + meta: {title: 'wis2box - Monitoring'} }, ], }, ] +// Create the router const router = createRouter({ history: createWebHistory('/wis2box-webapp/'), routes, }) +// Assign the title of the browser tab for each page +router.beforeEach((to, from, next) => { + const nearestWithTitle = to.matched.slice().reverse().find(r => r.meta && r.meta.title); + if(nearestWithTitle) document.title = nearestWithTitle.meta.title; + next(); +}); + export default router diff --git a/webapp/src/views/MonitoringPage.vue b/webapp/src/views/MonitoringPage.vue new file mode 100644 index 0000000..267d638 --- /dev/null +++ b/webapp/src/views/MonitoringPage.vue @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/webapp/src/views/WIS2Notifications.vue b/webapp/src/views/WIS2Notifications.vue deleted file mode 100644 index 7858ab5..0000000 --- a/webapp/src/views/WIS2Notifications.vue +++ /dev/null @@ -1,7 +0,0 @@ - - - \ No newline at end of file