refactor: relocate system admin pages and apply minor UI adjustments across various application pages.
This commit is contained in:
@@ -4,8 +4,8 @@
|
||||
Design: pencil-design/src/pages/tPOS/admin/admin-dashboard.pen
|
||||
*@
|
||||
@inherits LayoutComponentBase
|
||||
@inject IStringLocalizer<AdminLayout> L
|
||||
@inject NavigationManager NavigationManager
|
||||
@inject IJSRuntime JS
|
||||
|
||||
<MudThemeProvider IsDarkMode="true" Theme="_theme" />
|
||||
<MudPopoverProvider />
|
||||
@@ -27,59 +27,59 @@
|
||||
@* Navigation *@
|
||||
<nav class="admin-sidebar__nav">
|
||||
@* TỔNG QUAN *@
|
||||
<span class="admin-nav-label">@L["Nav_Overview"]</span>
|
||||
<span class="admin-nav-label">Tổng quan</span>
|
||||
<NavLink href="/admin" class="admin-nav-item" Match="NavLinkMatch.All" ActiveClass="admin-nav-item--active">
|
||||
<i data-lucide="layout-dashboard"></i>
|
||||
<span>Dashboard</span>
|
||||
</NavLink>
|
||||
|
||||
@* CỬA HÀNG *@
|
||||
<span class="admin-nav-label">@L["Nav_Store"]</span>
|
||||
<span class="admin-nav-label">Cửa hàng</span>
|
||||
<NavLink href="/admin/stores" class="admin-nav-item" ActiveClass="admin-nav-item--active">
|
||||
<i data-lucide="store"></i>
|
||||
<span>@L["Nav_StoreManagement"]</span>
|
||||
<span>Quản lý cửa hàng</span>
|
||||
</NavLink>
|
||||
<NavLink href="/admin/products" class="admin-nav-item admin-nav-item--sub" ActiveClass="admin-nav-item--active">
|
||||
<i data-lucide="package"></i>
|
||||
<span>@L["Nav_Products"]</span>
|
||||
<span>Sản phẩm & Menu</span>
|
||||
</NavLink>
|
||||
<NavLink href="/admin/staff" class="admin-nav-item admin-nav-item--sub" ActiveClass="admin-nav-item--active">
|
||||
<i data-lucide="users"></i>
|
||||
<span>@L["Nav_Staff"]</span>
|
||||
<span>Nhân sự</span>
|
||||
</NavLink>
|
||||
<NavLink href="/admin/inventory" class="admin-nav-item admin-nav-item--sub" ActiveClass="admin-nav-item--active">
|
||||
<i data-lucide="warehouse"></i>
|
||||
<span>@L["Nav_Inventory"]</span>
|
||||
<span>Kho hàng</span>
|
||||
</NavLink>
|
||||
<NavLink href="/admin/devices" class="admin-nav-item admin-nav-item--sub" ActiveClass="admin-nav-item--active">
|
||||
<NavLink href="/admin/system/devices" class="admin-nav-item admin-nav-item--sub" ActiveClass="admin-nav-item--active">
|
||||
<i data-lucide="monitor"></i>
|
||||
<span>@L["Nav_Devices"]</span>
|
||||
<span>Thiết bị</span>
|
||||
</NavLink>
|
||||
|
||||
@* KINH DOANH *@
|
||||
<span class="admin-nav-label">@L["Nav_Business"]</span>
|
||||
<span class="admin-nav-label">Kinh doanh</span>
|
||||
<NavLink href="/admin/customers" class="admin-nav-item" ActiveClass="admin-nav-item--active">
|
||||
<i data-lucide="heart"></i>
|
||||
<span>@L["Nav_Customers"]</span>
|
||||
<span>Khách hàng & Loyalty</span>
|
||||
</NavLink>
|
||||
<NavLink href="/admin/reports" class="admin-nav-item" ActiveClass="admin-nav-item--active">
|
||||
<NavLink href="/admin/finance/revenue" class="admin-nav-item" ActiveClass="admin-nav-item--active">
|
||||
<i data-lucide="bar-chart-2"></i>
|
||||
<span>@L["Nav_Reports"]</span>
|
||||
<span>Báo cáo & Phân tích</span>
|
||||
</NavLink>
|
||||
<NavLink href="/admin/finance" class="admin-nav-item" ActiveClass="admin-nav-item--active">
|
||||
<i data-lucide="wallet"></i>
|
||||
<span>@L["Nav_Finance"]</span>
|
||||
<span>Tài chính</span>
|
||||
</NavLink>
|
||||
|
||||
@* HỆ THỐNG *@
|
||||
<span class="admin-nav-label">@L["Nav_System"]</span>
|
||||
<span class="admin-nav-label">Hệ thống</span>
|
||||
<NavLink href="/admin/roles" class="admin-nav-item" ActiveClass="admin-nav-item--active">
|
||||
<i data-lucide="shield"></i>
|
||||
<span>@L["Nav_Roles"]</span>
|
||||
<span>Phân quyền</span>
|
||||
</NavLink>
|
||||
<NavLink href="/admin/settings" class="admin-nav-item" ActiveClass="admin-nav-item--active">
|
||||
<NavLink href="/admin/system/audit" class="admin-nav-item" ActiveClass="admin-nav-item--active">
|
||||
<i data-lucide="settings"></i>
|
||||
<span>@L["Nav_Settings"]</span>
|
||||
<span>Cài đặt</span>
|
||||
</NavLink>
|
||||
</nav>
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
<span class="admin-user-name">Velik Ho</span>
|
||||
<span class="admin-user-role">Owner</span>
|
||||
</div>
|
||||
<button @onclick="Logout" title="@L["Nav_Logout"]">
|
||||
<button @onclick="Logout" title="Đăng xuất">
|
||||
<i data-lucide="log-out"></i>
|
||||
</button>
|
||||
</div>
|
||||
@@ -111,6 +111,13 @@
|
||||
@code {
|
||||
private bool _sidebarOpen = false;
|
||||
|
||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||
{
|
||||
// EN: Re-init Lucide icons after every render (Blazor navigation replaces DOM)
|
||||
// VI: Khởi tạo lại Lucide icons sau mỗi lần render (Blazor navigation thay đổi DOM)
|
||||
try { await JS.InvokeVoidAsync("lucide.createIcons"); } catch { /* ignore if lucide not loaded */ }
|
||||
}
|
||||
|
||||
private void ToggleSidebar() => _sidebarOpen = !_sidebarOpen;
|
||||
private void CloseSidebar() => _sidebarOpen = false;
|
||||
private void Logout() => NavigationManager.NavigateTo("/login");
|
||||
|
||||
@@ -41,10 +41,10 @@
|
||||
<div style="display:flex;align-items:center;gap:10px;">
|
||||
<i data-lucide="grip-vertical" style="width:16px;height:16px;color:var(--admin-text-tertiary);cursor:grab;"></i>
|
||||
<h3 class="admin-panel__title" style="margin:0;">
|
||||
<i data-lucide="@section.Icon" style="color:@section.Color;"></i>
|
||||
@section.Name
|
||||
<i data-lucide="@(section.Icon)" style="color:@(section.Color);"></i>
|
||||
@(section.Name)
|
||||
</h3>
|
||||
<span class="admin-tab__badge">@section.Items.Length</span>
|
||||
<span class="admin-tab__badge">@(section.Items.Length)</span>
|
||||
</div>
|
||||
<div style="display:flex;gap:8px;align-items:center;">
|
||||
<MudSwitch T="bool" Value="section.Visible" Color="Color.Primary" />
|
||||
@@ -59,7 +59,7 @@
|
||||
<div style="display:flex;align-items:center;gap:12px;padding:10px 8px;border-bottom:1px solid var(--admin-border-subtle);">
|
||||
<i data-lucide="grip-vertical" style="width:14px;height:14px;color:var(--admin-text-tertiary);cursor:grab;"></i>
|
||||
<div style="width:40px;height:40px;background:@(section.Color)15;border-radius:8px;display:flex;align-items:center;justify-content:center;">
|
||||
<i data-lucide="@section.Icon" style="width:18px;height:18px;color:@section.Color;"></i>
|
||||
<i data-lucide="@(section.Icon)" style="width:18px;height:18px;color:@(section.Color);"></i>
|
||||
</div>
|
||||
<div style="flex:1;">
|
||||
<div style="font-size:14px;font-weight:500;">@item.Name</div>
|
||||
|
||||
@@ -217,8 +217,8 @@
|
||||
private string _city = "";
|
||||
private string _phone = "";
|
||||
private string _email = "";
|
||||
private string _openTime = "07:00";
|
||||
private string _closeTime = "22:00";
|
||||
private TimeOnly _openTime = new TimeOnly(7, 0);
|
||||
private TimeOnly _closeTime = new TimeOnly(22, 0);
|
||||
private HashSet<string> _activeDays = new() { "T2", "T3", "T4", "T5", "T6", "T7" };
|
||||
|
||||
private record StoreType(string Key, string Label, string Icon, string Color, string Desc);
|
||||
|
||||
@@ -104,13 +104,13 @@
|
||||
</div>
|
||||
@if (SelectedRoom.Status == "available")
|
||||
{
|
||||
<button class="pos-btn-checkout" @onclick="() => NavigateTo("karaoke/room-select")">
|
||||
<button class="pos-btn-checkout" @onclick="@(() => NavigateTo("karaoke/room-select"))">
|
||||
<i data-lucide="play" style="width:18px;height:18px;"></i> Mở phiên
|
||||
</button>
|
||||
}
|
||||
else if (SelectedRoom.Status == "occupied")
|
||||
{
|
||||
<button class="pos-btn-checkout" @onclick="() => NavigateTo("karaoke/room-session")">
|
||||
<button class="pos-btn-checkout" @onclick="@(() => NavigateTo("karaoke/room-session"))">
|
||||
<i data-lucide="receipt" style="width:18px;height:18px;"></i> Xem chi tiết
|
||||
</button>
|
||||
}
|
||||
|
||||
@@ -70,12 +70,12 @@
|
||||
display:flex;gap:8px;">
|
||||
<button style="flex:1;padding:14px;border-radius:var(--pos-radius);background:var(--pos-bg-interactive);
|
||||
border:none;color:var(--pos-text-primary);cursor:pointer;font-size:13px;font-weight:500;"
|
||||
@onclick="() => NavigateTo("karaoke/room-map")">
|
||||
@onclick="@(() => NavigateTo("karaoke/room-map"))">
|
||||
<i data-lucide="layout-grid" style="width:16px;height:16px;display:inline;"></i> Sơ đồ
|
||||
</button>
|
||||
<button style="flex:1;padding:14px;border-radius:var(--pos-radius);background:var(--pos-bg-interactive);
|
||||
border:none;color:var(--pos-text-primary);cursor:pointer;font-size:13px;font-weight:500;"
|
||||
@onclick="() => NavigateTo("karaoke/service-display")">
|
||||
@onclick="@(() => NavigateTo("karaoke/service-display"))">
|
||||
<i data-lucide="bell" style="width:16px;height:16px;display:inline;"></i> Gọi phục vụ
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -69,13 +69,13 @@
|
||||
<div style="display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:12px;">
|
||||
<button style="padding:12px;border-radius:var(--pos-radius);background:var(--pos-bg-interactive);
|
||||
border:none;color:var(--pos-text-primary);cursor:pointer;font-size:13px;font-weight:500;"
|
||||
@onclick="() => NavigateTo("karaoke/order-fnb")">
|
||||
@onclick="@(() => NavigateTo("karaoke/order-fnb"))">
|
||||
<i data-lucide="utensils" style="width:16px;height:16px;display:block;margin:0 auto 4px;"></i>
|
||||
Gọi F&B
|
||||
</button>
|
||||
<button style="padding:12px;border-radius:var(--pos-radius);background:var(--pos-bg-interactive);
|
||||
border:none;color:var(--pos-text-primary);cursor:pointer;font-size:13px;font-weight:500;"
|
||||
@onclick="() => NavigateTo("karaoke/room-session")">
|
||||
@onclick="@(() => NavigateTo("karaoke/room-session"))">
|
||||
<i data-lucide="timer" style="width:16px;height:16px;display:block;margin:0 auto 4px;"></i>
|
||||
Gia hạn
|
||||
</button>
|
||||
@@ -108,7 +108,7 @@
|
||||
<span class="pos-cart-total__value">@FormatPrice(_selectedRoom.Status == "occupied" ? 520_000 : 0)</span>
|
||||
</div>
|
||||
<button class="pos-btn-checkout" style="height:52px;font-size:16px;"
|
||||
@onclick="() => NavigateTo("karaoke/room-session")">
|
||||
@onclick="@(() => NavigateTo("karaoke/room-session"))">
|
||||
<i data-lucide="receipt" style="width:18px;height:18px;"></i>
|
||||
@(_selectedRoom.Status == "available" ? "Mở phiên" : "Chi tiết")
|
||||
</button>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<div style="display:flex;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid var(--pos-border-subtle);flex-shrink:0;">
|
||||
<button style="background:var(--pos-bg-interactive);border:none;color:var(--pos-text-primary);
|
||||
padding:8px 12px;border-radius:8px;cursor:pointer;font-size:13px;"
|
||||
@onclick="() => NavigateTo("karaoke")">
|
||||
@onclick="@(() => NavigateTo("karaoke"))">
|
||||
<i data-lucide="arrow-left" style="width:16px;height:16px;display:inline;"></i>
|
||||
</button>
|
||||
<span style="font-size:16px;font-weight:700;">Happy Hour & Khuyến mãi</span>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<div style="display:flex;align-items:center;gap:12px;margin-bottom:16px;">
|
||||
<button style="background:var(--pos-bg-interactive);border:none;color:var(--pos-text-primary);
|
||||
padding:8px 12px;border-radius:8px;cursor:pointer;font-size:13px;"
|
||||
@onclick="() => NavigateTo("karaoke")">
|
||||
@onclick="@(() => NavigateTo("karaoke"))">
|
||||
<i data-lucide="arrow-left" style="width:16px;height:16px;display:inline;"></i>
|
||||
</button>
|
||||
<span style="font-size:16px;font-weight:700;">Thẻ thành viên</span>
|
||||
@@ -137,7 +137,7 @@
|
||||
<span style="color:#22C55E;">@_selectedReward.Value</span>
|
||||
</div>
|
||||
}
|
||||
<button class="pos-btn-checkout" @onclick="() => NavigateTo("karaoke/room-session")">
|
||||
<button class="pos-btn-checkout" @onclick="@(() => NavigateTo("karaoke/room-session"))">
|
||||
<i data-lucide="check" style="width:18px;height:18px;"></i> Áp dụng
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<div style="display:flex;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid var(--pos-border-subtle);">
|
||||
<button style="background:var(--pos-bg-interactive);border:none;color:var(--pos-text-primary);
|
||||
padding:8px 12px;border-radius:8px;cursor:pointer;font-size:13px;"
|
||||
@onclick="() => NavigateTo("karaoke/room-session")">
|
||||
@onclick="@(() => NavigateTo("karaoke/room-session"))">
|
||||
<i data-lucide="arrow-left" style="width:16px;height:16px;display:inline;"></i>
|
||||
</button>
|
||||
<span style="font-size:16px;font-weight:700;">Gọi F&B</span>
|
||||
@@ -90,7 +90,7 @@
|
||||
<span class="pos-cart-total__label">Tổng F&B</span>
|
||||
<span class="pos-cart-total__value">@FormatPrice(_orderItems.Sum(i => i.Price * i.Qty))</span>
|
||||
</div>
|
||||
<button class="pos-btn-checkout" @onclick="() => NavigateTo("karaoke/room-session")">
|
||||
<button class="pos-btn-checkout" @onclick="@(() => NavigateTo("karaoke/room-session"))">
|
||||
<i data-lucide="send" style="width:18px;height:18px;"></i> Gửi đơn
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<div style="display:flex;align-items:center;gap:12px;">
|
||||
<button style="background:var(--pos-bg-interactive);border:none;color:var(--pos-text-primary);
|
||||
padding:8px 12px;border-radius:8px;cursor:pointer;font-size:13px;"
|
||||
@onclick="() => NavigateTo("karaoke")">
|
||||
@onclick="@(() => NavigateTo("karaoke"))">
|
||||
<i data-lucide="arrow-left" style="width:16px;height:16px;display:inline;"></i> Quay lại
|
||||
</button>
|
||||
<span style="font-size:16px;font-weight:700;">Sơ đồ phòng</span>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<div style="display:flex;align-items:center;gap:12px;margin-bottom:16px;">
|
||||
<button style="background:var(--pos-bg-interactive);border:none;color:var(--pos-text-primary);
|
||||
padding:8px 12px;border-radius:8px;cursor:pointer;font-size:13px;"
|
||||
@onclick="() => NavigateTo("karaoke")">
|
||||
@onclick="@(() => NavigateTo("karaoke"))">
|
||||
<i data-lucide="arrow-left" style="width:16px;height:16px;display:inline;"></i>
|
||||
</button>
|
||||
<span style="font-size:16px;font-weight:700;">Chọn phòng</span>
|
||||
@@ -135,7 +135,7 @@
|
||||
<span class="pos-cart-total__label">Tổng cộng</span>
|
||||
<span class="pos-cart-total__value">@FormatPrice(_selectedRoom.PricePerHour * _selectedHours)</span>
|
||||
</div>
|
||||
<button class="pos-btn-checkout" @onclick="() => NavigateTo("karaoke/room-session")">
|
||||
<button class="pos-btn-checkout" @onclick="@(() => NavigateTo("karaoke/room-session"))">
|
||||
<i data-lucide="play" style="width:18px;height:18px;"></i> Bắt đầu phiên
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<div style="display:flex;align-items:center;gap:12px;margin-bottom:16px;">
|
||||
<button style="background:var(--pos-bg-interactive);border:none;color:var(--pos-text-primary);
|
||||
padding:8px 12px;border-radius:8px;cursor:pointer;font-size:13px;"
|
||||
@onclick="() => NavigateTo("karaoke")">
|
||||
@onclick="@(() => NavigateTo("karaoke"))">
|
||||
<i data-lucide="arrow-left" style="width:16px;height:16px;display:inline;"></i>
|
||||
</button>
|
||||
<div>
|
||||
@@ -70,7 +70,7 @@
|
||||
</button>
|
||||
<button style="padding:14px 8px;border-radius:var(--pos-radius);background:rgba(34,197,94,.15);
|
||||
border:none;color:#22C55E;cursor:pointer;font-size:13px;font-weight:500;"
|
||||
@onclick="() => NavigateTo("karaoke/order-fnb")">
|
||||
@onclick="@(() => NavigateTo("karaoke/order-fnb"))">
|
||||
<i data-lucide="utensils" style="width:18px;height:18px;display:block;margin:0 auto 4px;"></i>
|
||||
Gọi F&B
|
||||
</button>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<div style="display:flex;align-items:center;gap:12px;">
|
||||
<button style="background:var(--pos-bg-interactive);border:none;color:var(--pos-text-primary);
|
||||
padding:8px 12px;border-radius:8px;cursor:pointer;font-size:13px;"
|
||||
@onclick="() => NavigateTo("karaoke")">
|
||||
@onclick="@(() => NavigateTo("karaoke"))">
|
||||
<i data-lucide="arrow-left" style="width:16px;height:16px;display:inline;"></i>
|
||||
</button>
|
||||
<span style="font-size:16px;font-weight:700;">Yêu cầu phục vụ</span>
|
||||
@@ -97,7 +97,7 @@
|
||||
{
|
||||
<button style="padding:8px 14px;border-radius:8px;background:var(--pos-orange-primary);
|
||||
border:none;color:#FFF;cursor:pointer;font-size:12px;font-weight:600;"
|
||||
@onclick="() => req.Status = "processing"">
|
||||
@onclick="@(() => req.Status = "processing")">
|
||||
Nhận
|
||||
</button>
|
||||
}
|
||||
@@ -105,7 +105,7 @@
|
||||
{
|
||||
<button style="padding:8px 14px;border-radius:8px;background:rgba(34,197,94,.15);
|
||||
border:none;color:#22C55E;cursor:pointer;font-size:12px;font-weight:600;"
|
||||
@onclick="() => req.Status = "completed"">
|
||||
@onclick="@(() => req.Status = "completed")">
|
||||
Xong
|
||||
</button>
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
{
|
||||
<button class="pos-category-tab @(section == _activeSection ? "pos-category-tab--active" : "")"
|
||||
@onclick="() => _activeSection = section">
|
||||
@section
|
||||
@(section)
|
||||
</button>
|
||||
}
|
||||
</div>
|
||||
@@ -72,7 +72,7 @@
|
||||
<span class="pos-cart-total__label">Tổng cộng</span>
|
||||
<span class="pos-cart-total__value">@FormatPrice(SelectedTable.Status == "occupied" ? _demoOrderItems.Sum(i => i.Price * i.Qty) : 0)</span>
|
||||
</div>
|
||||
<button class="pos-btn-checkout" @onclick="() => NavigateTo($\"restaurant/table-detail\")">
|
||||
<button class="pos-btn-checkout" @onclick="@(() => NavigateTo("restaurant/table-detail"))">
|
||||
<i data-lucide="receipt"></i> Xem hóa đơn
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
<span class="pos-cart-total__value">@FormatPrice(_selected.Status == "occupied" ? _items.Sum(i => i.Price * i.Qty) : 0)</span>
|
||||
</div>
|
||||
<button class="pos-btn-checkout" style="height:52px;font-size:16px;"
|
||||
@onclick="() => NavigateTo(\"restaurant/waiter-pad\")">
|
||||
@onclick="@(() => NavigateTo("restaurant/waiter-pad"))">
|
||||
<i data-lucide="utensils"></i> Gọi món
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<div style="flex:1;display:flex;flex-direction:column;overflow:hidden;">
|
||||
@* ═══ HEADER / TIÊU ĐỀ ═══ *@
|
||||
<div style="padding:12px 16px;border-bottom:1px solid var(--pos-border-subtle);display:flex;align-items:center;gap:12px;">
|
||||
<button class="pos-category-tab" @onclick="() => NavigateTo(\"restaurant\")">
|
||||
<button class="pos-category-tab" @onclick="@(() => NavigateTo("restaurant"))">
|
||||
<i data-lucide="arrow-left" style="width:14px;"></i> Quay lại
|
||||
</button>
|
||||
<span style="font-size:16px;font-weight:700;">Báo cáo cuối ngày</span>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<div style="flex:1;display:flex;flex-direction:column;overflow:hidden;">
|
||||
@* ═══ HEADER / TIÊU ĐỀ ═══ *@
|
||||
<div style="padding:12px 16px;border-bottom:1px solid var(--pos-border-subtle);display:flex;align-items:center;gap:12px;">
|
||||
<button class="pos-category-tab" @onclick="() => NavigateTo(\"restaurant\")">
|
||||
<button class="pos-category-tab" @onclick="@(() => NavigateTo("restaurant"))">
|
||||
<i data-lucide="arrow-left" style="width:14px;"></i> Quay lại
|
||||
</button>
|
||||
<span style="font-size:16px;font-weight:700;">Màn hình bếp</span>
|
||||
@@ -66,21 +66,21 @@
|
||||
@if (status.Key == "new")
|
||||
{
|
||||
<button class="pos-btn-checkout" style="height:36px;font-size:13px;background:var(--pos-warning);"
|
||||
@onclick="() => ticket.Status = \"cooking\"">
|
||||
@onclick="@(() => ticket.Status = "cooking")">
|
||||
<i data-lucide="chef-hat" style="width:14px;"></i> Bắt đầu nấu
|
||||
</button>
|
||||
}
|
||||
else if (status.Key == "cooking")
|
||||
{
|
||||
<button class="pos-btn-checkout" style="height:36px;font-size:13px;background:var(--pos-success);"
|
||||
@onclick="() => ticket.Status = \"ready\"">
|
||||
@onclick="@(() => ticket.Status = "ready")">
|
||||
<i data-lucide="check" style="width:14px;"></i> Sẵn sàng
|
||||
</button>
|
||||
}
|
||||
else
|
||||
{
|
||||
<button class="pos-btn-checkout" style="height:36px;font-size:13px;background:var(--pos-bg-interactive);color:var(--pos-text-secondary);"
|
||||
@onclick="() => ticket.Status = \"served\"">
|
||||
@onclick="@(() => ticket.Status = "served")">
|
||||
<i data-lucide="truck" style="width:14px;"></i> Đã mang ra
|
||||
</button>
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<div style="flex:1;display:flex;flex-direction:column;overflow:hidden;">
|
||||
@* ═══ HEADER / TIÊU ĐỀ ═══ *@
|
||||
<div style="padding:12px 16px;border-bottom:1px solid var(--pos-border-subtle);display:flex;align-items:center;gap:12px;">
|
||||
<button class="pos-category-tab" @onclick="() => NavigateTo(\"restaurant\")">
|
||||
<button class="pos-category-tab" @onclick="@(() => NavigateTo("restaurant"))">
|
||||
<i data-lucide="arrow-left" style="width:14px;"></i> Quay lại
|
||||
</button>
|
||||
<span style="font-size:16px;font-weight:700;">Lịch sử đơn hàng</span>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<div style="flex:1;display:flex;flex-direction:column;overflow:hidden;">
|
||||
@* ═══ HEADER / TIÊU ĐỀ ═══ *@
|
||||
<div style="padding:12px 16px;border-bottom:1px solid var(--pos-border-subtle);display:flex;align-items:center;gap:12px;">
|
||||
<button class="pos-category-tab" @onclick="() => NavigateTo(\"restaurant\")">
|
||||
<button class="pos-category-tab" @onclick="@(() => NavigateTo("restaurant"))">
|
||||
<i data-lucide="arrow-left" style="width:14px;"></i> Quay lại
|
||||
</button>
|
||||
<span style="font-size:16px;font-weight:700;">Đặt bàn trước</span>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
display:flex;flex-direction:column;overflow:hidden;">
|
||||
@* ═══ HEADER / TIÊU ĐỀ ═══ *@
|
||||
<div style="padding:16px 20px;border-bottom:1px solid var(--pos-border-subtle);display:flex;align-items:center;gap:12px;">
|
||||
<button class="pos-category-tab" @onclick="() => NavigateTo(\"restaurant\")">
|
||||
<button class="pos-category-tab" @onclick="@(() => NavigateTo("restaurant"))">
|
||||
<i data-lucide="arrow-left" style="width:14px;"></i>
|
||||
</button>
|
||||
<div style="flex:1;">
|
||||
@@ -28,7 +28,7 @@
|
||||
@foreach (var item in _items)
|
||||
{
|
||||
<div style="display:flex;align-items:center;padding:10px 0;border-bottom:1px solid var(--pos-border-subtle);">
|
||||
<span style="width:28px;font-size:13px;color:var(--pos-text-tertiary);">x@item.Qty</span>
|
||||
<span style="width:28px;font-size:13px;color:var(--pos-text-tertiary);">x@(item.Qty)</span>
|
||||
<span style="flex:1;font-size:14px;font-weight:500;">@item.Name</span>
|
||||
<span style="font-size:14px;font-weight:600;">@FormatPrice(item.Price * item.Qty)</span>
|
||||
</div>
|
||||
@@ -58,9 +58,9 @@
|
||||
@* EN: Split bill toggle / VI: Tùy chọn tách hóa đơn *@
|
||||
<div style="display:flex;gap:10px;">
|
||||
<button class="pos-category-tab @(_splitMode == "full" ? "pos-category-tab--active" : "")"
|
||||
style="flex:1;text-align:center;" @onclick="() => _splitMode = \"full\"">Thanh toán đầy đủ</button>
|
||||
style="flex:1;text-align:center;" @onclick="@(() => _splitMode = "full")">Thanh toán đầy đủ</button>
|
||||
<button class="pos-category-tab @(_splitMode == "split" ? "pos-category-tab--active" : "")"
|
||||
style="flex:1;text-align:center;" @onclick="() => _splitMode = \"split\"">Tách hóa đơn</button>
|
||||
style="flex:1;text-align:center;" @onclick="@(() => _splitMode = "split")">Tách hóa đơn</button>
|
||||
</div>
|
||||
|
||||
@if (_splitMode == "split")
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<div style="flex:1;display:flex;flex-direction:column;overflow:hidden;">
|
||||
@* ═══ TOOLBAR / THANH CÔNG CỤ ═══ *@
|
||||
<div style="padding:12px 16px;border-bottom:1px solid var(--pos-border-subtle);display:flex;align-items:center;gap:12px;">
|
||||
<button class="pos-category-tab pos-category-tab--active" @onclick="() => NavigateTo(\"restaurant\")">
|
||||
<button class="pos-category-tab pos-category-tab--active" @onclick="@(() => NavigateTo("restaurant"))">
|
||||
<i data-lucide="arrow-left" style="width:14px;"></i> Quay lại
|
||||
</button>
|
||||
<span style="flex:1;font-size:16px;font-weight:700;">Quản lý sơ đồ bàn</span>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<div class="pos-product-panel" style="display:flex;flex-direction:column;overflow:hidden;">
|
||||
@* ═══ HEADER / TIÊU ĐỀ ═══ *@
|
||||
<div style="padding:12px 16px;border-bottom:1px solid var(--pos-border-subtle);display:flex;align-items:center;gap:12px;">
|
||||
<button class="pos-category-tab" @onclick="() => NavigateTo(\"restaurant\")">
|
||||
<button class="pos-category-tab" @onclick="@(() => NavigateTo("restaurant"))">
|
||||
<i data-lucide="arrow-left" style="width:14px;"></i> Quay lại
|
||||
</button>
|
||||
<span style="font-size:16px;font-weight:700;">Gọi món — Bàn 3</span>
|
||||
|
||||
Reference in New Issue
Block a user