mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-23 18:02:18 +00:00
Merge branch 'cis40_2026-05_ma_rc' into demo-cis40
This commit is contained in:
@@ -19,7 +19,8 @@ export default {
|
||||
originalBackgrounds: "backgrounds",
|
||||
dropAllowed: "dropAllowed",
|
||||
timezone: "timezone",
|
||||
reservierbar: "isReservierbar"
|
||||
reservierbar: "isReservierbar",
|
||||
reservierbarMap: "reservierbarMap",
|
||||
},
|
||||
provide() {
|
||||
return {
|
||||
@@ -328,6 +329,9 @@ export default {
|
||||
return !dayEvents.some(ev => ev.start < end && ev.end > start);
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.$p.loadCategory(["LvPlan"]);
|
||||
},
|
||||
beforeUnmount() {
|
||||
this.disableAutoScroll();
|
||||
},
|
||||
@@ -424,9 +428,11 @@ export default {
|
||||
class="fhc-calendar-empty-slot"
|
||||
style="position:absolute; inset:0; z-index:1"
|
||||
v-cal-click:slot="{ date, part }"
|
||||
:title="this.reservierbarMap?.[date.toISODate()] ? $p.t('LvPlan/add_reservation') : $p.t('LvPlan/reservation_not_allowed')"
|
||||
>
|
||||
<div class="fhc-calendar-empty-slot-plus">
|
||||
<i class="fa-solid fa-plus"></i>
|
||||
<i v-if="this.reservierbarMap?.[date.toISODate()]" class="fa-solid fa-plus"></i>
|
||||
<i v-else class="fa-solid fa-ban" style="color: red;"></i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -230,6 +230,9 @@ export default {
|
||||
:is="renderers[event.type]?.calendarEvent"
|
||||
:event="event"
|
||||
@delete-event="(event) => $emit('delete-event', event)"
|
||||
:timeSlotDisplayBehavior="
|
||||
$props.mode.toLowerCase() === 'list' ? 'always' : 'default'
|
||||
"
|
||||
></component>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -97,6 +97,7 @@ export default {
|
||||
<component
|
||||
:is="renderers[event.type]?.calendarEvent"
|
||||
:event="event"
|
||||
:timeSlotDisplayBehavior="'always'"
|
||||
></component>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -340,7 +340,7 @@ export default {
|
||||
<div class="row">
|
||||
<div class="d-md-none col-12">
|
||||
<!-- Bearbeiten Button -->
|
||||
<div v-if="isEditable" class="row mb-4">
|
||||
<div v-if="isEditable" class="row mb-3 ">
|
||||
<div class="col">
|
||||
<button @click="()=>showEditProfilModal()" type="button" class="text-start card w-100 btn btn-outline-secondary" >
|
||||
<div class="row">
|
||||
|
||||
@@ -176,6 +176,7 @@ export const Profil = {
|
||||
this.data = data.profil_data.data;
|
||||
this.calendarSyncUrls = data.calendar_sync_urls ?? [];
|
||||
this.authPermissions = data.permissions;
|
||||
console.log(data.profil_data);
|
||||
},
|
||||
zustellAdressenCount() {
|
||||
if (!this.data || !this.data.adressen) {
|
||||
|
||||
@@ -4,9 +4,6 @@ import Loader from "../../Loader.js";
|
||||
|
||||
export const ProjektabgabeUebersicht = {
|
||||
name: "ProjektabgabeUebersicht",
|
||||
props: {
|
||||
viewData: Object // NOTE: this is inherited from router-view
|
||||
},
|
||||
components: {
|
||||
CoreFilterCmpt,
|
||||
Loader
|
||||
@@ -60,7 +57,7 @@ export const ProjektabgabeUebersicht = {
|
||||
});
|
||||
container.append(downloadButton);
|
||||
|
||||
if (this.viewData.showEdit)
|
||||
if (this.showEdit)
|
||||
{
|
||||
let editButton = document.createElement('button');
|
||||
editButton.className = 'btn btn-outline-secondary';
|
||||
@@ -116,7 +113,9 @@ export const ProjektabgabeUebersicht = {
|
||||
this.tableBuiltResolve()
|
||||
}
|
||||
}
|
||||
]};
|
||||
],
|
||||
showEdit: null,
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
tableResolve(resolve) {
|
||||
@@ -220,7 +219,12 @@ export const ProjektabgabeUebersicht = {
|
||||
if (this.selectedTermin) url.searchParams.append('abgabedatum', this.selectedTermin);
|
||||
if (this.personSearchString) url.searchParams.append('personSearchString', this.personSearchString);
|
||||
window.open(url.toString(), '_blank');
|
||||
}
|
||||
},
|
||||
async getViewData() {
|
||||
const viewDataResponse = await this.$api.call(ApiPaabgabe.getViewData());
|
||||
const viewData = viewDataResponse.data;
|
||||
this.showEdit = viewData.showEdit;
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
isDarkMode() {
|
||||
@@ -236,7 +240,8 @@ export const ProjektabgabeUebersicht = {
|
||||
return FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/api/frontend/v1/education/PaabgabeUebersicht/downloadZip';
|
||||
}
|
||||
},
|
||||
created() {
|
||||
async created() {
|
||||
await this.getViewData();
|
||||
this.phrasenPromise = this.$p.loadCategory(['abgabetool', 'global', 'person', 'ui']);
|
||||
this.phrasenPromise.then(()=> {this.phrasenResolved = true});
|
||||
},
|
||||
|
||||
@@ -3,6 +3,11 @@ export default {
|
||||
event: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
timeSlotDisplayBehavior: {
|
||||
type: String,
|
||||
default: "default",
|
||||
// options: default, always, never
|
||||
}
|
||||
},
|
||||
computed:{
|
||||
@@ -50,7 +55,17 @@ export default {
|
||||
return luxon.Duration
|
||||
.fromISOTime(this.event.ende)
|
||||
.toISOTime({ suppressSeconds: true });
|
||||
}
|
||||
},
|
||||
timeSlotDisplayClasses() {
|
||||
switch (this.$props.timeSlotDisplayBehavior) {
|
||||
case "always":
|
||||
return "d-grid";
|
||||
case "never":
|
||||
return "d-none";
|
||||
default:
|
||||
return "d-none d-xl-grid";
|
||||
}
|
||||
},
|
||||
},
|
||||
template: /*html*/`
|
||||
<div
|
||||
@@ -58,8 +73,9 @@ export default {
|
||||
@wheel.stop
|
||||
>
|
||||
<div
|
||||
v-if="!event.allDayEvent && event?.beginn && event?.ende"
|
||||
class="event-time d-none d-xl-grid h-100"
|
||||
v-if="!event?.allDayEvent && event?.beginn && event?.ende"
|
||||
:class="timeSlotDisplayClasses"
|
||||
class="event-time h-100"
|
||||
>
|
||||
<span>{{ start }}</span>
|
||||
<span>{{ end }}</span>
|
||||
|
||||
@@ -3,6 +3,11 @@ export default {
|
||||
event: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
timeSlotDisplayBehavior: {
|
||||
type: String,
|
||||
default: "default",
|
||||
// options: default, always, never
|
||||
}
|
||||
},
|
||||
inject: {
|
||||
@@ -63,14 +68,25 @@ export default {
|
||||
methods: {
|
||||
handleDelete() {
|
||||
this.$emit('delete-event', this.event);
|
||||
}
|
||||
},
|
||||
timeSlotDisplayClasses() {
|
||||
switch (this.$props.timeSlotDisplayBehavior) {
|
||||
case "always":
|
||||
return "d-grid";
|
||||
case "never":
|
||||
return "d-none";
|
||||
default:
|
||||
return "d-none d-xl-grid";
|
||||
}
|
||||
},
|
||||
},
|
||||
template: /* html */`
|
||||
<div
|
||||
class="cis-renderer-reservierungen-calendar-event calendar-event-default h-100 w-100 p-1 position-relative">
|
||||
<div
|
||||
v-if="!event.allDayEvent && event?.beginn && event?.ende"
|
||||
class="event-time d-grid h-100"
|
||||
v-if="!event?.allDayEvent && event?.beginn && event?.ende"
|
||||
:class="timeSlotDisplayClasses"
|
||||
class="event-time h-100"
|
||||
>
|
||||
<span>{{ start }}</span>
|
||||
<span>{{ end }}</span>
|
||||
@@ -86,6 +102,7 @@ export default {
|
||||
</button>
|
||||
|
||||
<span class="event-topic">{{ event.topic }}</span>
|
||||
<span class="event-place">{{ event.ort_kurzbz }}</span>
|
||||
<span
|
||||
v-for="lektor in event.lektor.slice(0, 3)"
|
||||
class="event-lectors"
|
||||
@@ -98,7 +115,6 @@ export default {
|
||||
>
|
||||
... +{{ event.lektor.length - 3 }}
|
||||
</span>
|
||||
<span class="event-place">{{ event.ort_kurzbz }}</span>
|
||||
</div>
|
||||
</div>
|
||||
`,
|
||||
|
||||
@@ -75,6 +75,7 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
switchFilter(evt) {
|
||||
console.log(evt);
|
||||
this.$emit('switchFilter', evt.currentTarget.value);
|
||||
},
|
||||
applyFilterConfig() {
|
||||
|
||||
Reference in New Issue
Block a user