2023-09-10 21:08:42 +00:00
|
|
|
<template>
|
2023-09-14 14:20:21 +00:00
|
|
|
<MultiModal @handle="modal_handle" />
|
2023-09-10 21:08:42 +00:00
|
|
|
|
2023-09-14 12:51:30 +00:00
|
|
|
<BulmaDrawer header="Kalender-Assistent" @open="on_open" refreshable>
|
2023-09-10 21:08:42 +00:00
|
|
|
<div class="card-content">
|
|
|
|
|
<div class="content">
|
2023-09-21 00:19:44 +00:00
|
|
|
<p>Hervorgehobenen Tagen wurde kein Buchstabe zugewiesen.</p>
|
|
|
|
|
|
2023-09-21 08:52:35 +00:00
|
|
|
<h3>Zuordnung Buchstaben</h3>
|
2023-09-10 21:08:42 +00:00
|
|
|
<div class="tags are-medium">
|
2023-09-21 00:19:44 +00:00
|
|
|
<template v-for="(data, day) in day_data" :key="`part-${day}`">
|
|
|
|
|
<span v-if="data.part === ''" class="tag is-warning">
|
|
|
|
|
{{ day }}
|
|
|
|
|
</span>
|
|
|
|
|
<span v-else class="tag is-info">
|
|
|
|
|
{{ day }}: {{ data.part.split("").join(", ") }}
|
2023-09-20 14:39:00 +00:00
|
|
|
</span>
|
|
|
|
|
</template>
|
2023-09-10 21:08:42 +00:00
|
|
|
</div>
|
|
|
|
|
|
2023-09-21 08:52:35 +00:00
|
|
|
<h3>Zuordnung Bilder</h3>
|
2023-09-10 21:08:42 +00:00
|
|
|
<div class="tags are-medium">
|
2023-09-12 17:31:08 +00:00
|
|
|
<span
|
2023-09-21 00:19:44 +00:00
|
|
|
v-for="(data, day) in day_data"
|
|
|
|
|
:key="`image-${day}`"
|
|
|
|
|
:class="'tag is-' + (data.part === '' ? 'warning' : 'primary')"
|
2023-09-12 17:31:08 +00:00
|
|
|
>
|
2023-09-21 00:19:44 +00:00
|
|
|
{{ day }}: {{ data.image_name }}
|
2023-09-12 17:31:08 +00:00
|
|
|
</span>
|
|
|
|
|
</div>
|
|
|
|
|
|
2023-09-21 08:52:35 +00:00
|
|
|
<h3>Alle Türchen</h3>
|
2023-09-12 17:31:08 +00:00
|
|
|
<div class="tags are-medium">
|
|
|
|
|
<BulmaButton
|
2023-09-21 00:19:44 +00:00
|
|
|
v-for="(data, day) in day_data"
|
|
|
|
|
:key="`btn-${day}`"
|
|
|
|
|
:class="'tag is-' + (data.part === '' ? 'warning' : 'info')"
|
2023-09-12 17:31:08 +00:00
|
|
|
icon="fa-solid fa-door-open"
|
2025-11-30 18:09:08 +00:00
|
|
|
:text="day.toString()"
|
2023-09-21 00:19:44 +00:00
|
|
|
@click.left="door_click(day)"
|
2023-09-12 17:31:08 +00:00
|
|
|
/>
|
2023-09-10 21:08:42 +00:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</BulmaDrawer>
|
|
|
|
|
</template>
|
|
|
|
|
|
2025-11-30 18:09:08 +00:00
|
|
|
<script setup lang="ts">
|
2024-08-26 14:14:07 +00:00
|
|
|
import { API } from "@/lib/api";
|
|
|
|
|
import { name_door, objForEach } from "@/lib/helpers";
|
|
|
|
|
import { ImageData, NumStrDict } from "@/lib/model";
|
2023-09-10 21:08:42 +00:00
|
|
|
|
2023-09-13 16:08:05 +00:00
|
|
|
import MultiModal from "../MultiModal.vue";
|
|
|
|
|
import BulmaButton from "../bulma/Button.vue";
|
2023-09-14 12:51:30 +00:00
|
|
|
import BulmaDrawer from "../bulma/Drawer.vue";
|
2023-09-10 21:08:42 +00:00
|
|
|
|
2025-11-30 18:09:08 +00:00
|
|
|
const day_data: {
|
|
|
|
|
[day: number]: {
|
|
|
|
|
part: string;
|
|
|
|
|
image_name: string;
|
|
|
|
|
};
|
|
|
|
|
} = {};
|
2023-09-21 00:19:44 +00:00
|
|
|
|
2025-11-30 18:09:08 +00:00
|
|
|
let multi_modal: MultiModal | undefined;
|
2023-09-12 16:39:52 +00:00
|
|
|
|
2025-11-30 18:09:08 +00:00
|
|
|
function modal_handle(modal: MultiModal) {
|
|
|
|
|
multi_modal = modal;
|
|
|
|
|
}
|
2023-09-10 21:08:42 +00:00
|
|
|
|
2025-11-30 18:09:08 +00:00
|
|
|
function on_open(ready: () => void, fail: () => void) {
|
|
|
|
|
Promise.all([
|
|
|
|
|
API.request<NumStrDict>("admin/day_parts"),
|
|
|
|
|
API.request<NumStrDict>("admin/day_image_names"),
|
|
|
|
|
])
|
|
|
|
|
.then(([day_parts, day_image_names]) => {
|
|
|
|
|
const _ensure_day_in_data = (day: number) => {
|
|
|
|
|
if (!(day in day_data)) {
|
|
|
|
|
day_data[day] = { part: "", image_name: "" };
|
|
|
|
|
}
|
|
|
|
|
};
|
2023-09-21 00:19:44 +00:00
|
|
|
|
2025-11-30 18:09:08 +00:00
|
|
|
objForEach(day_parts, (day, part) => {
|
|
|
|
|
_ensure_day_in_data(day);
|
|
|
|
|
day_data[day].part = part;
|
|
|
|
|
});
|
2023-09-21 00:19:44 +00:00
|
|
|
|
2025-11-30 18:09:08 +00:00
|
|
|
objForEach(day_image_names, (day, image_name) => {
|
|
|
|
|
_ensure_day_in_data(day);
|
|
|
|
|
day_data[day].image_name = image_name;
|
|
|
|
|
});
|
2023-09-14 03:59:33 +00:00
|
|
|
|
2025-11-30 18:09:08 +00:00
|
|
|
ready();
|
|
|
|
|
})
|
|
|
|
|
.catch(fail);
|
|
|
|
|
}
|
2023-09-12 16:39:52 +00:00
|
|
|
|
2025-11-30 18:09:08 +00:00
|
|
|
async function door_click(day: number) {
|
|
|
|
|
if (multi_modal === undefined) return;
|
|
|
|
|
multi_modal.show_progress();
|
2023-09-10 21:08:42 +00:00
|
|
|
|
2025-11-30 18:09:08 +00:00
|
|
|
try {
|
|
|
|
|
const day_image = await API.request<ImageData>(`user/image_${day}`);
|
|
|
|
|
multi_modal!.show_image(day_image.data_url, name_door(day));
|
|
|
|
|
} catch (error) {
|
|
|
|
|
multi_modal!.hide();
|
2023-09-10 21:08:42 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</script>
|