Skip to content

Tổng quan Hệ sinh thái Client

1. Kiểm soát Tài liệu

Thuộc tínhGiá trị
Trạng tháiHoạt động
Phiên bản1.0.0
Cập nhật lần cuối20/01/2025
Người bảo trìFrontend Team

2. Phạm vi & Mục tiêu

2.1. Phạm vi

Hệ sinh thái Client bao gồm tất cả các ứng dụng giao diện người dùng trong giải pháp BANA, bao gồm thiết bị Điểm bán hàng (POS), bảng điều khiển quản lý Back Office và các thư viện dùng chung hỗ trợ chúng.

2.2. Mục tiêu Chiến lược

Mục tiêuMô tảChỉ số
Nhất quánDuy trì UX/UI thống nhất trên các nền tảng bằng hệ thống thiết kế chungMột thư viện thành phần duy nhất
Hiệu suấtThời gian phản hồi dưới 100ms cho các tương tác POS quan trọngThao tác giỏ hàng < 100ms
Khả năng bảo trìTối đa hóa việc tái sử dụng mã thông qua các thư viện lõi dùng chung80%+ tiện ích dùng chung
Khả năng hoạt động ngoại tuyếnChức năng POS cốt lõi không cần internet (Local-First)100% thao tác giỏ hàng ngoại tuyến

3. Danh mục Ứng dụng

3.1. Tổng quan Ứng dụng

📱
Ứng dụng
Sản phẩm giao diện người dùng
🌐
client
Ứng dụng Web Back Office
🖥️
sale-main
Tauri Backend (Rust)
🎨
sale-renderer
Giao diện POS (React)
▼ Imports
📦
Thư viện dùng chung
Các gói nội bộ
🧩
admin-ui-kit
36 Thành phần UI
🔧
core
Tiện ích & Locales

3.2. Chi tiết Ứng dụng

Ứng dụngGóiLoạiTệpCổngNgười dùng chính
Back Office@nx-app/clientWeb SPA637 TS/TSX3001Quản lý / Chủ sở hữu
POS Terminal@nx-app/sale-mainDesktop (Rust)46 RustN/AThu ngân
POS UI@nx-app/sale-rendererWeb SPA (Tauri)337 TS/TSX3002Thu ngân
UI Kit@nx-app/admin-ui-kitLibrary44 TS/TSXN/ANhà phát triển
Core@nx-app/coreLibrary11 TSN/ANhà phát triển

3.3. Sản phẩm bàn giao

Ứng dụngTriển khaiArtifact
Back OfficeDocker / NginxStatic bundle (dist/)
POS TerminalNative Installer.msi (Win), .dmg (Mac), .deb (Linux)
POS UINhúng trong TauriStatic bundle (WebView)

4. Ngăn xếp Công nghệ

4.1. Công nghệ Cốt lõi

LớpCông nghệPhiên bảnMục đích
RuntimeBun1.3.2+JavaScript/TypeScript runtime
FrameworkReact19.2.xUI framework
Công cụ BuildVite7.xPhát triển & đóng gói
StylingTailwind CSS4.1.xUtility-first CSS
DesktopTauri2.9.1Native desktop framework
Backend (Tauri)RustStableLớp native POS

4.2. Quản lý Trạng thái

Phạm viThư việnPhiên bảnTrường hợp sử dụng
Server StateTanStack Query5.90.5Lấy dữ liệu API & caching
Global UI StateRedux Toolkit2.9.xGiỏ hàng, tùy chọn người dùng, điều hướng
Form StateReact Hook Form7.66.0Xác thực form với Zod
Admin Frameworkreact-admin5.13.xThao tác CRUD, data provider

4.3. Thành phần UI

Thư việnPhiên bảnMục đích
Radix UIMới nhấtCác thành phần cơ sở dễ tiếp cận
shadcn/uiMới nhấtCác thành phần dựng sẵn
Lucide Icons0.562.0Thư viện biểu tượng
TanStack Table8.21.3Bảng dữ liệu
TanStack VirtualMới nhấtDanh sách ảo hóa
Recharts2.15.4Biểu đồ (sale-renderer)

4.4. Đặc thù Tauri (sale-main)

Thư việnMục đích
sea-ormSQLite ORM
reqwestHTTP client
tokioAsync runtime
serdeJSON serialization
tracingGhi log có cấu trúc

5. Cấu trúc Thư mục

5.1. Cấu trúc Ứng dụng Chung

apps/{app-name}/
├── src/
│   ├── application/          # DI container, providers, API services
│   ├── components/           # React components
│   │   ├── core/             # Custom components
│   │   └── shadcn/           # shadcn UI components
│   ├── constants/            # Routes, endpoints, configurations
│   ├── helpers/              # Utility functions
│   ├── hooks/                # Custom React hooks
│   ├── interfaces/           # TypeScript interfaces
│   ├── layout/               # Layout components
│   ├── libs/                 # Library configurations
│   ├── redux/                # State management
│   ├── screens/              # Page components
│   ├── App.tsx               # Root component
│   ├── main.tsx              # Entry point
│   └── index.css             # Global styles
├── public/                   # Static assets
├── index.html                # HTML entry
├── package.json
├── tsconfig.json
├── vite.config.ts
└── tailwind.config.ts

5.2. Cấu trúc Cụ thể theo Ứng dụng

Back Office (client)

src/
├── screens/                  # 23 module màn hình
│   ├── product/              # Quản lý sản phẩm
│   ├── category/             # Quản lý danh mục
│   ├── merchant/             # Quản lý merchant
│   ├── organizer/            # Quản lý tổ chức
│   ├── customer/             # Quản lý khách hàng
│   ├── user/                 # Quản lý người dùng
│   ├── employee/             # Quản lý nhân viên
│   ├── role/                 # Quản lý vai trò
│   ├── device/               # Quản lý thiết bị
│   ├── sale-channel/         # Cấu hình kênh bán hàng
│   ├── terminal/             # Quản lý terminal
│   ├── order/                # Quản lý đơn hàng
│   ├── invoice/              # Quản lý hóa đơn
│   ├── transaction/          # Lịch sử giao dịch
│   ├── report/               # Dashboard báo cáo
│   │   ├── revenue/
│   │   └── orders/
│   ├── settings/             # Cài đặt hệ thống
│   ├── sign-in/
│   ├── sign-up/
│   └── home/                 # Dashboard
├── application/
│   └── services/             # 20+ dịch vụ API
└── redux/
    └── slices/               # 5 Redux slices
        ├── route/
        ├── temporary/
        ├── common/
        ├── product/
        └── listView/

POS UI (sale-renderer)

src/
├── screens/                  # 8 module màn hình
│   ├── sale/                 # Màn hình POS chính
│   ├── home/                 # Dashboard
│   ├── settings/             # Cài đặt
│   ├── customer/             # Hiển thị khách hàng
│   ├── errors/               # Trang lỗi
│   ├── sign-in/
│   └── term-of-use/
├── hooks/
│   └── screens/
│       └── sale/             # Hooks riêng cho bán hàng
│           ├── useCart.ts
│           ├── useProductVariant.ts
│           └── usePayment.ts
├── socket/                   # Tích hợp WebSocket
│   ├── connection-manager.ts
│   └── subscription-manager.ts
└── redux/
    └── slices/               # 8 Redux slices
        ├── cart/             # Giỏ hàng
        ├── order/            # Trạng thái đơn hàng
        ├── payment/          # Xử lý thanh toán
        ├── product/          # Danh mục sản phẩm
        ├── sale/             # Hoạt động bán hàng
        ├── userProfile/
        ├── common/
        └── temporary/

Tauri Backend (sale-main)

src-tauri/
├── src/
│   ├── application/          # Khởi tạo ứng dụng
│   │   ├── application.rs
│   │   ├── context.rs
│   │   └── logger.rs
│   ├── pubs/                 # Lệnh IPC (17 modules)
│   │   ├── login_pub.rs
│   │   ├── user_pub.rs
│   │   ├── merchant_pub.rs
│   │   ├── product_pub.rs
│   │   ├── category_pub.rs
│   │   ├── cart_pub.rs
│   │   ├── order_pub.rs
│   │   ├── payment_pub.rs
│   │   ├── payment_attempt.rs
│   │   ├── asset_pub.rs
│   │   ├── role_pub.rs
│   │   ├── permission_pub.rs
│   │   ├── sale_channel_pub.rs
│   │   ├── organizer_pub.rs
│   │   └── product_variant_pub.rs
│   ├── services/             # Logic nghiệp vụ (12 modules)
│   │   ├── auth_service.rs
│   │   ├── user_service.rs
│   │   ├── cart_service.rs
│   │   ├── cart_item_service.rs
│   │   ├── order_service.rs
│   │   ├── payment_service.rs
│   │   ├── api_network_service.rs
│   │   └── base_service.rs
│   ├── datasource/           # SQLite database
│   ├── entities/             # Database schemas
│   ├── helpers/              # Tiện ích
│   ├── main.rs
│   └── lib.rs
├── migration/                # DB migrations
├── capabilities/             # Quyền Tauri
└── tauri.conf.json           # Cấu hình Tauri

6. Dịch vụ API

6.1. Dịch vụ Back Office (20+)

Dịch vụMục đíchPhương thức chính
AuthApiXác thựcsignIn, signOut, refresh
OAuth2ApiTích hợp OAuthauthorize, callback
UserApiQuản lý người dùngCRUD, profile
EmployeeApiQuản lý nhân viênCRUD, assign roles
RoleApiQuản lý vai tròCRUD, permissions
ProductApiDanh mục sản phẩmCRUD, aggregate
CategoryApiDanh mụcCRUD, tree
VariantApiBiến thể sản phẩmCRUD
MerchantApiMerchantCRUD
OrganizerApiTổ chứcCRUD
OrderApiĐơn hàngCRUD, status
InvoiceApiHóa đơnCRUD, generate
TransactionApiGiao dịchlist, details
DeviceApiThiết bịCRUD, activate
SaleChannelApiKênh bán hàngCRUD, assign
BucketApiLưu trữ tệpupload, download
MetaLinkApiLiên kết metadataCRUD
UserConfigurationApiCài đặt người dùngCRUD
StaticAssetsApiPhục vụ tệp tĩnhserve
ReportApiBáo cáorevenue, orders

6.2. Dịch vụ POS (15)

Dịch vụMục đích
AuthApiXác thực
UserApiHồ sơ người dùng
AssetApiTruy cập tệp
MerchantApiDữ liệu merchant
OrganizerApiDữ liệu tổ chức
SaleChannelApiKênh bán hàng
CategoryApiDanh mục
ProductApiDanh mục sản phẩm
ProductVariantApiBiến thể
CartApiQuản lý giỏ hàng
CartItemApiMục giỏ hàng
OrderApiTạo đơn hàng
PaymentApiXử lý thanh toán
PaymentAttemptApiThử thanh toán

7. Quản lý Trạng thái

7.1. Redux Slices

Back Office

SliceTrạng tháiHành động
routeRoute hiện tại, lịch sửnavigate, goBack
temporaryModal, trạng thái tảisetModal, setLoading
commonTrạng thái ứng dụng toàn cụcsetLanguage, setTheme
productTrạng thái chỉnh sửa sản phẩmsetProduct, clearProduct
listViewCấu hình bảngsetFilters, setSort

POS

SliceTrạng tháiHành động
cartMục giỏ hàng, tổngaddItem, removeItem, clearCart
orderĐơn hàng hiện tạicreateOrder, updateStatus
paymentTrạng thái thanh toáninitiatePayment, confirmPayment
productDanh mục sản phẩmloadProducts, searchProducts
salePhiên bán hàngopenSession, closeSession
userProfileNgười dùng hiện tạisetUser, clearUser
commonTrạng thái toàn cụcsetMerchant, setSaleChannel
temporaryTrạng thái UIsetLoading, setModal

7.2. Luồng Trạng thái

8. Cấu hình Định tuyến

8.1. Routes Back Office

Đường dẫnMàn hìnhYêu cầu Auth
/Home (Dashboard)
/product/*Quản lý sản phẩm
/category/*Quản lý danh mục
/merchant/*Quản lý merchant
/organizer/*Quản lý tổ chức
/customer/*Quản lý khách hàng
/user/*Quản lý người dùng
/employee/*Quản lý nhân viên
/role/*Quản lý vai trò
/device/*Quản lý thiết bị
/order/*Quản lý đơn hàng
/invoice/*Quản lý hóa đơn
/transaction/*Lịch sử giao dịch
/report/*Báo cáo
/settings/*Cài đặt
/sign-inĐăng nhậpKhông
/sign-upĐăng kýKhông

8.2. Routes POS

Đường dẫnMàn hìnhYêu cầu Auth
/salePOS Chính
/settingsCài đặt chung
/account-settingCài đặt tài khoản
/store-settingCài đặt cửa hàng
/customerHiển thị khách hàngKhông
/term-of-useĐiều khoản sử dụngKhông
/error/*Trang lỗiKhông

9. Giao tiếp Thời gian thực

9.1. WebSocket (POS)

🔌
Tích hợp Socket.IO
Xử lý sự kiện thời gian thực
📡SocketConnectionManagerVòng đời kết nối
📬SocketSubscriptionManagerĐăng ký sự kiện
📦OrderSocketServiceXử lý sự kiện đơn hàng

9.2. Loại Sự kiện

Sự kiệnNguồnMô tả
order:createdServerĐơn hàng mới được tạo
order:updatedServerTrạng thái đơn hàng thay đổi
payment:confirmedPayment GatewayThanh toán thành công
payment:failedPayment GatewayThanh toán thất bại

10. Giao tiếp Tauri IPC

10.1. Mẫu Command

10.2. Lệnh IPC (17 modules)

ModuleLệnh
login_pubsign_in, sign_out, verify_token
user_pubget_user, update_user
merchant_publist_merchants, get_merchant
product_publist_products, get_product, search
category_publist_categories, get_tree
cart_pubget_cart, create_cart, clear_cart
order_pubcreate_order, get_order, list_orders
payment_pubinitiate_payment, confirm_payment
asset_pubupload_file, get_file

10.3. Lưu trữ Dữ liệu

Kho lưu trữCông nghệMục đích
Local DBSQLite + SeaORMDữ liệu ngoại tuyến
CacheIn-memoryDữ liệu phiên
KeychainOS Secure StorageToken xác thực

11. Build & Triển khai

11.1. Cấu hình Build

Ứng dụngCông cụ BuildĐầu raLệnh
clientVite 7dist/bun run build
sale-rendererVite 7dist/bun run build
sale-mainCargo/TauriNative binarybun run tauri build
admin-ui-kittscdist/bun run build

11.2. Tối ưu hóa Vite

typescript
// Cấu hình Vite chung
{
  build: {
    minify: 'terser',
    rollupOptions: {
      output: {
        manualChunks: {
          react: ['react', 'react-dom'],
          admin: ['react-admin', 'ra-core'],
          infra: ['@minimaltech/ra-core-infra'],
          lodash: ['lodash'],
        }
      }
    }
  }
}

11.3. Mô hình Triển khai

12. Chất lượng Mã nguồn

12.1. Linting & Formatting

Công cụCấu hìnhMục đích
ESLintStrict React rulesChất lượng mã
PrettierPre-commit hooksĐịnh dạng mã
TypeScriptStrict modeAn toàn kiểu

12.2. Yêu cầu An toàn Kiểu

  • Bật chế độ TypeScript "strict"
  • Không cho phép kiểu any tường minh
  • Tất cả phản hồi API được định kiểu với Zod schemas
  • Các kiểu được tạo tự động cho các hợp đồng API

13. Các bước Tiếp theo

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.