รายละเอียดทั้งหมด
Master Prompt: สร้างระบบห้องเรียนออนไลน์ (Online Classroom System)
1. เป้าหมายหลัก
สร้างเว็บแอปพลิเคชัน "ระบบห้องเรียนออนไลน์" ที่สมบูรณ์แบบ โดยใช้ Google Apps Script (HTML/JavaScript) เป็น Frontend และใช้ Google Sheets กับ Google Drive เป็น Backend ทั้งระบบต้องทำงานในไฟล์เดียว (code.gs และ index.html)
2. เทคโนโลยี
Backend: code.gs (Google Apps Script)
Frontend: index.html (ใช้ HTML, Tailwind CSS, และ JavaScript)
ฐานข้อมูล: Google Sheets (ไฟล์ ID: 1PRFtLT0ytw2kbwhVjtdSDBSiuz8QTZV_GUa44FjXUFU)
ที่เก็บไฟล์: Google Drive (โฟลเดอร์หลัก ID: 1q9KOq-fyNByg6f5SUxqqItJh5eupIlWC)
3. บทบาทผู้ใช้งาน (User Roles)
ระบบต้องมีผู้ใช้ 3 ประเภท:
ผู้ดูแลระบบ (Admin): เข้าสู่ระบบด้วยรหัสผ่าน (admin123) มีสิทธิ์สูงสุดเท่าครูผู้สอน
ครูผู้สอน (Teacher): เข้าสู่ระบบด้วยรหัสผ่าน (teacher123) มีสิทธิ์จัดการเนื้อหาและผู้ใช้
นักเรียน (Student): ไม่ต้องใช้รหัสผ่าน แต่ชื่อผู้ใช้ต้องมีอยู่ในชีต users เท่านั้น
4. ฐานข้อมูล (Google Sheets)
ระบบต้องสร้างและจัดการชีตต่อไปนี้โดยอัตโนมัติ:
users: เก็บ id, name, grade, lastLogin
assignments: เก็บ fileId, worksheetName, studentName, timestamp, fileUrl, status, score, comments
exams: เก็บ examId, title, duration, startTime, endTime, status, type (internal/external), url
questions: เก็บ questionId, examId, questionText, optionA, optionB, optionC, optionD, correctAnswer
exam_scores: เก็บ scoreId, studentName, examId, score, totalQuestions, submittedAt
ชีตสำหรับ Log ไฟล์: สร้างชีตตามชื่อเมนู (เช่น teaching-media) เพื่อเก็บ Log การอัปโหลดไฟล์ของครู
5. Backend (code.gs)
ต้องมีฟังก์ชันดังนี้:
doGet(e): สำหรับแสดงผลไฟล์ index.html
File Management:
uploadFileToGoogleDrive(data): รับไฟล์ Base64, บันทึกลง Drive ตามโครงสร้าง:
ครูอัปโหลด: [Section Name]/[Teacher Name]/[file]
นักเรียนส่งงาน: [Worksheet Section]/งานที่ส่งแล้ว/[Student Name]/[file]
getFolderContents(data): ดึงรายการไฟล์จากโฟลเดอร์ของครู (สำหรับแสดงให้นักเรียน)
deleteFileFromDrive(fileId): ลบไฟล์
User Management: loadUsers(), saveUser(userData), deleteUser(userId)
Assignment Management: loadAssignments(), gradeAssignment(data)
Exam Management:
getExams(), saveExamSettings(settings)
getQuestions(examId), saveQuestion(qData), deleteQuestion(qId)
uploadQuestionsFromTemplate(data): สำหรับอัปโหลดไฟล์ CSV
Student Functions:
getExamForStudent(examId): ดึงข้อสอบแบบสุ่มและไม่มีเฉลย
submitExam(submission): รับคำตอบ, ตรวจสอบ, และบันทึกคะแนนลงชีต exam_scores
getMyExamScores(studentName)
6. Frontend (index.html)
6.1 การออกแบบโดยรวม
ใช้ Tailwind CSS, Font 'Sarabun', และ Font Awesome
ดีไซน์แบบ Glass Card (พื้นหลังโปร่งแสง)
มี Sidebar Navigation และ Main Content Area
มี Footer แสดงข้อความลิขสิทธิ์
6.2 หน้า Login
เลือกโหมด (Admin, Teacher, Student)
แสดง/ซ่อน ช่องรหัสผ่านตามโหมด (นักเรียนไม่ต้องใช้)
ตรวจสอบสิทธิ์: Admin/Teacher (ต้องถูกรหัสผ่าน), Student (ต้องมีชื่อในชีต users)
6.3 Dashboard
Admin/Teacher: แสดงการ์ดสรุป (นักเรียนทั้งหมด, รอตรวจ ฯลฯ) และกราฟสถิติ
Student: แสดงการ์ดสรุป (คะแนนรวม, งานที่ส่งแล้ว, งานที่ต้องทำ) และกราฟสถิติส่วนตัว
กิจกรรมล่าสุด: โหลดข้อมูลจาก Backend และอัปเดตอัตโนมัติ (จำลอง Real-time)
6.4 หน้าจัดการเนื้อหา (ทุกหน้า)
Admin/Teacher: มี UI สำหรับ Drag-and-Drop อัปโหลดไฟล์, มีปุ่มลบ/แก้ไขไฟล์
Student: แสดงรายการไฟล์ที่ครูอัปโหลด
Popup Viewer: ในโหมดนักเรียน เมื่อคลิกไฟล์ในหน้า "สื่อการสอน", "คำอธิบายรายวิชา" ฯลฯ ให้แสดงไฟล์ใน Popup (รองรับ PDF, Video, YouTube)
6.5 หน้าใบกิจกรรม/ใบงาน (Student)
แสดงรายการใบงาน
หากยังไม่ส่ง: แสดงปุ่ม "ส่งงาน" (เมื่อกดให้อัปโหลดไฟล์)
หากส่งแล้ว (รอตรวจ): แสดงสถานะ "ส่งแล้ว (รอตรวจ)"
หากตรวจแล้ว: แสดง "คะแนน" และ "ความคิดเห็นจากครู"
6.6 หน้าสถานะการส่งงาน
Admin/Teacher: แสดงตารางงานที่นักเรียนส่งมาทั้งหมด (ลิงก์ไฟล์งาน, ชื่อ, วันที่)
มีช่องให้ "กรอกคะแนน" และ "ความคิดเห็น"
มีปุ่ม "บันทึกคะแนน" และ "แก้ไขคะแนน"
Student: แสดงตารางสรุปงานของตัวเอง (ชื่องาน, สถานะ, คะแนน) และ "คะแนนรวมทั้งหมด"
6.7 หน้าจัดการผู้ใช้งาน (Admin/Teacher)
แสดงในหน้าต่าง Popup เต็มจอ
แสดงตารางรายชื่อผู้ใช้จากชีต users
มีปุ่ม "เพิ่มผู้ใช้งานใหม่", "แก้ไข", "ลบ"
6.8 หน้าข้อสอบ
Admin/Teacher:
แสดงรายการข้อสอบ (กลางภาค, ปลายภาค) พร้อมปุ่ม "จัดการข้อสอบ"
หน้าต่าง "จัดการข้อสอบ" ต้องมี 2 แท็บ:
ตั้งค่า: ตั้งเวลาทำ (นาที), วันที่เปิด/ปิด, สถานะ, ประเภท (ในระบบ/ลิงก์ภายนอก), และช่องกรอก URL (ถ้าเป็นลิงก์)
คลังข้อสอบ: แสดงรายการคำถาม, ปุ่ม "เพิ่มคำถาม" (เปิด Popup Form), ปุ่ม "แก้ไข"/"ลบ" คำถาม, และปุ่ม "อัปโหลดเทมเพลต" (CSV)
Student:
แสดงรายการข้อสอบ พร้อมสถานะ (ทำแล้ว/ยังไม่ถึงเวลา/หมดเวลา/เปิดให้ทำ)
ปุ่ม "เริ่มทำข้อสอบ" จะกดได้ตามเงื่อนไขเวลาและสถานะ
หน้าทำข้อสอบ (Student):
Popup เต็มจอ มีตัวนับเวลาถอยหลัง
แสดงคำถามทีละข้อ (แบบสุ่ม) พร้อมตัวเลือก 4 ข้อ
มีปุ่ม "ข้อถัดไป" / "ข้อก่อนหน้า"
เมื่อถึงข้อสุดท้าย ปุ่มเปลี่ยนเป็น "ส่งคำตอบ"
เมื่อหมดเวลาหรือกดส่ง ให้แสดงคะแนนที่ได้ทันที