d54f6fbe42
Co-authored-by: Cursor <cursoragent@cursor.com>
163 lines
11 KiB
HTML
163 lines
11 KiB
HTML
{% load i18n %}
|
||
<div class="page-content">
|
||
|
||
<div style="display:flex; align-items:center; justify-content:space-between; margin-bottom:1rem; gap:1rem; flex-wrap:wrap;">
|
||
<a href="/dislocation/?tab=vendors" hx-get="/dislocation/?tab=vendors" hx-target="#main-content" hx-push-url="/dislocation/?tab=vendors" hx-indicator="#loader"
|
||
style="display:inline-flex; align-items:center; gap:0.375rem; font-size:0.8125rem; color:var(--color-muted-foreground); text-decoration:none;">
|
||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
||
<path d="m12 19-7-7 7-7"/><path d="M19 12H5"/>
|
||
</svg>
|
||
{% trans "К дислокации" %}
|
||
</a>
|
||
{% if can_edit_vendor %}
|
||
<div style="display:flex; gap:0.5rem; flex-wrap:wrap;">
|
||
{% if vendor_edit_mode %}
|
||
<a href="/dislocation/vendors/{{ vendor.pk }}/" hx-get="/dislocation/vendors/{{ vendor.pk }}/" hx-target="#main-content" hx-push-url="true" hx-indicator="#loader"
|
||
class="btn btn-secondary" style="font-size:0.8125rem; padding:0.3rem 0.75rem; text-decoration:none;">{% trans "Отмена" %}</a>
|
||
{% else %}
|
||
<a href="/dislocation/vendors/{{ vendor.pk }}/?edit=1" hx-get="/dislocation/vendors/{{ vendor.pk }}/?edit=1" hx-target="#main-content" hx-push-url="true" hx-indicator="#loader"
|
||
class="btn btn-primary" style="font-size:0.8125rem; padding:0.3rem 0.75rem; text-decoration:none;">{% trans "Редактировать" %}</a>
|
||
{% endif %}
|
||
</div>
|
||
{% endif %}
|
||
</div>
|
||
|
||
{% if vendor_form_message %}
|
||
<div style="margin-bottom:1rem; padding:0.75rem 1rem; border-radius:0.5rem; border:1px solid hsl(152 40% 70%); background:color-mix(in srgb, var(--color-success) 12%, var(--color-card)); color:var(--color-foreground); font-size:0.875rem;">
|
||
{{ vendor_form_message }}
|
||
</div>
|
||
{% endif %}
|
||
{% if vendor_form_error %}
|
||
<div style="margin-bottom:1rem; padding:0.75rem 1rem; border-radius:0.5rem; background:hsl(0 70% 96%); border:1px solid hsl(0 70% 85%); color:hsl(0 55% 35%); font-size:0.8125rem;">
|
||
{{ vendor_form_error }}
|
||
</div>
|
||
{% endif %}
|
||
|
||
<div style="background:var(--color-card); border-radius:0.75rem; border:1px solid var(--color-border); box-shadow:0 1px 2px rgb(0 0 0/0.05); padding:1.5rem; margin-bottom:1.25rem;">
|
||
<div style="display:flex; align-items:flex-start; justify-content:space-between; gap:1rem; flex-wrap:wrap;">
|
||
<div>
|
||
<h1 style="font-size:1.25rem; font-weight:600; color:var(--color-foreground);">{{ vendor.name|default:"—" }}</h1>
|
||
<div style="font-size:0.875rem; color:var(--color-muted-foreground); margin-top:0.25rem;">
|
||
{% trans "Сервис / поставщик" %}
|
||
{% if vendor.location_region %} · {{ vendor.location_region.name }}{% endif %}
|
||
</div>
|
||
</div>
|
||
{% if vendor.is_active %}
|
||
<span class="badge badge-success">{% trans "Активен" %}</span>
|
||
{% else %}
|
||
<span class="badge badge-secondary">{% trans "Неактивен" %}</span>
|
||
{% endif %}
|
||
</div>
|
||
</div>
|
||
|
||
{% if vendor_edit_mode and vendor_edit_form %}
|
||
<form hx-post="/dislocation/vendors/{{ vendor.pk }}/update/" hx-target="#main-content" hx-indicator="#loader" hx-disabled-elt="find button[type=submit]"
|
||
style="background:var(--color-card); border:1px solid var(--color-border); border-radius:0.75rem; padding:1.25rem; margin-bottom:1.25rem;">
|
||
{% csrf_token %}
|
||
<input type="hidden" name="from_card" value="1">
|
||
<div style="display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:0.875rem;">
|
||
<div style="grid-column:1 / -1;">
|
||
<label style="display:block; font-size:0.8125rem; font-weight:500; margin-bottom:0.375rem;">{% trans "Название" %} *</label>
|
||
{{ vendor_edit_form.name }}
|
||
</div>
|
||
<div>
|
||
<label style="display:block; font-size:0.8125rem; font-weight:500; margin-bottom:0.375rem;">{% trans "Город/район" %} *</label>
|
||
{{ vendor_edit_form.location_region }}
|
||
</div>
|
||
<div>
|
||
<label style="display:block; font-size:0.8125rem; font-weight:500; margin-bottom:0.375rem;">{% trans "Координаты" %} <span style="font-weight:400; color:var(--color-muted-foreground);">lat,lng</span></label>
|
||
{{ vendor_edit_form.location }}
|
||
</div>
|
||
<div>
|
||
<label style="display:block; font-size:0.75rem; color:var(--color-muted-foreground); margin-bottom:0.25rem;">{% trans "Улица" %}</label>
|
||
{{ vendor_edit_form.street }}
|
||
</div>
|
||
<div style="display:grid; grid-template-columns:1fr 1fr 1fr; gap:0.5rem;">
|
||
<div>
|
||
<label style="display:block; font-size:0.75rem; color:var(--color-muted-foreground); margin-bottom:0.25rem;">{% trans "Дом" %}</label>
|
||
{{ vendor_edit_form.house_number }}
|
||
</div>
|
||
<div>
|
||
<label style="display:block; font-size:0.75rem; color:var(--color-muted-foreground); margin-bottom:0.25rem;">{% trans "Корпус" %}</label>
|
||
{{ vendor_edit_form.building }}
|
||
</div>
|
||
<div>
|
||
<label style="display:block; font-size:0.75rem; color:var(--color-muted-foreground); margin-bottom:0.25rem;">{% trans "Пом." %}</label>
|
||
{{ vendor_edit_form.apartment }}
|
||
</div>
|
||
</div>
|
||
<div style="grid-column:1 / -1;">
|
||
<label style="display:block; font-size:0.8125rem; font-weight:500; margin-bottom:0.375rem;">{% trans "Комментарий" %}</label>
|
||
{{ vendor_edit_form.comments }}
|
||
</div>
|
||
<label style="display:flex; align-items:center; gap:0.5rem; font-size:0.8125rem;">
|
||
{{ vendor_edit_form.is_active }} {% trans "Активен" %}
|
||
</label>
|
||
</div>
|
||
<button type="submit" class="btn btn-primary" style="margin-top:1rem;">{% trans "Сохранить" %}</button>
|
||
</form>
|
||
{% else %}
|
||
<div style="display:grid; grid-template-columns:minmax(0,1.4fr) minmax(0,1fr); gap:1.25rem;">
|
||
<div style="background:var(--color-card); border:1px solid var(--color-border); border-radius:0.75rem; padding:1.25rem;">
|
||
<h2 style="font-size:1rem; font-weight:600; color:var(--color-foreground); margin-bottom:0.875rem;">{% trans "Данные" %}</h2>
|
||
<div style="display:grid; gap:0.75rem; font-size:0.875rem;">
|
||
<div>
|
||
<div style="font-size:0.75rem; color:var(--color-muted-foreground);">{% trans "Адрес" %}</div>
|
||
<div style="color:var(--color-foreground);">
|
||
{% if vendor.street or vendor.house_number %}
|
||
{% if vendor.street %}ул. {{ vendor.street }}{% endif %}{% if vendor.house_number %} {{ vendor.house_number }}{% endif %}{% if vendor.building %}, корп. {{ vendor.building }}{% endif %}{% if vendor.apartment %}, пом. {{ vendor.apartment }}{% endif %}
|
||
{% elif vendor.address %}
|
||
{{ vendor.address }}
|
||
{% else %}
|
||
—
|
||
{% endif %}
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<div style="font-size:0.75rem; color:var(--color-muted-foreground);">{% trans "Город/район" %}</div>
|
||
<div style="color:var(--color-foreground);">{{ vendor.location_region.name|default:"—" }}</div>
|
||
</div>
|
||
<div>
|
||
<div style="font-size:0.75rem; color:var(--color-muted-foreground);">{% trans "Комментарий" %}</div>
|
||
<div style="color:var(--color-foreground); white-space:pre-wrap;">{{ vendor.comments|default:"—" }}</div>
|
||
</div>
|
||
</div>
|
||
<div style="margin-top:1.25rem; padding-top:0.875rem; border-top:1px solid var(--color-border); font-size:0.75rem; color:var(--color-muted-foreground);">
|
||
<div>{% trans "Создано:" %} {{ vendor.created_at|date:"d.m.Y H:i" }}</div>
|
||
<div style="margin-top:0.25rem;">{% trans "Обновлено:" %} {{ vendor.updated_at|date:"d.m.Y H:i" }}</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div style="background:var(--color-card); border:1px solid var(--color-border); border-radius:0.75rem; padding:1.25rem;">
|
||
<h2 style="font-size:1rem; font-weight:600; color:var(--color-foreground); margin-bottom:0.875rem;">{% trans "Карта" %}</h2>
|
||
{% if vendor.has_coordinates %}
|
||
<div id="vendor-map" style="height:240px; width:100%; border-radius:0.5rem; overflow:hidden;"></div>
|
||
<div style="font-size:0.75rem; color:var(--color-muted-foreground); margin-top:0.5rem;">{{ vendor.latitude|floatformat:5 }} · {{ vendor.longitude|floatformat:5 }}</div>
|
||
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.9.4/dist/leaflet.js"></script>
|
||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.9.4/dist/leaflet.css">
|
||
<script>
|
||
(function () {
|
||
var lat = parseFloat("{{ vendor.latitude|floatformat:'6' }}".replace(',', '.'));
|
||
var lng = parseFloat("{{ vendor.longitude|floatformat:'6' }}".replace(',', '.'));
|
||
var map = L.map('vendor-map', { zoomControl: false, dragging: false, scrollWheelZoom: false }).setView([lat, lng], 15);
|
||
if (typeof acoreAddMapBaseLayer === 'function') {
|
||
acoreAddMapBaseLayer(map);
|
||
} else {
|
||
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
|
||
attribution: '© OpenStreetMap contributors', maxZoom: 19
|
||
}).addTo(map);
|
||
}
|
||
L.marker([lat, lng]).addTo(map);
|
||
})();
|
||
</script>
|
||
{% else %}
|
||
<div style="font-size:0.8125rem; color:var(--color-warning);">{% trans "Координаты не указаны" %}</div>
|
||
{% if can_edit_vendor %}
|
||
<div style="font-size:0.75rem; color:var(--color-muted-foreground); margin-top:0.35rem;">{% trans "Укажите lat,lng в режиме редактирования." %}</div>
|
||
{% endif %}
|
||
{% endif %}
|
||
</div>
|
||
</div>
|
||
{% endif %}
|
||
</div>
|