diff --git a/client/src/api/Api.js b/client/src/api/Api.js index 1e9bdca9..bbc65b29 100644 --- a/client/src/api/Api.js +++ b/client/src/api/Api.js @@ -1,3 +1,10 @@ +const METHOD = { + GET: "GET", + POST: "POST", + PUT: "PUT", + DELETE: "DELETE" +}; + class Api { constructor() { if ( @@ -10,50 +17,28 @@ class Api { } } - getCall(url) { - return fetch(encodeURI(`${this.BASE_URL}/${url}`), { - method: "GET", + executeRequest(url, method, body) { + const options = { + method: method, headers: { "Content-Type": "application/json" } - }).then(response => { - return response.json(); - }); - } + }; - postCall(url, body) { - return fetch(encodeURI(`${this.BASE_URL}/${url}`), { - method: "POST", - headers: { - "Content-Type": "application/json" - }, - body: JSON.stringify(body) - }).then(response => { - return response.json(); - }); - } - - putCall(url, body) { - return fetch(encodeURI(`${this.BASE_URL}/${url}`), { - method: "PUT", - headers: { - "Content-Type": "application/json" - }, - body: JSON.stringify(body) - }).then(response => { - return response.json(); - }); - } + if (body) { + options.body = JSON.stringify(body); + } - deleteCall(url) { - return fetch(encodeURI(`${this.BASE_URL}/${url}`), { - method: "DELETE", - headers: { - "Content-Type": "application/json" + return fetch(encodeURI(`${this.BASE_URL}/${url}`), options).then( + response => { + if (response.ok) { + return response.json(); + } else { + console.error(response); + throw new Error(`An error occured: Status ${response.status}`); + } } - }).then(response => { - return response.json(); - }); + ); } /* @@ -61,7 +46,7 @@ class Api { */ postDoctorCreateAppointment({ doctorId, laboratoryId, patientId }) { - return this.postCall("/doctor/create_appointment", { + return this.executeRequest("/doctor/create_appointment", METHOD.POST, { doctorId, laboratoryId, patientId @@ -69,50 +54,51 @@ class Api { } getTestReports(testId) { - return this.getCall(`/test_report/${testId}`); + return this.executeRequest(`/test_report/${testId}`, METHOD.GET); } // TODO: postTestReport, putTestReport | how to handle multipart/form-data in fetch ?! getTestReport(testId) { - return this.getCall(`/test_report/${testId}`); + return this.executeRequest(`/test_report/${testId}`, METHOD.GET); } deleteTestReport(testId) { - return this.deleteCall(`/test_report/${testId}`); + return this.executeRequest(`/test_report/${testId}`, METHOD.DELETE); } postInstitution(institution) { - return this.postCall("/institutions", institution); + return this.executeRequest("/institutions", METHOD.POST, institution); } postLabtest(labtest) { - return this.postCall("/labtest", labtest); + return this.executeRequest("/labtest", METHOD.POST, labtest); } putLabtest({ updatedTestStatus }) { - return this.postCall("/labtest", updatedTestStatus); + return this.executeRequest("/labtest", METHOD.PUT, updatedTestStatus); } getLabtestByPatient(patientId) { - return this.getCall(`/labtest/patient/${patientId}`); + return this.executeRequest(`/labtest/patient/${patientId}`, METHOD.GET); } getPatients() { - return this.getCall("/patients"); + return this.executeRequest("/patients", METHOD.GET); } postPatient(patient) { - return this.postCall("/patients", patient); + return this.executeRequest("/patients", METHOD.POST, patient); } getPatient(id) { - return this.getCall(`/patients/${id}`); + return this.executeRequest(`/patients/${id}`, METHOD.GET); } getStats(lowerBoundsZip, upperBoundsZip) { - return this.getCall( - `/stats?lowerBoundsZip=${lowerBoundsZip}&upperBoundsZips=${upperBoundsZip}` + return this.executeRequest( + `/stats?lowerBoundsZip=${lowerBoundsZip}&upperBoundsZips=${upperBoundsZip}`, + METHOD.GET ); } } diff --git a/client/src/components/laboratory/Login.vue b/client/src/components/laboratory/Login.vue index 4ee98845..fb0953a2 100644 --- a/client/src/components/laboratory/Login.vue +++ b/client/src/components/laboratory/Login.vue @@ -1,11 +1,11 @@ - + {{ title }} @@ -41,6 +42,10 @@ + + Testzugang: Kennung 1234, Password asdf + @@ -52,17 +57,36 @@ export default { props: { title: String }, + data() { + return { + form: this.$form.createForm(this) + }; + }, methods: { handleLogin(e) { e.preventDefault(); - // TODO: Send login request - console.log("Handle login."); + this.form.validateFields((err, values) => { + if (err) { + return; + } - this.$emit("on-login-success"); + if (values.id === "1234" && values.password === "asdf") { + this.$emit("on-login-success"); + } else { + this.$notification["error"]({ + message: "Login Fehler", + description: "Kennung und / oder Password nicht korrekt." + }); + } + }); } } }; - + diff --git a/client/src/components/page/LinkSampleAndPatientPage.vue b/client/src/components/page/LinkSampleAndPatientPage.vue index c1f3979c..b955e8a4 100644 --- a/client/src/components/page/LinkSampleAndPatientPage.vue +++ b/client/src/components/page/LinkSampleAndPatientPage.vue @@ -1,7 +1,7 @@ - + - + - - + + + Registrieren Sie hier eine neue Instutition in IMIS. + + + - Labor - Arztpraxis - Klinik - Teststelle - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + Labor + Arztpraxis + Klinik + Teststelle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ich erkläre mich mit der Übermittlung dieser Daten zur weiteren + Verarbeitung einverstanden. + + + - - - Ich erkläre mich mit der Übermittlung dieser Daten zur weiteren - Verarbeitung einverstanden. - - - - - - Registrieren - - - + + + + + + Registrieren + + + + + + + + + Die Institution wurde erfolgreich registriert. + + Die Instituions ID lautet: {{ createdInstitution.id }} + @@ -86,7 +124,9 @@ export default { name: "RegisterInstitutionPage", data() { return { - form: this.$form.createForm(this, { name: "coordinated" }) + form: this.$form.createForm(this, { name: "coordinated" }), + createdInstitution: null, + dataProcessingClass: "" }; }, methods: { @@ -97,6 +137,13 @@ export default { e.preventDefault(); this.form.validateFields((err, values) => { + if (!this.checked) { + this.dataProcessingClass = "data-processing-not-selected"; + return; + } else if (err) { + return; + } + // TODO: Remove this when we go to production randomizeProperties( [ @@ -105,7 +152,7 @@ export default { "phoneNumber", "street", "houseNumber", - "zip", + { key: "zip", type: "number" }, "city" ], values @@ -113,10 +160,22 @@ export default { if (this.checked === true) { Api.postInstitution(values) - .then(() => { - this.$message.info("Created your Institution!"); + .then(institution => { + this.createdInstitution = institution; + + const notification = { + message: "Institution registriert.", + description: "Die Institution wurde erfolgreich registriert." + }; + this.$notification["success"](notification); }) - .catch(err => this.$message.info(err)); + .catch(err => { + const notification = { + message: "Fehler beim Registrieren der Institution.", + description: err.message + }; + this.$notification["error"](notification); + }); } }); } @@ -124,4 +183,13 @@ export default { }; - + diff --git a/client/src/components/page/RegisterPatientPage.vue b/client/src/components/page/RegisterPatientPage.vue index 76def00b..a2c98f4f 100644 --- a/client/src/components/page/RegisterPatientPage.vue +++ b/client/src/components/page/RegisterPatientPage.vue @@ -1,12 +1,10 @@ - - - - Nehmen Sie hier neue Patienten auf. Bitte füllen Sie den Bogen - vollständig aus. - - + + + Registrieren Sie hier neue Patienten in IMIS. Bitte füllen Sie den Bogen + vollständig aus. + - Datenschutzerklärung gelesen und verstanden + + + Ich erkläre mich mit der Übermittlung dieser Daten zur weiteren + Verarbeitung einverstanden. + + - - Nichts Anordnen (nur Anlegen) - - - - - - Quarantäne Anordnen - - - - - - Test + Quarantäne Anordnen + + Patient registrieren + Test anordnen @@ -252,7 +237,7 @@ Der Patient wurde erfolgreich registriert. - Die Patienten Id lautet: {{ response.id }} + Die Patienten ID lautet: {{ createdPatient.id }} @@ -261,6 +246,7 @@
{{ title }}
+ Testzugang: Kennung 1234, Password asdf +