เมนู Home และสิทธิ์
หน้านี้อธิบายว่า Home screen ของ mobile ใช้เงื่อนไขอะไรในการตัดสินใจว่าเมนูไหนมองเห็นได้, shortcut ไหนใช้งานได้, และแต่ละ action จะพาไปหน้าไหน
ขอบเขต
อิงจาก:
apps/mobile/src/screens/homeScreen/index.tsxapps/mobile/src/navigation/RootNavigator.tsx
หมายเหตุ parity ของ POS Terminal
ณ 2026-06-09 POS Terminal เพิ่มเมนู ใบสั่งขาย และ ตรวจสอบใบสั่งขาย ให้ตาม mobile แล้วในรูปแบบ split panel:
- panel 1 ใช้ permission set เดียวกับ mobile (
MENU_ORDER,MENU_ORDER_REVIEW) - panel 2 โหลดรายการจาก
/ordersผ่าน service ของ terminal ที่ mirror mobileservices/orders ตรวจสอบใบสั่งขายใช้ mode เทียบเท่า mobileshipping-review:orderStatus=WAITING_PAYMENTและกรองรายการที่hasShipment === 0- panel 2 รองรับ search, status filter, refresh, และ load-more pagination
- panel 3 โหลดรายละเอียดจาก
/orders/:idและใช้OrderDetailFormเฉพาะสำหรับใบสั่งขาย แสดง customer/status/shipping type, summary ยอด/น้ำหนัก/ส่วนลด, และรายการสินค้า - panel 3 รองรับ action ลบรายการสินค้าในใบสั่งขาย
DRAFTสำหรับ owner ตาม mobile gate พร้อม PATCH totals และ refresh detail/list หลังสำเร็จ - panel 3 แสดงสิทธิ์ส่วนลดที่ใช้อยู่ (point/coupon/credit note) และลบสิทธิ์ส่วนลดได้ตาม mobile owner/status gate
- panel 3 รองรับการกรอกรหัสคูปองและใช้คูปองผ่าน POST
/orders/:id/couponตาม mobile coupon flow - panel 3 รองรับใช้คะแนนตาม mobile point flow: โหลดคะแนนลูกค้า, ส่ง/ยืนยัน OTP จากเบอร์ลูกค้า, กรอกยอดเงินที่ใช้คะแนน และ POST
/orders/:id/point - panel 3 รองรับใช้ส่วนลดเครดิตตาม mobile credit note discount flow: โหลด credit note ของลูกค้า, validate ยอดตาม company ของ order, ใช้ credit note, ส่ง OTP, และ confirm OTP
- panel 3 รองรับพิมพ์เอกสารใบสั่งขายผ่าน shared print templates: ใบจัดหน้าร้าน, ใบเบิกไม่มี Lots, และใบเบิกมี Lots โดยบันทึก remark, ขยับ
DRAFTเป็นNEW, refresh detail/list, และบันทึก print log - panel 3 รองรับ core payment flow ตาม mobile
OrderPayment: โหลดใบแจ้งหนี้ของ order, guard prefix ซ้ำ, เลือก CASH/TRANSFER/QR, สร้าง QR Payment preview, validate เงินสด, และ POST/payment - panel 3 รองรับ payment invoice actions เพิ่มเติม: พิมพ์ใบแจ้งหนี้รายใบ และ retry ส่งข้อมูลใบแจ้งหนี้ใหม่ตาม mobile payment screen
- panel 3 รองรับแนบสลิปโอนเงินและแชร์ QR Payment: upload slip ไป
/orders/:orderNo/files, ส่งslipPathใน payment payload, และแชร์ QR ด้วย native share sheet - panel 3 รองรับเพิ่ม/แก้ไขรายการสินค้าใน order
DRAFTสำหรับ owner ผ่าน product picker ของ terminal และ endpointPOST/PATCH /orders/:id/items - invoice detail รองรับ duplicate invoice/order flow ตาม mobile: เปิดใบสั่งขายจากใบแจ้งหนี้, เลือก
vehicleRelease/documentMoveเมื่อเป็นสาขาย่อย, replay สินค้าจาก invoice พร้อม progress overlay รายขั้นตอน/รายสินค้า, และเปิด order detail ที่สร้างใหม่
ส่วน order detail/action หลักของ mobile ถูกยกเข้ารูปแบบ split panel แล้ว
ณ 2026-06-09 POS Terminal เพิ่มเมนู จัดการที่อยู่ลูกค้า ให้ตาม mobile แล้ว:
- panel 1 ใช้ permission set เดียวกับ
การจัดการลูกค้า(MENU_CUSTOMER_MANAGEMENT) - panel 2 โหลดรายการจาก
/customer-draft/address-lat-lngพร้อม search, refresh, และ load-more pagination - panel 3 โหลด
/customer-draft/address-lat-lng/:idและแสดงข้อมูลคำขอ, ที่อยู่เดิม, เส้นทาง, พิกัดเก่า/ใหม่ พร้อม Google Map preview ของพิกัดเก่า/ใหม่ใน split panel - คำขอที่ status
PENDINGแสดง actionอนุมัติและไม่อนุมัติโดยยิง endpoint/approveและ/rejectตาม mobile
ณ 2026-06-09 POS Terminal ปรับเมนู เปิด/ปิด สถานะลูกค้า ให้ตาม mobile request mode แล้ว:
- panel 1 ใช้ permission set เดียวกับ mobile (
MENU_CAN_ACTIVE_CUSTOMER) - panel 2 โหลดรายการลูกค้าจาก
/customersด้วยisRequest=1ผ่าน customer service เดียวกับ mobile customer list พร้อม search, route filter, shipping type filter (สายส่ง/หน้าร้าน), refresh, และ load-more pagination - panel 3 โหลด customer detail ล่าสุด แล้วแสดงข้อมูลคำขอเปลี่ยนสถานะ พร้อม action
อนุมัติคำขอและปฏิเสธคำขอ - action ยิง PATCH
/customers/:customerCode/approveหรือ/customers/:customerCode/rejectตาม mobile และหลังสำเร็จจะ refresh list แล้วปิด detail กลับไปหน้า list - route filter โหลดตัวเลือกจาก
getRoutesByBranchด้วย branch code ปัจจุบัน และส่งrouteCodeเข้า/customersเหมือน mobile
ณ 2026-06-09 POS Terminal ปรับเมนู สินค้า ให้ตาม mobile product inventory list แล้ว:
- panel 1 ใช้ permission set เดียวกับ mobile (
MENU_PRODUCT) - panel 2 โหลด inventory snapshot ตามสาขาจาก Firestore service ของ terminal แทน generic MST
/products - panel 2 รองรับ search, refresh, load-more pagination, tab
ทั้งหมด/ติดจอง, และ card สีตาม product color พร้อมตัวเลขราคา, SAP, POS, จอง - panel 3 โหลดรายละเอียดสินค้าจาก inventory snapshot ล่าสุด และแสดงข้อมูล stock, คลัง, หน่วยขาย, น้ำหนัก/หน่วย, คุมน้ำหนัก, บริษัท และ step price เมื่อมี
- panel 3 รองรับ action เพิ่มสินค้าเข้าใบสั่งขายจาก mobile
ProductDetail: กรอกจำนวน/ราคา/น้ำหนัก, เลือกลูกค้าผ่าน customer picker modesalesOrder, สร้าง order draft, เพิ่ม item, ปรับ totals, และเปิด order detail ที่สร้างใหม่
ณ 2026-06-09 POS Terminal ปรับเมนู ลดหนี้ / คืนสินค้า ให้ตาม mobile credit note list/detail มากขึ้นแล้ว:
- panel 1 ใช้ permission set เดียวกับ mobile (
MENU_CREDIT_NOTE) - panel 2 โหลดรายการจาก
/credit-notesพร้อม search, status filter, return-only filter, refresh, และ load-more pagination - panel 3 โหลด
/credit-notes/:idและแสดง header/status, invoice/customer/reason/warehouse/totals, รูปแนบ, และรายการสินค้า/Location/Lot - panel 3 รองรับ action บันทึกสถานะ, ส่ง B1, ลบรายการสินค้า, และลบรูปแนบตาม mobile permission/status gate
- panel 3 รองรับ upload image, update item modal สำหรับรายการเดิม, และ edit location/lot picker ตาม mobile credit note detail
- invoice detail รองรับ
เปิดใบคืนสินค้า: เปิด draft credit note จาก invoice, เลือกเหตุผล, เพิ่ม item ใหม่จาก invoice picker, POST/credit-notes, POST/items, แล้วเปิด detail/list ล่าสุดใน split panel
ณ 2026-06-09 POS Terminal เริ่มปรับเมนู ย้ายสินค้าระหว่างคลัง ให้ตาม mobile transfer warehouse แล้ว:
- panel 1 ใช้ permission set เดียวกับ mobile stock menu (
MENU_STOCK) - panel 2 โหลดรายการจาก
/transfer-branchesผ่าน service เฉพาะของ terminal พร้อม branch context เดียวกับ mobile - panel 3 โหลด
/transfer-branches/:idและแสดงเลขที่, คลังต้นทาง/ปลายทาง, บริษัท, ผู้บันทึก, หมายเหตุ, จำนวนรวม และรายการสินค้า/Batch - panel 3 รองรับ action ส่งเข้า B1 ผ่าน
/transfer-branches/:id/to-b1และลบรายการสินค้าผ่าน DELETE/items/:itemId - panel 3 รองรับสร้าง/แก้ไขใบย้ายสินค้าแบบ terminal: เปิด draft จากปุ่มบวก, เลือกคลังปลายทาง, บันทึก header ผ่าน POST/PATCH
/transfer-branches, เพิ่ม/แก้รายการสินค้า, เลือก Batch, และบันทึก item ผ่าน POST/PATCH/items - stock menu หลักที่ mobile อัปเดตเพิ่มแล้วถูกยกเข้า terminal แล้ว เหลือ follow-up เฉพาะ validation/UX รายละเอียด Batch เชิงลึกที่ต้องทดสอบกับข้อมูลจริง
ณ 2026-06-09 POS Terminal ปรับเมนู รับสินค้าเข้าตรง ให้ตาม mobile goods receipt มากขึ้นแล้ว:
- panel 1 ใช้ permission set เดียวกับ mobile stock menu (
MENU_STOCK) - panel 2 โหลดรายการจาก
/goods-receipt-poผ่าน service เฉพาะของ terminal พร้อม branch context และ dedupe key แบบ mobile - panel 3 ใช้
GoodsReceiptDetailFormแสดงเลขที่, วันที่, พนักงาน, หมายเหตุ, จำนวนรวม Batch และรายการสินค้า/Lot - panel 3 รองรับเพิ่มสินค้าใหม่จาก inventory picker พร้อม dummy product ตาม company, แก้หมายเหตุรายการ, เพิ่ม/แก้/ลบ Batch, คำนวณจำนวนรับจากยอด Batch และลบสินค้าใหม่ก่อน submit
- panel 3 Batch editor รองรับ date picker สำหรับ
วันที่รับเข้า,วันที่ผลิต, และวันหมดอายุเหมือน mobileBatchLotEditorModal - panel 3 validate จำนวนสินค้า/Batch และ submit payload ไป
POST /stock-inตาม mobilecreateGoodsReceiptStockInแล้ว refresh list หลังบันทึก - Batch date picker parity ของ stock receipt/transfer หลักถูกยกเข้า terminal แล้ว เหลือ follow-up เฉพาะ UX รายละเอียด Batch เชิงลึกที่ต้องทดสอบกับข้อมูลจริง
ณ 2026-06-09 POS Terminal ปรับเมนู โอนสินค้าไปสาขา ให้ตาม mobile transfer out มากขึ้นแล้ว:
- panel 1 ใช้ permission set เดียวกับ mobile stock menu (
MENU_STOCK) - panel 2 โหลดรายการจาก
/transfers-outผ่าน service เฉพาะของ terminal พร้อม whGrpCode context และ dedupe key แบบ mobile - panel 3 ใช้
TransferOutDetailFormแสดงเลขที่, วันที่, ต้นทาง/ปลายทาง, พนักงาน, หมายเหตุ, ยอด Batch ที่เลือก และรายการสินค้า - panel 3 รองรับเลือก Batch จาก lot API ตามสินค้า/คลัง/company, ค้นหา Batch, แก้จำนวน, ลบ Batch, ตรวจยอดค้างเบิก และป้องกันเลือก Batch ซ้ำหรือเกินยอดคงเหลือ
- panel 3 Batch editor รองรับ date picker สำหรับ
วันที่รับเข้า,วันที่ผลิต, และวันหมดอายุเหมือน mobileBatchLotEditorModal - panel 3 validate ให้ทุก line เลือก Batch ครบตามจำนวนเบิก แล้ว submit payload ไป
POST /transfer-outตาม mobilecreateTransferOutพร้อม refresh list หลังบันทึก - follow-up ที่เหลือคือการทดสอบ UX รายละเอียด Batch กับข้อมูลจริง
ณ 2026-06-09 POS Terminal ปรับเมนู รับสินค้าจากสาขา ให้ตาม mobile transfer in มากขึ้นแล้ว:
- panel 1 ใช้ permission set เดียวกับ mobile stock menu (
MENU_STOCK) - panel 2 โหลดรายการจาก
/transfers-inผ่าน service เฉพาะของ terminal โดยรวมคลังหลักและNF-tab แบบ mobile แล้ว dedupe ใน list เดียวตามรูปแบบ terminal - panel 3 ใช้
TransferInDetailFormแสดงเลขที่, วันที่, สาขาต้นทาง, พนักงาน, หมายเหตุ, จำนวนรวม Batch และรายการสินค้า - panel 3 รองรับเพิ่มสินค้าใหม่จาก inventory picker พร้อม dummy product ตาม company, auto batch สำหรับ dummy, แก้หมายเหตุรายการ, เลือก Batch จาก lot API, แก้/ลบ Batch, sync จำนวนรับจากยอด Batch และลบสินค้าใหม่ก่อน submit
- panel 3 Batch editor รองรับ date picker สำหรับ
วันที่รับเข้า,วันที่ผลิต, และวันหมดอายุเหมือน mobileBatchLotEditorModal - panel 3 validate จำนวนสินค้า แล้ว submit payload ไป
POST /transfer-inตาม mobilecreateTransferInพร้อม refresh list หลังบันทึก - stock menu หลักที่ mobile อัปเดตเพิ่มแล้วถูกยกเข้า terminal แล้ว เหลือ follow-up เฉพาะการทดสอบ UX รายละเอียด Batch กับข้อมูลจริง
ณ 2026-06-09 ตรวจ permission gate ของ stock menu เทียบ mobile แล้ว:
- terminal มีเมนู Home ครบชุดเดียวกับ mobile (
การขาย,คลังสินค้า,ข้อมูล,อื่นๆ) - ปรับ
canAccessMenuให้ stock menu ทั้ง 4 รายการ (รับสินค้าเข้าตรง,โอนสินค้าไปสาขา,รับสินค้าจากสาขา,ย้ายสินค้าระหว่างคลัง) เปิดให้สาขาย่อยได้ด้วยเงื่อนไขbranch.isMain === falseเหมือน mobile ที่ใช้isNonMainBranch || MENU_STOCK.has(deptCode) - เมนูที่ต้องเป็นสาขาหลักยังคง gate เดิม:
ใบจัดสินค้าสายส่ง,ขนส่ง,บิลน้ำมัน
ณ 2026-06-09 POS Terminal ปรับเมนู ลูกค้า ให้ตาม mobile customer list/detail มากขึ้นแล้ว:
- panel 2 โหลดรายการลูกค้าผ่าน
getCustomerSapListservice เดียวกับ mobile customer list แทน generic API call เดิม - panel 3 โหลดรายละเอียดผ่าน
/customers/:idด้วยgetCustomerSplitDetailแล้วใช้CustomerDetailFormแสดงข้อมูลลูกค้าหลัก, ประเภทจัดส่ง, tier, เครดิต, คะแนน, ที่อยู่, เส้นทาง และสาขาที่เกี่ยวข้อง - panel 3 รองรับ action จาก mobile customer detail แล้ว: บันทึก call log และเปิด dialer (
/customers/:id/re-call), ขอเปิด/ปิดสถานะลูกค้า (/customers/:code/status), เปิด Google Maps จากพิกัดที่อยู่, ตั้งที่อยู่จัดส่งเริ่มต้น (/addresses/:addressId/default), และส่งคำขออัปเดตพิกัดที่อยู่ (/customer-draft/address-lat-lng) โดย reload detail หลัง action สำเร็จ - panel 3 รองรับฟอร์ม
เพิ่มที่อยู่แบบ bypass จาก mobileCustomerDetail: เลือกBillTo/ShipTo, กรอกที่อยู่, ค้นหาตำบล/อำเภอ/จังหวัด/รหัสไปรษณีย์จากdbAddress, เลือกสายส่งจาก/routes?branchCode=..., ดึงพิกัดจากอุปกรณ์, เลือกพิกัดผ่าน WebView Google Maps picker, แล้ว PATCH/customers/:code/addresses - customer profile action หลักจาก mobile
CustomerDetailถูกยกเข้า terminal split panel แล้ว; รอบ audit ถัดไปควรตรวจเมนูอื่นหรือรายละเอียด UX เฉพาะจุดที่ mobile อัปเดตเพิ่มหลังชุดลูกค้า
ณ 2026-06-09 POS Terminal ปรับเมนู การจัดการลูกค้า ให้ตาม mobile customer management detail มากขึ้นแล้ว:
- panel 2 โหลด draft ผ่าน
getCustomerDraftsservice เฉพาะเดียวกับ mobile แทน generic/customer-draftcall เดิม - panel 3 โหลด
/customer-draft/:id,/addresses, และ/branchesด้วยgetCustomerManagementSplitDetail - panel 3 ใช้
CustomerManagementDetailFormแสดงข้อมูล draft, ที่อยู่, สาขาที่เปิดบิลได้ และรองรับ actionอนุมัติข้อมูล/ไม่อนุมัติด้วย endpoint/approveและ/rejectตาม mobile - action approve/reject ใช้ gate เดียวกับ mobile (
isAdmin,approveCustomer, หรือ dept 7/29) - panel 3 รองรับแก้ไข core draft fields แล้ว (
ชื่อ,นามสกุล,ฉายา,Tax ID,วันเกิด,เบอร์โทร,อีเมล,shippingType,ผู้รับผิดชอบ,สาขาหลัก,ประเภทลูกค้า,รู้จักเราจาก) ผ่าน PATCH/customer-draft/:idและ reload detail/list หลังบันทึก - panel 3 รองรับ address child CRUD ผ่าน POST/PATCH/DELETE
/customer-draft/:id/addressesและ branch child CRUD ผ่าน POST/DELETE/customer-draft/:id/branches; การลบสาขาใช้ guard ต้องเหลืออย่างน้อย 1 สาขาเหมือน mobile - panel 2 มีปุ่มสร้าง draft ลูกค้าใหม่ เปิด panel 3 แบบ draft, prefill user/branch ปัจจุบัน, validate core required fields ตาม mobile, POST
/customer-draft, สร้าง branch child ตั้งต้น แล้วเปิด detail ที่ server สร้างกลับมา - panel 3 ใช้ picker แบบ mobile สำหรับ
ประเภทลูกค้าผ่าน/customer-types,รู้จักเราจากผ่าน/knowus, และสายส่งใน address editor ผ่าน/routes?branchCode=... - panel 3 address editor รองรับค้นหาตำบล/อำเภอ/จังหวัด/รหัสไปรษณีย์จาก
dbAddressแบบ mobile และเติมU_BFP_Tambon,U_BFP_Amphur,city,zipCode,blockอัตโนมัติ - panel 3 address editor รองรับ
ดึงพิกัดจากอุปกรณ์ด้วยreact-native-geolocation-serviceและเติมU_BFP_Latitude/U_BFP_Longitudeลง address payload - panel 3 address editor รองรับ
เลือกจากแผนที่ด้วย WebView Google Maps picker, drag/click/search ตำแหน่ง และเติมU_BFP_Latitude/U_BFP_Longitudeเมื่อกดใช้พิกัดนี้ CustomerManagementEditparity หลักของ draft create/edit, address/branch child CRUD, master-data picker, address search และ map/GPS picker ถูกยกเข้า terminal split panel แล้ว
ณ 2026-06-09 POS Terminal ปรับเมนู ผู้ใช้ทั้งหมด ให้ตาม mobile employee list/detail แล้ว:
- panel 1 ใช้ permission set เดียวกับ mobile (
MENU_EMPLOYEE) - panel 2 โหลดรายชื่อผู้ใช้จาก
/usersพร้อม search, refresh, และ load-more pagination - panel 2 card แสดงชื่อผู้ใช้, อีเมล, และแผนก ตาม mobile
EmployeeListCard - panel 3 โหลด
/users/:idและแสดงข้อมูลพื้นฐานกับ permission flags - panel 3 รองรับการแก้ไข permission flags และบันทึกกลับ
/users/:idรวมถึง reset password salt endpoint ตาม mobile - panel 3 มี section
ตั้งค่ารับโอนสินค้าภายในสาขาตาม mobile: เลือกสาขา, โหลดคลังย่อย, และ toggle สิทธิ์รับโอนสินค้าภายในสาขาของพนักงาน
หน้าที่ของหน้า Home
หน้า Home ไม่ได้เป็นแค่ landing page แต่ทำหน้าที่เป็น:
- authenticated navigation hub แรกของระบบ
- permission gate ชั้นแรกของ flow ถัดไป
- จุดที่บังคับ branch-specific access
- จุด logout ของ mobile app
ข้อมูลตั้งต้นที่ใช้ตัดสินใจ
หน้า Home โหลด state จาก storage สองส่วน:
userจากgetUser()branchจากgetBranch()
แล้วคำนวณ:
deptCode = Number(user?.deptCode ?? -999)isMainBranch = branch?.isMain === true
สองค่านี้เป็นตัวตัดสินหลักของการแสดงเมนูและ shortcut แต่ตอนนี้ isMainBranch ถูกใช้กับเพียงบางเมนูเท่านั้น
ขั้นตอนการตัดสินใจ
กลุ่มเมนูหลัก
ตอนนี้ Home แสดง 4 กลุ่มหลัก:
การขายคลังสินค้าข้อมูลอื่นๆ
โมเดล permission
implementation ปัจจุบันใช้ Set<number> แบบ hard-coded สำหรับ visibility และ create-shortcut
ชุดสิทธิ์การมองเห็น
MENU_ORDERMENU_ORDER_REVIEWMENU_BOOKINGMENU_INVOICEMENU_SHIPPINGMENU_STOREFRONTMENU_BORROWMENU_STOCKMENU_PRODUCTMENU_CUSTOMERMENU_TRANSPORTMENU_CUSTOMER_MANAGEMENTMENU_CAN_ACTIVE_CUSTOMERMENU_CREDIT_NOTEMENU_EMPLOYEEMENU_DEPOSITMENU_EXPENSE
ชุดสิทธิ์ shortcut สร้างเอกสาร
CAN_CREATE_ORDERCAN_CREATE_SHIPPINGCAN_CREATE_TRANSPORTCAN_CREATE_DEPOSIT
หมายเหตุล่าสุดตามแผนก
- ตอนนี้
deptCode20ถูกใส่ไว้ในMENU_ORDER,MENU_ORDER_REVIEW,MENU_BOOKING,MENU_INVOICE,MENU_STOREFRONT,MENU_BORROW,MENU_PRODUCTและCAN_CREATE_ORDER - ในทางปฏิบัติ แผนก
20จะเห็นใบสั่งขาย,ตรวจสอบใบสั่งขาย,ใบจองราคา,ใบแจ้งหนี้,ใบจัดส่งสินค้าหน้าร้านและสินค้าและใช้ create shortcut ที่อิงCAN_CREATE_ORDERได้ ลูกค้ามีdeptCode20อยู่ในMENU_CUSTOMERแล้วเช่นกัน และตอนนี้ไม่ถูก gate ด้วยisMainBranchแล้วisMainBranchยังถูกบังคับใช้เฉพาะใบจัดส่งสินค้าสายส่ง,ขนส่งและบิลน้ำมัน
Matrix สิทธิ์
| Menu label | Visible when | ต้องเป็น main branch | Shortcut rule |
|---|---|---|---|
ใบสั่งขาย | MENU_ORDER.has(deptCode) | ไม่ต้อง | CAN_CREATE_ORDER |
ตรวจสอบใบสั่งขาย | MENU_ORDER_REVIEW.has(deptCode) | ไม่ต้อง | ไม่มี |
ใบจองราคา | MENU_BOOKING.has(deptCode) | ไม่ต้อง | CAN_CREATE_ORDER |
ใบแจ้งหนี้ | MENU_INVOICE.has(deptCode) | ไม่ต้อง | ไม่มี |
ใบจัดส่งสินค้าสายส่ง | MENU_SHIPPING.has(deptCode) | ต้องเป็น | CAN_CREATE_SHIPPING |
ใบจัดส่งสินค้าหน้าร้าน | MENU_STOREFRONT.has(deptCode) | ไม่ต้อง | ไม่มี |
ใบเบิกยืมดูปลา | MENU_BORROW.has(deptCode) | ไม่ต้อง | CAN_CREATE_ORDER |
รับสินค้าเข้าตรง | `branch.isMain === false | MENU_STOCK.has(deptCode)` | |
โอนสินค้าไปสาขา | `branch.isMain === false | MENU_STOCK.has(deptCode)` | |
รับสินค้าจากสาขา | `branch.isMain === false | MENU_STOCK.has(deptCode)` | |
ย้ายสินค้าระหว่างคลัง | `branch.isMain === false | MENU_STOCK.has(deptCode)` | |
สินค้า | MENU_PRODUCT.has(deptCode) | ไม่ต้อง | ไม่มี |
ลูกค้า | MENU_CUSTOMER.has(deptCode) | ไม่ต้อง | ไม่มี |
ขนส่ง | MENU_TRANSPORT.has(deptCode) | ต้องเป็น | CAN_CREATE_TRANSPORT |
การจัดการลูกค้า | MENU_CUSTOMER_MANAGEMENT.has(deptCode) | ไม่ต้อง | ไม่มี |
จัดการที่อยู่ลูกค้า | MENU_CUSTOMER_MANAGEMENT.has(deptCode) | ไม่ต้อง | ไม่มี |
เปิด/ปิด สถานะลูกค้า | MENU_CAN_ACTIVE_CUSTOMER.has(deptCode) | ไม่ต้อง | ไม่มี |
ลดหนี้ / คืนสินค้า | MENU_CREDIT_NOTE.has(deptCode) | ไม่ต้อง | ไม่มี |
ผู้ใช้ทั้งหมด | MENU_EMPLOYEE.has(deptCode) | ไม่ต้อง | ไม่มี |
ยานพาหนะ | MENU_EMPLOYEE.has(deptCode) | ไม่ต้อง | ไม่มี |
ฝากเงิน | MENU_DEPOSIT.has(deptCode) | ไม่ต้อง | CAN_CREATE_DEPOSIT |
บิลน้ำมัน | MENU_EXPENSE.has(deptCode) | ต้องเป็น | ไม่มี |
สำหรับเมนูคลังสินค้า branch ที่ไม่ใช่ main จะ bypass deptCode check ที่ Home menu ส่วนหน้า list/detail ของเมนูคลังสินค้าไม่ได้เพิ่ม deptCode gate ของ action ที่มีอยู่; action ถูกคุมด้วยสถานะเอกสารและความครบของข้อมูลแทน
Mapping การนำทาง
เมื่อกด card หลัก
| Menu label | Navigation target |
|---|---|
ใบสั่งขาย | OrderList พร้อม { mode: 'default' } |
ตรวจสอบใบสั่งขาย | OrderList พร้อม { mode: 'shipping-review' } |
ใบจองราคา | BookingPriceList |
ใบเบิกยืมดูปลา | BorrowList |
สินค้า | ProductList |
ใบแจ้งหนี้ | InvoiceList |
ใบจัดส่งสินค้าสายส่ง | ShippingList |
ใบจัดส่งสินค้าหน้าร้าน | StorefrontList |
ขนส่ง | TransportList |
รับสินค้าเข้าตรง | GoodsReceiptList |
โอนสินค้าไปสาขา | TransferOutList |
รับสินค้าจากสาขา | TransferInList |
ย้ายสินค้าระหว่างคลัง | TransferWarehouseList |
ฝากเงิน | DepositList |
บิลน้ำมัน | ExpenseBillList |
ลดหนี้ / คืนสินค้า | CreditNoteList |
ลูกค้า | CustomerList พร้อม { mode: 'default' } |
เปิด/ปิด สถานะลูกค้า | CustomerList พร้อม { mode: 'request' } |
การจัดการลูกค้า | CustomerManagementList |
จัดการที่อยู่ลูกค้า | CustomerManagementAddressList |
ผู้ใช้ทั้งหมด | EmployeeList |
ยานพาหนะ | VehicleList |
พฤติกรรม shortcut
shortcut จะมีเฉพาะบางเมนู และจะใช้งานได้เมื่อ CAN_CREATE_* อนุญาตเท่านั้น
| Menu label | Shortcut target |
|---|---|
ใบสั่งขาย | CustomerList พร้อม { mode: 'default', origin: { screen: 'Home' } } |
ใบจองราคา | CustomerList พร้อม { mode: 'booking', origin: { screen: 'Home' } } |
ใบเบิกยืมดูปลา | CustomerList พร้อม { mode: 'borrow', origin: { screen: 'Home' } } |
ใบจัดส่งสินค้าสายส่ง | ShippingDetail พร้อม { deliveryId: null, mode: 'create' } |
ขนส่ง | TransportDetail พร้อม { transportId: null } |
ฝากเงิน | DepositDetail พร้อม { depositId: null } |
พฤติกรรมที่ควร note
- บางเมนูมองเห็นได้ แต่ไม่มี shortcut
- ตอนนี้มีเฉพาะ
ใบจัดส่งสินค้าสายส่ง,ขนส่งและบิลน้ำมันเท่านั้นที่ถูกซ่อนทั้งหมดเมื่อ branch ไม่ใช่ main branch - shortcut visibility แยกจาก card visibility ดังนั้นผู้ใช้อาจเห็นการ์ดแต่ไม่เห็น create action
- Home จะกรองเมนูในแต่ละ section ก่อน แล้วตัด section ที่ไม่มีรายการออก
- Home จะโหลด user และ branch จาก storage ใหม่ทุกครั้งที่หน้ากลับมา focus เพื่อให้ visibility ของเมนูตรงกับคลังที่เลือกล่าสุด โดยเฉพาะกรณีเปลี่ยนจากคลังรอง
isMain: falseกลับมาเป็นคลังหลักisMain: true
การออกจากระบบ
Home ส่งการ logout ผ่าน HeaderHome
เมื่อ logout:
- เรียก
clearAllStorage() - เรียก
onLogout?.() - แอปจะกลับไปยัง unauthenticated navigation state
จุดเสี่ยงด้าน maintenance
permission model ปัจจุบันกระจุกอยู่ในไฟล์ screen เดียวและกระจายอยู่หลายจุด:
MENU_SECTIONS- visibility
Sets - create-shortcut
Sets onPressnavigation mappingonShortcutPressnavigation mapping
ถ้าจะเพิ่มหรือแก้ Home menu item ให้แก้ทั้งหมดนี้พร้อมกัน:
- menu definition
- visibility rule
- shortcut rule ถ้ามี
- navigation target
- หน้า wiki นี้
- changelog ถ้า behavior เปลี่ยนอย่างมีนัยสำคัญ