diff options
Diffstat (limited to 'web-client/voll/src/views/FormView.vue')
| -rw-r--r-- | web-client/voll/src/views/FormView.vue | 381 |
1 files changed, 253 insertions, 128 deletions
diff --git a/web-client/voll/src/views/FormView.vue b/web-client/voll/src/views/FormView.vue index 5900274..f2eef9b 100644 --- a/web-client/voll/src/views/FormView.vue +++ b/web-client/voll/src/views/FormView.vue @@ -24,20 +24,188 @@ </Fieldset> </div> - <div class="form-div occupational"> - <h3 v-if="typeIs === 'doctors'" class="title">Occupational</h3> - <h3 v-if="typeIs === 'patients'" class="title">Patient</h3> + <div class="entity" + v-if="typeIs === 'doctors' && entity.address || typeIs === 'patients' && entity.address"> + <div class="form-div occupational"> + <h3 v-if="typeIs === 'doctors'" class="title">Occupational</h3> + <h3 v-if="typeIs === 'patients'" class="title">Patient</h3> + <div class="form-pair"> + <Fieldset> + <label class="field-label" for="name">Name</label> + <input type="text" class="field-input" id="name" v-model="entity.name" required /> + <span class="error-message"></span> + </Fieldset> + <Fieldset v-if="typeIs === 'doctors'"> + <label class="field-label" for="specialty" required>Specialty</label> + <select id="specialty" name="specialty" class="field-input" v-model="entity.specialty" + required> + <option disabled value="">Select a specialty</option> + <option value="ANESTHESIOLOGY">ANESTHESIOLOGY</option> + <option value="CARDIOLOGY">CARDIOLOGY</option> + <option value="DERMATOLOGY">DERMATOLOGY</option> + <option value="GYNECOLOGY">GYNECOLOGY</option> + <option value="IMMUNOLOGY">IMMUNOLOGY</option> + <option value="NEUROLOGY">NEUROLOGY</option> + <option value="OPHTHALMOLOGY">OPHTHALMOLOGY</option> + <option value="ORTHOPEDICS">ORTHOPEDICS</option> + <option value="PATHOLOGY">PATHOLOGY</option> + <option value="PEDIATRICS">PEDIATRICS</option> + <option value="PSYCHIATRY">PSYCHIATRY</option> + <option value="RADIOLOGY">RADIOLOGY</option> + <option value="SURGERY">SURGERY</option> + <option value="UROLOGY">UROLOGY</option> + </select> + <span class="error-message"></span> + </Fieldset> + <Fieldset v-if="typeIs === 'patients'"> + <label class="field-label" for="ssn">SSN</label> + <input type="text" name="SSN" class="field-input" id="ssn" v-model="entity.ssn" v-maska + data-maska="###-##-####" minlength="11" maxlength="11" :disabled="editing" required /> + <span class="error-message"></span> + </Fieldset> + </div> + </div> + + <div class="form-div contact"> + <h3 class="title">Contact</h3> + <div class="form-pair"> + <Fieldset> + <label class="field-label" for="email">Email</label> + <input type="email" class="field-input" id="email" v-model="entity.email" + :disabled="editing" required /> + <span class="error-message"></span> + </Fieldset> + <Fieldset> + <label class="field-label" for="tel">Phone number</label> + <input type="tel" class="field-input" id="tel" v-maska data-maska="(###) ###-####" + placeholder="(206) 555-1212" v-model="entity.phone" minlength="14" maxlength="14" + required /> + <span class="error-message"></span> + </Fieldset> + </div> + </div> + + <div class="form-div address"> + <h3 class="title">Professional address</h3> + <Fieldset id="zip-field"> + <label class="field-label" for="zip">Zip code</label> + <input type="text" class="field-input" id="zip" v-model="entity.address.postalCode" + maxlength="5" required /> + <span class="error-message"></span> + </Fieldset> + <div class="form-pair"> + <Fieldset> + <label class="field-label" for="address1">Address line 1</label> + <input type="text" class="field-input" id="address1" v-model="entity.address.addressLine1" + required /> + <span class="error-message"></span> + </Fieldset> + <Fieldset> + <label class="field-label" for="address2">Address line 2</label> + <input type="text" class="field-input" id="address2" + v-model="entity.address.addressLine2" /> + <span class="error-message"></span> + </Fieldset> + </div> + <div class="form-pair"> + <Fieldset> + <label class="field-label" for="city">City</label> + <input type="text" class="field-input" id="city" v-model="entity.address.city" required /> + <span class="error-message"></span> + </Fieldset> + <Fieldset> + <label class="field-label" for="state">State</label> + <select id="state" name="state" v-model="entity.address.state" class="field-input" required> + <option disabled value="">Select a state</option> + <option value="AL">Alabama</option> + <option value="AK">Alaska</option> + <option value="AZ">Arizona</option> + <option value="AR">Arkansas</option> + <option value="CA">California</option> + <option value="CO">Colorado</option> + <option value="CT">Connecticut</option> + <option value="DE">Delaware</option> + <option value="DC">District Of Columbia</option> + <option value="FL">Florida</option> + <option value="GA">Georgia</option> + <option value="HI">Hawaii</option> + <option value="ID">Idaho</option> + <option value="IL">Illinois</option> + <option value="IN">Indiana</option> + <option value="IA">Iowa</option> + <option value="KS">Kansas</option> + <option value="KY">Kentucky</option> + <option value="LA">Louisiana</option> + <option value="ME">Maine</option> + <option value="MD">Maryland</option> + <option value="MA">Massachusetts</option> + <option value="MI">Michigan</option> + <option value="MN">Minnesota</option> + <option value="MS">Mississippi</option> + <option value="MO">Missouri</option> + <option value="MT">Montana</option> + <option value="NE">Nebraska</option> + <option value="NV">Nevada</option> + <option value="NH">New Hampshire</option> + <option value="NJ">New Jersey</option> + <option value="NM">New Mexico</option> + <option value="NY">New York</option> + <option value="NC">North Carolina</option> + <option value="ND">North Dakota</option> + <option value="OH">Ohio</option> + <option value="OK">Oklahoma</option> + <option value="OR">Oregon</option> + <option value="PA">Pennsylvania</option> + <option value="RI">Rhode Island</option> + <option value="SC">South Carolina</option> + <option value="SD">South Dakota</option> + <option value="TN">Tennessee</option> + <option value="TX">Texas</option> + <option value="UT">Utah</option> + <option value="VT">Vermont</option> + <option value="VA">Virginia</option> + <option value="WA">Washington</option> + <option value="WV">West Virginia</option> + <option value="WI">Wisconsin</option> + <option value="WY">Wyoming</option> + </select> + <span class="error-message"></span> + </Fieldset> + </div> + </div> + </div> + <div v-else-if="typeIs === 'appointments'" class="entity"> + <h3 class="title">People involved</h3> <div class="form-pair"> <Fieldset> - <label class="field-label" for="name">Name</label> - <input type="text" class="field-input" id="name" v-model="entity.name" required /> + <label class="field-label" for="patient">Patient</label> + <select id="patient" name="patient" v-model="appointment.patientName" class="field-input" + required> + <option disabled value="">Select a patient</option> + <option v-for="patient, index in patients" :key="index" :value="patient.id">{{ patient.name + }}</option> + </select> <span class="error-message"></span> </Fieldset> - <Fieldset v-if="typeIs === 'doctors'"> - <label class="field-label" for="specialty" required>Specialty</label> - <select id="specialty" name="specialty" class="field-input" v-model="entity.specialty" - required> + <Fieldset v-if="!appointment.specialty"> + <label class="field-label" for="doctor">Doctor</label> + <select id="doctor" name="doctor" v-model="appointment.doctorName" class="field-input"> + <option disabled value="">Select a doctor</option> + <option value=""></option> + <option v-for="doctor, index in doctors" :key="index" :value="doctor.id">{{ doctor.name + + ' (' + doctor.specialty + ')' }}</option> + </select> + <span class="error-message"></span> + </Fieldset> + + </div> + <div v-if="!appointment.doctorName"> + <h3 class="title">Random doctor</h3> + <Fieldset> + <label class="field-label" for="specialty">Specialty</label> + <select id="specialty" name="specialty" v-model="appointment.specialty" class="field-input"> <option disabled value="">Select a specialty</option> + <option value=""></option> <option value="ANESTHESIOLOGY">ANESTHESIOLOGY</option> <option value="CARDIOLOGY">CARDIOLOGY</option> <option value="DERMATOLOGY">DERMATOLOGY</option> @@ -55,117 +223,19 @@ </select> <span class="error-message"></span> </Fieldset> - <Fieldset v-if="typeIs === 'patients'"> - <label class="field-label" for="ssn">SSN</label> - <input type="text" name="SSN" class="field-input" id="ssn" v-model="entity.ssn" v-maska - data-maska="###-##-####" minlength="11" maxlength="11" :disabled="editing" required /> - <span class="error-message"></span> - </Fieldset> - </div> - </div> - - <div class="form-div contact"> - <h3 class="title">Contact</h3> - <div class="form-pair"> - <Fieldset> - <label class="field-label" for="email">Email</label> - <input type="email" class="field-input" id="email" v-model="entity.email" - :disabled="editing" required /> - <span class="error-message"></span> - </Fieldset> - <Fieldset> - <label class="field-label" for="tel">Phone number</label> - <input type="tel" class="field-input" id="tel" v-maska data-maska="(###) ###-####" - placeholder="(206) 555-1212" v-model="entity.phone" minlength="14" maxlength="14" - required /> - <span class="error-message"></span> - </Fieldset> - </div> - </div> - - <div class="form-div address"> - <h3 class="title">Professional address</h3> - <Fieldset id="zip-field"> - <label class="field-label" for="zip">Zip code</label> - <input type="text" class="field-input" id="zip" v-model="entity.address.postalCode" - maxlength="5" required /> - <span class="error-message"></span> - </Fieldset> - <div class="form-pair"> - <Fieldset> - <label class="field-label" for="address1">Address line 1</label> - <input type="text" class="field-input" id="address1" v-model="entity.address.addressLine1" - required /> - <span class="error-message"></span> - </Fieldset> - <Fieldset> - <label class="field-label" for="address2">Address line 2</label> - <input type="text" class="field-input" id="address2" - v-model="entity.address.addressLine2" /> - <span class="error-message"></span> - </Fieldset> </div> + <h3 class="title">Date and time</h3> <div class="form-pair"> <Fieldset> - <label class="field-label" for="city">City</label> - <input type="text" class="field-input" id="city" v-model="entity.address.city" required /> + <label class="field-label" for="date">Date</label> + <input type="date" class="field-input" id="date" v-model="appointment.date" required /> <span class="error-message"></span> </Fieldset> <Fieldset> - <label class="field-label" for="state">State</label> - <select id="state" name="state" v-model="entity.address.state" class="field-input" required> - <option disabled value="">Select a state</option> - <option value="AL">Alabama</option> - <option value="AK">Alaska</option> - <option value="AZ">Arizona</option> - <option value="AR">Arkansas</option> - <option value="CA">California</option> - <option value="CO">Colorado</option> - <option value="CT">Connecticut</option> - <option value="DE">Delaware</option> - <option value="DC">District Of Columbia</option> - <option value="FL">Florida</option> - <option value="GA">Georgia</option> - <option value="HI">Hawaii</option> - <option value="ID">Idaho</option> - <option value="IL">Illinois</option> - <option value="IN">Indiana</option> - <option value="IA">Iowa</option> - <option value="KS">Kansas</option> - <option value="KY">Kentucky</option> - <option value="LA">Louisiana</option> - <option value="ME">Maine</option> - <option value="MD">Maryland</option> - <option value="MA">Massachusetts</option> - <option value="MI">Michigan</option> - <option value="MN">Minnesota</option> - <option value="MS">Mississippi</option> - <option value="MO">Missouri</option> - <option value="MT">Montana</option> - <option value="NE">Nebraska</option> - <option value="NV">Nevada</option> - <option value="NH">New Hampshire</option> - <option value="NJ">New Jersey</option> - <option value="NM">New Mexico</option> - <option value="NY">New York</option> - <option value="NC">North Carolina</option> - <option value="ND">North Dakota</option> - <option value="OH">Ohio</option> - <option value="OK">Oklahoma</option> - <option value="OR">Oregon</option> - <option value="PA">Pennsylvania</option> - <option value="RI">Rhode Island</option> - <option value="SC">South Carolina</option> - <option value="SD">South Dakota</option> - <option value="TN">Tennessee</option> - <option value="TX">Texas</option> - <option value="UT">Utah</option> - <option value="VT">Vermont</option> - <option value="VA">Virginia</option> - <option value="WA">Washington</option> - <option value="WV">West Virginia</option> - <option value="WI">Wisconsin</option> - <option value="WY">Wyoming</option> + <label class="field-label" for="time">Time</label> + <select id="time" name="time" class="field-input" v-model="appointment.time" required> + <option disabled value="">Select the time</option> + <option v-for="time, index in timeAvailable" :key="index" :value="time">{{ time }}</option> </select> <span class="error-message"></span> </Fieldset> @@ -173,8 +243,14 @@ </div> <div v-if="!editing"> - <input @click.prevent="submit($event)" @keyup.enter.prevent="submit($event)" - value="Register profile" class="btn form-btn" id="send" type="submit"> + <div v-if="typeIs === 'appointments'"> + <input @click.prevent="submit($event)" @keyup.enter.prevent="submit($event)" + value="Schedule appointment" class="btn form-btn margin-top" id="send" type="submit"> + </div> + <div v-else> + <input @click.prevent="submit($event)" @keyup.enter.prevent="submit($event)" + value="Register profile" class="btn form-btn" id="send" type="submit"> + </div> </div> <div v-else> <div v-if="typeIs === 'doctors'"> @@ -186,19 +262,17 @@ </div> <div v-if="typeIs === 'patients'"> <p @click="showModal(entity.id, entity.name, entity.ssn)" - @keyup.enter="showModal(entity.id, entity.name, entity.ssn)" tabindex="0" - class="deactivate"> + @keyup.enter="showModal(entity.id, entity.name, entity.ssn)" tabindex="0" class="deactivate"> Deactivate profile</p> </div> - <Modal ref="modal" /> + <Modal ref="modal" :page="typeIs"/> <div> - <input @click.prevent="submit($event)" @keyup.enter.prevent="submit($event)" - value="Edit profile" class="btn form-btn" id="send" type="submit"> + <input @click.prevent="submit($event)" @keyup.enter.prevent="submit($event)" value="Edit profile" + class="btn form-btn" id="send" type="submit"> </div> </div> <div> - <router-link to="/"><input class="btn-reverse form-btn" value="Cancel" - type="button" /></router-link> + <router-link to="/"><input class="btn-reverse form-btn" value="Cancel" type="button" /></router-link> </div> </form> </main> @@ -217,6 +291,7 @@ import Header from '@/components/Header.vue'; import IDoctor from '@/interfaces/IDoctor'; import IPatient from '@/interfaces/IPatient'; import IAddress from '@/interfaces/IAddress'; +import IAppointment from '@/interfaces/IAppointment'; import handleBadRequest from '@/utilities/handleBadRequest'; export default defineComponent({ @@ -240,12 +315,16 @@ export default defineComponent({ idIs: this.$route.params.id as string, token: sessionStorage.getItem('token'), phoneMask: new Mask({ mask: "(###) ###-####" }), - ssnMask: new Mask({ mask: "###-##-####" }) + ssnMask: new Mask({ mask: "###-##-####" }), + appointment: {} as IAppointment, + timeAvailable: [] as string[], + doctors: [] as IDoctor[], + patients: [] as IPatient[] } }, methods: { - showModal(id, name, specialty) { - (this.$refs.modal as typeof Modal).showModal(id, name, specialty) + showModal(id, name, specialtyOrSSN) { + (this.$refs.modal as typeof Modal).showModal(id, name, specialtyOrSSN) }, submit(e) { e.target.blur() @@ -258,6 +337,15 @@ export default defineComponent({ addressData: this.entity.address } + const date = this.appointment.date + 'T' + this.appointment.time + ':00' + + const dataAppointment = { + idPatient: this.appointment.patientName, + ...(this.appointment.doctorName) && { idDoctor: this.appointment.doctorName }, + ...(!this.appointment.doctorName) && { specialty: this.appointment.specialty }, + date: date, + } + let method = 'post' if (this.editing) { method = 'put' @@ -266,7 +354,8 @@ export default defineComponent({ const url = `http://localhost:8081/${this.typeIs}` axios[method](url, { ...(this.editing) && { id: this.idIs }, - ...data + ...(this.typeIs === 'patients' || this.typeIs === 'doctors') && { ...data }, + ...(this.typeIs === 'appointments') && { ...dataAppointment } }, { headers: { Authorization: `Bearer ${this.token}` @@ -279,12 +368,36 @@ export default defineComponent({ .catch(error => { const code = error.response.status const errors = error.response.data + console.log(error.response) this.handleBadRequest(code, errors) }) }, - handleBadRequest + handleBadRequest, + getEntities() { + ['doctors', 'patients'].forEach(element => { + const url = `http://localhost:8081/${element}` + axios.get(url, { + headers: { + Authorization: `Bearer ${this.token}` + } + }).then(response => { + this[element] = response.data.content + if (element === 'patients') { + this[element].forEach(entity => { + entity.phone = this.phoneMask.masked(entity.phone) + }) + } + }).catch(error => { + console.log(error) + }) + }) + } }, created() { + for (let hours = 7; hours < 19; hours++) { + this.timeAvailable.push(hours + ':00') + } + this.getEntities() this.entity.address = {} as IAddress this.entity.ssn = '' this.entity.phone = '' @@ -300,6 +413,14 @@ export default defineComponent({ } }) .then(response => { + if (this.typeIs === 'appointments') { + this.appointment = response.data + this.appointment.time = response.data.date.substring(11, 16) + this.appointment.date = this.appointment.date.substring(0, 10) + this.appointment.doctorName = response.data.idDoctor + this.appointment.patientName = response.data.idPatient + return + } this.entity = response.data if (this.typeIs === 'patients') { @@ -334,6 +455,10 @@ export default defineComponent({ font-weight: 500; } +.margin-top { + margin-top: 2rem; +} + @media screen and (max-width: 900px) { .block { display: inline; |
