ภาพรวมระบบ ATP30 (System Overview)
ระบบฝั่ง driver เป็น mobile-first web app ที่ route หลักทุกหน้าอยู่หลัง AuthGuard และถูกคุมด้วย PermissionGuard อีกชั้น
โครงสร้างการทำงานหลัก
Guard และ Permission
Route Guard
LoginRoutesใช้GuestGuardMainRoutesใช้AuthGuard- ทุก route หลักใน
MainRoutesถูกครอบด้วยPermissionGuard
Menu Guard
- เมนู sidebar ถูกประกาศใน
src/config/menu.config.ts - ก่อน render จริง เมนูถูกกรองด้วย
filterMenuByPermission - ถ้าผู้ใช้ไม่มี permission ของเมนูใด เมนูนั้นจะไม่แสดง
Route และสิทธิ์ที่มีจริง
| route | permission | หน้าที่ |
|---|---|---|
/home | driver-dashboard:view | หน้าแรกของ driver |
/trip-records/:id | driver-trip-record:view | ดูรายละเอียดเที่ยวรถ |
/trip-records/:id/edit | driver-trip-record:view | แก้ไขเที่ยวรถ |
/fuel-record | driver-refuel-record:view | บันทึกเติมน้ำมันหรือชาร์จไฟ |
/vehicle-log-book | driver-vehicle-record:view | บันทึกสมุดประจำรถ |
/standby-work | driver-standby-record:view | บันทึกงาน standby |
/income | driver-my-income:view | ดูรายได้ของฉัน |
Data Source ที่สำคัญ
Profile ของนักขับ
- ดึงจาก
/auth/me - จัดการผ่าน
DriverContext - หน้า home ใช้ข้อมูลนี้แสดงชื่อ, ประเภทรถ, รหัสรถ, เบอร์โทร, และพื้นที่ทำงาน
รายการเที่ยวรถหน้าแรก
- ดึงจาก
GET /driver/trip-record - filter วันที่ผ่าน query param
selectedDate - route หน้าแรกไม่ได้ดึงข้อมูลจาก billing หรือ report โดยตรง
รายได้ของฉัน
- ดึงจาก
GET /trip-records/my-driver-income - ส่ง query param
year - หน้ารายได้แสดงผลลัพธ์ที่ backend คำนวณมาแล้ว
Logic ของหน้าแรกที่สำคัญ
หน้า /home map สถานะเที่ยวรถเป็น 3 สถานะตามโค้ด:
COMPLETEDเมื่อisDraftเป็นfalsePENDINGเมื่อisDraftยังเป็นtrueแต่เวลารอบรถผ่านไปแล้วSCHEDULEDเมื่อisDraftยังเป็นtrueและยังไม่ถึงเวลารอบรถ
logic นี้ใช้ tripRecord.date และ tripRecord.routeRound.time เทียบกับเวลา current ของ dayjs()
ข้อจำกัดของบัญชีที่ login ได้
- ฝั่ง driver จะตรวจ
userTypeหลัง login - ถ้าเป็น
OFFICEระบบจะ logout และไม่ให้เข้าต่อ - ถ้าไม่ใช่
COMPANY_DRIVERหรือPARTNER_DRIVERก็จะไม่ผ่านเช่นกัน
สิ่งที่ควรรู้สำหรับคู่มือ
- เมนูที่ผู้ใช้เห็นอาจไม่ครบทุกเมนูใน config ถ้า permission ไม่ครบ
- หน้า home เป็นจุดรวมทั้งข้อมูล profile และรายการเที่ยวรถ
- route
/trip-records/:idและ/trip-records/:id/editไม่ได้อยู่ใน menu ตรง ๆ แต่เปิดจาก flow ของงานในหน้า home - หน้า income ไม่มี logic คำนวณรายได้ใน UI
อ้างอิงโค้ด
atp30-tos-driver/src/routes/LoginRoutes.tsxatp30-tos-driver/src/routes/MainRoutes.tsxatp30-tos-driver/src/config/menu.config.tsatp30-tos-driver/src/utils/filterMenuByPermission.tsatp30-tos-driver/src/views/home/index.tsxatp30-tos-driver/src/contexts/DriverContext.tsxatp30-tos-driver/src/hooks/query/useTripRecord.tsatp30-tos-driver/src/hooks/query/useIncome.tsatp30-tos-driver/src/views/authentication/jwt/AuthLogin.tsx