diff --git a/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Customer/CustomerFeedback.razor b/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Customer/CustomerFeedback.razor
index f941767d..51f2b8e7 100644
--- a/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Customer/CustomerFeedback.razor
+++ b/apps/web-client-tpos-net/src/WebClientTpos.Client/Pages/Admin/Customer/CustomerFeedback.razor
@@ -2,162 +2,25 @@
@layout AdminLayout
@inherits AdminBase
-@*
- EN: Customer feedback — overview KPIs (avg rating, total reviews, response rate, NPS), feedback list with star ratings and response status.
- VI: Phản hồi khách hàng — KPI tổng quan (đánh giá TB, tổng review, tỷ lệ phản hồi, NPS), danh sách phản hồi với sao và trạng thái.
- Design: pencil-design/src/pages/tPOS/admin/customer-feedback.pen
-*@
+
| Khách hàng | -Đánh giá | -Nội dung | -Cửa hàng | -Thời gian | -Trạng thái | -
|---|---|---|---|---|---|
|
-
-
- @fb.Initials
- @fb.Customer
- |
-
-
- @for (int i = 0; i < 5; i++)
- {
- var idx = i;
-
- }
-
- |
-
- @fb.Store | -@fb.Time | -
-
-
- @(fb.Responded ? "Đã phản hồi" : "Chờ phản hồi")
-
- |
-
Phản hồi sẽ hiển thị khi khách hàng đánh giá dịch vụ
Thiết lập cấp bậc thành viên để xây dựng chương trình loyalty
+Level @level.Level
+| Phần thưởng | -Điểm cần | -Hạng tối thiểu | -Đã đổi | -Trạng thái | -
|---|---|---|---|---|
| @rw.Name | -@rw.Points | -@rw.MinTier | -@rw.Redeemed lượt | -
-
-
- @(rw.Active ? "Hoạt động" : "Tạm dừng")
-
- |
-
Giao dịch sẽ hiển thị khi có hoạt động ví
| Mô tả | -Danh mục | -Cửa hàng | -Ngày | -Trạng thái | -Số tiền | -
|---|
| Mô tả | +Số tiền | +Ngày | +|||
|---|---|---|---|---|---|
| @item.Desc | -@item.Category | -@item.Store | -@item.Date | -
-
-
- @item.Status
-
- |
- -@item.Amount | +
| @(t.Description ?? t.ItemName ?? "—") | +@(t.Amount < 0 ? "-" : "+")@Math.Abs(t.Amount).ToString("N0")₫ | +@t.CreatedAt.ToString("dd/MM HH:mm") |
Dữ liệu sẽ tự động cập nhật khi có đơn hàng
| Mã GD | -Mô tả | -Cửa hàng | -Loại | -Số tiền | -
|---|
| ID | +Số tiền | +Trạng thái | +Ngày | +|
|---|---|---|---|---|
| @tx.Code | -@tx.Desc | -@tx.Store | -
-
- @(tx.IsIncome ? "Thu" : "Chi")
-
- |
- @tx.Amount | +
| @o.Id.ToString()[..8] | +@FormatVND(o.TotalAmount) | +@(o.Status ?? "—") | +@o.CreatedAt.ToString("dd/MM HH:mm") |
| # | -Sản phẩm | -Danh mục | -Số lượng bán | -Doanh thu | -
|---|
| ID | +Số tiền | +Trạng thái | +Ngày | +|
|---|---|---|---|---|
| @p.Rank | -@p.Name | -@p.Category | -@p.Sold | -@p.Revenue | +
| @o.Id.ToString()[..8] | +@FormatVND(o.TotalAmount) | +@(o.Status ?? "—") | +@o.CreatedAt.ToString("dd/MM HH:mm") |
Chưa có cửa hàng
+ } + else + { + @foreach (var shop in _shops) + { +| Sản phẩm | -Danh mục | -Lý do | -
|---|---|---|
| @item.Name | -@item.Category | -@item.Reason | -
Tạo đơn nhập hàng để quản lý tồn kho
| Mã PO | -Nhà cung cấp | -Số mặt hàng | -Ngày đặt | -Trạng thái | -Tổng tiền | -
|---|
| Loại | +Số lượng | +Ghi chú | +Ngày | +||
|---|---|---|---|---|---|
| @order.Code | -@order.Supplier | -@order.Items mặt hàng | -@order.Date | -
-
-
- @order.Status
-
- |
- @order.Total | +
| @(t.TransactionType ?? "—") | +@(t.QuantityChange > 0 ? "+" : "")@t.QuantityChange | +@(t.Reason ?? "—") | +@t.CreatedAt.ToString("dd/MM HH:mm") |
Tạo yêu cầu chuyển hàng giữa các cửa hàng
+| Mã phiếu | -Sản phẩm | -SL | -Từ | -Đến | -Ngày | -Trạng thái | -
|---|---|---|---|---|---|---|
| @h.Code | -@h.Item | -@h.Qty @h.Unit | -@h.From | -@h.To | -@h.Date | -
-
-
- Hoàn thành
-
- |
-
Tính năng đang phát triển — sẽ sớm ra mắt
+ Coming Soon +| Tùy chọn | -Giá thêm | -Mặc định | -Trạng thái | -
|---|---|---|---|
| @opt.Name | -- @(opt.Price == "0" ? "Miễn phí" : $"+{opt.Price}") - | -- @if (opt.IsDefault) - { - Mặc định - } - | -
- |
-
Tính năng đang phát triển — sẽ sớm ra mắt
+ Coming Soon +Tạo chiến dịch mới để thu hút khách hàng
+| Tên | +Giảm giá | +Voucher | +Đã dùng | +Trạng thái | +
|---|---|---|---|---|
@p.Name @(p.Description ?? "") |
+ @(p.DiscountType == "Percentage" ? $"{p.DiscountValue}%" : $"{p.DiscountValue?.ToString("N0")}₫") | +@p.VoucherCount | +@p.RedemptionCount | +@(p.IsActive ? "Active" : "Inactive") | +
| Nhân viên | +Vai trò | +Trạng thái | +Cửa hàng | +
|---|---|---|---|
| @(s.EmployeeCode ?? s.Id.ToString()[..6]) | +@(s.Role ?? "—") | ++ + @(s.Status ?? "—") + + | +@(s.ShopName ?? "—") | +
| Nhân viên | -Ca làm | -Check-in | -Check-out | -Trạng thái | -Giờ làm | -
|---|---|---|---|---|---|
|
- TM
- Trần Minh
- |
- 07:00 – 15:00 | -06:55 | -— | -Đúng giờ |
- 6h 30m | -
|
- LT
- Lê Thảo
- |
- 07:00 – 15:00 | -06:58 | -— | -Đúng giờ |
- 6h 27m | -
|
- NH
- Nguyễn Hà
- |
- 08:00 – 16:00 | -08:12 | -— | -Trễ 12p |
- 5h 13m | -
|
- PA
- Phạm An
- |
- 08:00 – 17:00 | -07:50 | -— | -Đúng giờ |
- 5h 35m | -
|
- HL
- Hoàng Lan
- |
- 07:00 – 15:00 | -— | -— | -Vắng |
- — | -
Thêm nhân viên để quản lý bảng lương
| Mã NV | +Vai trò | +Ngày vào | +Trạng thái | +
|---|---|---|---|
| @(s.EmployeeCode ?? "—") | +@(s.Role ?? "—") | +@(s.JoinedAt?.ToString("dd/MM/yyyy") ?? "—") | ++ + @(s.Status ?? "—") + + | +
| Nhân viên | -Vai trò | -Lương cơ bản | -Giờ làm | -Hoa hồng | -Thưởng/Phạt | -Tổng | -
|---|---|---|---|---|---|---|
|
- @item.Initials
- @item.Name
- |
- @item.Role | -@item.BaseSalary | -@item.Hours h | -+@item.Commission | -@item.BonusPenalty | -@item.Total | -
Đang tải lịch...
Thêm lịch cho nhân viên để quản lý ca làm việc