improve bazdid 2
This commit is contained in:
1 parent
534a84f977
commit
f8d768a724
6 files changed
+374
-92
No files matched your search
@@ -11,29 +11,55 @@
|
||||
@media (min-width: 769px) { .ez-wrap { padding: 1rem 1.25rem; } }
|
||||
|
||||
/* ---------- نوار آمار ---------- */
|
||||
.ez-stats-head { margin: 0 0 .55rem; }
|
||||
.ez-stats-title { font-size: .92rem; font-weight: 800; color: #0f172a; margin: 0; }
|
||||
.ez-stats-hint {
|
||||
font-size: .72rem; color: #64748b; margin: .2rem 0 0; line-height: 1.7;
|
||||
}
|
||||
.ez-stats-hint b { color: #334155; }
|
||||
|
||||
.ez-stats {
|
||||
display: grid; grid-auto-flow: column; grid-auto-columns: minmax(8.5rem, 1fr);
|
||||
gap: .5rem; overflow-x: auto; padding-bottom: .25rem;
|
||||
display: grid; grid-auto-flow: column; grid-auto-columns: minmax(11rem, 1fr);
|
||||
gap: .5rem; overflow-x: auto; padding-bottom: .35rem;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
@media (min-width: 1024px) {
|
||||
.ez-stats { grid-auto-flow: row; grid-template-columns: repeat(5, 1fr); overflow: visible; }
|
||||
}
|
||||
.ez-stat {
|
||||
display: block; border: 1px solid #e2e8f0; border-radius: .625rem;
|
||||
background: #fff; padding: .55rem .7rem; text-decoration: none; color: #334155;
|
||||
transition: border-color .15s ease, background-color .15s ease;
|
||||
display: flex; flex-direction: column; gap: .18rem;
|
||||
border: 1px solid #e2e8f0; border-radius: .625rem; background: #fff;
|
||||
padding: .55rem .65rem .6rem; text-decoration: none; color: #334155;
|
||||
border-top: 3px solid #cbd5e1;
|
||||
transition: border-color .15s ease, background-color .15s ease, box-shadow .15s ease;
|
||||
}
|
||||
.ez-stat:hover { border-color: #94a3b8; box-shadow: 0 1px 6px rgba(15, 23, 42, .08); }
|
||||
/* نوار رنگی بالای هر کارت = همان رنگ برچسب وضعیت در جدول */
|
||||
.ez-stat.total { border-top-color: #64748b; }
|
||||
.ez-stat.danger { border-top-color: #dc2626; }
|
||||
.ez-stat.success { border-top-color: #16a34a; }
|
||||
.ez-stat.warning { border-top-color: #d97706; }
|
||||
.ez-stat.link { border-top-color: #0284c7; }
|
||||
|
||||
.ez-stat-top {
|
||||
display: flex; align-items: baseline; justify-content: space-between; gap: .4rem;
|
||||
}
|
||||
.ez-stat .ez-lbl {
|
||||
font-size: .74rem; font-weight: 700; color: #334155; line-height: 1.35;
|
||||
}
|
||||
.ez-stat:hover { border-color: #94a3b8; }
|
||||
.ez-stat .ez-num {
|
||||
display: block; font-size: 1.2rem; font-weight: 800; line-height: 1.1;
|
||||
font-variant-numeric: tabular-nums;
|
||||
font-size: 1.25rem; font-weight: 800; line-height: 1.1;
|
||||
font-variant-numeric: tabular-nums; flex: 0 0 auto;
|
||||
}
|
||||
.ez-stat .ez-desc {
|
||||
font-size: .68rem; color: #7c8798; line-height: 1.6;
|
||||
}
|
||||
.ez-stat .ez-lbl { display: block; margin-top: .15rem; font-size: .7rem; color: #64748b; }
|
||||
.ez-stat.is-active {
|
||||
border-color: #33b5d3; background: #f1fbff; box-shadow: inset 0 -3px 0 #33b5d3;
|
||||
border-color: #33b5d3; background: #f1fbff;
|
||||
box-shadow: inset 0 -3px 0 #33b5d3, 0 1px 6px rgba(51, 181, 211, .18);
|
||||
}
|
||||
.ez-stat.is-active .ez-lbl { color: #0e7490; font-weight: 700; }
|
||||
.ez-stat.is-active .ez-lbl { color: #0e7490; }
|
||||
.ez-stat.is-active .ez-desc { color: #0e7490; }
|
||||
|
||||
/* ---------- تفکیک تأخیر ---------- */
|
||||
.ez-legend {
|
||||
@@ -169,40 +195,78 @@
|
||||
<div class="columns m-0">
|
||||
<div class="column is-12 p-0">
|
||||
{# ===== نوار آمار: هر عدد لینک فیلتر ===== #}
|
||||
<div class="ez-stats-head">
|
||||
<p class="ez-stats-title">وضعیت مشتریانِ عقبافتاده</p>
|
||||
<p class="ez-stats-hint">
|
||||
«عقبافتاده» یعنی از آخرین بازدید
|
||||
<b>بیش از {{ counts.period_months }} ماه</b> گذشته باشد.
|
||||
روی هر کارت بزنید تا فقط همان گروه نمایش داده شود؛
|
||||
<b>کل = بدون قرار + با قرار</b>.
|
||||
{% if counts.both %}
|
||||
({{ counts.both }} مشتری هم قرار هماهنگی دارند و هم بازدید
|
||||
برنامهریزیشده، پس در هر دو کارت شمرده میشوند.)
|
||||
{% endif %}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="ez-stats">
|
||||
<a href="?view=all&sort={{ sort }}{% if searchVal %}&searchVal={{ searchVal }}&searchOn={{ searchOn }}{% endif %}"
|
||||
class="ez-stat {% if view == 'all' %}is-active{% endif %}">
|
||||
<span class="ez-num">{{ counts.total }}</span>
|
||||
<span class="ez-lbl">کل معوق</span>
|
||||
class="ez-stat total {% if view == 'all' %}is-active{% endif %}"
|
||||
title="همهٔ مشتریان عقبافتاده، با هر وضعیت قرار">
|
||||
<span class="ez-stat-top">
|
||||
<span class="ez-lbl">کل عقبافتادهها</span>
|
||||
<span class="ez-num">{{ counts.total }}</span>
|
||||
</span>
|
||||
<span class="ez-desc">همه، فارغ از داشتن یا نداشتن قرار</span>
|
||||
</a>
|
||||
|
||||
<a href="?view=uncoordinated&sort={{ sort }}{% if searchVal %}&searchVal={{ searchVal }}&searchOn={{ searchOn }}{% endif %}"
|
||||
class="ez-stat {% if view == 'uncoordinated' %}is-active{% endif %}">
|
||||
<span class="ez-num has-text-danger">{{ counts.uncoordinated }}</span>
|
||||
<span class="ez-lbl">بدون قرار</span>
|
||||
class="ez-stat danger {% if view == 'uncoordinated' %}is-active{% endif %}"
|
||||
title="مشتریانی که هنوز هیچ قرار بعدی برایشان ثبت نشده است">
|
||||
<span class="ez-stat-top">
|
||||
<span class="ez-lbl">بدون قرار</span>
|
||||
<span class="ez-num has-text-danger">{{ counts.uncoordinated }}</span>
|
||||
</span>
|
||||
<span class="ez-desc">هنوز وقت بازدید تعیین نشده — نیاز به تماس</span>
|
||||
</a>
|
||||
|
||||
<a href="?view=coordinated&sort={{ sort }}{% if searchVal %}&searchVal={{ searchVal }}&searchOn={{ searchOn }}{% endif %}"
|
||||
class="ez-stat {% if view == 'coordinated' %}is-active{% endif %}">
|
||||
<span class="ez-num has-text-success">{{ counts.coordinated }}</span>
|
||||
<span class="ez-lbl">با قرار</span>
|
||||
class="ez-stat success {% if view == 'coordinated' %}is-active{% endif %}"
|
||||
title="مشتریانی که وقت بازدید بعدی برایشان مشخص شده است">
|
||||
<span class="ez-stat-top">
|
||||
<span class="ez-lbl">با قرار</span>
|
||||
<span class="ez-num has-text-success">{{ counts.coordinated }}</span>
|
||||
</span>
|
||||
<span class="ez-desc">وقت بازدیدشان مشخص است (هر دو نوع قرار)</span>
|
||||
</a>
|
||||
|
||||
<a href="?view=manual&sort={{ sort }}{% if searchVal %}&searchVal={{ searchVal }}&searchOn={{ searchOn }}{% endif %}"
|
||||
class="ez-stat {% if view == 'manual' %}is-active{% endif %}">
|
||||
<span class="ez-num has-text-warning-dark">{{ counts.manual }}</span>
|
||||
<span class="ez-lbl">قرار هماهنگی</span>
|
||||
class="ez-stat warning {% if view == 'manual' %}is-active{% endif %}"
|
||||
title="قرار تعویق که از فرم «هماهنگی» ثبت شده است">
|
||||
<span class="ez-stat-top">
|
||||
<span class="ez-lbl">قرار هماهنگی</span>
|
||||
<span class="ez-num has-text-warning-dark">{{ counts.manual }}</span>
|
||||
</span>
|
||||
<span class="ez-desc">تعویق دستی از فرم هماهنگی (مثلاً «ماه بعد زنگ بزنید»)</span>
|
||||
</a>
|
||||
|
||||
<a href="?view=scheduled&sort={{ sort }}{% if searchVal %}&searchVal={{ searchVal }}&searchOn={{ searchOn }}{% endif %}"
|
||||
class="ez-stat {% if view == 'scheduled' %}is-active{% endif %}">
|
||||
<span class="ez-num has-text-link">{{ counts.scheduled }}</span>
|
||||
<span class="ez-lbl">بازدید برنامهریزیشده</span>
|
||||
class="ez-stat link {% if view == 'scheduled' %}is-active{% endif %}"
|
||||
title="اقدام «بازدید» با تاریخ آینده">
|
||||
<span class="ez-stat-top">
|
||||
<span class="ez-lbl">بازدید برنامهریزیشده</span>
|
||||
<span class="ez-num has-text-link">{{ counts.scheduled }}</span>
|
||||
</span>
|
||||
<span class="ez-desc">اقدام «بازدید» با تاریخ آینده ثبت شده است</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{# تفکیک مدت تأخیر در نمای جاری #}
|
||||
<div class="ez-legend">
|
||||
<span>تأخیر:</span>
|
||||
<span><b>{{ counts.buckets.lt30 }}</b> زیر ۳۰ روز</span>
|
||||
<span><b>{{ counts.buckets.30to90 }}</b> ۳۰–۹۰ روز</span>
|
||||
<span><b>{{ counts.buckets.90to180 }}</b> ۹۰–۱۸۰ روز</span>
|
||||
<span>میزان تأخیر در همین نما:</span>
|
||||
<span><b>{{ counts.buckets.lt30 }}</b> تا ۳۰ روز</span>
|
||||
<span><b>{{ counts.buckets.30to90 }}</b> ۳۰ تا ۹۰ روز</span>
|
||||
<span><b>{{ counts.buckets.90to180 }}</b> ۹۰ تا ۱۸۰ روز</span>
|
||||
<span><b>{{ counts.buckets.gt180 }}</b> بیش از ۶ ماه</span>
|
||||
</div>
|
||||
|
||||
|
||||
Reference in new issue
Block a user