สมอง SML

คลังความรู้ / หน้าจอทีละจอ

#screens#pos

พื้นที่ทำงาน POS: จอขายแคชเชียร์ (PosDemoWorkspace)

หน้า "ขายหน้าร้าน" ที่เปิดจาก URL /pos ภายในเว็บ SML Ai Account ตัวจอเป็นเปลือก (shell) ที่ฝังแอปแคชเชียร์ Flutter Web ไว้ใน iframe และมีแถบสลับไปหน้าตั้งค่า POS ของระบบบัญชี หน้านี้อยู่คนละกลุ่มกับเมนู ERP ไม่มีรหัสเมนู 4 หลักและไม่ผ่าน screenRegistry (ทะเบียนหน้าจอและโครงเมนู (Screen registry & smlMenu))

วิธีเปิด

แถบควบคุมด้านบน (:116-262)

ปุ่ม ทำอะไร
กลับหน้าหลัก SML Account ลิงก์ไป /home
จุดขายแคชเชียร์ (Flutter POS) แสดงแอปแคชเชียร์ (viewMode = cashier)
สูตรโปรโมชั่น POS (Dede 10 รูปแบบ) แสดงหน้าตั้งค่า แท็บ promotions
กำหนดค่าเริ่มต้น POS แสดงหน้าตั้งค่า แท็บ startup
รหัสเครื่อง POS แสดงหน้าตั้งค่า แท็บ machines
แถบสถานะเสียง คลิกเพื่อทดสอบเสียงเอฟเฟกต์และเสียงพูดไทย
Desktop (เต็มจอ) / Tablet (1024x768) / Mobile (412x840) เปลี่ยนขนาดกรอบแอปแคชเชียร์เพื่อดูตัวอย่างหลายอุปกรณ์

เมื่ออยู่โหมดตั้งค่า ปุ่มมุมขวาแสดงข้อความ "เชื่อมฐานข้อมูล SML Ai Account (PostgreSQL ↔ ObjectBox POS)" แทนตัวเลือกขนาดจอ (:262)

โหมดแคชเชียร์

โหมดตั้งค่า

ฝังจอ ตั้งค่าและควบคุมระบบขายหน้าร้าน POS (PosSetupAndControlScreen) (PosSetupAndControlScreen) ใน main โดยส่ง menuKey, menuCode, title เองตามแท็บที่กด (:271-300)

  • promotions -> pos_promotion_formula, machines -> menu_config_pos_machine, นอกนั้น -> menu_config_pos_startup
  • รหัสเมนูที่ส่งเป็นรหัสแบบจุดรุ่นเก่า ("2.1.14", "1.1.21", "1.1.20") ซึ่งไม่ตรงรหัส 4 หลักในเมนูปัจจุบัน (เช่น เครื่อง POS คือ 1017) เป็นแค่ป้ายแสดงมุมจอ ไม่กระทบสิทธิ์
  • ปุ่ม ปิดหน้าจอ ในจอตั้งค่าสลับกลับโหมดแคชเชียร์ (onClose, :293)
  • ใช้ key={configTab} จอตั้งค่าจึงรีเซ็ตทุกครั้งที่สลับแท็บ
  • แท็บโปรโมชั่นเปิดได้เฉพาะทางนี้ เพราะเมนูรหัส 2015 ใน ERP ใช้จอ master-detail (หน้าจอข้อมูลหลัก + ตารางย่อย (MasterDetailScreen))

ระบบเสียง (:31-115)

  • หน้าต่างหลักฟังข้อความ postMessage ที่มี source = "BC_POS_AUDIO" จากแอป POS: ชนิด speak/speech แสดง "พูดไทย: ..." ส่วนเสียงกดแสดง "เสียงกด (<ชนิด>): ..." และกะพริบ 1.4 วินาที
  • ปุ่มทดสอบ เรียก bcPosAudio.play("promo","test") กับ speak("ระบบขายหน้าร้าน เอสเอ็มแอล เอไอ พีโอเอส พร้อมใช้งาน", true) ในแอป ถ้าเข้าไม่ถึง iframe จะใช้ speechSynthesis ของเบราว์เซอร์ (ภาษา th-TH) แทน
  • ไฟล์เสียงที่ตั้งได้อยู่ที่เมนู 1051 ใน ตั้งค่าและควบคุมระบบขายหน้าร้าน POS (PosSetupAndControlScreen)

ข้อควรระวัง

  • จอนี้ไม่ได้เรียก API เอง การขายจริงทั้งหมดอยู่ในแอป Flutter ภายใน iframe
  • ชื่อไฟล์/คอมโพเนนต์ใช้คำว่า Demo แต่ผูกเป็นหน้า /pos จริงของระบบ
  • ข้อความเสียงที่ทดสอบกำหนดตายตัวในโค้ด

ที่มาในโค้ด