คู่มือและเอกสารระบบ Bount Back Office (BO) อย่างละเอียด ครอบคลุมโครงสร้าง สถาปัตยกรรม ฐานข้อมูล บทบาทผู้ใช้งาน และขั้นตอนการ Deploy
Resources
3Install
npx skillscat add nontapat150-droid/ad Install via the SkillsCat registry.
SKILL.md
Bount Management System (BO)
ไฟล์นี้คือ AI Skill Instruction สำหรับให้ AI Agent ใช้ทำความเข้าใจ โครงสร้าง, ลอจิก, และข้อควรระวังต่างๆ ของระบบ Bount (bonusais.com) เพื่อให้สามารถเขียนโค้ดและแก้ไขปัญหาได้อย่างแม่นยำ
1. ข้อมูลทั่วไปของระบบ (System Overview)
- ชื่อโปรเจกต์: Bount ระบบจัดการงาน
- เป้าหมาย: ระบบ Back Office สำหรับจัดการทีมช่างภาคสนาม (Field Service Management), จัดการคลังสินค้า, ลงเวลาเข้าออกงาน และรายงานผลสถิติ
- Tech Stack:
- Frontend: React.js (Vite), Tailwind CSS, React Router
- Backend: Node.js, Express.js
- Database: MySQL
- Root Directory:
c:\xampp\htdocs\BO\ad\
2. บทบาทและสิทธิ์ผู้ใช้งาน (User Roles & Permissions)
ระบบจัดการสิทธิ์ผ่านคอลัมน์ role และ user_roles (Extra Roles) ในตาราง users:
super_admin(ผู้ดูแลระบบ): เห็นทุกเมนู มี Super Admin Dashboard จัดการผู้ใช้และภาพรวมทั้งหมดadmin(แอดมิน): ดูแลจัดการ Dispatch, คลังสินค้า, และสรุปผล MAtechnician(ช่าง Office): ช่างทั่วไป ลงเวลาเข้างานแบบปกติ (เวลาสายตั้งได้แบบ Global หรือรายบุคคล)ma_technician(ช่าง MA): ทีมซ่อมบำรุง ระบบลงเวลาจะเชื่อมโยงกับงาน MA วันนั้น (Threshold)sales(เซล): ทีมขาย ระบบลงเวลาจะมี เฉพาะ "เข้างาน" ไม่มีเลิกงานintern(เด็กฝึกงาน): ผู้ใช้ฝึกหัด
3. ระบบหลักที่สำคัญ (Core Features)
3.1 ระบบ Authentication & Real-time Status
- ใช้ JWT (JSON Web Token) แนบไปกับ Header
Authorization: Bearer <token> - สถานะออนไลน์ (Online/Offline):
- ไม่ได้อิงจากการแค่กดเช็คอิน แต่เช็คจาก การใช้งานระบบจริงๆ (Real-time Usage)
- ทุกครั้งที่ยิง API Backend จะอัปเดตเวลาล่าสุดใน
global.activeUsers(อยู่ที่backend/middleware/auth.js) - หากไม่มีการใช้งานเกิน 15 นาที ระบบจะมองว่าออฟไลน์ (
is_online = 0) ในหน้า Dashboard
3.2 ระบบลงเวลาเข้า-ออกงาน (Check-in System)
- อยู่ในหน้า
CheckinPage.jsx - ดึงพิกัด GPS อัตโนมัติและเปิดกล้องถ่ายภาพ (ประทับลายน้ำพิกัด+เวลา)
- ระบบจะซ่อนปุ่มบางปุ่มหรือบางแท็บตาม Role อัตโนมัติ (เช่น เซล จะเห็นแค่ปุ่มเข้างาน)
3.3 ระบบจ่ายงานและติดตามสถานะ (Dispatch & Timeline)
- แอดมินนำเข้างานด้วยไฟล์ Excel (
jobstable) - Timeline ของแต่ละงานดึงจาก Timestamp ต่อไปนี้:
created_at/create_time: สร้างงานในระบบplan_arrival_time: เวลานัดหมายset_off_time: ออกเดินทางarrival_time: ถึงหน้างานfinish_time: ปิดงาน
- เมื่อช่างมอบหมายงาน หรืออัปเดตสถานะในแอป เวลาจะถูกบันทึกลงฟิลด์เหล่านี้ทันที
3.4 ระบบคลังสินค้า (Inventory)
- นำเข้าสินค้าด้วย Excel ตาราง
inventoryและequipments - เบิกจ่ายของให้ทีมช่าง โดยมีหน้า Inventory Dashboard คอยสรุปของคงคลัง
4. โครงสร้างโฟลเดอร์ (Directory Structure)
BO/ad/
├── backend/ # Node.js Express API
│ ├── config/ # db.js (เชื่อมต่อ MySQL)
│ ├── middleware/ # auth.js (เช็ค JWT & อัปเดตสถานะ Online)
│ ├── routes/ # API endpoints (auth.js, checkin.js, dispatch.js, stats.js ฯลฯ)
│ ├── uploads/ # เก็บรูปภาพถ่ายเข้างาน และหลักฐานการทำงาน
│ ├── server.js # Entry point ของ Backend (Port 3001)
│ └── package.json
├── frontend/ # React.js (Vite)
│ ├── src/
│ │ ├── api/ # axios.js (ตั้งค่า BaseURL ชี้ไปที่ Backend)
│ │ ├── components/ # UI Components เช่น Layout.jsx, Timeline
│ │ ├── context/ # AuthContext.jsx
│ │ ├── pages/ # หน้าเว็บทั้งหมด เช่น AdminDashboard, CheckinPage
│ │ └── index.css # ไฟล์ CSS หลัก (Tailwind)
│ └── package.json
└── database/
└── bou_schema.sql # โครงสร้างตารางฐานข้อมูลล่าสุด5. คู่มือการแก้ไขโค้ดและ Deploy
- Frontend:
- เมื่อทำการแก้ไขไฟล์ในโฟลเดอร์
frontend/src/ต้องสั่ง Build ทุกครั้ง - คำสั่ง:
cd frontend && npm run build - ระบบจะ Build ไฟล์ไปลง
dist/หรือถูกเรียกใช้งานผ่าน Server
- เมื่อทำการแก้ไขไฟล์ในโฟลเดอร์
- Backend:
- หากแก้ไฟล์ในฝั่ง
backend/ต้องรีสตาร์ทเซิร์ฟเวอร์ - สามารถสั่งรีสตาร์ทด้วยคำสั่ง
echo restart > backend/tmp/restart.txtหรือ restart node process
- หากแก้ไฟล์ในฝั่ง
- Database:
- ใช้
mysql2/promiseเป็นหลัก - ระวังเรื่องพอร์ตและการเชื่อมต่อ สามารถเช็คค่าจาก
backend/config/db.js
- ใช้
6. ข้อพึงระวังสำหรับ AI (Critical Instructions)
- หากแก้ UI ให้พิจารณาเรื่อง Responsive ด้วยคลาส Tailwind (เช่น
sm:flex-row,md:col-span-2) - โทนสีหลักของระบบเน้น Glassmorphism (
glassclass), สีฟ้า/น้ำเงิน (Blue/Brand) และมีการเล่น Gradient เพื่อความสวยงาม - เมื่อผู้ใช้ร้องขอให้เพิ่มระบบใดๆ ต้องเช็ค
usersschema ก่อนเสมอว่ามีฟิลด์รองรับหรือไม่ - หากแก้ไขหน้าใดๆ บน Frontend ต้องรัน
npm run buildเสมอ เพื่อให้การเปลี่ยนแปลงแสดงผลบน Production (bonusais.com)