จัดการนักเรียน
นักเรียนถูกผูกอยู่กับห้องเรียนผ่านระบบ Enrollment — บัญชีนักเรียน 1 คนใช้ร่วมกันทั้งโรงเรียน (รหัสนักเรียน unique เฉพาะภายในโรงเรียน) จึงสามารถ enroll ได้หลายห้องของครูคนเดียวกันหรือต่างคน บทนี้ครอบคลุม 3 วิธีในการเพิ่มนักเรียนเข้าห้อง: เพิ่มเองทีละคน, นำเข้าจากไฟล์ Excel แบบ wizard 3 ขั้น และการดึงบัญชีนักเรียนที่มีอยู่แล้วในโรงเรียน
หน้านักเรียนในห้อง
กริดการ์ดนักเรียน (4-3-2-1 คอลัมน์ตามจอ) + ช่องค้นหา + 2 ปุ่มหลัก: 'เพิ่มนักเรียน' (ทีละคน) และ 'นำเข้ารายชื่อ' (จาก Excel)
หน้าตา Empty State
ห้องใหม่ที่ยังไม่เคยเพิ่มนักเรียนจะขึ้น empty state "👋 ยังไม่มีนักเรียนในห้องนี้" พร้อมปุ่ม 2 ทาง
หน้าตาเมื่อมีนักเรียนแล้ว — กริดการ์ด
นักเรียนแต่ละคนเป็นการ์ด 1 ใบในกริด 4 คอลัมน์ (responsive 4→3→2→1 ตามขนาดจอ) — แทนตารางแถวยาวๆ แบบเดิม เพื่อให้กวาดสายตาเร็วในห้องที่มี 30–50 คน
การ์ดแต่ละใบประกอบด้วย:
- Ribbon มุมซ้ายบน =
#<เลขที่>สีหมุน 6 สีตามลำดับ - ชื่อ-สกุล เด่นกลางการ์ด
- รหัสนักเรียน เป็นชิปเล็กใต้ชื่อ (ถ้ามี)
- อีเมล พร้อมไอคอน (ซ่อนถ้าเป็น synthetic email)
- Footer 3 ปุ่ม — ปุ่ม แก้ไข สีมินต์ (CTA หลัก) + ไอคอน รีเซ็ตรหัส + ไอคอน นำออกจากห้อง
การ์ดเรียงตาม studentNumber ที่ตั้งไว้ — ถ้าไม่ได้ตั้งจะ fallback เรียงตามเวลาเพิ่ม
ค้นหานักเรียนในห้อง
เหนือกริดมี ช่องค้นหา — พิมพ์ชื่อ, รหัสนักเรียน หรืออีเมล ระบบจะกรองการ์ด ทันทีขณะพิมพ์ (ไม่ต้องกด Enter, ค้นแบบ ไม่สนตัวพิมพ์ใหญ่-เล็ก)
- ช่องค้นหา มีปุ่ม × ปรากฏเมื่อมีคำพิมพ์อยู่ — กดเพื่อล้าง
- ใต้ช่องค้นหามี chip บอกจำนวน เช่น "พบ 3 คน จากทั้งหมด 42" เพื่อเช็คว่าตัวกรองทำงานถูกต้อง
- ถ้าค้นแล้วไม่เจอ จะแสดงกล่อง "ไม่พบนักเรียนที่ตรงกับคำค้นหา" พร้อมปุ่ม ล้างคำค้นหา สีชมพู
เพิ่มนักเรียนทีละคน
เหมาะกับห้องเล็ก หรือเพิ่มย้อนหลังคนเดียว — ระบบช่วย lookup บัญชีเก่าให้อัตโนมัติ
คลิก 'เพิ่มนักเรียน'
ปุ่ม เพิ่มนักเรียน สีมินต์อยู่มุมขวาบนตาราง — กดเปิด StudentFormDialog (ribbon mint สำหรับโหมดสร้าง)
กรอกฟอร์ม 5 ช่อง
- เลขที่ — ตำแหน่งในรายชื่อ (ตัวเลข) ใช้เรียงตาราง
- รหัสนักเรียน — Student Code (1-30 ตัวอักษร) ใช้เป็น username ตอน login
- คำนำหน้า — เช่น ด.ช. / นาย / น.ส. (ไม่จำเป็น)
- ชื่อ-สกุล — ชื่อเต็มที่จะแสดงในรายงาน
- อีเมล — ไม่จำเป็น ระบบจะ generate synthetic email
student-<รหัส>@s<schoolId>.students.dograde.localให้ ถ้าเว้นว่าง
ระบบ Lookup บัญชีเดิม (สำคัญมาก)
หลังพิมพ์รหัสนักเรียนแล้ว blur ออกจากช่อง ระบบจะ ค้นหาในโรงเรียนของคุณ ว่ารหัสนี้มีบัญชีอยู่แล้วไหม — เพื่อให้ครูคนถัดมาที่สอนนักเรียนเดิม (ในโรงเรียนเดียวกัน) ไม่ต้องสร้างใหม่
4 สถานะที่ระบบตอบกลับ:
- 🔵 checking — กำลังตรวจ (ปุ่ม submit disabled)
- 🟢 found — พบบัญชีในระบบ → auto-fill ชื่อ + email และ ล็อกช่อง readonly — กดบันทึกเพื่อ enroll เข้าห้องนี้
- 🟠 already-enrolled — นักเรียนคนนี้อยู่ในห้องนี้แล้ว → submit ถูก block
- 🔴 not-student — รหัสนี้มีบัญชีอยู่ แต่ไม่ใช่ role student (เช่นเป็นครู) → submit ถูก block
กดบันทึก → เห็นรหัสผ่านชั่วคราว (โหมดสร้างใหม่เท่านั้น)
ถ้าเป็น การสร้างบัญชีใหม่ (ไม่ใช่ enroll บัญชีเก่า) หลังบันทึกสำเร็จ dialog จะ ไม่ปิด — เปลี่ยนเป็น StudentCreatedPanel:
- หัวเรื่อง "สร้างบัญชีนักเรียนแล้ว" มี check_circle เขียว
- กล่องสีมินต์แสดงรหัสผ่านชั่วคราวด้วย font monospace
- ปุ่ม คัดลอก → copy ลง clipboard, Toast "คัดลอกแล้ว"
- ปุ่ม เพิ่มอีกคน รีเซ็ตฟอร์ม / ปิด ปิด dialog
แก้ไข / ลบ / รีเซ็ตรหัสผ่าน
3 action ใน footer ของการ์ดนักเรียน — ปุ่ม 'แก้ไข' (CTA) + 2 ไอคอนกลม
แก้ไขข้อมูลนักเรียน
คลิกปุ่ม แก้ไข สีมินต์ที่ footer ของการ์ด — เปิด StudentFormDialog โหมดแก้ไข (ribbon ลาเวนเดอร์) แก้ เลขที่ คำนำหน้า ชื่อ-สกุล อีเมล ได้ แต่ รหัสนักเรียนแก้ไม่ได้ (เป็น key ของบัญชี)
รีเซ็ตรหัสผ่าน
คลิกไอคอน (วงกลมสีขาว) ที่การ์ด → confirm dialog "รีเซ็ตรหัสผ่านนักเรียน?" + คำเตือนว่านักเรียนจะถูก บังคับเปลี่ยนรหัสครั้งถัดไป และ ออกจากระบบทุกอุปกรณ์ทันที
หลังยืนยัน ระบบ generate รหัสผ่านใหม่และตั้ง mustChangePassword=true — รหัสใหม่จะแสดงใน TempPasswordBanner สีมินต์ที่ขึ้นเหนือกริด
พร้อมปุ่มคัดลอก
นำนักเรียนออกจากห้อง
คลิกไอคอน (วงกลมสีขาว) ที่การ์ด → confirm "นำนักเรียนออกจากห้อง?" เป็นการลบ Enrollment (ความสัมพันธ์นักเรียน–ห้อง) ไม่ใช่ลบบัญชีนักเรียน
บัญชีนักเรียนยังอยู่ในระบบ ใช้ login ได้ และครูคนอื่นยังเพิ่มเข้าห้องของตนได้ ส่วนคะแนนเดิมที่บันทึกไว้ใน ห้องนี้ จะหายไปด้วย
นำเข้านักเรียนจาก Excel — Wizard 3 ขั้น
เหมาะกับห้องเริ่มเทอม หรือนักเรียนเยอะ — เปิดผ่านปุ่ม 'นำเข้ารายชื่อ' ที่หน้ารวมห้องเรียน
ขั้นที่ 1 — เลือกไฟล์
กลับไปที่หน้ารวมห้องเรียน (คลิก ห้องเรียนของฉัน ที่มุมขวาบน) → คลิกปุ่ม นำเข้ารายชื่อ ที่ toolbar บนกริดห้องเรียน
Drop ไฟล์ลง drag-drop zone หรือคลิกเลือก — รองรับ .xlsx, .xls, .csv ขนาด ≤ 5MB และ ต้องมีแถวหัวคอลัมน์
มีลิงก์ "ดาวน์โหลด template" ดึงไฟล์ Excel เปล่ามาให้ใช้เป็นต้นแบบ
คอลัมน์ที่ระบบรู้จัก (fuzzy match)
ระบบจับคู่ header กับ field โดย ไม่สนตัวพิมพ์ใหญ่-เล็ก และยอมรับหลายชื่อ:
- รหัสนักเรียน (จำเป็น) — "รหัสนักเรียน", "studentCode", "รหัส", "code", "ID"
- ชื่อ-สกุล (จำเป็น) — "ชื่อ-สกุล", "ชื่อ", "fullName", "name"
- เลขที่ — "เลขที่", "studentNumber", "no", "number"
- คำนำหน้า — "คำนำหน้า", "titlePrefix", "prefix"
- อีเมล — "อีเมล", "email" (ถ้าเว้นว่าง ระบบ synthesize ให้)
- รหัสผ่าน — "รหัสผ่าน", "password" (≥4 ตัวอักษร) — ถ้าเว้นว่าง ระบบ generate random alphanumeric ให้แต่ละคน
ขั้นที่ 2 — Preview + Column Mapping + เลือกห้อง
หลังกด ตรวจสอบไฟล์ ระบบอ่านไฟล์แล้วแสดง:
- Column Mapping Panel — บอกว่า header ในไฟล์ map ไปคอลัมน์อะไรของระบบ
- Warning — แถวที่อาจมีปัญหา (รหัสซ้ำในไฟล์, email format ผิด ฯลฯ)
- Preview Table — แสดง 10 แถวแรกเพื่อ verify ก่อนนำเข้าจริง
- Dropdown 'เลือกห้องเรียน' — เลือกว่าจะนำเข้าไปห้องไหน (จำเป็น — ถ้าไม่เลือก ปุ่มยืนยันจะ disabled)
ในตาราง preview รหัสผ่านที่ผู้ใช้กรอกจะแสดงเป็น ••••• ส่วนรหัสที่ระบบ
generate ให้จะเห็นเต็มๆ (จะถูก hash ก่อนเก็บใน DB)
ขั้นที่ 3 — ผลลัพธ์ + รหัสผ่านชั่วคราว
หลังกด ยืนยันนำเข้า N คน ระบบประมวลผลและสรุปเป็น 3 ตัวเลข:
- สร้าง — บัญชีนักเรียนใหม่ที่ระบบสร้างให้ + enroll เข้าห้อง
- ลงทะเบียน — บัญชีนักเรียนเดิมที่มีอยู่แล้ว ระบบเพียง enroll เข้าห้องใหม่
- ข้าม — แถวที่ skip (รหัสซ้ำในห้อง, format ผิด ฯลฯ)
Toast เขียว "นำเข้าเสร็จสิ้น — สร้าง [N] / ลงทะเบียน [M] / ข้าม [L]" + ลิงก์กลับหน้านักเรียนของห้องนั้น
สรุปการเพิ่มนักเรียน — เลือกวิธีไหนดี?
ทั้ง 3 วิธีนำไปสู่ผลลัพธ์เดียวกัน — เลือกจากจำนวนคนและสถานะบัญชี
| วิธี | เหมาะกับ | ความเร็ว |
|---|---|---|
| เพิ่มทีละคน (StudentFormDialog) | เพิ่มย้อนหลัง 1-2 คน, แก้รายละเอียดเป็นรายคน | ช้ามากถ้าหลายคน |
| เพิ่มทีละคน + lookup found | ดึงบัญชีเก่าที่ครูคนอื่นสร้างไว้ (เช่นเลื่อนชั้น) | เร็วเพราะ auto-fill |
| Import จาก Excel | เริ่มเทอม, ทั้งห้อง 20-50 คน | เร็วที่สุด |