diff --git a/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Shop/ShopPage.razor b/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Shop/ShopPage.razor
index 06afae51..db121a02 100644
--- a/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Shop/ShopPage.razor
+++ b/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Shop/ShopPage.razor
@@ -214,10 +214,28 @@
// ═══ FINANCE ═══
case "finance":
+ var finOrders = _financePeriod switch {
+ "7d" => _orders.Where(o => o.CreatedAt >= DateTime.UtcNow.AddDays(-7)).ToList(),
+ "30d" => _orders.Where(o => o.CreatedAt >= DateTime.UtcNow.AddDays(-30)).ToList(),
+ _ => _orders };
+
+
Tài chính
+
+ @foreach (var (label, val) in new[] { ("7 ngày", "7d"), ("30 ngày", "30d"), ("Tất cả", "all") })
+ {
+
+ }
+
+
-
@FormatVND(_orders.Sum(o => o.TotalAmount))Tổng doanh thu
-
-
@FormatVND(_orders.Any() ? _orders.Average(o => o.TotalAmount) : 0)TB/đơn
+
@FormatVND(finOrders.Sum(o => o.TotalAmount))Tổng doanh thu
+
+
@FormatVND(finOrders.Any() ? finOrders.Average(o => o.TotalAmount) : 0)TB/đơn
@FormatVND(_wallets.Sum(w => w.Balance))Số dư ví
@if (_walletTxns.Any())
@@ -346,16 +364,28 @@
// ═══ CUSTOMERS + MEMBERSHIP LEVELS ═══
case "customers":
- @if (!_members.Any())
+
+
@_members.Count khách hàng
+
+
+
+
+
+ var filteredMembers = string.IsNullOrWhiteSpace(_customerSearch)
+ ? _members
+ : _members.Where(m => m.Id.ToString().Contains(_customerSearch, StringComparison.OrdinalIgnoreCase)
+ || (m.LevelName ?? "").Contains(_customerSearch, StringComparison.OrdinalIgnoreCase)).ToList();
+ @if (!filteredMembers.Any())
{
@RenderEmpty("heart", "#EF4444", "Chưa có khách hàng", "Khách hàng sẽ hiển thị khi có giao dịch", "monitor", "Mở POS bán hàng", $"/pos/{ShopId}/{_posVertical}")
}
else
{
-
@_members.CountTổng khách hàng
+
@filteredMembers.CountTổng khách hàng
@_memberLevels.CountCấp bậc
-
@(_members.Any() ? _members.Max(m => m.TotalExpEarned).ToString("N0") : "0")EXP cao nhất
+
@(filteredMembers.Any() ? filteredMembers.Max(m => m.TotalExpEarned).ToString("N0") : "0")EXP cao nhất
@if (_memberLevels.Any())
{
@@ -390,11 +420,11 @@
EXP |
Ngày tham gia |
- @foreach (var m in _members)
+ @foreach (var m in filteredMembers)
{
| @m.Id.ToString()[..8] |
- @(m.LevelName ?? "—") |
+ @(m.LevelName ?? "—") |
@m.TotalExpEarned.ToString("N0") |
@m.CreatedAt.ToString("dd/MM/yyyy") |
@@ -889,6 +919,10 @@
private List _staffSchedules = new();
private List _invTxns = new();
private List _resources = new();
+ // Customer filter state
+ private string _customerSearch = "";
+ // Finance date range filter state
+ private string _financePeriod = "all"; // 7d, 30d, all
protected override async Task OnInitializedAsync() => await LoadData();