197 lines
6.4 KiB
Markdown
197 lines
6.4 KiB
Markdown
# Coffee Shop Frontend
|
|
|
|
Dự án Frontend cho hệ thống đặt món cà phê, xây dựng bằng Next.js App Router,
|
|
React 19, TypeScript và Tailwind CSS v4.
|
|
|
|
---
|
|
|
|
## Mô Tả Dự Án
|
|
|
|
Giao diện người dùng (frontend) cho hệ thống đặt và bán đồ uống trực tuyến.
|
|
|
|
### Tính Năng Hiện Tại
|
|
|
|
#### 1. **Trang Đăng Nhập & Đăng Ký** (app/(main)/login, app/(main)/register)
|
|
|
|
- Form đăng nhập với validation (username, password)
|
|
- Form đăng ký với xác thực OTP
|
|
- Lưu trữ thông tin người dùng trong localStorage
|
|
- Hỗ trợ 3 loại tài khoản: Manager, Staff, Customer
|
|
- Hiển thị thông tin shop trong form
|
|
|
|
#### 2. **Trang Khám Phá Quán Nước** (app/(feed)/feed)
|
|
|
|
- Danh sách các quán cà phê
|
|
- Tìm kiếm theo tên quán và địa chỉ
|
|
- Thẻ quán với ảnh, địa chỉ, nút "Xem menu"
|
|
- Responsive layout (grid 1/2/3 cột)
|
|
- Empty state khi không tìm thấy quán
|
|
|
|
#### 3. **Trang Chính - Duyệt Thực Đơn** (app/(main))
|
|
|
|
Dành cho khách hàng:
|
|
|
|
- Sidebar collapsible (64px/240px) - danh mục sản phẩm
|
|
- Grid sản phẩm responsive (1-5 cột tuỳ thiết bị)
|
|
- Tìm kiếm món theo tên / mô tả
|
|
- Xem card sản phẩm với giá và nút "Mua"
|
|
- Lọc tự động theo trạng thái available
|
|
- Mobile menu: scrollable category tabs (< md)
|
|
|
|
#### 4. **Hệ Thống Giỏ Hàng** (lib/cart-context.tsx)
|
|
|
|
- Lưu trữ trạng thái giỏ trong localStorage
|
|
- Thêm/xóa/tăng/giảm số lượng sản phẩm
|
|
- Tính tổng giá và số mặt hàng
|
|
- Persist dữ liệu giữa các session
|
|
|
|
#### 5. **Hệ Thống Xác Thực** (lib/auth-context.tsx)
|
|
|
|
- Quản lý trạng thái người dùng (login/logout/register)
|
|
- Lưu thông tin user trong localStorage
|
|
- Mock auth database với 3 loại tài khoản
|
|
- Hỗ trợ hoàn tất đăng ký qua OTP
|
|
|
|
#### 6. **Hệ Thống Danh Mục** (lib/menu-context.tsx)
|
|
|
|
- Chia sẻ trạng thái category giữa Header mobile và Sidebar
|
|
- Tự động clear search khi thay đổi category
|
|
|
|
---
|
|
|
|
## Cách Chạy Dự Án
|
|
|
|
### Yêu cầu hệ thống
|
|
|
|
- Node.js >= 18
|
|
- pnpm (khuyến nghị) hoặc npm
|
|
|
|
### Cài đặt
|
|
|
|
```bash
|
|
pnpm install
|
|
```
|
|
|
|
### Dev
|
|
|
|
```bash
|
|
pnpm dev
|
|
```
|
|
|
|
Mở trình duyệt tại http://localhost:3000
|
|
|
|
### Build
|
|
|
|
```bash
|
|
pnpm build && pnpm start
|
|
```
|
|
|
|
### Lint
|
|
|
|
```bash
|
|
pnpm lint
|
|
```
|
|
|
|
---
|
|
|
|
## Cấu Trúc Thư Mục
|
|
|
|
```
|
|
frondend/
|
|
+-- app/ # Next.js App Router
|
|
| +-- layout.tsx # Root layout + Header + Footer
|
|
| +-- globals.css # CSS design tokens + Tailwind import
|
|
| +-- providers.tsx # Context providers (Auth, Menu, Cart)
|
|
| +-- APP.md # Tài liệu chi tiết về routes
|
|
| +-- (main)/ # Main route group
|
|
| | +-- layout.tsx # Main layout
|
|
| | +-- page.tsx # Trang chính - duyệt thực đơn
|
|
| | +-- login/page.tsx # Trang đăng nhập
|
|
| | +-- register/page.tsx # Trang đăng ký
|
|
| | +-- payment/page.tsx # Trang thanh toán
|
|
| +-- (feed)/ # Feed route group
|
|
| +-- layout.tsx # Feed layout
|
|
| +-- feed/page.tsx # Trang khám phá quán nước
|
|
+-- components/ # Shared UI components
|
|
| +-- Navbar.tsx # Sidebar danh mục (collapsible)
|
|
| +-- CartProduct.tsx # Card sản phẩm
|
|
| +-- CartFab.tsx # FAB - nút giỏ hàng floating
|
|
| +-- COMPONENTS.md # Tài liệu chi tiết components & contexts
|
|
+-- layouts/ # Layout-level components
|
|
| +-- header.tsx # Sticky top header + auth demo
|
|
| +-- footer.tsx # Footer + shop info
|
|
| +-- LAYOUTS.md # Tài liệu chi tiết layouts
|
|
+-- lib/ # Shared logic & data
|
|
| +-- constants.ts # Mock data (products, shops, users, shop info)
|
|
| +-- types.ts # TypeScript interfaces
|
|
| +-- auth-context.tsx # Authentication context & provider
|
|
| +-- cart-context.tsx # Shopping cart context & provider
|
|
| +-- menu-context.tsx # Menu/Category context & provider
|
|
| +-- LIB.md # Tài liệu chi tiết về lib
|
|
+-- types/ # Global TypeScript declarations
|
|
| +-- css.d.ts # CSS module type shim
|
|
+-- public/ # Static assets
|
|
| +-- imgs/
|
|
| | +-- logo.png
|
|
| | +-- products/ # Ảnh sản phẩm
|
|
| +-- favicon/
|
|
+-- WORKFLOW.md # Tài liệu kiến trúc tổng thể & quy trình
|
|
+-- README.md # (file này) - Mô tả dự án
|
|
+-- TODO.md # Danh sách tính năng hoàn thành & chưa làm
|
|
+-- next.config.ts
|
|
+-- tsconfig.json
|
|
+-- postcss.config.mjs
|
|
+-- eslint.config.mjs
|
|
+-- package.json
|
|
+-- pnpm-workspace.yaml
|
|
```
|
|
|
|
---
|
|
|
|
## Công Nghệ Sử Dụng
|
|
|
|
| Công nghệ | Phiên bản | Mục đích |
|
|
| ------------ | --------- | ------------------------------------- |
|
|
| Next.js | 16.1.7 | React Framework (App Router) |
|
|
| React | 19.2.3 | Thư viện UI |
|
|
| TypeScript | ^5 | Kiểu dữ liệu tĩnh |
|
|
| Tailwind CSS | ^4 | Utility-first CSS framework |
|
|
| Geist Font | - | Font chữ (Google Fonts via next/font) |
|
|
| FontAwesome | 6.7.2 | Icon library (CDN) |
|
|
| pnpm | - | Package manager |
|
|
| ESLint | ^9 | Linting |
|
|
|
|
---
|
|
|
|
## Ghi Chú Phát Triển
|
|
|
|
### Điểm Vào Chính
|
|
|
|
- **Trang Chủ (User):** `app/(main)/page.tsx` - Duyệt thực đơn
|
|
- **Trang Khám Phá:** `app/(feed)/feed/page.tsx` - Khám phá quán
|
|
- **Đăng Nhập:** `app/(main)/login/page.tsx`
|
|
- **Đăng Ký:** `app/(main)/register/page.tsx`
|
|
|
|
### Design & Styling
|
|
|
|
- Design tokens (CSS variables) định nghĩa trong `app/globals.css`
|
|
- Tailwind CSS v4 + custom properties cho consistent color/spacing
|
|
- Dark mode: biến CSS đã chuẩn bị sẵn nhưng chưa kích hoạt
|
|
- FontAwesome icons từ CDN
|
|
|
|
### Data & Integration
|
|
|
|
- Mock data nằm trong `lib/constants.ts`
|
|
- Context providers trong `app/providers.tsx` - Sử dụng: AuthProvider,
|
|
MenuProvider, CartProvider
|
|
- Thay bằng API calls khi backend sẵn sàng
|
|
- Ảnh sản phẩm: thêm vào `public/imgs/products/`
|
|
|
|
### Tài Liệu Chi Tiết
|
|
|
|
- **WORKFLOW.md** - Kiến trúc tổng thể, data flow, quy trình phát triển
|
|
- **APP.md** - Chi tiết các routes, layouts, pages
|
|
- **COMPONENTS.md** - Tài liệu từng component + contexts
|
|
- **LAYOUTS.md** - Header, Footer, responsive behavior
|
|
- **LIB.md** - Constants, Types, Contexts
|