diff --git a/apps/web-client-tpos-net/src/WebClientTpos.Client/Layout/AuthLayout.razor b/apps/web-client-tpos-net/src/WebClientTpos.Client/Layout/AuthLayout.razor new file mode 100644 index 00000000..e581d80a --- /dev/null +++ b/apps/web-client-tpos-net/src/WebClientTpos.Client/Layout/AuthLayout.razor @@ -0,0 +1,49 @@ +@inherits LayoutComponentBase +@inject IJSRuntime JS + + + + + + + + + + + @Body + + + +@code { + protected override async Task OnAfterRenderAsync(bool firstRender) + { + try { await JS.InvokeVoidAsync("lucide.createIcons"); } catch { } + } + + private MudTheme _theme = new() + { + PaletteDark = new PaletteDark() + { + Primary = "#FF5C00", + PrimaryContrastText = "#FFFFFF", + AppbarBackground = "rgba(10,10,11,0.85)", + AppbarText = "#FFFFFF", + Background = "#0A0A0B", + Surface = "#111113", + TextPrimary = "#FFFFFF", + TextSecondary = "#ADADB0", + ActionDefault = "#FFFFFF", + LinesDefault = "#1F1F23" + } + }; +} diff --git a/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Onboarding/OnboardingStore.razor b/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Onboarding/OnboardingStore.razor index 567687aa..64187b3a 100644 --- a/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Onboarding/OnboardingStore.razor +++ b/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Onboarding/OnboardingStore.razor @@ -116,6 +116,7 @@ new StoreType("cafe", "Café", "coffee", "#FF5C00", "Quán cà phê, trà sữa"), new StoreType("restaurant", "Nhà hàng", "utensils", "#3B82F6", "Nhà hàng, quán ăn"), new StoreType("karaoke", "Karaoke", "mic", "#8B5CF6", "Karaoke, giải trí"), + new StoreType("spa", "Spa & Beauty", "sparkles", "#EC4899", "Spa, thẩm mỹ, nail"), new StoreType("retail", "Bán lẻ", "shopping-bag", "#22C55E", "Cửa hàng bán lẻ"), }; diff --git a/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Auth/LoginSelect.razor b/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Auth/LoginSelect.razor new file mode 100644 index 00000000..ab00d463 --- /dev/null +++ b/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Auth/LoginSelect.razor @@ -0,0 +1,57 @@ +@page "/auth/login" +@layout AuthLayout +@inject NavigationManager Navigation +@inject IJSRuntime JS + +Chọn loại tài khoản — GoodGo POS + +
+ +

+ Chọn loại tài khoản +

+

+ Đăng nhập với vai trò phù hợp +

+ +
+ @foreach (var role in _roles) + { +
+
+ +
+

@role.Title

+

@role.Description

+
+ } +
+ +

+ Chưa có tài khoản? + Đăng ký ngay +

+
+ +@code { + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + try { await JS.InvokeVoidAsync("lucide.createIcons"); } catch { } + } + } + + private record RoleCard(string Title, string Href, string Icon, string Color, string Description); + + private readonly RoleCard[] _roles = + [ + new("Chủ doanh nghiệp", "/auth/login/admin", "building", "#3B82F6", "Quản lý toàn bộ hệ thống, cửa hàng, nhân viên"), + new("Quản lý chi nhánh", "/auth/login/branch", "store", "#8B5CF6", "Quản lý chi nhánh, ca làm việc, báo cáo"), + new("Nhân viên", "/auth/login/staff", "user-check", "#22C55E", "Thu ngân, barista, phục vụ, bếp"), + new("Khách hàng", "/auth/login/customer", "heart", "#EC4899", "Tích điểm, ưu đãi, lịch sử mua hàng"), + ]; +} diff --git a/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Home.razor b/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Home.razor index 42db4f16..00de7347 100644 --- a/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Home.razor +++ b/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Home.razor @@ -1,341 +1,80 @@ -@page "/" -@page "/{culture}" -@inject IStringLocalizer L +@page "/" +@layout AuthLayout +@inject NavigationManager Navigation @inject IJSRuntime JS -aPOS - @L["HeroHeadline"] +GoodGo POS — Hệ thống quản lý POS đa ngành -
-
- - @L["HeroBadge"] -
+
-

- @L["HeroHeadline"] +

+ GoodGo POS

-

- @L["HeroSubtext"] +

+ Hệ thống quản lý POS đa ngành

- +

+ Giải pháp toàn diện cho Café, Nhà hàng, Karaoke, Spa & Bán lẻ +

-
- @L[ +
+ +
-
-
-
- @L["Trust_Label"] - - @L["Trust_Stat1"] - - @L["Trust_Stat2"] -
+
+
+ + @foreach (var card in _featureCards) + { +
+ +

@card.Title

+

@card.Description

+
+ } +
-
-
-
-
@L["Features_Badge"]
-

@L["Features_Title"]

-

@L["Features_Desc"]

-
- -
- @foreach (var f in _features) - { -
-
- -
-

@L[f.Title]

-

@L[f.Desc]

-
- } -
-
-
- - -
-
-
-
@L["Industries_Badge"]
-

@L["Industries_Title"]

-

@L["Industries_Desc"]

-
- -
- @foreach (var ind in _industries) - { -
-
- @L[ind.Title] -
-
-

@L[ind.Title]

-

@L[ind.Desc]

-
- @foreach (var chip in L[ind.Chips].Value.Split(',')) - { - ✦ @chip.Trim() - } -
-
-
- } -
-
-
- - -
-
-
-
@L["Steps_Badge"]
-

@L["Steps_Title"]

-
- -
-
-
1
-

@L["Step1_Title"]

-

@L["Step1_Desc"]

-
-
-
2
-

@L["Step2_Title"]

-

@L["Step2_Desc"]

-
-
-
3
-

@L["Step3_Title"]

-

@L["Step3_Desc"]

-
-
-
-
- - -
-
-
-
@L["Pricing_Badge"]
-

@L["Pricing_Title"]

-

@L["Pricing_Desc"]

-
- -
- -
-
@L["Plan_Starter_Name"]
-
- @L["Plan_Starter_Price"] - @L["Plan_Starter_Period"] -
-

@L["Plan_Starter_Desc"]

-
-
    -
  • @L["Plan_Starter_Feature1"]
  • -
  • @L["Plan_Starter_Feature2"]
  • -
  • @L["Plan_Starter_Feature3"]
  • -
- @L["Plan_Starter_CTA"] -
- - - - - -
-
@L["Plan_Enterprise_Name"]
-
- @L["Plan_Enterprise_Price"] - @L["Plan_Enterprise_Period"] -
-

@L["Plan_Enterprise_Desc"]

-
-
    -
  • @L["Plan_Enterprise_Feature1"]
  • -
  • @L["Plan_Enterprise_Feature2"]
  • -
  • @L["Plan_Enterprise_Feature3"]
  • -
- @L["Plan_Enterprise_CTA"] -
-
- - -
-

@L["Addons_Title"]

-
- @foreach (var addon in _addons) - { -
-
- - @L[addon.Name] -
-
@L[addon.Price]
-
- } -
-
-
-
- - -
-

@((MarkupString)L["CTA_Title"].Value)

-

@L["CTA_Subtitle"]

- -

@L["CTA_Trust"]

-
- - -