avtopost.kultmost.ru/templates/profile/partner/exhibition.html
2026-07-27 02:02:05 -04:00

182 lines
8.4 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{% extends "base.html" %}
{% import "/components/header.html" as header %}
{% import "/components/footer.html" as footer %}
{% import "components/profile_card.html" as profile_card %}
{% import "components/profile_nav.html" as profile_nav %}
{% import "competition/list.html" as competition %}
{% import "components/label.html" as label %}
{% block title %}Отобранные картины | Выставка {{exhibition.title}}{% endblock %}
{% block content %}
{{ header.section(user) }}
<section class="c_dg3k4">
<div class="c_gtoe9">
{{ profile_card.profile_card(user) }}
<div class="c_ru432">
{{ profile_nav.profile_nav(user, 'exhibitions') }}
<div class="c_3ihvi" id="main">
<a class="b_289i1" href="/profile/partner/exhibition/{{exhibition._id}}/catalog#main">
<span class="c_d2l0b b_al8e7">Каталог картин</span>
</a>
{% set ids = posts | map(attribute='user._id') | list %}
{% set uniq_count = ids | unique | list | length %}
{% if uniq_count > 0 %}
<button class="b_289i1" onclick="sendInvitations('{{exhibition._id}}')" href="/profile/partner/exhibition/{{exhibition._id}}/catalog#main">
<span class="c_d2l0b b_al8e7">Отправить приглашени{% if uniq_count > 1 %}я{% else %}е{% endif %}</span>
</button>
{% endif %}
</div>
<div class="c_tihtk">
<article class="c_9fgdh b_ax8vz">
<div class="b_ornr9">
<picture>
<img src="/b/exhibition/{{exhibition.poster_file_id}}" data-src="/b/exhibition/{{exhibition.poster_orig_id}}" id="preview_poster" crossorigin="anonymous" fetchpriority="high" loading="eager" alt="Выставка {{exhibition.title}}" class="b_ornr9">
</picture>
</div>
<div class="c_z3dpx b_73p10">
<div class="c_c4wam b_vabj9">
{% if now > exhibition.date_finish %}
<span class="c_95csi b_0jst1">Закончилась</span>
{% elif now > exhibition.datetime_start %}
<span class="c_95csi b_0jst1">Началась</span>
{% else %}
<span class="c_95csi b_0jst1">Формируется</span>
{% endif %}
</div>
<header class="c_m876y b_9xtz9">
<h3 class="c_hysjg b_8f3uh" id="preview_title">Выставка {{exhibition.title}}</h3>
</header>
<p class="c_2fr39 b_tfnz2" id="preview_topic">{{exhibition.topic}}</p>
<p>Место проведения: {{ exhibition.get('place') }}</p>
<p >Отобрано картин: <span id="lenPosts">{{ posts | length }}</span></p>
<div class="b_otttb">
<span class="c_2fr39 b_tfnz2">С {{ ( exhibition.datetime_start.strftime('%d.%m.%Y')) if exhibition.datetime_start else ''}}</span>
<span class="c_2fr39 b_tfnz2">По {{ ( exhibition.date_finish.strftime('%d.%m.%Y')) if exhibition.date_finish else ''}}</span>
</div>
</div>
</article>
{% for post in posts %}
<article class="c_9fgdh b_ax8vz">
<div class="b_ornr9">
<picture>
<img src="/b/posts/{{post.medias[0]}}" data-src="/b/posts/{{ post.medias_original[0] }}" crossorigin="anonymous" fetchpriority="high" loading="eager" alt="{{post.title}}" class="b_ornr9">
</picture>
</div>
<div class="c_z3dpx b_73p10">
<header class="c_m876y b_9xtz9">
<h3 class="c_hysjg b_8f3uh" id="preview_title">{{post.title}}</h3>
</header>
{% if post.status=='Опубликована' %}
<div class="l_green"><span>{{post.status}}</span></div>
{% else %}
<div class="l_purple"><span>{{post.status}}</span></div>
{% endif %}
<p class="c_2fr39 b_tfnz2" id="preview_topic">Размер: {{post.size}}</p>
<p class="c_2fr39 b_tfnz2" id="preview_topic">Материал: {{post.material}}</p>
<p class="c_2fr39 b_tfnz2" id="preview_topic">Жанр: {{post.genre}}</p>
<div class="c_dbbe4 b_otttb">
{% if post.user %}
<img crossorigin="anonymous" fetchpriority="high" loading="eager" class="c_pm80w b_a68fq" src="/a/{{post.user._id}}" alt="{{ post.user.username | e }}">
<div class="c_4402p b_ntazj">
<p class="c_kvah4 b_ghosy">{{ post.user.username }}</p>
<!-- <p class="c_kvah4 b_ghosy">{{ post.grade }}</p> -->
</div>
{% endif %}
</div>
<button onclick="selectPost(this, '{{post._id}}')" class="c_ctfod b_289i1">
<span class="c_d2l0b b_al8e7">Убрать с выставки</span>
</button>
</div>
</article>
{% endfor %}
</div>
</div>
</div>
</section>
<script>
async function sendInvitations(exhibition_id) {
const data = new FormData();
data.set('exhibition_id', exhibition_id);
try {
const res = await fetch('/api/exhibition/send/invitations', {
method: 'POST',
body: data
});
if (res.ok) {
showToast({ message: 'Приглашени{% if uniq_count > 1 %}я{% else %}е{% endif %} в очереди на отправку' });
}
else {
showToast({ message: 'Ошибка сохранения', status: "error", duration: 2500 });
}
} catch (err) {
console.error(err);
showToast({ message: 'Ошибка соединения', status: "error", duration: 2500 });
}
}
async function selectPost(select, postId) {
const data = new FormData();
data.set('post_id', postId);
data.set('exhibition_id', '{{exhibition._id}}');
try {
const res = await fetch('/api/exhibition/post/select', {
method: 'POST',
body: data
});
if (res.ok) {
document.getElementById('lenPosts').textContent = parseInt(document.getElementById('lenPosts').textContent) - 1
select.parentElement.parentElement.style.display = 'none'
}
else {
showToast({ message: 'Ошибка сохранения', status: "error", duration: 2500 });
select.checked = false
}
} catch (err) {
console.error(err);
showToast({ message: 'Ошибка соединения', status: "error", duration: 2500 });
select.checked = false
}
}
</script>
{{ footer.section(user) }}
{% endblock %}
{% block head %}
{{ header.style() }}
{{ profile_nav.style() }}
{{ competition.style() }}
<style type="text/css">
{{label.green()}}
{{label.purple()}}
#preview_poster{min-height: 456px;}
body{background: #F6EBFF;}
.c_3ihvi{ position: sticky; top: 0; z-index: 2; background: white; }
.b_289i1{ width: 100%; padding: 15px; box-sizing: border-box; }
.c_ctfod{ width: 100%; padding: 13px 0; }
/* Mobile */
@media (max-width: 699px) {
.c_mrl59 { align-items: center; background: #5F1798; border-radius: 25px; bottom: -15px; display: flex; height: 50px; justify-content: center; position: absolute; right: -15px; width: 50px; }
}
/* Tablet */
@media (min-width: 700px) and (max-width: 900px) {
.c_iiehk { align-items: center; border-radius: 5px; display: flex; flex-direction: column; gap: 20px; width: 335px; }
.c_nnsh6>a>img{display: none;}
}
/* Desktop */
@media (min-width: 901px) {
.c_iiehk { align-items: flex-end; border-radius: 5px; display: flex; flex-direction: column; gap: 20px; width: 310px; }
.c_nnsh6>a>img{display: none;}
}
</style>
{{ footer.style() }}
{% endblock %}