mirror of
https://github.com/avecms/AVE.cms.git
synced 2026-08-06 02:35:45 +00:00
20 lines
6.4 KiB
Twig
20 lines
6.4 KiB
Twig
<div class="section-header ax-panel-header customers-center-head"><div class="section-icon"><i class="ti ti-users-group"></i></div><div><div class="section-eyebrow">Работа с покупателями</div><h2>Центр покупателей</h2><p class="section-desc">Аккаунт, покупки, обращения и интересы человека собраны в одной карточке.</p></div><div class="section-header-right"><form class="customers-filter" action="{{ ADMINX_BASE }}/system/customers" data-customers-center-filter><input type="hidden" name="tab" value="center"><input type="hidden" name="segment" value="{{ segment|e }}"><div class="input-wrap"><i class="ti ti-search"></i><input class="input" type="search" name="q" value="{{ q|e }}" placeholder="Имя, email, телефон или ID"></div><button class="btn btn-secondary"><i class="ti ti-search"></i>Найти</button></form>{% set saved_views_form = '[data-customers-center-filter]' %}{% set saved_views_save_url = ADMINX_BASE ~ '/system/customers/saved-views' %}{% set saved_views_delete_url = ADMINX_BASE ~ '/system/customers/saved-views/__ID__/delete' %}{% set saved_views_fields = ['q','segment'] %}{% include '@adminx/_saved_views.twig' %}</div></div>
|
||
|
||
<div class="customers-center-kpis">
|
||
<div class="card stat-tile"><div class="stat-ico"><i class="ti ti-users"></i></div><div><div class="stat-val">{{ center_stats.total|default(0) }}</div><div class="stat-label">Аккаунтов</div></div></div>
|
||
<div class="card stat-tile"><div class="stat-ico is-green"><i class="ti ti-shopping-bag"></i></div><div><div class="stat-val">{{ center_stats.buyers|default(0) }}</div><div class="stat-label">Покупателей</div></div></div>
|
||
<div class="card stat-tile"><div class="stat-ico is-blue"><i class="ti ti-repeat"></i></div><div><div class="stat-val">{{ center_stats.repeat|default(0) }}</div><div class="stat-label">Повторных</div></div></div>
|
||
<div class="card stat-tile"><div class="stat-ico is-violet"><i class="ti ti-user-question"></i></div><div><div class="stat-val">{{ center_stats.duplicates|default(0) }}</div><div class="stat-label">Групп дублей</div></div></div>
|
||
</div>
|
||
|
||
<nav class="customers-segments" aria-label="Сегменты покупателей">{% for code,label in center_segments %}<a class="{{ segment==code?'is-active':'' }}" href="{{ ADMINX_BASE }}/system/customers?tab=center&segment={{ code }}{% if q %}&q={{ q|url_encode }}{% endif %}">{{ label }}</a>{% endfor %}</nav>
|
||
|
||
{% if duplicate_groups %}<details class="alert alert-warning customers-duplicates"><summary><span><i class="ti ti-users-minus"></i><b>Найдены возможные дубли</b></span><span>{{ duplicate_groups|length }}</span></summary><div>{% for group in duplicate_groups %}<article><span><b>{{ group.kind=='email'?'Одинаковый email':'Одинаковый телефон' }}</b><small>{{ group.value }}</small></span><span class="mono">{% for id in group.ids %}#{{ id }}{% if not loop.last %}, {% endif %}{% endfor %}</span>{% if can_manage %}{% for id in group.ids %}{% if id!=group.target_id %}<button class="btn btn-secondary btn-sm" type="button" data-customer-merge data-target-id="{{ group.target_id }}" data-source-id="{{ id }}"><i class="ti ti-arrows-join"></i>Объединить #{{ id }} с #{{ group.target_id }}</button>{% endif %}{% endfor %}{% endif %}</article>{% endfor %}</div></details>{% endif %}
|
||
|
||
<section class="card ax-list-card customers-center-list">
|
||
<div class="ax-list-head"><div class="ax-list-title"><span class="icon-tile" style="--tile-bg:var(--blue-100);--tile-fg:var(--blue-600)"><i class="ti ti-address-book"></i></span><div><h2>Покупатели</h2><p class="text-secondary">Откройте карточку, чтобы увидеть всю историю взаимодействия.</p></div></div><span class="badge badge-blue">{{ center_customers|length }}</span></div>
|
||
<div class="table-scroll"><table class="table customers-center-table"><thead><tr><th>Покупатель</th><th>Заказы</th><th>Активность</th><th>Сегменты</th><th class="customers-actions-col">Действия</th></tr></thead><tbody>{% for customer in center_customers %}<tr data-customer-center-open data-url="{{ ADMINX_BASE }}/system/customers/center/{{ customer.id }}"><td><div class="customers-center-person"><span>{{ (customer.firstname|first ~ customer.lastname|first)|upper ?: '#' }}</span><div><b>{{ (customer.firstname ~ ' ' ~ customer.lastname)|trim ?: customer.user_name }}</b><small>{{ customer.email ?: customer.phone }} · #{{ customer.id }}</small></div></div></td><td><b>{{ customer.orders_count }} заказов</b><small>{{ customer.orders_total|number_format(0,'.',' ') }} ₽</small></td><td><b>{{ customer.last_order_at ? customer.last_order_at|date('d.m.Y') : 'Покупок нет' }}</b><small>Вход: {{ customer.last_visit ? customer.last_visit|date('d.m.Y') : 'не входил' }}</small></td><td><div class="customers-center-segment-list">{% for code in customer.segment_codes %}<span class="badge {{ code=='vip'?'badge-violet':(code=='repeat'?'badge-green':(code=='inactive'?'badge-gray':'badge-blue')) }}">{{ center_segments[code] }}</span>{% endfor %}</div></td><td><button class="btn btn-icon btn-ghost ax-act ax-act-view" type="button" data-tooltip="Открыть карточку" aria-label="Открыть карточку"><i class="ti ti-eye"></i></button></td></tr>{% else %}<tr><td colspan="5"><div class="empty-state"><i class="ti ti-user-search"></i><b>Покупатели не найдены</b><span>Измените поисковый запрос или сегмент.</span></div></td></tr>{% endfor %}</tbody></table></div>
|
||
</section>
|
||
|
||
<aside class="drawer drawer-right customer-center-drawer" id="customerCenterDrawer" role="dialog" aria-modal="true" aria-labelledby="customerCenterDrawerTitle" hidden><div class="drawer-header"><div><h3 id="customerCenterDrawerTitle">Карточка покупателя</h3><p class="text-secondary text-sm">Профиль и история взаимодействия</p></div><button class="btn btn-ghost btn-icon" type="button" data-close-drawer aria-label="Закрыть"><i class="ti ti-x"></i></button></div><div class="drawer-body customers-center-detail" data-customer-center-detail><div class="skeleton" style="height:160px"></div></div><div class="drawer-footer"><button class="btn btn-ghost" type="button" data-close-drawer>Закрыть</button></div></aside>
|