ขั้นตอนเพิ่มหน้าจอใน BC
กฎข้อ 5 ของ AGENTS.md:43 บอกว่าการหาหน้าจอไล่จาก bcMenu.json ไป screenRegistry.tsx แล้วถึง Schema/Component คู่กับ backend/internal/application/process/ — โน้ตนี้ไล่ตามโค้ดจริงว่าแต่ละขั้นทำอะไร และจอแต่ละชนิดต้องแก้ไฟล์ไหนบ้าง
แผนผังเส้นทาง
bcMenu.json (menuKey = "name")
-> frontend/src/config/bcMenu.ts (กรองรุ่น, ใส่รหัสเมนู)
-> frontend/account/tabs/screenRegistry.tsx (SCREENS[menuKey])
├─ IC_MASTER_CONFIGS -> StandardMasterScreen / MasterDetailScreen
├─ TRANS_MENU_MAP -> UniversalTransScreen (mode doc | cancel | approve)
├─ createReportScreen(...) -> UniversalReportScreen
└─ จอเฉพาะ (process/POS ฯลฯ) -> component ตรง
-> backend/internal/application/process/ (บันทึก/ตรวจกฎจริง)
ขั้น 1 — เพิ่มเมนูใน bcMenu.json
- ไฟล์หลักคือ
frontend/src/config/bcMenu.jsonแต่ละโหนดมีname(เป็นmenuKeyเช่นmenu_company_profile),text(ชื่อไทย),tag,childrenและsection(หัวข้อกลุ่มเมนู ดู การจัดเมนูตาม Workflow หน้าจอยกเลิก/อนุมัติเอกสาร และ Lookup คลิกเดียว (Menu Workflow, Cancel Screens)); ชนิดของโหนดประกาศที่bcMenu.ts:12 - โหนดที่ไม่มี
childrenคือ "หน้าจอ" (leaf) removeByVersion(bcMenu.ts:44) ทิ้งโหนดที่มีtagไม่ว่างแต่ไม่มี&13&(MENU_VERSION_TAG,:36) และไม่ใช่&hide&จอที่เพิ่มจึงควรไม่มีtagหรือมี&13&- รหัสเมนู ไม่ต้องกรอกเอง:
assignMenuCodes(bcMenu.ts:101) ให้เลขสี่หลัก = หลักแรกคือลำดับหมวดหลัก + เลขลำดับ leaf สามหลักในหมวดนั้น (:111) ดังนั้นการแทรกเมนูกลางหมวดทำให้รหัสของ leaf ที่ตามหลังเลื่อนไป - มีสำเนาที่สองที่
backend/internal/application/process/bcMenu.jsonฝังเข้า binary (menu_title.go:10) เพื่อแปลงmenuKeyเป็นชื่อหัวรายงาน PDF (report_pdf.go:879) — จอที่ออกรายงานต้องเพิ่มสองที่ ตอนตรวจ (นับ leaf) สำเนาฝั่ง frontend มีmenu_setup_Allocateเกินมา 1 รายการ แปลว่าสองไฟล์ไม่ได้ซิงค์กันอัตโนมัติ - เมนูที่จำกัดเฉพาะผู้ดูแลต้องเพิ่มชื่อใน
ADMIN_ONLY_MENU_SET(bcMenu.ts:315)
ขั้น 2 — ลงทะเบียนใน tabs/screenRegistry.tsx
BASE_SCREENS(:191) เริ่มจากจอเฉพาะที่เขียนมือ แล้วเติมตามลำดับ: ทุกคีย์ของIC_MASTER_CONFIGS(:1013) → ทุกคีย์ของTRANS_MENU_MAP(:1025)registerAllMenus(:1382, เรียกที่:1421) เดินทุก leaf ของเมนู ถ้าmenuKeyยังไม่อยู่ในBASE_SCREENSจะเรียกbuildDynamicScreen(:1067) ซึ่งเช็กTRANS_MENU_MAPก่อนเสมอ (:1075) แล้วตามด้วยเงื่อนไขของจอกระบวนการ/เครื่องมือ และท้ายสุดจัดเป็นจอรายงานตามหมวดหลัก- ผลลัพธ์ส่งออกเป็น
SCREENS(:1423) และhasScreen(menuName) - เมนูกระบวนการบางตัวที่ยังไม่มีหน้าจอจริงจะได้หน้าแจ้งสถานะ ไม่ใช่จอผิดตัว (
NOT_PORTED_PROCESS_MENUSในbuildDynamicScreen) — เพิ่มจอจริงแล้วต้องเอาmenuKeyออกจากชุดนี้
ขั้น 3 — เลือก Schema ตามชนิดจอ
| ชนิดจอ | ที่ประกาศ | Component |
|---|---|---|
| Master เดี่ยว (ตารางเดียว) | IC_MASTER_CONFIGS[menuKey] ใน frontend/src/config/schemas/icMasterSchemas.ts — ชนิด MasterScreenConfig (:18) และช่อง MasterFieldDef (:4: name, label, type, colSpan 6/12, lookupTable, ...) |
StandardMasterScreen |
| Master + ตารางย่อย | MASTER_DETAIL_CONFIGS ใน masterDetailSchemas.ts:335 (ถูก spread เข้า IC_MASTER_CONFIGS ที่ icMasterSchemas.ts:1416) ใส่ detail |
MasterDetailScreen |
| ธุรกรรมเอกสาร | TRANS_MENU_MAP[menuKey] ใน frontend/account/tabs/transMenuMap.ts (mode: "doc" | "cancel" | "approve", :1) |
UniversalTransScreen (cancel/approve ส่งต่อ UniversalCancelConfirmScreen) |
| รายงาน | UniversalWorkbenchConfig ผ่าน createReportScreen — ดู มาตรฐาน Engine รายงานกลางและตัวออกแบบ JSON-First (Global Report Engine) |
UniversalReportScreen |
- การวางช่อง:
colSpan: 12เต็มบรรทัด,6ครึ่งบรรทัด (icMasterSchemas.ts:13); โครงหัวจอ/Toolbar ดู Header และ Toolbar 2 แถว ธีมการ์ด และสีพื้นหลัง Widget (EmployeeScreen Standard) ชนิดช่องกรอกดู ช่องกรอกมาตรฐานและกฎป้ายข้อความ (NumberBox, DateBox, CodeBox, LookupBox, ห้าม F1-F12) - alias ของ import:
@/components/*ชี้./account/*(tsconfig.json:46) และ@/*ชี้./src/*(:47) —@/config/schemas/...จึงเป็นfrontend/src/config/schemas/...ส่วน@/components/master/StandardMasterScreenเป็นfrontend/account/master/StandardMasterScreen.tsx
ขั้น 4 — ฝั่ง Backend (กฎข้อ 10: Frontend เป็น thin client)
AGENTS.md:51: Go backend คุม validation, transaction, เงิน/ภาษี/สต็อก/ต้นทุน/GL ส่วน Frontend แสดงผลและเรียก API- Master + ตารางย่อย:
POST …/master-detail/{action}(router.go:154) ต้องมีmenuKeyในmdSpecs(master_detail_specs.go:144) ถ้าไม่มีMasterDetailSave(master_detail.go:135) ตอบ error "ไม่รู้จักเมนู" — เพิ่ม Schema ฝั่ง frontend อย่างเดียวไม่พอ - ธุรกรรมเอกสาร:
POST …/doc/save(router.go:136) และ…/doc/cancel/…/doc/approveดู การจัดเมนูตาม Workflow หน้าจอยกเลิก/อนุมัติเอกสาร และ Lookup คลิกเดียว (Menu Workflow, Cancel Screens) - Master ที่ใช้ช่วยออกรหัส/ตรวจรหัส:
POST …/master/{action}(router.go:163) เช่นnextcode,codeleave - Master เดี่ยวใน
StandardMasterScreenอ่าน/เขียนผ่าน/query/list|limit|exec|execBatch(router.go:90-103) โดยกลุ่มexec/execBatchผ่านตัวกันสิทธิ์เขียน (queryWriteGuard) — เรื่องสิทธิ์/ความปลอดภัยของช่องทางนี้ดู เช็กลิสต์ความปลอดภัย API: ตัวตน สิทธิ์ และช่องโหว่เว็บ (Secure API Checklist)
เช็กลิสต์ก่อนบอกว่าเสร็จ
- หน้าจอธุรกรรมต้องครบส่วนหัว ตารางสินค้า GL ภาษี การชำระเงิน ข้อมูลเพิ่มเติม ตามคอลัมน์ใน
information_schema.columnsของbcdemo(กฎข้อ 8,AGENTS.md:49) ชื่อตาราง/คอลัมน์ใหม่ต้องตามกฎใน มาตรฐานตั้งชื่อ Database ตาราง และฟิลด์ PostgreSQL - ห้ามยุบตารางหลายตัวเป็นแท็บเอง/ห้ามเปลี่ยนผังเดิม (กฎข้อ 6,
AGENTS.md:44) - เพิ่มคอลัมน์/ตารางด้วย
ALTER TABLE … ADD COLUMN IF NOT EXISTS/CREATE TABLE IF NOT EXISTS(SKILL.md:28ของbc-screen-schema-deep-inspect) และอ่านเขียนข้อความไทยตามขั้นตอนใน เขียนข้อมูลไทยลง PostgreSQL ไม่ให้เป็น ???? (Thai-Safe DB Write) - ตรวจไฟล์/DB/Build จริงแล้วส่ง UAT ซ้ำเสมอ (กฎข้อ 15
AGENTS.md:56, ดู เฝ้าและตอบใบงาน IssueMate BCAIACC (wait_for_issue.py, reply-batch, คำถาม PDF))
เอกสารที่ชี้ path ผิด (ตรวจแล้ว)
AGENTS.md:43,KMS_AGENTS_RULES_FULL.md:30และbc-screen-schema-deep-inspect/SKILL.md:13เขียนfrontend/account/screenRegistry.tsx— ไฟล์ที่มีจริงคือfrontend/account/tabs/screenRegistry.tsxKMS_INDEXและAGENTS.md:21อ้างเอกสารมาตรฐานหน้าจอแยกอีกไฟล์ ซึ่งมีเนื้อหาแค่ข้อ UAT และ Workspace Isolation ไม่ใช่ขั้นตอนเพิ่มหน้าจอ จึงไม่ใช้เป็นแหล่งอ้างอิงในโน้ตนี้
ที่มา
AGENTS.md:43,:44,:49,:51,:56กฎข้อ 5, 6, 8, 10, 15docs/kms/KMS_AGENTS_RULES_FULL.md:29-31ข้อ 5.agents/skills/bc-screen-schema-deep-inspect/SKILL.md:11-13,:28- โค้ดตามรายการ
sources(ตรวจแล้วมีจริง)
ดูเพิ่ม
สารบัญมาตรฐานและกฎเหล็กของ BC Ai Account (Standards Overview) · Header และ Toolbar 2 แถว ธีมการ์ด และสีพื้นหลัง Widget (EmployeeScreen Standard) · การจัดเมนูตาม Workflow หน้าจอยกเลิก/อนุมัติเอกสาร และ Lookup คลิกเดียว (Menu Workflow, Cancel Screens) · ช่องกรอกมาตรฐานและกฎป้ายข้อความ (NumberBox, DateBox, CodeBox, LookupBox, ห้าม F1-F12) · มาตรฐาน Engine รายงานกลางและตัวออกแบบ JSON-First (Global Report Engine) · ภาพรวม Frontend ของ BC Ai Account (Frontend overview) · ภาพรวมกลุ่ม process ของ Backend (Process overview)