Đăng nhập và quyền truy cập
import { Card, CardGrid, Steps, Aside } from ‘@astrojs/starlight/components’;
I. Tổng quan
Phần tiêu đề “I. Tổng quan”Đăng nhập Thu ngân (/cashier-login) là màn đăng nhập riêng cho nhân viên, mở tự động khi khởi động Vendor Desktop (ứng dụng Electron trên PC quầy). Màn này chỉ dành cho nhân viên thu ngân — không dành cho chủ cửa hàng.
II. Truy cập & điều kiện
Phần tiêu đề “II. Truy cập & điều kiện”Bạn cần
Phần tiêu đề “Bạn cần”- Vendor Desktop cài trên PC quầy (hoặc trình duyệt hiện đại)
- Tài khoản nhân viên có ít nhất quyền
posghi - Email và mật khẩu do chủ cửa hàng cấp
- (Tùy chọn) Được gán cửa hàng (
store_idtrong hồ sơ) — cửa hàng sẽ tự được chọn
Khi nào dùng màn đăng nhập nào
Phần tiêu đề “Khi nào dùng màn đăng nhập nào”| Màn đăng nhập | URL | Dành cho |
|---|---|---|
| Đăng nhập Thu ngân (trang này) | /cashier-login | Thu ngân / nhân viên quầy |
| Đăng nhập Operator | /login | Nhân viên cần dashboard (catalog, tài chính, …) |
| Đăng nhập Chủ | /vendor-login | Chủ cửa hàng / quản lý |
Chủ vô tình mở
/cashier-loginsẽ bị đăng xuất và thấy banner “Chỉ tài khoản nhân viên mới được đăng nhập ở đây”. Chủ phải dùng/vendor-login.
III. Các bước đăng nhập
Phần tiêu đề “III. Các bước đăng nhập”-
Nhập email nhân viên.
- Email do chủ cửa hàng cấp (ví dụ:
cashier@store.com). - Phần trước
@là phần so khớp.
- Email do chủ cửa hàng cấp (ví dụ:
-
Nhập mật khẩu.
- Click biểu tượng 👁 bên phải để hiện/ẩn mật khẩu.
- Mặc định mật khẩu bị che.
-
(Tùy chọn) Tick “Ghi nhớ đăng nhập”.
- Giữ session giữa các ca (đến khi bạn đăng xuất).
- Mặc định BẬT cho phiên Thu ngân. TẮT nếu PC dùng chung.
-
Click “Đăng nhập”.
- Button hiển thị spinner và dòng “Đang đăng nhập…”.
- Khi thành công, bạn được chuyển tới
/point-of-sale/sale.
-
Chờ POS load.
- Workspace bán hàng mở toàn màn hình, có lane picker nếu cần.
- Nếu cửa hàng yêu cầu mở ca, dialog Mở ca làm việc sẽ hiện trước.

Phân tích màn hình (visual)
Phần tiêu đề “Phân tích màn hình (visual)”- Nửa trái là panel thương hiệu, có hero title và mô tả lợi ích cửa hàng — giống nhau trên mọi màn auth.
- Nửa phải là form. Từ trên xuống:
- Tiêu đề (
Chào mừng trở lại) - Ô email với biểu tượng phong bì (
mingcute:mail-line) - Ô mật khẩu với biểu tượng khóa và eye toggle
- Checkbox “Ghi nhớ đăng nhập”
- Button “Đăng nhập” (full width)
- Tiêu đề (
IV. Lỗi & trạng thái
Phần tiêu đề “IV. Lỗi & trạng thái”Có hai lớp validation:
| Lớp | Khi nào | Hiển thị ở đâu |
|---|---|---|
| Client (Zod) | Submit với email sai / mật khẩu rỗng | Inline dưới ô |
| API (server) | Server từ chối thông tin | Banner đỏ trên form |
A. Lỗi client
Phần tiêu đề “A. Lỗi client”Hiện ngay khi click Đăng nhập với form không hợp lệ. Không gửi request lên backend.
| Triệu chứng | Nguyên nhân | Cách xử lý |
|---|---|---|
Vui lòng nhập đúng định dạng email. | Email thiếu @ hoặc sai format | Gõ lại email |
Trường này là bắt buộc. | Mật khẩu rỗng | Nhập mật khẩu |

B. Lỗi API (banner)
Phần tiêu đề “B. Lỗi API (banner)”Email/password hợp lệ nhưng server từ chối, banner đỏ hiện trên form, URL vẫn ở /cashier-login.
| Banner | Nguyên nhân | Cách xử lý |
|---|---|---|
Sai email hoặc mật khẩu. | Sai mật khẩu hoặc email không tồn tại | Reset mật khẩu (xem bên dưới) hoặc liên hệ chủ |
Chỉ tài khoản nhân viên mới được đăng nhập ở đây. | Bạn mở trang này với Owner | Dùng /vendor-login thay |
Tài khoản đang bị tạm khóa. | Chủ đã vô hiệu hóa | Liên hệ chủ |
Lỗi mạng | Desktop offline (lần đầu) | Kết nối mạng, hoặc dùng session cache |

C. Khôi phục quyền truy cập — dùng flow reset
Phần tiêu đề “C. Khôi phục quyền truy cập — dùng flow reset”- Từ màn đăng nhập cashier, click dòng “Quên mật khẩu?” (dòng vàng cam dưới tiêu đề).
- Hoặc truy cập
/cashier-login/forgot-password.
Luồng reset dành riêng cho cashier ở Quên mật khẩu — Thu ngân.
V. Sau khi đăng nhập
Phần tiêu đề “V. Sau khi đăng nhập”Khi email/password hợp lệ:
- Màn cấp access token ngắn hạn và tự làm mới ngầm.
- Bạn được chuyển tới
/point-of-sale/sale(full-screen POS). - Store selector trên workspace chọn cửa hàng được hard-code trong hồ sơ nhân viên. Nếu thuộc nhiều cửa hàng, có thể chuyển.
- Lane selector chọn lane được gán. Cửa hàng nhiều lane hiện picker.
- Nếu cửa hàng yêu cầu mở ca, dialog Mở ca làm việc mở trước khi workspace render.
Bạn không thấy menu dashboard bên. Vendor dashboard (/dashboard/*) không thuộc trải nghiệm Thu ngân — nó nằm ở /vendor-login (chủ).
VI. So sánh các màn đăng nhập
Phần tiêu đề “VI. So sánh các màn đăng nhập”| Khả năng | Cashier login (/cashier-login) | Operator login (/login) | Owner login (/vendor-login) |
|---|---|---|---|
| Vendor type được phép | employee | employee | owner |
| Landing mặc định | /point-of-sale/sale | /dashboard | /dashboard |
| Menu bên | Không (chỉ POS) | Dashboard đầy đủ | Dashboard + admin tools |
| Cấu hình thiết bị | ✅ (terminal, printer, drawer) | ✅ | ✅ + nâng cao |
| Settings hub | ✅ | ✅ | ✅ |
| Chuyển cửa hàng | Giới hạn (theo profile) | ✅ | ✅ |
| Order nhập hộ (back-office) | ❌ | ✅ | ✅ |
| Phù hợp quầy bán lẻ | ✅ | ❌ (UI cho desktop) | ❌ |
Quy tắc đơn giản: Nếu công việc hằng ngày là thu tiền tại quầy, đăng nhập
/cashier-login. Nếu cần catalog, tài chính hay nhân sự, đăng nhập/loginhoặc/vendor-login.
VII. Lỗi thường gặp
Phần tiêu đề “VII. Lỗi thường gặp”Mã lỗi HTTP thường gặp
Phần tiêu đề “Mã lỗi HTTP thường gặp”| HTTP | Ý nghĩa | Xử lý |
|---|---|---|
400 | Validation fail (server) | Kiểm tra format email |
401 | Sai thông tin | Reset mật khẩu hoặc liên hệ chủ |
403 | Bị tạm khóa hoặc không phải employee | Dùng /vendor-login nếu là owner |
429 | Thử quá nhiều lần | Đợi 60 giây rồi thử lại |
5xx | Backend lỗi | Thử lại hoặc xem trang status |