diff --git a/src/components/Courses.vue b/src/components/Courses.vue index f3a61e3ed7eb96b2b85fe2c6c6ed32ae9278b1bd..c5a2be2bf68558f7b7c680ea5e3ca3be4fa0b7bc 100644 --- a/src/components/Courses.vue +++ b/src/components/Courses.vue @@ -2,10 +2,10 @@ <div class="content col-md-12"> <div id="search_box" class="search_box col-md-4"> <div class="entry_box-inner"> - <a id="exportbutton" class="button" href="./exporttable">Tabelle exportieren</a> + <a id="editbutton" class="button" href="./editcourse" style="visibility: hidden">Eintrag bearbeiten</a> <a id="addbutton" class="button" href="./createcourse">neuen Eintrag hinzufügen</a> - <a id="editbutton" class="button" href="./editcourse">ausgewählten Eintrag bearbeiten</a> - <a id="deletebutton" class="button" href="./editcourse">ausgewählte Einträge löschen</a> + <a id="deletebutton" class="button" href="./deletecourse">ausgewählte Einträge löschen</a> + <a id="exportbutton" class="button" href="./exporttable">Tabelle exportieren</a> </div> <div class="search_box-inner"> <i><img src="../assets/search.svg"></i> @@ -16,7 +16,7 @@ <tr> <th scope="row"> <div class="form-check"> - <input type="checkbox" class="form-check-input" id="checkbox_headerline"> + <input name="checkbox" type="checkbox" class="form-check-input" id="checkbox_headerline" @click="checkAllBoxes"> <label class="form-check-label" for="checkbox_headerline"></label> </div> </th> @@ -34,10 +34,10 @@ <th v-on:click="sortTable('kursleiter')"><img id="imgsortkursleiter" :src="require('../assets/'+sortImg)">Kursleiter</th> <th v-on:click="sortTable('notiz')"><img id="imgsortnotiz" :src="require('../assets/'+sortImg)">Notiz</th> </tr> - <tr v-for="row in filteredRows" :key="row.angebotsnummer"> + <tr v-for="row in filteredRows" :key="row.id"> <td scope="row"> <div class="form-check"> - <input type="checkbox" class="form-check-input" id="checkbox_tablerow"> + <input type="checkbox" class="form-check-input" name="checkbox_tablerow" id="checkbox_tablerow" v-model="checkedBoxes" :value="row.id"> <label class="form-check-label" for="checkbox_tablerow"></label> </div> </td> @@ -64,20 +64,52 @@ export default { name: "Courses", data: function() { return { - rows: [ - {angebotsnummer: 232, angebot: "Biologie", kursname: 'Neurobiologie', veranstaltungsart: 'regulärer Kurs', kursdatum: '23.08.2020', thema: '', kursort: 'T9 Hörsaal', begleitendeLehrkraft: 'Frau Muster', betreuendeStudenten: 'Max Miller', anzahlderAnwesenden: '34', anzahlderAngemeldeten: '12', kursleiter: 'Frau Test', notiz: ''}, - {angebotsnummer: 23342, angebot: "ABiologie", kursname: 'bNeukkkrobiologie', veranstaltungsart: 'regulärer Kurs', kursdatum: '22.08.2020', thema: '', kursort: 'T9 Hörsaal', begleitendeLehrkraft: 'Frau Muster', betreuendeStudenten: 'Max Miller', anzahlderAnwesenden: '34', anzahlderAngemeldeten: '12', kursleiter: 'Frau Test', notiz: ''}, - {angebotsnummer: 22, angebot: "Ciologie", kursname: 'ANeurobkiologie', veranstaltungsart: 'regulärer Kurs', kursdatum: '21.08.2020', thema: '', kursort: 'T9 Hörsaal', begleitendeLehrkraft: 'Frau Muster', betreuendeStudenten: 'Max Miller', anzahlderAnwesenden: '34', anzahlderAngemeldeten: '12', kursleiter: 'Frau Test', notiz: ''}, - {angebotsnummer: 1342, angebot: "Diologie", kursname: 'cNeukkkrobiologie', veranstaltungsart: 'regulärer Kurs', kursdatum: '23.07.2020', thema: '', kursort: 'T9 Hörsaal', begleitendeLehrkraft: 'Frau Muster', betreuendeStudenten: 'Max Miller', anzahlderAnwesenden: '34', anzahlderAngemeldeten: '12', kursleiter: 'Frau Test', notiz: ''}, - {angebotsnummer: 132, angebot: "Bdologie", kursname: 'eNeurobiologie', veranstaltungsart: 'regulärer Kurs', kursdatum: '23.08.2021', thema: '', kursort: 'T9 Hörsaal', begleitendeLehrkraft: 'Frau Muster', betreuendeStudenten: 'Max Miller', anzahlderAnwesenden: '34', anzahlderAngemeldeten: '12', kursleiter: 'Frau Test', notiz: ''}, - ], + rows: [], + checkedBoxes: [], filter:'', currentSort:'angebotsnummer', currentSortDir:'asc', sortImg: 'sort_def.svg', } }, + + created() { + localStorage.setItem('checkedBoxID', 0); + this.loadData(); + }, + methods: { + + checkAllBoxes(){ + var headercheckbox = document.getElementById('checkbox_headerline'); + var headercheckboxvalue = headercheckbox.checked; + + let checkboxes = document.getElementsByName('checkbox_tablerow'); + for(var i=0, n=checkboxes.length;i<n;i++) { + if (headercheckboxvalue){ + this.checkedBoxes.push(this.rows[i].id); + } else { + this.checkedBoxes.pop(this.rows[i].id); + } + checkboxes[i].checked = headercheckboxvalue; + } + }, + + loadData(){ + this.$store.dispatch('course/getAll').then( + (data) => { + let x; + for(x = 0; x < data.length; x++){ + this.rows.push({id: data[x].id, angebotsnummer: data[x].courseNumber, angebot: data[x].courseOffer, kursname: data[x].name, veranstaltungsart: data[x].eventType, kursdatum: data[x].courseDate, thema: data[x].topic, kursort: data[x].location, begleitendeLehrkraft: data[x].accompanyingTeacher, betreuendeStudenten: data[x].supervisingStudents, anzahlderAnwesenden: data[x].presentStudents, anzahlderAngemeldeten: data[x].registeredStudents, kursleiter: data[x].instructor, notiz: data[x].noteField}); + } + }, + error => { + this.message = (error.response && error.response.data) || error.message || error.toString(); + this.successful = false; + } + ); + }, + "sortTable": function sortTable(col) { this.currentSort = col; if (this.currentSortDir === 'asc') { @@ -515,9 +547,20 @@ export default { } } }, + watch: { + checkedBoxes(){ + if (this.checkedBoxes.length > 1 || this.checkedBoxes.length < 1){ + document.getElementById("editbutton").style.visibility = "hidden"; + // EXPORT & DELETE + } else { + document.getElementById("editbutton").style.visibility = "visible"; + } + localStorage.setItem('checkedBoxID', this.checkedBoxes[0]); + } + }, computed: { "columns": function columns() { - if (this.rows.length == 0) { + if (this.rows.length === 0) { return []; } return Object.keys(this.rows[0]) diff --git a/src/components/CreateEditComponents/DeleteCourse.vue b/src/components/CreateEditComponents/DeleteCourse.vue new file mode 100644 index 0000000000000000000000000000000000000000..81789f42278bacff85b3f18889c5ed1aeef2686f --- /dev/null +++ b/src/components/CreateEditComponents/DeleteCourse.vue @@ -0,0 +1,13 @@ +<template> +<div></div> +</template> + +<script> +export default { + name: "DeleteCourse" +} +</script> + +<style scoped> + +</style> \ No newline at end of file diff --git a/src/components/CreateEditComponents/EditCourse.vue b/src/components/CreateEditComponents/EditCourse.vue index 5cb769008ade49d38eda66406e273eb8c0d400f0..31fca714506995da26369e589033e07cbe79f9a7 100644 --- a/src/components/CreateEditComponents/EditCourse.vue +++ b/src/components/CreateEditComponents/EditCourse.vue @@ -109,7 +109,7 @@ </div> <div class="form-row"> <div class="col-md-11 mb-3"> - <button class="btn btn-primary btn-lg btn-block" style="margin-top: 20px; border-radius: 10px" type="button" @click="validateBeforeSubmit">Eintrag hinzufügen</button> + <button class="btn btn-primary btn-lg btn-block" style="margin-top: 20px; border-radius: 10px" type="button" @click="validateBeforeSubmit">Eintrag bearbeiten</button> </div> </div> <div class="row"> @@ -130,17 +130,49 @@ export default { data(){ return { + id: JSON.parse(localStorage.getItem('checkedBoxID')), message: "", course: new Course('', '', '', '', '', '', '', '', '', '', '', '', ''), } }, + created() { + //this.loadData(); + this.getData(); + }, + methods: { + + getData(){ + this.$store.dispatch('course/getByID', this.id).then( + (data) => { + this.course.coursenumber = data.courseNumber; + this.course.courseoffer = data.courseOffer; + this.course.coursename = data.name; + this.course.eventtype = data.eventType; + this.course.coursedate = data.courseDate; + this.course.topic = data.topic; + this.course.courselocation = data.location; + this.course.accompanyingteacher = data.accompanyingTeacher; + this.course.supervisingstudents = data.supervisingStudents; + this.course.presentstudents = data.presentStudents; + this.course.registeredstudents = data.registeredStudents; + this.course.instructor = data.instructor; + this.course.notefield = data.noteField; + + }, + error => { + this.message = (error.response && error.response.data) || error.message || error.toString(); + this.successful = false; + } + ); + }, + validateBeforeSubmit() { this.$validator.validate().then(isValid => { if (isValid) { console.log("isvalid") - this.$store.dispatch('course/insert', this.course).then( + this.$store.dispatch('course/update', this.course).then( data => { this.message = data.message; this.successful = true; @@ -155,6 +187,10 @@ export default { console.log("not isvalid") } }); + }, + + loadData(){ + } } } diff --git a/src/router.js b/src/router.js index cb7100bb97475a809374c1167d72502c2625b30f..cf3a8dda252c9ca78e9f71257a823fa0c32f27a0 100644 --- a/src/router.js +++ b/src/router.js @@ -11,6 +11,7 @@ import Layouts from "./components/Layouts"; import Teachers from "./components/Teachers"; import CreateCourse from "@/components/CreateEditComponents/CreateCourse"; import EditCourse from "@/components/CreateEditComponents/EditCourse"; +import DeleteCourse from "@/components/CreateEditComponents/DeleteCourse"; Vue.use(Router) @@ -29,6 +30,11 @@ const router = new Router({ name: 'Eintrag bearbeiten', component: EditCourse }, + { + path: '/deletecourse', + name: 'Eintrag löschen', + component: DeleteCourse + }, // LOGIN / REGISTER { diff --git a/src/services/course.service.js b/src/services/course.service.js index 22683eef9eac80a57a5cf1200e6baf7c3b2cec85..6119c2b5509d70f7d57239388c3bc9723f782920 100644 --- a/src/services/course.service.js +++ b/src/services/course.service.js @@ -28,6 +28,26 @@ class CourseService { return response.data; }); } + + getAll() { + return axios + .get(API_URL + 'getCourses', { + headers: authHeader() + }) + .then(response => { + return response.data; + }); + } + + getByID(idValue) { + return axios + .get(API_URL + 'getCoursesByID/'+idValue, { + headers: authHeader() + }) + .then(response => { + return response.data; + }); + } } diff --git a/src/store/course.module.js b/src/store/course.module.js index e16c693a46b6b662ac84aae362631bb2261bec45..6c54b3fa6c8a45288a7c6c4fe9619ca85423862a 100644 --- a/src/store/course.module.js +++ b/src/store/course.module.js @@ -19,6 +19,45 @@ export const course = { return Promise.reject(error); } ); + }, + + update({ commit }, course) { + return CourseService.update(course).then( + response => { + commit('updateSuccess', response); + return Promise.resolve(response); + }, + error => { + commit('updateFailure'); + return Promise.reject(error); + } + ); + }, + + getAll({ commit }) { + return CourseService.getAll().then( + response => { + commit('insertSuccess', response); + return Promise.resolve(response); + }, + error => { + commit('insertFailure'); + return Promise.reject(error); + } + ); + }, + + getByID({ commit }, id) { + return CourseService.getByID(id).then( + response => { + commit('insertSuccess', response); + return Promise.resolve(response); + }, + error => { + commit('insertFailure'); + return Promise.reject(error); + } + ); } },