Forked from
Stud.IP / Stud.IP
416 commits behind the upstream repository.
-
Jan-Hendrik Willms authored
Closes #4904 Merge request studip/studip!3678
Jan-Hendrik Willms authoredCloses #4904 Merge request studip/studip!3678
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
CourseMemberAdmission.vue 3.86 KiB
<template>
<form class="default">
<section>
<label>
{{ $gettext('Nachricht bei fehlgeschlagener Anmeldung') }}
<textarea name="message" rows="4" cols="50" v-model="messageText"></textarea>
</label>
</section>
<validity-time></validity-time>
<section>
<label>
<input type="radio" v-model="theMode" :value="0">
{{ $gettext('Mitgliedschaft ist in mindestens einer dieser Veranstaltungen notwendig') }}
</label>
<label>
<input type="radio" v-model="theMode" :value="1">
{{ $gettext('Mitgliedschaft ist in keiner dieser Veranstaltungen erlaubt') }}
</label>
</section>
<section>
<label for="csearch">
{{ $gettext('Veranstaltung(en)') }}
</label>
<quicksearch v-if="courseSearch !== null"
:searchtype="courseSearch"
name="course"
:key="NaN"
@input="addCourse"
id="csearch"
ref="courseSearch"></quicksearch>
<ul v-if="courseList.length > 0">
<li v-for="(course, index) in courseList" :key="index">
{{ course.name }}
</li>
</ul>
</section>
</form>
</template>
<script>
import {AdmissionRuleMixin} from '../../mixins/AdmissionRuleMixin';
import ValidityTime from './ValidityTime.vue';
import quicksearch from '../Quicksearch.vue';
export default {
name: 'CourseMemberAdmission',
components: { ValidityTime, quicksearch },
mixins: [AdmissionRuleMixin],
data() {
return {
messageText: this.message || (
this.theMode === 0
? this.$gettext('Sie sind nicht in einer der gewählten Veranstaltungen eingetragen.')
: this.$gettext('Sie sind bereits in einer der gewählten Veranstaltungen eingetragen.')
),
theMode: 0,
courseList: [],
courseSearch: null
}
},
computed: {
payload() {
return {
type: 'CourseMemberAdmission',
payload: {
modus: this.theMode,
courses: this.courseList,
message: this.messageText
}
}
}
},
methods: {
addCourse(returnValue, inputValue) {
if (!this.courseList.some(i => i.id === returnValue)) {
this.courseList.push({id: returnValue, name: inputValue});
}
},
setRuleData(data) {
this.courseSearch = data.attributes.payload.search;
this.courseList = data.attributes.payload.courses;
this.theMode = data.attributes.payload.modus;
},
validate() {
if (this.courseList.length === 0) {
this.invalidData.push(this.$gettext('Bitte geben Sie mindestens eine Veranstaltung an.'));
}
return this.invalidData.length === 0;
},
},
mounted() {
// Get a new rule instance so we can use quicksearch.
if (!this.id || this.id === '') {
STUDIP.jsonapi.withPromises().post('admission-rules/CourseMemberAdmission', {
data: {
data: {
attributes: {
payload: {
mode: 0,
courses: [],
message: ''
}
}
}
}
}).then(response => {
this.courseSearch = response.data.attributes.payload.search;
});
}
},
}
</script>