From b9c0e6a59f49c6a7b22b4a29dab8dd7a335f36fe Mon Sep 17 00:00:00 2001 From: gitea-actions Date: Tue, 14 Apr 2026 03:05:52 +0000 Subject: [PATCH] chore: release [ci skip] --- README.md | 52 ++- app/(main)/login/page.tsx | 4 +- app/(main)/page.tsx | 9 +- app/(main)/payment/page.tsx | 4 +- app/(staff)/staff/schedule/page.tsx | 23 +- components/COMPONENTS.md | 67 ++- components/atoms/ATOMS.md | 19 + .../molecules/cards/PaymentSummaryCard.tsx | 11 +- components/molecules/cards/ShiftCard.tsx | 13 +- components/organisms/analytics/BarChart.tsx | 10 +- components/organisms/analytics/LineChart.tsx | 122 ++++- components/organisms/analytics/PieChart.tsx | 2 +- components/organisms/forms/LoginForm.tsx | 2 +- components/organisms/manager/ProductsTab.tsx | 5 +- .../shift-schedule/MobileShiftView.tsx | 72 ++- .../shift-schedule/MonthlyCalendar.tsx | 15 +- .../shift-schedule/ShiftCreateModal.tsx | 20 +- .../shift-schedule/ShiftDetailModal.tsx | 90 ++-- .../shift-schedule/WeeklySchedule.tsx | 78 +++- k8s.yaml | 2 +- lib/shift-context.tsx | 40 +- lib/types.ts | 6 +- package-lock.json | 4 +- package.json | 4 +- pnpm-lock.yaml | 430 ++++++++++-------- register-shift-feature-prompt.md | 57 ++- 26 files changed, 745 insertions(+), 416 deletions(-) diff --git a/README.md b/README.md index 209acc0..c355a6e 100644 --- a/README.md +++ b/README.md @@ -67,13 +67,15 @@ Dành cho khách hàng: Dành cho quản lý: -- Sidebar desktop: Brand, tab navigation (Thực đơn / Combo / Danh mục), link tới Analytics +- Sidebar desktop: Brand, tab navigation (Thực đơn / Combo / Danh mục), link tới + Analytics - CRUD sản phẩm, combo, danh mục qua modals - Auth guard: tự động redirect non-manager về `/` #### 9. **Trang Phân Tích Tài Chính** (`app/(manager)/manager/analytics`) -- Summary cards: Doanh thu, đơn hàng, lợi nhuận, giá trị đơn trung bình (so sánh kỳ trước) +- Summary cards: Doanh thu, đơn hàng, lợi nhuận, giá trị đơn trung bình (so sánh + kỳ trước) - Bộ chọn kỳ: Ngày / Tuần / Tháng / Năm - Biểu đồ SVG thuần: Line, Bar, Pie — hover tooltips tương tác - Bảng top 5 sản phẩm và bảng chi tiết có thể sắp xếp @@ -196,18 +198,18 @@ frondend/ ## 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.2.2 | 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 | -| Prettier | ^3 | Code formatting | -| semantic-release | ^25 | Automated versioning & release | +| 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.2.2 | 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 | +| Prettier | ^3 | Code formatting | +| semantic-release | ^25 | Automated versioning & release | --- @@ -225,11 +227,11 @@ frondend/ ### Tài Khoản Demo -| Loại tài khoản | Tên đăng nhập | Mật khẩu | -| -------------- | -------------- | -------------- | -| Manager | admin | admin | -| Staff | Nguyễn Văn An | Nguyễn Văn An | -| Customer | 0987654321 | user1 | +| Loại tài khoản | Tên đăng nhập | Mật khẩu | +| -------------- | ------------- | ------------- | +| Manager | admin | admin | +| Staff | Nguyễn Văn An | Nguyễn Văn An | +| Customer | 0987654321 | user1 | ### Design & Styling @@ -243,14 +245,18 @@ frondend/ Dự án tuân theo **Atomic Design** pattern — chi tiết tại `Atomic.md`: - **Atoms** - Nguyên tố cơ bản: Button, Input, Badge, Text, Heading, Divider -- **Molecules** - Nhóm atoms: ProductCard, ShopCard, SearchBar, PaymentSummaryCard -- **Organisms** - Phần UI phức tạp: CategorySidebar, CartFab, ProductGrid, ShopGrid, ReviewModal, analytics charts, manager tabs/modals -- **Templates** - Bố cục trang: MainLayout, AuthLayout, FeedLayout, ManagerLayout +- **Molecules** - Nhóm atoms: ProductCard, ShopCard, SearchBar, + PaymentSummaryCard +- **Organisms** - Phần UI phức tạp: CategorySidebar, CartFab, ProductGrid, + ShopGrid, ReviewModal, analytics charts, manager tabs/modals +- **Templates** - Bố cục trang: MainLayout, AuthLayout, FeedLayout, + ManagerLayout ### Data & Integration - Mock data nằm trong `lib/constants.ts` -- Context providers trong `app/providers.tsx`: AuthProvider, MenuProvider, CartProvider +- Context providers trong `app/providers.tsx`: AuthProvider, MenuProvider, + CartProvider - ManagerProvider được thêm bởi `app/(manager)/layout.tsx` - Thay bằng API calls khi backend sẵn sàng - Ảnh sản phẩm: thêm vào `public/imgs/products/` diff --git a/app/(main)/login/page.tsx b/app/(main)/login/page.tsx index b801294..9883080 100644 --- a/app/(main)/login/page.tsx +++ b/app/(main)/login/page.tsx @@ -1,7 +1,7 @@ "use client"; -import { SHOP_INFO } from "@/lib/constants"; import LoginForm from "@/components/organisms/forms/LoginForm"; +import { SHOP_INFO } from "@/lib/constants"; import Image from "next/image"; export default function LoginPage() { @@ -28,7 +28,7 @@ export default function LoginPage() { Đăng nhập vào hệ thống

- + {/* Login Form */} diff --git a/app/(main)/page.tsx b/app/(main)/page.tsx index 705cfbc..604f55c 100644 --- a/app/(main)/page.tsx +++ b/app/(main)/page.tsx @@ -1,10 +1,10 @@ "use client"; +import { SearchBar } from "@/components/molecules/search-bar"; import { CategorySidebar } from "@/components/organisms/navigation"; import { ProductGrid } from "@/components/organisms/product-grid"; -import { SearchBar } from "@/components/molecules/search-bar"; -import { useMenu } from "@/lib/menu-context"; import { MENU_CATEGORIES } from "@/lib/constants"; +import { useMenu } from "@/lib/menu-context"; import { useEffect, useState } from "react"; /** @@ -72,10 +72,7 @@ export default function Home() { {/* ── Product grid (organism handles mobile category menu + grid) ── */} - + ); diff --git a/app/(main)/payment/page.tsx b/app/(main)/payment/page.tsx index f9377f4..b6d9b35 100644 --- a/app/(main)/payment/page.tsx +++ b/app/(main)/payment/page.tsx @@ -75,7 +75,7 @@ export default function PaymentPage() {
diff --git a/components/molecules/cards/PaymentSummaryCard.tsx b/components/molecules/cards/PaymentSummaryCard.tsx index fb561ef..adc8505 100644 --- a/components/molecules/cards/PaymentSummaryCard.tsx +++ b/components/molecules/cards/PaymentSummaryCard.tsx @@ -13,14 +13,13 @@ export default function PaymentSummaryCard({ isCustomer = false, backHref, }: PaymentSummaryCardProps) { - - const [isReviewOpen, setIsReviewOpen] = useState(false); - const handlePayment = () => { + const [isReviewOpen, setIsReviewOpen] = useState(false); + const handlePayment = () => { // UI-only: open review modal after "payment" if (isCustomer) { - setIsReviewOpen(true); - } -}; + setIsReviewOpen(true); + } + }; return (