รายได้นักขับ (Driver Income)
เมนู รายได้ของฉัน ใช้สำหรับดูข้อมูลรายได้ที่ backend คำนวณเสร็จแล้ว โดยหน้า UI มีหน้าที่เลือกปี, เรียก API, และ format ข้อมูลเพื่อแสดงผลเท่านั้น
แหล่งข้อมูลของหน้า
- หน้าใช้ hook
useIncomes(year) - hook นี้เรียก
GET /trip-records/my-driver-income - query param ที่ส่งขึ้นไปคือ
year - response ที่หน้าใช้จริงเป็นรายการ
Income[]
field ที่หน้าใช้จริง
| field | ความหมายในหน้า |
|---|---|
month | เดือนที่ใช้สร้างหัวข้อของการ์ด |
startDate | วันเริ่มต้นของรอบคำนวณ |
endDate | วันสิ้นสุดของรอบคำนวณ |
totalIncome | รายได้รวมของรอบนั้น |
พฤติกรรมของหน้า
ค่าเริ่มต้น
- หน้าใช้
dayjs().year()เป็นปีเริ่มต้น - เมื่อเปิดหน้า ระบบจะเรียกข้อมูลของปีปัจจุบันทันที
การกรอง
- ผู้ใช้เลือกปีผ่าน
YearFilter - เมื่อเปลี่ยนปี ระบบจะเรียก query ใหม่ด้วย key
["incomes", year]
การแสดงผล
- ชื่อเดือนถูกแปลงจาก
YYYY-MMให้เป็นชื่อเดือนภาษาไทย - ช่วงวันที่แสดงเป็นข้อความ
คำนวณระหว่างวันที่ ... totalIncomeถูก format ด้วยtoLocaleString("th-TH", { minimumFractionDigits: 2, maximumFractionDigits: 2 })
สถานะที่หน้าแสดงได้
กรณีโหลดข้อมูลไม่สำเร็จ
- หน้าแสดงข้อความจาก
pageMessages.incomeLoadError
กรณีไม่มีข้อมูล
- ถ้า query สำเร็จแต่ไม่มีรายการ
- หน้าแสดงข้อความ
ไม่มีข้อมูลรายได้สำหรับปี {selectedYear}
กรณีมีข้อมูล
- หน้า render การ์ดรายเดือนทีละใบผ่าน
IncomeCard - key ของแต่ละรายการถูกประกอบจาก
month,startDate,endDate, และindex
สิ่งที่หน้าไม่ได้ทำ
- ไม่ได้คำนวณรายได้ใหม่ใน browser
- ไม่ได้แตกยอดเป็นค่าเที่ยว, ค่า standby, หรือรายการหักใน UI นี้
- ไม่ได้ใช้ X-Ratio มาคำนวณที่หน้าโดยตรง
ถ้าตัวเลขรายได้ผิด ต้องย้อนตรวจข้อมูลต้นทางที่เกี่ยวข้องในฝั่ง operations หรือ backend calculation ไม่ใช่เริ่มจากหน้า Income อย่างเดียว
X-Ratio คืออะไร
X-Ratio เป็นตัวชี้วัดที่ไปปรากฏในฝั่ง dashboard และ report ของระบบมากกว่าในหน้า Income
- หน้า
รายได้ของฉันไม่ได้คำนวณ X-Ratio เอง - หน้า
รายได้ของฉันแสดงเฉพาะยอดtotalIncomeที่ backend สรุปมาแล้ว - หากต้องวิเคราะห์ความสัมพันธ์ระหว่างรายได้กับพฤติกรรมการขับ ควรตรวจต่อในฝั่งรายงานหรือหน้าที่เกี่ยวกับ KPI
อ้างอิงโค้ด
atp30-tos-driver/src/hooks/query/useIncome.tsatp30-tos-driver/src/views/income/index.tsxatp30-tos-driver/src/constants/errorMessages.ts