Skip to content

Client Back Office

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

Thuộc tínhGiá trị
Gói@nx-app/client
Phiên bản0.0.2-37
LoạiỨng dụng Web (SPA)
RuntimeTrình duyệt / Bun (dev)
Triển khaiDocker / Nginx

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

2.1. Phạm vi

Back Office Client là giao diện quản trị cho nền tảng BANA. Nó cung cấp cho các chủ doanh nghiệp, người vận hành và quản trị viên hệ thống các công cụ toàn diện để quản lý toàn bộ hoạt động của họ thông qua trình duyệt web.

2.2. Mục tiêu

  • Quản lý Toàn diện: Kiểm soát hoàn toàn sản phẩm, danh mục, merchant, nhân viên và báo cáo.
  • Trực quan hóa Dữ liệu: Biểu đồ và bảng phong phú cho thông tin kinh doanh chuyên sâu.
  • Thiết kế Phản hồi (Responsive): Hoạt động tốt trên trình duyệt Máy tính để bàn, Máy tính bảng và Điện thoại di động.
  • An toàn kiểu dữ liệu (Type Safety): An toàn kiểu đầu cuối với TypeScript và xác thực Zod.

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

3.1. Framework Cốt lõi

Công nghệPhiên bảnMục đích
React^19.2.1Thư viện Thành phần UI
React DOM^19.2.1Kết xuất DOM
React Router^7.9.4Định tuyến phía Client
TypeScript~5.9.3An toàn kiểu dữ liệu

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

Công nghệPhiên bảnMục đích
Redux Toolkit^2.9.1Quản lý Trạng thái Toàn cục
React Redux^9.2.0Liên kết React-Redux
TanStack Query^5.90.5Trạng thái Server & Caching
ra-core^5.13.2Lõi Framework Admin

3.3. Thành phần UI

Công nghệPhiên bảnMục đích
@nx-app/admin-ui-kitworkspace:*Thư viện Thành phần UI dùng chung
Radix UIVariousCác thành phần cơ sở dễ tiếp cận
Tailwind CSS^4.1.16Utility-first Styling
Lucide React^0.552.0Thư viện Biểu tượng
next-themes^0.4.6Chuyển đổi Giao diện (Theme)

3.4. Biểu mẫu & Xác thực

Công nghệPhiên bảnMục đích
React Hook Form^7.66.0Quản lý Trạng thái Biểu mẫu
@hookform/resolvers^5.2.2Tích hợp Xác thực Schema
Zod^4.1.12Xác thực Schema thời gian chạy

3.5. Bảng Dữ liệu & Kéo-Thả

Công nghệPhiên bảnMục đích
TanStack Table^8.21.3Bảng dữ liệu Headless
TanStack Virtual^3.13.12Danh sách ảo hóa
@dnd-kit/core^6.3.1Lõi Kéo-Thả
@dnd-kit/sortable^10.0.0Danh sách có thể sắp xếp

3.6. Build & Phát triển

Công nghệPhiên bảnMục đích
Vite^7.1.7Công cụ Build & Dev Server
@vitejs/plugin-react^5.0.4Tích hợp React
vite-plugin-pwa^1.1.0Hỗ trợ PWA
ESLint^9.36.0Kiểm tra lỗi mã nguồn (Linting)
Prettier3.6.2Định dạng mã nguồn

4. Kiến trúc

4.1. Các lớp Ứng dụng

Yêu cầu Trình duyệt
React Router
Thành phần Màn hình
Dịch vụ API
Backend API

4.2. Context Providers

Ứng dụng bao bọc các thành phần với nhiều context providers để tiêm phụ thuộc (dependency injection) và quản lý trạng thái:

ApplicationContext
├── CoreApplicationContext (DI Container)
│   └── ReduxProvider (Quản lý Trạng thái)
│       └── ThemeProvider (Chế độ Tối/Sáng)
│           └── ActiveThemeProvider (Tùy chỉnh Giao diện)
│               └── App (Routes & Layout)

4.3. Tích hợp Core Admin

Ứng dụng sử dụng ra-core (React Admin Core) với các provider tùy chỉnh:

ProviderTriển khaiMục đích
dataProviderCustom REST ProviderGiao tiếp API
authProviderLớp AuthProviderLuồng Xác thực
i18nProviderTriển khai tùy chỉnhĐa ngôn ngữ

5. Cấu trúc Dự án

apps/client/
├── src/
│   ├── application/              # DI Container & Providers
│   │   ├── decorators/           # Decorator tùy chỉnh
│   │   ├── providers/            # Auth & Data Providers
│   │   └── services/             # Dịch vụ API
│   │       ├── apis/             # API Client theo miền (25 files)
│   │       └── networks/         # Cấu hình Mạng
│   ├── components/               # Thành phần UI tái sử dụng
│   │   └── core/                 # Thành phần Cốt lõi
│   │       ├── breadcrumb/       # Breadcrumbs điều hướng
│   │       ├── common/           # Thành phần chung
│   │       ├── input/            # Thành phần nhập liệu Form
│   │       ├── notification/     # Thông báo Toast
│   │       ├── table/            # Thành phần Bảng dữ liệu
│   │       │   ├── base/         # Triển khai Bảng cơ sở
│   │       │   ├── data/         # Biến thể Bảng dữ liệu
│   │       │   └── view/         # Biến thể Bảng xem
│   │       └── title/            # Tiêu đề trang
│   ├── constants/                # Hằng số Ứng dụng
│   │   ├── screens/              # Hằng số cho Màn hình
│   │   └── sub-screens/          # Hằng số cho Màn hình phụ
│   ├── helpers/                  # Các hàm tiện ích
│   ├── hooks/                    # React Hooks tùy chỉnh
│   │   ├── api/                  # API Hooks
│   │   ├── table/                # Table Hooks
│   │   └── view/                 # View Hooks
│   ├── interfaces/               # Giao diện TypeScript (35 files)
│   │   └── product/              # Giao diện liên quan Sản phẩm
│   ├── layout/                   # Thành phần Bố cục
│   │   └── main/                 # Bố cục chính
│   ├── libs/                     # Cấu hình Thư viện ngoài
│   │   └── tanstack/             # Cấu hình TanStack Query
│   ├── redux/                    # Redux Store
│   │   └── slices/               # Redux Slices (5 slices)
│   ├── screens/                  # Thành phần Màn hình (23 modules)
│   └── themes/                   # Cấu hình Giao diện
├── scripts/                      # Script Build
└── public/                       # Tài sản Tĩnh

6. Màn hình & Định tuyến

6.1. Module Màn hình

Ứng dụng chứa 23 module màn hình, mỗi module tuân theo cấu trúc nhất quán:

ModuleĐường dẫnThao tácMô tả
home/DashboardBảng điều khiển chính với thống kê
product/productList, Create, EditQuản lý sản phẩm
category/categoryList, Create, EditQuản lý danh mục
category-template/category-templateList, Create, EditMẫu danh mục
organizer/organizerList, Create, EditQuản lý tổ chức
merchant/merchantList, Create, EditQuản lý merchant
user/userList, Create, EditQuản lý người dùng hệ thống
user-employee/employeeList, Create, EditQuản lý nhân viên
customer/customerList, Create, EditQuản lý khách hàng
role/roleList, Create, EditVai trò & quyền hạn
device/deviceList, Create, EditQuản lý thiết bị POS
terminal/terminalList, Create, EditQuản lý terminal thanh toán
sale-channel/sale-channelList, Create, EditCấu hình kênh bán hàng
order/orderList, ShowXem đơn hàng
transaction/transactionList, ShowLịch sử giao dịch
invoice/invoiceListQuản lý hóa đơn điện tử
report/report/*Revenue, OrderBáo cáo kinh doanh
settings/settings/*Profile, PasswordCài đặt người dùng
sign-in/loginLoginXác thực
sign-up/sign-upRegisterĐăng ký người dùng
errors/401, /403, /404Error PagesTrang lỗi HTTP

6.2. Mẫu Cấu trúc Màn hình

Mỗi module màn hình tuân theo cấu trúc thư mục nhất quán:

screens/{module}/
├── index.ts                    # Module exports
├── list/
│   └── index.tsx               # Thành phần xem danh sách
├── create/
│   └── index.tsx               # Thành phần form tạo mới
├── edit/
│   └── index.tsx               # Thành phần form chỉnh sửa
├── show/
│   └── index.tsx               # Thành phần xem chi tiết (tùy chọn)
├── form/
│   └── index.ts                # Cấu hình form chung
├── common/
│   └── index.ts                # Tiện ích chung
└── actions/
    └── index.ts                # Các hành động riêng của màn hình

7. Dịch vụ API

7.1. Kiến trúc Dịch vụ

Tất cả các dịch vụ API đều kế thừa BaseApiService cung cấp các thao tác CRUD tiêu chuẩn:

typescript
export class BaseApiService extends BaseService {
  protected resource: string;

  constructor(opts: { scope: string; resource: string }) {
    super({ scope: opts.scope });
    this.resource = opts.resource;
  }
}

7.2. Các Dịch vụ API Có sẵn

Dịch vụTài nguyênMô tả
AuthApi/authCác thao tác xác thực
OAuth2Api/oauth2Tích hợp OAuth2
UserApi/usersQuản lý người dùng
UserConfigurationApi/user-configurationsTùy chọn người dùng
EmployeeApi/employeesCác thao tác nhân viên
OrganizerApi/organizersQuản lý tổ chức
MerchantApi/merchantsCác thao tác merchant
MerchantTypeApi/merchant-typesĐịnh nghĩa loại merchant
ProductApi/productsDanh mục sản phẩm
ProductVariantApi/product-variantsBiến thể sản phẩm
VariantApi/variantsĐịnh nghĩa biến thể
CategoryApi/categoriesQuản lý danh mục
SaleChannelApi/sale-channelsKênh bán hàng
DeviceApi/devicesThiết bị POS
RoleApi/rolesQuản lý vai trò
OrderApi/ordersCác thao tác đơn hàng
TransactionApi/transactionsLịch sử giao dịch
InvoiceApi/invoicesQuản lý hóa đơn
CustomerApi/customersDữ liệu khách hàng
ReportApi/reportsBáo cáo kinh doanh
BucketApi/bucketsLưu trữ tệp
MetaLinkApi/meta-linksMetadata tài sản
StaticAssetsApi/static-assetsPhục vụ tệp tĩnh

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

8.1. Cấu hình Redux Store

Redux store được cấu hình với nhiều reducer và middleware:

typescript
const appReducer = combineReducers({
  route: routeReducer,
  temporary: temporaryReducer,
  common: commonReducer,
  product: productReducer,
  listView: listViewReducer,
});

8.2. Redux Slices

SliceMục đíchTrạng thái Chính
routeTrạng thái điều hướngRoute hiện tại, lịch sử
temporaryDữ liệu tạm thờiBản nháp form, thay đổi chưa lưu
commonTrạng thái ứng dụng chungCờ UI, cài đặt toàn cục
productTrạng thái chỉnh sửa sản phẩmTab hoạt động, ngữ cảnh merchant
listViewTùy chọn xem bảngBộ lọc, sắp xếp, phân trang

8.3. Trạng thái Server với TanStack Query

Trạng thái server (dữ liệu API) được quản lý riêng bằng TanStack Query:

HookMục đíchSử dụng
useGetDataLấy một tài nguyênTrang chi tiết
useInfiniteGetDataCuộn vô tậnDanh sách dài
useMutationDataTạo/Cập nhật/XóaGửi form
useRefreshVô hiệu hóa cacheSau khi thay đổi
useVirtualAutocompleteTìm kiếm ảo hóaTrường tự động hoàn thành

9. Giao diện TypeScript

9.1. Giao diện Cốt lõi

Ứng dụng định nghĩa hơn 35 tệp giao diện để đảm bảo an toàn kiểu dữ liệu:

Tệp Giao diệnMục đích
common.interface.tsCác loại tiện ích chung
redux.interface.tsCác loại action/state Redux
result.interface.tsCác loại phản hồi API
table.interface.tsCác loại thành phần bảng
sidebar.interface.tsCác loại điều hướng

9.2. Giao diện Miền

Tệp Giao diệnMiền
product.interface.tsQuản lý sản phẩm
product/addon.interface.tsSản phẩm addon
product/combo.interface.tsSản phẩm combo
product/quota.interface.tsHạn ngạch sản phẩm
product/product-variant.interface.tsBiến thể sản phẩm
product/product-feature.interface.tsTính năng sản phẩm
category.interface.tsQuản lý danh mục
category-template.interface.tsMẫu danh mục
merchant.interface.tsDữ liệu merchant
merchant-type.interface.tsLoại merchant
organizer.interface.tsDữ liệu tổ chức
user.interface.tsQuản lý người dùng
role.interface.tsĐịnh nghĩa vai trò
permission.interface.tsCác loại quyền
order.interface.tsDữ liệu đơn hàng
invoice.interface.tsDữ liệu hóa đơn
transaction.interface.tsBản ghi giao dịch
customer.interface.tsDữ liệu khách hàng
device.interface.tsThiết bị POS
terminal.interface.tsTerminal thanh toán
sale-channel.interface.tsKênh bán hàng
variant.interface.tsBiến thể sản phẩm
bucket.interface.tsLưu trữ tệp
meta-link.interface.tsMetadata tài sản

10. Custom Hooks

10.1. API Hooks

Nằm trong src/hooks/api/:

HookMục đích
useGetDataLấy dữ liệu với caching
useInfiniteGetDataLấy dữ liệu phân trang
useMutationDataThay đổi dữ liệu
useRefreshLàm mới cache truy vấn
useVirtualAutocompleteTự động hoàn thành ảo hóa
useVirtualAutocompleteArrayTự động hoàn thành đa chọn

10.2. Table Hooks

Nằm trong src/hooks/table/:

HookMục đích
useDataTableControllerQuản lý instance bảng
useDataTableStateĐồng bộ hóa trạng thái bảng

10.3. View Hooks

Nằm trong src/hooks/view/:

HookMục đích
useViewConfigCấu hình view
useViewStateQuản lý trạng thái view

10.4. Utility Hooks

HookFileMục đích
useDataProviderHeadersuseDataProviderHeaders.tsTiêm header API
useWarnUnsavedChangesuseWarnUnsavedChanges.tsCảnh báo thay đổi chưa lưu
useLogoutuseLogout.tsXử lý đăng xuất

11. Luồng Xác thực

11.1. Auth Provider

Lớp AuthProvider kế thừa DefaultAuthProvider và triển khai:

Phương thứcMục đích
login()Xử lý đăng nhập với thông tin xác thực
logout()Xóa trạng thái auth và chuyển hướng
checkAuth()Xác minh tính hợp lệ của token
checkError()Xử lý lỗi HTTP (401, 403)
getIdentity()Lấy người dùng hiện tại
getPermissions()Lấy quyền người dùng
getRoles()Lấy vai trò người dùng

11.2. Trạng thái Xác thực

1. Người dùng gửi thông tin đăng nhập
2. AuthProvider.login() gọi REST API
3. Thành công: lưu token, userId, username
4. Chuyển hướng đến dashboard
5. checkAuth() xác thực trên mỗi route được bảo vệ
6. Lỗi 401/403 kích hoạt đăng xuất

12. Hệ thống Giao diện (Theme System)

12.1. Theme Provider Stack

ThemeProvider (next-themes)
└── ActiveThemeProvider (Custom)
    └── Tailwind CSS v4 (Chế độ tối qua class)

12.2. Tính năng Giao diện

  • Chế độ Tối/Sáng: Chuyển đổi qua next-themes
  • Tùy chọn Hệ thống: Tôn trọng cài đặt hệ điều hành
  • Lưu trữ: Lưu tùy chọn trong localStorage
  • Biến CSS: Thuộc tính tùy chỉnh của Tailwind CSS

13. Build & Triển khai

13.1. Script Build

ScriptLệnhMục đích
devvite --mode devDevelopment server
buildsh ./scripts/build.shBuild sản xuất
build:developsh ./scripts/rebuild.sh developmentBuild phát triển
build:productionsh ./scripts/rebuild.sh productionBuild sản xuất
previewvite preview --port 4173Xem trước build sản xuất
lintsh ./scripts/lint.shChạy ESLint

13.2. Triển khai Docker

dockerfile
# Giai đoạn Build
FROM node:20-alpine AS builder
COPY . .
RUN bun install && bun run build

# Giai đoạn Runtime
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/nginx.conf

13.3. Cấu hình Môi trường

Biến môi trường được tải qua hệ thống env của Vite:

BiếnMục đích
VITE_NODE_ENVChế độ môi trường
VITE_API_BASE_URLĐiểm cuối Backend API
VITE_AUTH_ENDPOINTĐiểm cuối xác thực

14. Phụ thuộc

14.1. Phụ thuộc Nội bộ

GóiMục đích
@nx-app/admin-ui-kitThành phần UI dùng chung
@nx-app/coreTiện ích & locales dùng chung

14.2. Cơ sở hạ tầng Bên ngoài

GóiMục đích
@minimaltech/ra-core-infraCơ sở hạ tầng React Admin
@venizia/ignis-inversionIoC Container
@loopback/filterXây dựng bộ lọc truy vấn

15. Thống kê Mã nguồn

Chỉ sốSố lượng
Tệp Nguồn~637
Module Màn hình23
Dịch vụ API25
Giao diện TypeScript35+
Redux Slices5
Custom Hooks15+
Thành phần React100+

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