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 c8dc9c0a..ddbb8b2f 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
@@ -1073,6 +1073,271 @@
break;
+ // ═══ C2: RECIPES / NGUYÊN LIỆU (Café) ═══
+ case "recipes":
+
+
+
+
+ Nguyên liệu
+ Loại
+ Tồn kho
+ Giá/đơn vị
+ Trạng thái
+
+ @foreach (var (name, cat, stock, price, status, color) in new[] {
+ ("Cà phê Arabica", "Hạt", "12.5 kg", "450,000₫/kg", "Đủ", "#22C55E"),
+ ("Cà phê Robusta", "Hạt", "8.0 kg", "320,000₫/kg", "Đủ", "#22C55E"),
+ ("Sữa tươi", "Sữa", "25 lít", "42,000₫/lít", "Đủ", "#22C55E"),
+ ("Syrup Caramel", "Syrup", "3 chai", "85,000₫/chai", "Sắp hết", "#F59E0B"),
+ ("Bột Matcha", "Bột", "1.2 kg", "680,000₫/kg", "Sắp hết", "#F59E0B"),
+ ("Đường trắng", "Gia vị", "15 kg", "22,000₫/kg", "Đủ", "#22C55E"),
+ ("Trà Ô Long", "Trà", "2.0 kg", "550,000₫/kg", "Đủ", "#22C55E"),
+ ("Đá viên", "Khác", "50 kg", "15,000₫/kg", "Đủ", "#22C55E") })
+ {
+
+ @name
+ @cat
+ @stock
+ @price
+ @status
+
+ }
+
+
+
+ break;
+
+ // ═══ R3: RESERVATIONS / ĐẶT BÀN (Nhà hàng) ═══
+ case "reservations":
+
+
+
+
+
+ Khách
+ Số người
+ Thời gian
+ Bàn
+ Trạng thái
+ Ghi chú
+
+ @foreach (var (guest, ppl, time, table, status, note, color) in new[] {
+ ("Nguyễn Văn A", "4", "18:00", "Bàn 5", "Xác nhận", "Sinh nhật", "#22C55E"),
+ ("Trần Thị B", "2", "19:00", "Bàn 2", "Xác nhận", "", "#22C55E"),
+ ("Lê Minh C", "8", "19:30", "VIP 1", "Chờ duyệt", "Tiệc công ty", "#F59E0B"),
+ ("Phạm Dương D", "6", "20:00", "Bàn 7", "Xác nhận", "Kỷ niệm", "#22C55E"),
+ ("Hoàng E", "3", "20:30", "Bàn 3", "Chờ duyệt", "", "#F59E0B") })
+ {
+
+ @guest
+ @ppl
+ @time
+ @table
+ @status
+ @note
+
+ }
+
+
+
+ break;
+
+ // ═══ K3: HAPPY HOUR (Karaoke) ═══
+ case "happy-hour":
+
+
+
+
+
+
Ngày áp dụng
+
+ @foreach (var day in new[] { "T2", "T3", "T4", "T5", "T6", "T7", "CN" })
+ {
+ var isActive = day == "T2" || day == "T3" || day == "T4" || day == "T5";
+ @day
+ }
+
+
+
Lưu cấu hình
+
+
+
+
+
+
+ @foreach (var (combo, items, oldPrice, newPrice) in new[] {
+ ("Combo Đôi", "2 giờ phòng + 2 bia", "350,000₫", "245,000₫"),
+ ("Combo Nhóm", "3 giờ phòng + 5 đồ uống", "750,000₫", "525,000₫"),
+ ("Combo VIP", "2 giờ VIP + trái cây + 4 bia", "980,000₫", "686,000₫") })
+ {
+
+
@combo
+
@items
+
+ @oldPrice
+ @newPrice
+
+
+ }
+
+
+
+ break;
+
+ // ═══ S4: SERVICE PACKAGES / GÓI DỊCH VỤ (Spa) ═══
+ case "packages":
+
+
+
+
+ @foreach (var (pkg, sessions, services, price, savings) in new[] {
+ ("Gói Thư Giãn", "5 buổi", "Massage body + Xông hơi", "2,500,000₫", "Tiết kiệm 500,000₫"),
+ ("Gói VIP", "10 buổi", "Massage + Facial + Xông hơi + Chăm sóc da", "6,800,000₫", "Tiết kiệm 2,200,000₫"),
+ ("Gói Cặp Đôi", "4 buổi", "2 người — Massage + Xông hơi", "3,600,000₫", "Tiết kiệm 800,000₫") })
+ {
+
+
+
+
@services
+
+ @price
+ @savings
+
+
+
+ }
+
+
+
+ break;
+
+ // ═══ B5: CONSENT FORM / CAM KẾT KH (Thẩm mỹ) ═══
+ case "consent":
+
+
+
+
+ @foreach (var (title, desc, icon, fields) in new[] {
+ ("Cam kết Phẫu thuật", "Biểu mẫu đồng ý trước phẫu thuật thẩm mỹ", "syringe", "12 trường"),
+ ("Cam kết Tiêm Filler", "Xác nhận rủi ro và đồng ý tiêm filler", "droplets", "8 trường"),
+ ("Cam kết Laser", "Biểu mẫu đồng ý điều trị laser da", "zap", "10 trường"),
+ ("Cam kết Chung", "Mẫu cam kết dịch vụ thẩm mỹ tổng quát", "file-text", "6 trường") })
+ {
+
+
+
@desc
+
+ Xem
+ Sửa
+
+
+ }
+
+
+
+ break;
+
+ // ═══ B6: DOCTORS / BÁC SĨ (Thẩm mỹ) ═══
+ case "doctors":
+
+
+
+
+ @foreach (var (name, spec, cert, exp, color) in new[] {
+ ("BS. Nguyễn Văn A", "Phẫu thuật thẩm mỹ", "Chứng chỉ BVTM", "15 năm", "#3B82F6"),
+ ("BS. Trần Thị B", "Da liễu", "Thạc sĩ Y khoa", "10 năm", "#8B5CF6"),
+ ("BS. Lê Minh C", "Nội tiết", "Ph.D. Nội tiết học", "12 năm", "#EC4899"),
+ ("KTV. Phạm D", "Chăm sóc da", "Chứng chỉ Quốc tế CIDESCO", "8 năm", "#22C55E") })
+ {
+
+
+
+ @cert
+ @exp
+
+
+ Lịch làm
+ Hồ sơ
+
+
+ }
+
+
+
+ break;
+
+ // ═══ B7: FOLLOW-UP / TÁI KHÁM (Thẩm mỹ) ═══
+ case "followup":
+
+
+
+
+
+ Khách hàng
+ Dịch vụ đã làm
+ Ngày tái khám
+ Bác sĩ
+ Trạng thái
+
+ @foreach (var (patient, service, date, doctor, status, color) in new[] {
+ ("Nguyễn Thị Hương", "Nâng mũi sụn", "05/03/2026", "BS. Nguyễn A", "Sắp đến", "#F59E0B"),
+ ("Trần Văn Nam", "Cấy mỡ tự thân", "07/03/2026", "BS. Trần B", "Sắp đến", "#F59E0B"),
+ ("Lê Thu Trang", "Trị nám laser", "01/03/2026", "BS. Lê C", "Hôm nay", "#EF4444"),
+ ("Phạm Minh Tuấn", "Filler môi", "28/02/2026", "BS. Nguyễn A", "Hoàn thành", "#22C55E"),
+ ("Hoàng Lan", "Botox trán", "25/02/2026", "BS. Trần B", "Hoàn thành", "#22C55E") })
+ {
+
+ @patient
+ @service
+ @date
+ @doctor
+ @status
+
+ }
+
+
+
+ break;
+
// ═══ UNKNOWN SECTIONS ═══
default:
@@ -1282,6 +1547,13 @@
case "settings": _sectionTitle = "Thiết lập"; _sectionIcon = "settings"; _sectionDescription = "Cài đặt cửa hàng."; break;
case "reports": _sectionTitle = "Báo cáo"; _sectionIcon = "bar-chart-2"; _sectionDescription = "Doanh thu, sản phẩm bán chạy."; break;
case "schedule": _sectionTitle = "Lịch làm việc"; _sectionIcon = "calendar-clock"; _sectionDescription = "Lịch ca làm việc nhân viên."; break;
+ case "recipes": _sectionTitle = "Nguyên liệu & Công thức"; _sectionIcon = "flask-conical"; _sectionDescription = "Quản lý nguyên liệu pha chế."; break;
+ case "reservations": _sectionTitle = "Đặt bàn"; _sectionIcon = "calendar-check"; _sectionDescription = "Quản lý đặt bàn trước."; break;
+ case "happy-hour": _sectionTitle = "Happy Hour"; _sectionIcon = "clock"; _sectionDescription = "Cấu hình khung giờ giảm giá."; break;
+ case "packages": _sectionTitle = "Gói dịch vụ"; _sectionIcon = "gift"; _sectionDescription = "Quản lý gói combo dịch vụ."; break;
+ case "consent": _sectionTitle = "Cam kết KH"; _sectionIcon = "file-check"; _sectionDescription = "Biểu mẫu đồng ý khách hàng."; break;
+ case "doctors": _sectionTitle = "Bác sĩ / CK"; _sectionIcon = "stethoscope"; _sectionDescription = "Quản lý bác sĩ và chuyên gia."; break;
+ case "followup": _sectionTitle = "Tái khám"; _sectionIcon = "calendar-heart"; _sectionDescription = "Lịch tái khám sau điều trị."; break;
default: _sectionTitle = Section ?? "Trang"; _sectionIcon = "layout-dashboard"; _sectionDescription = "Trang đang phát triển."; break;
}
}
diff --git a/apps/web-client-tpos-net/src/WebClientTpos.Client/Services/ShopSidebarConfig.cs b/apps/web-client-tpos-net/src/WebClientTpos.Client/Services/ShopSidebarConfig.cs
index a5f44fd6..7be4bc82 100644
--- a/apps/web-client-tpos-net/src/WebClientTpos.Client/Services/ShopSidebarConfig.cs
+++ b/apps/web-client-tpos-net/src/WebClientTpos.Client/Services/ShopSidebarConfig.cs
@@ -33,6 +33,7 @@ public static class ShopSidebarConfig
new("Tổng quan", "layout-dashboard", "overview"),
new("POS Bán hàng", "monitor", "pos"),
new("Menu & Đồ uống", "coffee", "menu"),
+ new("Nguyên liệu", "flask-conical", "recipes"),
new("Tồn kho", "warehouse", "inventory"),
new("Tài chính", "trending-up", "finance"),
new("Nhân sự", "users", "staff"),
@@ -47,6 +48,7 @@ public static class ShopSidebarConfig
new("POS Bán hàng", "monitor", "pos"),
new("Menu & Món ăn", "utensils", "menu"),
new("Bàn / Table", "grid-3x3", "tables"),
+ new("Đặt bàn", "calendar-check", "reservations"),
new("Bếp (Kitchen)", "flame", "kitchen"),
new("Tồn kho", "warehouse", "inventory"),
new("Tài chính", "trending-up", "finance"),
@@ -62,6 +64,7 @@ public static class ShopSidebarConfig
new("POS Bán hàng", "monitor", "pos"),
new("Phòng", "door-open", "rooms"),
new("Menu / Bar", "wine", "menu"),
+ new("Happy Hour", "clock", "happy-hour"),
new("Tồn kho", "warehouse", "inventory"),
new("Tài chính", "trending-up", "finance"),
new("Nhân sự", "users", "staff"),
@@ -76,6 +79,7 @@ public static class ShopSidebarConfig
new("POS Bán hàng", "monitor", "pos"),
new("Lịch hẹn", "calendar", "appointments"),
new("Dịch vụ", "sparkles", "services"),
+ new("Gói dịch vụ", "gift", "packages"),
new("Tài nguyên", "door-open", "resources"),
new("Sản phẩm", "package", "products"),
new("Tài chính", "trending-up", "finance"),
@@ -93,6 +97,9 @@ public static class ShopSidebarConfig
new("Lịch hẹn", "calendar", "appointments"),
new("Dịch vụ", "sparkles", "services"),
new("Liệu trình", "clipboard-list", "treatments"),
+ new("Cam kết KH", "file-check", "consent"),
+ new("Bác sĩ / CK", "stethoscope", "doctors"),
+ new("Tái khám", "calendar-heart", "followup"),
new("Tài nguyên", "door-open", "resources"),
new("Sản phẩm", "package", "products"),
new("Tài chính", "trending-up", "finance"),