Hệ thống quản lý bán hàng (Point of Sale) hiện đại được xây dựng bằng Node.js, Express.js và MongoDB. Ứng dụng cung cấp đầy đủ tính năng quản lý sản phẩm, bán hàng, nhà cung cấp và báo cáo doanh thu cho các cửa hàng và siêu thị quy mô nhỏ.
- Tính năng chính
- Demo
- Cài đặt
- Cấu hình
- Chạy ứng dụng
- Cấu trúc dự án
- API Routes
- Quyền truy cập
- Công nghệ sử dụng
- Đóng góp
- Liên hệ
Ứng dụng web POS (Point of Sale) được thiết kế để quản lý và vận hành một cửa hàng/siêu thị quy mô nhỏ, với các tính năng tiện lợi cho việc bán hàng, quản lý kho, theo dõi lịch sử giao dịch, báo cáo doanh thu, và quản lý người dùng.
- Dashboard tổng quan: Hiển thị doanh thu, sản phẩm bán chạy, thống kê tổng quan
- Quản lý sản phẩm: Thêm, sửa, xóa sản phẩm với upload hình ảnh
- Quản lý danh mục: Phân loại sản phẩm theo danh mục
- Quản lý kho hàng: Theo dõi số lượng tồn kho, cảnh báo hết hàng
- Giao diện bán hàng: Thêm sản phẩm vào giỏ hàng dễ dàng
- Thanh toán đa dạng: Hỗ trợ tiền mặt, chuyển khoản
- In hóa đơn: Xuất hóa đơn bán hàng chi tiết
- Tính toán tự động: Tổng tiền, thuế, giảm giá
- Báo cáo doanh thu: Theo ngày, tháng, năm với biểu đồ trực quan
- Sản phẩm bán chạy: Thống kê sản phẩm theo doanh số
- Lịch sử giao dịch: Tra cứu và tìm kiếm giao dịch
- Biểu đồ: Visualization dữ liệu bằng Chart.js
- Đăng ký/Đăng nhập: Xác thực an toàn với JWT
- Phân quyền: Admin, Quản lý kho, Nhân viên bán hàng
- Quên mật khẩu: Khôi phục mật khẩu qua email
- Quản lý thông tin: Cập nhật thông tin cá nhân và cửa hàng
- Danh sách nhà cung cấp: Quản lý thông tin liên hệ
- Theo dõi giao dịch: Lịch sử nhập hàng từ nhà cung cấp
- HTTPS: Hỗ trợ SSL/TLS encryption
- Session Management: Quản lý phiên đăng nhập an toàn
- Password Hashing: Mã hóa mật khẩu với bcryptjs
- File Upload: Xử lý upload ảnh sản phẩm, QR code
- Node.js - Runtime environment
- Express.js 4.21.0 - Web application framework
- MongoDB - NoSQL database
- Mongoose 8.6.3 - MongoDB ODM
- EJS 3.1.10 - Template engine
- Bootstrap 5 - CSS framework responsive
- jQuery - JavaScript library
- Chart.js - Data visualization và biểu đồ
- SweetAlert2 - Beautiful alerts và notifications
- Flatpickr - Date picker
- Swiper - Touch slider
- bcryptjs 2.4.3 - Password hashing
- jsonwebtoken 9.0.2 - JWT tokens
- express-session 1.18.0 - Session management
- connect-mongo 5.1.0 - MongoDB session store
- multer 1.4.5 - File upload handling
- nodemailer 6.9.15 - Email sending
- xlsx 0.18.5 - Excel file processing
- nodemon 3.1.6 - Development auto-restart
- dotenv 16.4.5 - Environment variables
- PM2 - Process manager for production
- Node.js 16.x hoặc cao hơn
- MongoDB 6.0+
- npm hoặc yarn
- Git
git clone https://github.com/yourusername/pos-application.git
cd pos-application
npm install
Tạo file .env
trong thư mục gốc và cấu hình:
# Database Configuration
MONGO_URI=mongodb://localhost:27017/ProductsManager
# Server Configuration
PORT=3000
NODE_ENV=development
# JWT Secret
JWT_SECRET=your_super_secret_jwt_key_here
# Email Configuration (Gmail)
EMAIL_USER=your_email@gmail.com
EMAIL_PASSWORD=your_app_password
# Session Secret
SESSION_SECRET=your_session_secret_key
# Upload Configuration
MAX_FILE_SIZE=5242880
ALLOWED_FILE_TYPES=jpg,jpeg,png,gif
Đảm bảo MongoDB đang chạy trên hệ thống:
# Windows
net start MongoDB
# macOS/Linux
sudo systemctl start mongod
# Import dữ liệu từ thư mục dbExport
mongoimport --db ProductsManager --collection products --file dbExport/ProductsManager.products.json --jsonArray
mongoimport --db ProductsManager --collection categories --file dbExport/ProductsManager.categories.json --jsonArray
npm run dev
npm start
npm run pm2
npm run stoppm2
Ứng dụng sẽ chạy tại:
- Development:
http://localhost:3000
- Production:
https://localhost:3000
(với SSL)
Lưu ý: Trong production, ứng dụng sử dụng HTTPS với SSL certificates từ thư mục
ssl/
POS-app/
├── 📁 config/ # Cấu hình ứng dụng
│ ├── db.js # Kết nối MongoDB
│ └── multer.js # Cấu hình upload file
├── 📁 middlewares/ # Middleware functions
│ ├── auth.js # Xác thực JWT
│ ├── authMiddleware.js # Middleware xác thực
│ ├── layout.js # Layout middleware
│ └── redirectIfLoggedIn.js # Redirect đã đăng nhập
├── 📁 models/ # Mongoose models (Database schemas)
│ ├── Category.js # Model danh mục sản phẩm
│ ├── product.js # Model sản phẩm
│ ├── User.js # Model người dùng
│ ├── Revenue.js # Model doanh thu
│ ├── supplier.js # Model nhà cung cấp
│ ├── customer.js # Model khách hàng
│ ├── history.js # Model lịch sử giao dịch
│ ├── Store.js # Model cửa hàng
│ ├── ExportHistory.js # Model lịch sử xuất kho
│ └── VerificationCode.js # Model mã xác thực
├── 📁 routes/ # Express route handlers
│ ├── dashboard.js # Routes dashboard và thống kê
│ ├── shopRoutes.js # Routes bán hàng
│ ├── staffRoutes.js # Routes quản lý nhân viên
│ ├── supplierRoutes.js # Routes nhà cung cấp
│ └── userRoutes.js # Routes người dùng
├── 📁 views/ # EJS template files
│ ├── dashboard.ejs # Trang dashboard
│ ├── sales.ejs # Trang bán hàng
│ ├── products.ejs # Quản lý sản phẩm
│ ├── login.ejs # Trang đăng nhập
│ ├── register.ejs # Trang đăng ký
│ ├── report.ejs # Báo cáo doanh thu
│ ├── history.ejs # Lịch sử giao dịch
│ ├── shop.ejs # Trang cửa hàng
│ ├── users.ejs # Quản lý người dùng
│ └── partials/ # Template partials
│ ├── header.ejs # Header component
│ └── footer.ejs # Footer component
├── 📁 public/ # Static assets
│ ├── 📁 css/ # Custom stylesheets
│ │ ├── style.css # Main stylesheet
│ │ ├── index.css # Homepage styles
│ │ ├── sale.css # Sales page styles
│ │ └── stats.css # Statistics styles
│ ├── 📁 js/ # Client-side JavaScript
│ │ ├── index.js # Homepage scripts
│ │ ├── product.js # Product management
│ │ ├── sales.js # Sales functionality
│ │ └── report.js # Report generation
│ ├── 📁 assets/ # Third-party libraries
│ │ ├── bs5/ # Bootstrap 5
│ │ ├── jquery/ # jQuery library
│ │ ├── chartJS/ # Chart.js
│ │ ├── swal2/ # SweetAlert2
│ │ ├── flatpickr/ # Date picker
│ │ └── swiper/ # Touch slider
│ ├── 📁 images/ # Images và graphics
│ │ ├── bg.jpg # Background image
│ │ └── default.svg # Default placeholder
│ ├── 📁 icons/ # SVG icons
│ └── 📁 templates/ # File templates
│ └── product-sample.xlsx # Excel template
├── 📁 uploads/ # User uploaded files
├── 📁 ssl/ # SSL certificates (production)
│ ├── privkey.pem # Private key
│ └── fullchain.pem # Certificate chain
├── 📁 dbExport/ # Database backup/export files
│ ├── ProductsManager.products.json
│ ├── ProductsManager.categories.json
│ ├── ProductsManager.users.json
│ ├── ProductsManager.revenues.json
│ └── ...
├── server.js # Main application entry point
├── updateProducts.js # Product update utility
├── package.json # Project dependencies
├── .env # Environment variables
└── README.md # Project documentation
GET /
- Trang chủ và redirectGET /login
- Trang đăng nhậpPOST /login
- Xử lý đăng nhậpGET /register
- Trang đăng kýPOST /register
- Xử lý đăng kýGET /logout
- Đăng xuấtPOST /forgot-password
- Quên mật khẩuPOST /reset-password
- Đặt lại mật khẩu
GET /dashboard
- Dashboard chính với thống kêGET /products
- Quản lý sản phẩmGET /report
- Báo cáo doanh thuGET /history
- Lịch sử giao dịchGET /users
- Quản lý người dùng
GET /products
- Danh sách sản phẩmPOST /products/add
- Thêm sản phẩm mớiPUT /products/edit/:id
- Cập nhật sản phẩmDELETE /products/delete/:id
- Xóa sản phẩmPOST /products/upload
- Upload hình ảnh sản phẩm
GET /sales
- Giao diện bán hàngPOST /sales/checkout
- Xử lý thanh toánGET /sales/history
- Lịch sử bán hàngGET /sales/invoice/:id
- Xem/in hóa đơn
GET /api/suppliers
- Danh sách nhà cung cấpPOST /api/suppliers
- Thêm nhà cung cấpPUT /api/suppliers/:id
- Cập nhật nhà cung cấpDELETE /api/suppliers/:id
- Xóa nhà cung cấp
GET /report/revenue
- Báo cáo doanh thuGET /report/products
- Thống kê sản phẩmGET /report/export
- Xuất báo cáo Excel
- Toàn quyền: Quản lý toàn bộ hệ thống
- Quản lý người dùng: Tạo, sửa, xóa tài khoản và phân quyền
- Cấu hình hệ thống: Thay đổi thông tin cửa hàng, cài đặt
- Xem tất cả báo cáo: Truy cập mọi thống kê và báo cáo
- Backup & Restore: Sao lưu và khôi phục dữ liệu
- Quản lý sản phẩm: Thêm, sửa, xóa sản phẩm và danh mục
- Quản lý nhà cung cấp: Thông tin và giao dịch với nhà cung cấp
- Báo cáo kho: Xem báo cáo tồn kho, nhập xuất
- Lịch sử giao dịch: Theo dõi các giao dịch đã thực hiện
- Thống kê sản phẩm: Sản phẩm bán chạy, hết hàng
- Bán hàng: Sử dụng giao diện POS để bán hàng
- Thanh toán: Xử lý các giao dịch thanh toán
- In hóa đơn: Xuất hóa đơn cho khách hàng
- Xem lịch sử: Lịch sử giao dịch của bản thân
- JWT Authentication: Token-based authentication
- Session Management: Quản lý phiên đăng nhập an toàn
- Password Encryption: Mã hóa mật khẩu với bcrypt
- Role-based Access: Kiểm soát truy cập theo vai trò
- HTTPS Support: Hỗ trợ SSL/TLS encryption
- Mobile-first: Tối ưu cho thiết bị di động
- Bootstrap 5: Framework CSS hiện đại
- Dark/Light Mode: Chế độ sáng/tối (có thể mở rộng)
- SweetAlert2: Thông báo đẹp và thân thiện
- Loading States: Hiển thị trạng thái loading
- Form Validation: Validate dữ liệu real-time
- Smooth Animations: Hiệu ứng mượt mà
- Chart.js: Biểu đồ doanh thu trực quan
- Tables: Danh sách dữ liệu có phân trang
- Cards: Hiển thị thống kê dạng card
- Progress Bars: Thanh tiến trình cho các metric
Chúng tôi hoan nghênh mọi đóng góp từ cộng đồng!
- Fork repository
git fork https://github.com/yourusername/pos-application.git
- Tạo feature branch
git checkout -b feature/amazing-feature
- Commit changes
git commit -m "Add: Amazing new feature"
- Push to branch
git push origin feature/amazing-feature
- Tạo Pull Request
- Code Style: Tuân thủ ESLint rules
- Commit Convention: Sử dụng conventional commits
- Testing: Viết test cho các tính năng mới
- Documentation: Cập nhật docs cho các thay đổi
Khi báo lỗi, vui lòng bao gồm:
- Mô tả chi tiết: Bug xảy ra như thế nào
- Các bước tái tạo: Steps to reproduce
- Screenshots: Hình ảnh minh họa (nếu có)
- Environment: Thông tin môi trường (OS, browser, etc.)
- Mô tả rõ ràng: Tính năng cần thiết và lý do
- Use cases: Các trường hợp sử dụng cụ thể
- Mockups: Thiết kế giao diện (nếu có)
- Backend Developer: hoaphamduc2399@gmail.com
- Frontend Developer: luuconghn.lamcong.contacts@gmail.com
- GitHub Issues: Báo lỗi và góp ý
- Wiki: Documentation chi tiết
- Releases: Các phiên bản
- Discussions: GitHub Discussions
- Telegram: POS App Community
Dự án này được phát hành dưới giấy phép ISC License.
Copyright (c) 2024 POS Application Team
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
- Real-time Updates: WebSocket cho cập nhật real-time
- Mobile App: Ứng dụng mobile React Native
- Advanced Reports: Báo cáo nâng cao với AI insights
- Multi-store Support: Hỗ trợ nhiều cửa hàng
- Inventory Management: Quản lý kho nâng cao
- Barcode Scanner: Tích hợp quét mã vạch
- Payment Gateway: Tích hợp cổng thanh toán online
- Customer Loyalty: Chương trình khách hàng thân thiết
- Analytics Dashboard: Dashboard phân tích nâng cao
- API Documentation: Swagger/OpenAPI docs
- Docker Support: Containerization với Docker
Cảm ơn tất cả những người đã đóng góp cho dự án này:
- Contributors: Các developer đã contribute code
- Testers: Những người đã test và báo lỗi
- Community: Cộng đồng đã ủng hộ và feedback
Dự án này sử dụng các công cụ và thư viện mã nguồn mở tuyệt vời:
- Node.js - JavaScript runtime
- Express.js - Web framework
- MongoDB - NoSQL database
- Bootstrap - CSS framework
- Chart.js - Data visualization
- Và nhiều thư viện khác...
⭐ Nếu dự án hữu ích, hãy cho chúng tôi một star trên GitHub! ⭐
Được phát triển với ❤️ bởi POS Application Team