โปรเจ็กต์นี้เป็นระบบจองห้องประชุมและบริหารทรัพยากรห้องสำหรับองค์กร ทำงานในรูปแบบ SPA frontend + PHP API โดยออกแบบมาให้รองรับทั้งฝั่งผู้จอง ผู้อนุมัติ และผู้ดูแลระบบในชุดเดียว
ระบบนี้ช่วยให้องค์กรจัดการการจองห้องประชุมได้ตั้งแต่ต้นจนจบ ตั้งแต่การเปิดดูรายการห้อง เลือกห้องที่เหมาะกับจำนวนผู้เข้าร่วม กำหนดช่วงวันและเวลาแบบรายวัน ส่งคำขออนุมัติ ติดตามสถานะ ดูปฏิทินการใช้งานห้อง และแจ้งเตือนผู้เกี่ยวข้องผ่านหลายช่องทาง
จุดเด่นของโปรเจ็กต์นี้คือการรวมงาน 3 ส่วนไว้ด้วยกัน
- ระบบจองห้องสำหรับผู้ใช้งานทั่วไป
- ระบบอนุมัติหลายขั้นสำหรับหัวหน้า/เจ้าหน้าที่
- ระบบจัดการข้อมูลห้องและกติกาการใช้งานสำหรับผู้ดูแลระบบ
- แค็ตตาล็อกห้องประชุมพร้อมรูปภาพ รายละเอียดอาคาร เลขห้อง และจำนวนที่นั่ง
- ฟอร์มจองห้องที่ระบุหัวข้อการใช้งาน จำนวนผู้เข้าร่วม อุปกรณ์ประกอบ และหมายเหตุได้
- รองรับการจองหลายวันแบบ daily slot คือเลือกช่วงวันและใช้เวลาเดียวกันทุกวันในช่วงที่เลือก
- ตรวจสอบเวลาซ้ำของห้องอัตโนมัติก่อนบันทึกและก่อนอนุมัติ
- ปฏิทินการจองห้องสำหรับดูรายการที่อนุมัติแล้ว
- ผู้จองดู แก้ไข ยกเลิก หรือลบรายการได้ตาม policy ที่ตั้งไว้
- ผู้ดูแลจัดการข้อมูลห้อง เปิด/ปิดการใช้งาน และอัปโหลดรูปภาพประกอบได้
- แจ้งเตือนผ่าน Email, LINE และ Telegram
- ตั้งค่ากฎการอนุมัติ การแก้ไข และการยกเลิกได้จากหน้า settings
ระบบปัจจุบันใช้รูปแบบการจองหลายวันแบบรายวัน
ตัวอย่าง:
- วันที่เริ่ม
1เวลา08:00 - วันที่สิ้นสุด
10เวลา10:00
จะถูกตีความเป็น “จองทุกวันในช่วงวันที่ 1 ถึง 10 เวลา 08:00-10:00” ไม่ใช่การล็อกห้องต่อเนื่อง 24 ชั่วโมงตลอดทั้งช่วง
สำหรับฐานข้อมูลเดิมที่เคยบันทึกแบบต่อเนื่อง ระบบรองรับผ่านฟิลด์ schedule_type เพื่อรักษาความถูกต้องของข้อมูลย้อนหลัง
- ใช้ Now.js สำหรับ router, component manager, form binding, i18n และ UI manager ต่าง ๆ
- ใช้
index.htmlเป็น SPA shell หลัก - bootstrapping หลักอยู่ที่
js/main.js - หน้าใช้งานจริงอยู่ใน
templates/booking/ - route ของโมดูลจองห้องถูกลงทะเบียนใน
modules/booking/admin.js
- ใช้ Kotchasan เป็น PHP framework สำหรับ routing, request/response, model และ utility layer
- ใช้ GCMS layer สำหรับ table controller, API controller และ shared platform behavior
- business logic หลักของระบบจองห้องอยู่ใน
modules/booking/
| Entry point | หน้าที่ |
|---|---|
index.html |
SPA shell หลักของระบบ |
js/main.js |
bootstrap frontend managers, router, auth, csrf, i18n |
api.php |
จุดเข้า API หลักของแอป |
export.php |
จุดเข้างาน export/print |
line/webhook.php |
รับ LINE webhook |
load.php |
bootstrap ค่าระบบและ include framework |
โมดูลหลักของระบบจองห้อง
controllers/booking.phpโหลดและบันทึกคำขอจองcontrollers/calendar.phpส่งข้อมูลให้ปฏิทินการจองcontrollers/approvals.phpและcontrollers/review.phpดูแลฝั่งอนุมัติcontrollers/rooms.phpและcontrollers/room.phpใช้จัดการข้อมูลห้องcontrollers/settings.phpใช้กำหนดกติกาของโมดูลcontrollers/email.phpส่ง notification ไปยังผู้เกี่ยวข้องmodels/รวม query และ data shaping สำหรับ booking, review, approvals และ roomsviews/view.phpใช้ render รายละเอียดการจองสำหรับ modal และ notification
shared platform layer ของระบบ เช่น login, profile, users, settings, permissions และ integrations ระดับแพลตฟอร์ม
ใช้ช่วยจัดการ attachments และรูปภาพห้อง
route สำคัญของระบบจองห้อง
/ปฏิทินการจองห้อง/roomsแค็ตตาล็อกห้อง/bookingฟอร์มจองห้อง/my-bookingsรายการจองของผู้ใช้/approvalsคิวงานอนุมัติ/booking-reviewหน้าตรวจสอบและตัดสินคำขอ/room-managementจัดการข้อมูลห้อง/booking-settingsตั้งค่ากติกาของระบบจองห้อง/booking-categoriesจัดการหมวดหมู่การใช้งานและอุปกรณ์
- เปิดดูรายการห้องจากหน้ารวม
- ตรวจสอบรายละเอียดห้อง เช่น อาคาร เลขห้อง จำนวนที่นั่ง และรูปภาพ
- เลือกวันเริ่ม วันสิ้นสุด เวลาเริ่ม เวลาสิ้นสุด และกรอกรายละเอียดการใช้งาน
- ระบบตรวจเวลาซ้ำก่อนบันทึก
- ติดตามสถานะได้จากหน้า My bookings
- เปิดหน้า approvals เพื่อดูรายการรอตรวจสอบ
- ตรวจสอบรายละเอียดการจองจากหน้า review
- อนุมัติ ปฏิเสธ ส่งกลับให้แก้ไข หรือยกเลิกในฐานะเจ้าหน้าที่ได้
- ระบบตรวจเวลาซ้ำอีกครั้งก่อน final approve
- จัดการข้อมูลห้อง
- เปิด/ปิดการใช้งานห้อง
- อัปโหลดรูปภาพประกอบห้อง
- ตั้งค่า approval workflow, cancellation policy และ deletion policy
- การจองใหม่ต้องมีวันสิ้นสุดมากกว่าหรือเท่ากับวันเริ่มต้น
- เวลาสิ้นสุดต้องมากกว่าเวลาเริ่มต้น
- รายการใหม่ถูกบันทึกเป็น
daily-slot - ข้อมูลเก่าที่อัปเกรดมาจากระบบเดิมยังคงรองรับผ่าน
schedule_type = continuous - การยกเลิกและการแก้ไขขึ้นอยู่กับ policy ที่ตั้งในระบบ
ระบบรองรับการแจ้งเตือนผู้เกี่ยวข้องผ่าน
- LINE
- Telegram
ข้อความแจ้งเตือนจะถูกส่งทั้งไปยังผู้จอง และผู้เกี่ยวข้องตามขั้นอนุมัติหรือสถานะของรายการ
ระบบมี installer ในโฟลเดอร์ install/ สำหรับติดตั้งใหม่และอัปเกรดระบบ
- ตั้งค่าฐานข้อมูล
- import schema จาก
install/database.sql - กำหนดค่าระบบใน
settings/ - สร้าง admin account เริ่มต้น
สำหรับ deployment เดิม ควรรัน install/upgrade2.php เพื่อเพิ่มฟิลด์ schedule_type และแยกข้อมูลเก่าออกจากรายการแบบ daily slot ให้ถูกต้อง
npm run devสำหรับพัฒนา frontend ด้วย Vitenpm run buildสำหรับ build asset ทั้งชุดnpm run build:<target>สำหรับ build เฉพาะ bundle