Hồ sơ, ngôn ngữ và cửa hàng
import { Aside } from ‘@astrojs/starlight/components’;
3 mục trong 1 bài
Phần tiêu đề “3 mục trong 1 bài”| Mục | Vào từ | Mục đích | Quyền |
|---|---|---|---|
| Hồ sơ | /point-of-sale/settings/profile | Tên, mật khẩu, đăng xuất | Tất cả cashier |
| Ngôn ngữ | Modal PosSettingsLanguageModal | Locale giao diện (en, vi) | Tất cả cashier |
| Cửa hàng | /point-of-sale/settings/store | Xem thông tin cửa hàng active | Cần pos ghi |
Minh hoạ
Phần tiêu đề “Minh hoạ”
Hình: Tab Hồ sơ — email (không sửa), tên, avatar, nút đăng xuất. Spec owner: cashier-screenshots.spec.ts → "settings — profile (with profile tab active)".
Hình: Tab Mật khẩu — form RHF + Zod, validation realtime. Spec owner: cashier-screenshots.spec.ts → "settings — profile password tab".
Hình: Modal chọn ngôn ngữ giao diện (English / Tiếng Việt) — mở từ ngôn ngữ card trên hub. Spec owner: cashier-screenshots.spec.ts → "settings — language modal (open)".
Hình: Trang cửa hàng — store ID, tên, SĐT (chỉ xem). Spec owner: cashier-screenshots.spec.ts → "settings — store info".
1. Hồ sơ
Phần tiêu đề “1. Hồ sơ”Truy cập
Phần tiêu đề “Truy cập”Từ shell Thu ngân → Cài đặt → Hồ sơ (/point-of-sale/settings/profile). Trang có 2 tab:
- Hồ sơ — tên hiển thị, email (không cho sửa), avatar.
- Mật khẩu — đổi mật khẩu với form RHF + Zod (
<ChangePasswordSettings>).
URL sync: tab hiện tại lưu qua ?tab=profile hoặc ?tab=password (useSearchParams).
Đăng xuất
Phần tiêu đề “Đăng xuất”Cuộn xuống cuối trang → click Đăng xuất → confirm trong <LogoutModal>.
Source: apps/vendor-web/src/app/point-of-sale/pages/settings/settings-profile-page.tsx.
Quy tắc
Phần tiêu đề “Quy tắc”- Email không thể đổi tại POS — chỉ chủ mới đổi được trong Dashboard (bảo mật).
- Mật khẩu mới phải đủ mạnh theo schema (
<ChangePasswordSettings>). - Sau khi đăng xuất, cashier được đưa về
/cashier-login.
2. Ngôn ngữ
Phần tiêu đề “2. Ngôn ngữ”Truy cập
Phần tiêu đề “Truy cập”Từ shell Thu ngân → Cài đặt → Ngôn ngữ → mở Modal PosSettingsLanguageModal.
Các locale hỗ trợ
Phần tiêu đề “Các locale hỗ trợ”- 🇬🇧 English — mặc định cho mọi cashier mới.
- 🇻🇳 Tiếng Việt — chuyển toàn bộ UI sang tiếng Việt.
Source: apps/docs có /vi/ mirror — khi chuyển sang tiếng Việt, tài liệu hướng dẫn cũng tự động sang /vi/....
3. Cửa hàng
Phần tiêu đề “3. Cửa hàng”Truy cập
Phần tiêu đề “Truy cập”Từ shell Thu ngân → Cài đặt → Cửa hàng (/point-of-sale/settings/store) — chỉ hiển thị khi cashier đã chọn cửa hàng active.
Thông tin hiển thị
Phần tiêu đề “Thông tin hiển thị”Trang chỉ xem, không sửa (sửa cửa hàng phải làm ở Dashboard):
| Trường | Nguồn |
|---|---|
| Store ID | usePosStoreId() |
| Tên cửa hàng | usePosStoreBrand().name (fallback “Cửa hàng chưa đặt tên”) |
| SĐT | store.phone (nếu có) |
Source: settings-store-page.tsx.
Đổi cửa hàng active
Phần tiêu đề “Đổi cửa hàng active”Không qua trang này — dùng store selector trên top bar của shell Thu ngân. Khi đổi:
- Catalog, giá, khách hàng, thuế đều thay đổi (mỗi cửa hàng 1 dataset).
- Giỏ hàng bị xoá — bán dở phải kết thúc hoặc lưu nháp trước.
- Nhân viên thuộc 1 cửa hàng (
profile.store_id) sẽ không thấy dropdown.
Xem Bán — có khách hàng & coupon và FAQ — bán & thanh toán → Phiên hết hạn.
Lỗi thường gặp
Phần tiêu đề “Lỗi thường gặp”| Triệu chứng | Xử lý |
|---|---|
| Email để trống trong form | Email không sửa được ở POS; chủ sửa trong Dashboard |
| Tab “Mật khẩu” báo lỗi validation | Mật khẩu mới phải đủ dài + khác mật khẩu cũ |
| Không thấy mục “Cửa hàng” | Chưa chọn cửa hàng active trên top bar, hoặc thiếu pos ghi |
| Đổi ngôn ngữ không ảnh hưởng shell | Reload POS (Ctrl/Cmd + R) sau khi đổi locale |