TechMath Edu
Menu điều hướng nhanh
Liên hệ
Facebook YouTube TikTok Zalo
Blog giáo dục · Game trong giáo dục

Game trong giáo dục

Bài viết được hiển thị với ảnh nền lấy tự động từ ảnh đầu tiên trong bài đăng Blogger, giúp trang bài viết có cảm giác cao cấp và đồng bộ với thương hiệu TechMath Edu.

Ảnh nổi bật bài viết
Ảnh nổi bật của bài viết.
TechMath Edu · Blog giáo dục

Ảnh nền nổi bật cho bài viết

Saturday, December 6, 2025

Cùng Thầy Phúc khám phá Toán 12: Học Toán thực tế - Tư duy như một chuyên gia (phiên bản lời giải)

TechMath Edu - Nền Tảng Đào Tạo Toán Học & Công Nghệ

TechMath Edu

Hệ Thống Đào Tạo Độc Quyền

Mật khẩu yêu cầu ít nhất 8 ký tự, bao gồm chữ hoa, chữ thường, số và ký tự đặc biệt (VD: @, $, !).

Bảo mật thông tin học viên 100%.

Trung Tâm Đào Tạo Tiêu Chuẩn Quốc Tế

Kiến Tạo Tương Lai
Bằng Tư Duy Toán Học

Hệ thống giáo dục số hóa 100%, bảo chứng nội dung bởi Hội đồng khoa học cấp cao. Trải nghiệm phương pháp sư phạm tiến trình độc quyền.

Khám Phá Giáo Trình
10k+
Học Viên
98%
Phản Hồi Tốt
500+
Tài Liệu
Chuẩn Sư Phạm
Đội Ngũ Học Giả

Hội Đồng Cố Vấn Khoa Học

Mỗi bài giảng đều được thẩm định bởi các chuyên gia có kinh nghiệm nhiều năm trong nền giáo dục quốc tế.

PGS. TS. Trần Văn A

Trưởng Ban Học Thuật

Tu nghiệp tại Đại học Cambridge. Chuyên gia định hướng phương pháp tư duy logic và kiểm định chất lượng nội dung.

TS. Lê Hoàng B

Cố Vấn EdTech

Tiên phong ứng dụng công nghệ phần mềm Manim và GeoGebra vào mô phỏng trực quan dữ liệu toán học.

ThS. Nguyễn Thị C

Chuyên Gia Khảo Thí

Hơn 15 năm kinh nghiệm thiết kế hệ thống đánh giá năng lực theo chuẩn IGCSE và thi Quốc gia.

Chương Trình Đào Tạo

Lộ Trình Dành Cho Học Sinh

Toán Căn Bản THCS

Xây dựng nền tảng vững chắc, trọng tâm luyện thi vào lớp 10 chuyên.

Toán Học THPT

Bứt phá điểm số, tối ưu kỹ năng giải đề nhắm thẳng mục tiêu ĐH Top đầu.

Hệ Quốc Tế (Cam)

Giáo trình chuẩn hóa 100% bằng tiếng Anh, hỗ trợ đắc lực du học.

Nghiệp Vụ Sư Phạm

Nâng cao kỹ năng giảng dạy số hóa và tương tác chuyên sâu.

Trải Nghiệm Thực Tế

Phản Hồi Từ Phụ Huynh & Học Viên

"Cháu nhà tôi trước đây rất sợ Toán. Từ ngày học trên nền tảng với lộ trình khóa từng bước chặt chẽ, cháu bắt buộc phải xem xong video mới được làm bài. Vừa qua cháu đạt 9.0 thi học kỳ."

A
Chị Mai Anh
Phụ huynh Lớp 9

"Hệ thống LMS quá chuyên nghiệp! Việc bắt buộc tải tài liệu và lưu ghi chú trước khi làm Test giúp em không bị hổng kiến thức. Đề thi Cambridge bám sát thực tế."

Đ
Tuấn Đạt
Học viên IGCSE

"Chương trình số hoá thông minh. Thay vì đọc sách nhàm chán, con tôi được tương tác với đồ hoạ động trực quan. Rất yên tâm giao phó việc học của con cho TechMath."

H
Anh Hoàng Huy
Phụ huynh Lớp 10
Kiến thức & Tài Liệu

Tin Tức Cập Nhật

Định Hướng Tương Lai

Đăng Ký Tư Vấn Lộ Trình

Để lại thông tin, chuyên viên giáo dục sẽ liên hệ phân tích năng lực và thiết kế lộ trình cá nhân hóa miễn phí.

  • Test năng lực đầu vào chuẩn Quốc tế
  • Lựa chọn giáo trình phù hợp nhất

Yêu Cầu Đóng Học Phí

Đang cập nhật...

Bài học này thuộc khu vực thu phí. Vui lòng hoàn tất thanh toán để hệ thống tự động mở khóa.

Thông tin thanh toán

Số Tài Khoản
0789363936
Ngân hàng
TECHCOMBANK
Chủ tài khoản
Cao Thanh Phúc
Nội dung chuyển khoản
SĐT + TEN HOC VIEN
Bấm vào đây để Tải Ảnh Lên
Hỗ trợ JPG, PNG, WEBP
Ảnh đã sẵn sàng. Bấm Xác Thực!

Ghi Nhận Thành Công!

Tải lên hoàn tất. Bạn có thể về Trang Chủ hoặc nán lại đây chờ Ban Quản Trị duyệt để vào lớp học.

Đang Khởi Tạo Giáo Trình

Vui lòng đợi giây lát...

Chưa Đạt Điều Kiện

Vui lòng hoàn thành các yêu cầu của Bài học trước đó để mở khóa phần này.

Tiến trình hoàn thành0%

Quản Trị Hệ Thống

Định Danh Khóa Học/Quyền Trạng thái Minh chứng phí Thao Tác

Cấu Hình Giá Học Phí

Nhập giá cho từng khóa học riêng biệt (Ví dụ: "1.200.000đ" hoặc "Liên hệ"). Để trống nếu muốn hiển thị "Liên hệ". Mức giá này sẽ xuất hiện ngay dưới tên khóa học ở màn hình chính.

Khối THCS
Khối THPT
Nghiệp Vụ Sư Phạm
Hệ Quốc Tế (Cambridge / IGCSE)
Cấu hình Mã QR Thanh Toán
Data Form từ khách hàng được lưu dự phòng tại đây.
Thời Gian Loại Người Gửi Nội Dung Thao Tác
Đang nạp...

Thiết lập Tọa độ phía trên và bấm Tải Lên Form.

${testTabContent}
`; }); }); window.safeHide('empty-course-state'); window.safeEl('sidebar-lesson-list').innerHTML = sidebarHtml; window.safeEl('lesson-content-container').innerHTML = contentHtml; // Phục hồi tiến trình đã lưu if(window.appState.user && window.appState.user.progressObj) { window.appState.allLessonKeys.forEach(lKey => { const prog = window.appState.user.progressObj[lKey]; if (prog) { for(let j=1; j<=5; j++) { if(prog[`c${j}`]) { const box = window.safeEl(`${lKey}-c${j}`); if(box) box.checked = true; } } } }); } window.appState.allLessonKeys.forEach(lKey => window.checkProgressionLocks(lKey)); window.updateProgressBar(); if(window.appState.allLessonKeys.length > 0) { const firstKey = window.appState.allLessonKeys[0]; const btn1 = window.safeEl(`nav-lesson-${firstKey}`); if(btn1) btn1.classList.remove('locked'); } }; window.checkProgressionLocks = (lessonKey) => { const c1 = window.safeEl(`${lessonKey}-c1`)?.checked; const c2 = window.safeEl(`${lessonKey}-c2`)?.checked; const c3 = window.safeEl(`${lessonKey}-c3`)?.checked; const c4 = window.safeEl(`${lessonKey}-c4`)?.checked; const c5 = window.safeEl(`${lessonKey}-c5`)?.checked; const updateLock = (btnId, isUnlocked) => { const btn = window.safeEl(btnId); if(!btn) return; if(isUnlocked) { btn.classList.remove('locked'); const lockIcon = btn.querySelector('.lock-icon'); if(lockIcon) lockIcon.classList.add('hidden-view'); } else { btn.classList.add('locked'); const lockIcon = btn.querySelector('.lock-icon'); if(lockIcon) lockIcon.classList.remove('hidden-view'); } }; updateLock(`btn-${lessonKey}-info`, c1); updateLock(`btn-${lessonKey}-document`, c2); updateLock(`btn-${lessonKey}-note`, c3); updateLock(`btn-${lessonKey}-test`, c4); const btnVideo = window.safeEl(`btn-${lessonKey}-c1`); if(btnVideo && c1) { btnVideo.innerHTML = ` Đã Xong Video`; btnVideo.className = "bg-green-600 text-white px-4 py-3 md:px-8 md:py-3.5 w-full sm:w-auto text-[10px] md:text-xs rounded-lg uppercase tracking-widest font-bold shadow-[0_10px_20px_rgba(22,163,74,0.3)]"; } const btnInfo = window.safeEl(`btn-${lessonKey}-c2-info`); if(btnInfo && c2) { btnInfo.innerHTML = ` Đã Xem Xong`; btnInfo.className = "w-full sm:w-auto bg-green-600 text-white px-6 py-2.5 text-[10px] md:text-xs rounded-lg uppercase tracking-widest font-bold shadow-[0_10px_20px_rgba(22,163,74,0.3)] transition"; } const btnDoc = window.safeEl(`btn-${lessonKey}-c3-doc`); if(btnDoc && c3) { btnDoc.innerHTML = ` Đã Đọc Tài Liệu`; btnDoc.className = "w-full sm:w-auto bg-green-600 text-white px-6 py-2.5 text-[10px] md:text-xs rounded-lg uppercase tracking-widest font-bold shadow-[0_10px_20px_rgba(22,163,74,0.3)] transition"; } const d = window.appState.lessonData[lessonKey]; const hasTest = d && d.test && d.test.trim() !== ''; let isCurrentFull = c1 && c2 && c3 && c4 && (hasTest ? c5 : true); let currentIdx = window.appState.allLessonKeys.indexOf(lessonKey); if (currentIdx !== -1 && currentIdx + 1 < window.appState.allLessonKeys.length) { const nextKey = window.appState.allLessonKeys[currentIdx + 1]; const nextNavBtn = window.safeEl(`nav-lesson-${nextKey}`); if (nextNavBtn) { if (isCurrentFull) { nextNavBtn.classList.remove('locked'); const checkIcon = window.safeEl(`check-done-${lessonKey}`); if(checkIcon) checkIcon.classList.remove('hidden-view'); } else { nextNavBtn.classList.add('locked'); } } } }; window.trySwitchTab = (lessonKey, tab, requiredPrevIdx) => { const btn = window.safeEl(`btn-${lessonKey}-${tab}`); let isPrevDone = window.safeEl(`${lessonKey}-c${requiredPrevIdx}`)?.checked; if (btn && btn.classList.contains('locked') || !isPrevDone) { window.safeShow('content-lock-overlay'); setTimeout(() => window.safeHide('content-lock-overlay'), 3000); return; } document.querySelectorAll(`#content-lesson-${lessonKey} .tab-content`).forEach(el=>el.classList.add('hidden-view')); window.safeShow(`${lessonKey}-tab-${tab}`); document.querySelectorAll(`#content-lesson-${lessonKey} .tab-btn`).forEach(el=>el.classList.remove('active')); btn.classList.add('active'); }; window.autoTick = async (lessonKey, c) => { const box = window.safeEl(`${lessonKey}-c${c}`); if(box) box.checked = true; // Lưu tiến trình lên Bộ Nhớ Trình Duyệt Ngay Lập Tức if (window.appState.user) { if (!window.appState.user.progressObj) window.appState.user.progressObj = {}; if (!window.appState.user.progressObj[lessonKey]) window.appState.user.progressObj[lessonKey] = {}; window.appState.user.progressObj[lessonKey][`c${c}`] = true; } window.checkProgressionLocks(lessonKey); window.updateProgressBar(); // Lưu tiến trình lên DB ngầm if (window.appState.user && !window.appState.isAdmin && window.appState.user.uid && !window.appState.user.uid.startsWith('demo-')) { try { await updateDoc(getDocRef("students", window.appState.user.uid), { [`progressObj.${lessonKey}.c${c}`]: true }); } catch(e) {} } if(c === 1) { setTimeout(() => window.trySwitchTab(lessonKey, 'info', 1), 600); } if(c === 2) { setTimeout(() => window.trySwitchTab(lessonKey, 'document', 2), 600); } if(c === 3) { setTimeout(() => window.trySwitchTab(lessonKey, 'note', 3), 600); } if(c === 4) { const d = window.appState.lessonData[lessonKey]; if (d && d.test && d.test.trim() !== '') { setTimeout(() => window.trySwitchTab(lessonKey, 'test', 4), 600); } } }; window.saveNotes = async (lessonKey) => { const textEl = window.safeEl(`student-notes-${lessonKey}`); if(!textEl) return; const textVal = textEl.value.trim(); const now = Date.now(); window.safeEl(`note-time-${lessonKey}`).innerText = "Cập nhật: " + new Date(now).toLocaleString('vi-VN'); if(window.appState.user && !window.appState.isAdmin && !window.appState.user.uid.startsWith('demo-')) { try { await updateDoc(getDocRef("students", window.appState.user.uid), { [`notesObj.${lessonKey}`]: { content: textVal, updatedAt: now } }); } catch(e) {} } else if (window.appState.user) { if(!window.appState.user.notesObj) window.appState.user.notesObj = {}; window.appState.user.notesObj[lessonKey] = { content: textVal, updatedAt: now }; } window.autoTick(lessonKey, 4); window.showToast("Ghi chú đã được mã hóa và lưu trữ an toàn!", "success"); }; window.updateProgressBar = () => { let done = 0; let totalBoxes = window.appState.allLessonKeys.length * 5; window.appState.allLessonKeys.forEach(lKey => { const hasTest = window.appState.lessonData[lKey] && window.appState.lessonData[lKey].test && window.appState.lessonData[lKey].test.trim() !== ''; for(let j of [1,2,3,4,5]) { if(j > 3 && !hasTest) { done++; continue; } // Cộng ảo tiến trình nếu bài không có Test if(window.safeEl(`${lKey}-c${j}`)?.checked) done++; } }); if (totalBoxes === 0) totalBoxes = 10; const pct = Math.round((done/totalBoxes)*100); if(window.safeEl('progress-bar')) window.safeEl('progress-bar').style.width = pct + '%'; if(window.safeEl('progress-text')) window.safeEl('progress-text').innerText = pct + '%'; }; window.loadLessonData = async (lessonKey) => { if(!lessonKey) return; let idx = window.appState.allLessonKeys.indexOf(lessonKey); let isPremium = idx >= 2; if (lessonKey === 'payment' || isPremium) { if(!window.appState.isLoggedIn) { window.showToast("Bạn cần Đăng nhập tài khoản trước!", "warning"); window.openAuthModal(); return; } } const wall = window.safeEl('global-payment-wall'); if(lessonKey === 'payment') { document.querySelectorAll('[id^="content-lesson-"]').forEach(el => el.classList.add('hidden-view')); window.safeHide('empty-course-state'); let currentPrice = "Liên hệ"; if (window.appState.pricingConfig && window.appState.pricingConfig[`price_${window.appState.currentCourseId}`]) { currentPrice = window.appState.pricingConfig[`price_${window.appState.currentCourseId}`]; } if (window.safeEl('payment-price-display')) window.safeEl('payment-price-display').innerText = currentPrice; if(wall) wall.classList.remove('hidden-view'); window.safeHide('payment-success-msg'); window.safeShow('payment-request-state'); return; } const navBtn = window.safeEl(`nav-lesson-${lessonKey}`); if (navBtn && navBtn.classList.contains('locked')) { window.showToast("Cảnh báo: Bạn phải hoàn thành các bước học trước đó!", "error"); return; } document.querySelectorAll('[id^="content-lesson-"]').forEach(el => el.classList.add('hidden-view')); if(wall) wall.classList.add('hidden-view'); window.safeHide('payment-success-msg'); window.safeShow('payment-request-state'); document.querySelectorAll('.lesson-btn').forEach(btn => btn.classList.remove('active')); if(navBtn) navBtn.classList.add('active'); let isApproved = window.appState.isAdmin || (window.appState.user && window.appState.user.status === 'approved'); window.safeShow(`content-lesson-${lessonKey}`); window.checkProgressionLocks(lessonKey); if(isPremium && !isApproved) { let currentPrice = "Liên hệ"; if (window.appState.pricingConfig && window.appState.pricingConfig[`price_${window.appState.currentCourseId}`]) { currentPrice = window.appState.pricingConfig[`price_${window.appState.currentCourseId}`]; } if (window.safeEl('payment-price-display')) window.safeEl('payment-price-display').innerText = currentPrice; if (wall) wall.classList.remove('hidden-view'); window.safeToggle('sidebar-payment-alert', true); } else { window.safeToggle('sidebar-payment-alert', false); } }; // ================= ADMIN DASHBOARD ================= window.adminSwitchTab = (tab) => { ['students', 'consult', 'lessons', 'news', 'config', 'pricing'].forEach(t => { window.safeEl(`admin-view-${t}`).classList.toggle('hidden-view', t !== tab); const btn = window.safeEl(`admin-tab-${t}`); if (btn) { if (t === tab) { btn.className = 'px-3 md:px-6 py-2 md:py-3.5 text-navy-950 bg-gold-400 rounded-t-xl text-[9px] md:text-[11px] font-bold uppercase tracking-widest whitespace-nowrap transition'; } else { btn.className = 'px-3 md:px-6 py-2 md:py-3.5 text-gray-400 hover:text-white bg-navy-900/50 rounded-t-xl text-[9px] md:text-[11px] font-bold uppercase tracking-widest transition whitespace-nowrap border-b border-gray-800'; } } }); if(tab === 'news') window.renderAdminNewsList(); if(tab === 'consult') loadConsultations(); if(tab === 'config') window.loadExpertConfig(); if(tab === 'pricing') window.loadPricingConfig(); }; window.buildAdminCourseSelector = () => { const sel = window.safeEl('admin-course-selector'); if(!sel) return; const role = window.appState.user?.role || 'master'; const allowed = window.appState.user?.allowedCourses || []; let options = ''; if (role === 'master') { options += ` `; options += ` `; options += ` `; options += ` `; } else if (role === 'teacher') { options += ``; allowed.forEach(c => { if(COURSE_NAMES[c]) { options += ``; } }); options += ``; } sel.innerHTML = options; }; window.openAdminDashboard = async () => { if(!window.appState.user) return; window.switchView('view-admin'); const role = window.appState.user.role || 'master'; const isMaster = role === 'master'; let roleNameUI = "Giám Đốc Đào Tạo"; if (role === 'teacher') roleNameUI = "Giáo Viên Bộ Môn"; window.safeEl('admin-role-badge').innerHTML = ` Cấp Bậc: ${roleNameUI}`; window.safeToggle('admin-tab-consult', isMaster); window.safeToggle('admin-tab-pricing', isMaster); window.safeToggle('admin-tab-news', isMaster); window.safeToggle('admin-tab-config', isMaster); window.buildAdminCourseSelector(); window.adminSwitchTab('students'); const tbody = window.safeEl('admin-students-list'); tbody.innerHTML = " Đang tải dữ liệu..."; try { const snap = await getDocs(getDbRef("students")); let html = ""; window.adminStudentsData = {}; snap.forEach(doc => { const d = doc.data(); const courseCode = d.registeredCourse || ''; let canView = isMaster; if (role === 'teacher' && window.appState.user.allowedCourses) { if (window.appState.user.allowedCourses.includes(courseCode)) canView = true; } if (isMaster && d.role === 'master' && doc.id !== window.appState.user.uid) canView = false; if (!canView) return; window.adminStudentsData[doc.id] = d; let roleDisplay = COURSE_NAMES[d.registeredCourse]||d.registeredCourse; if (d.role === 'teacher') roleDisplay = ` Giáo Viên`; if (d.role === 'master') roleDisplay = ` Admin Tổng`; const statusHtml = d.status === 'approved' ? ` Học Viên` : ` Chờ Duyệt`; const receiptHtml = d.paymentProofUrl ? `` : 'Chưa nộp'; const deleteBtnHtml = isMaster ? `` : ''; html += `
${d.name}
${d.email}
${d.phone||''}
${roleDisplay} ${statusHtml}${receiptHtml} ${deleteBtnHtml} `; }); tbody.innerHTML = html || "Không có hồ sơ trong khu vực quản lý."; } catch(e) { console.error("Firestore Error:", e); tbody.innerHTML = `
Lỗi kết nối Cơ sở dữ liệu: ${e.message}
Vui lòng vào Firebase Console -> Firestore Database -> Rules (Quy tắc) và đổi thành:
allow read, write: if true;
`; } }; const loadConsultations = async () => { const tbody = window.safeEl('admin-consult-list'); try { const snap = await getDocs(getDbRef("consultations")); let html = ""; snap.forEach(doc => { const d = doc.data(); const time = new Date(d.timestamp).toLocaleString('vi-VN'); html += ` ${time} ${d.type === 'review' ? 'ĐÁNH GIÁ' : d.type === 'newsletter' ? 'BẢN TIN' : 'TƯ VẤN'} ${d.name || 'Khách'}
${d.phone || d.role || d.email || ''} ${d.target || d.content || 'Đăng ký nhận bản tin'} `; }); tbody.innerHTML = html || "Chưa có dữ liệu."; } catch(e) { console.error("Firestore Error:", e); tbody.innerHTML = `Lỗi tải dữ liệu: ${e.message}`; } }; window.deleteConsultation = async (id) => { if(confirm("Xóa bản ghi này?")) { try { await deleteDoc(getDocRef("consultations", id)); loadConsultations(); } catch(e) {} } }; window.openStudentDetails = (id) => { const d = window.adminStudentsData[id]; if(!d) return; const statusHtml = d.status === 'approved' ? ` Đã Là Học Viên` : ``; let lessonOptions = ''; for(let i=1; i<=15; i++) { lessonOptions += ``; } let gradesHtml = ''; if(d.scoresObj && Object.keys(d.scoresObj).length > 0) { Object.keys(d.scoresObj).forEach(k => { const s = d.scoresObj[k]; gradesHtml += `
${k.replace('c1_', 'Bài ')} ${s.date}
${s.comment}
${s.score}
`; }); } else { gradesHtml = '
Học viên chưa có điểm.
'; } let notesHtml = ''; if(d.notesObj && Object.keys(d.notesObj).length > 0) { Object.keys(d.notesObj).forEach(k => { const nc = d.notesObj[k]; const noteText = typeof nc === 'object' ? nc.content : nc; const noteTime = typeof nc === 'object' && nc.updatedAt ? new Date(nc.updatedAt).toLocaleString('vi-VN') : 'Không rõ'; if (noteText && noteText.trim() !== '') { notesHtml += `
${k.replace('thcs_', '').replace('thpt_', '').replace('cam_', '')}
${noteTime}
${noteText}
`; } }); } if(!notesHtml) { notesHtml = '
Không có ghi chú.
'; } let roleSelectorHtml = ''; if (window.appState.user.role === 'master' || window.appState.user.uid === 'master-admin') { const currentRole = d.role || 'student'; let teacherOptionsHtml = ''; Object.keys(COURSE_NAMES).forEach(k => { const isChecked = (d.allowedCourses && d.allowedCourses.includes(k)) ? 'checked' : ''; teacherOptionsHtml += ``; }); roleSelectorHtml = `

Phân Quyền Hệ Thống (Bởi Master)

Chọn lớp giáo viên được quản lý:
${teacherOptionsHtml}
`; } const html = `
${d.name}
${d.email}
SĐT: ${d.phone||'N/A'}
Khóa: ${COURSE_NAMES[d.registeredCourse]||d.registeredCourse}
${statusHtml}
${d.paymentProofUrl ? `
Biên Lai Nộp Tiền
` : ''} ${roleSelectorHtml}

Gửi Kết Quả Đánh Giá & Email

Lịch Sử Điểm

${gradesHtml}

Sổ Tay Ghi Chú

${notesHtml}
`; window.safeEl('student-details-content').innerHTML = html; window.safeShow('student-details-modal'); document.body.style.overflow = 'hidden'; }; window.saveUserRole = async (id) => { const role = window.safeEl(`admin-assign-role-${id}`).value; let payload = { role: role, status: "approved" }; if (role === 'teacher') { const checkboxes = document.querySelectorAll(`#course-checkboxes-${id} .course-checkbox`); let allowed = []; checkboxes.forEach(cb => { if(cb.checked) allowed.push(cb.value); }); payload.allowedCourses = allowed; } else { payload.allowedCourses = []; } try { await updateDoc(getDocRef("students", id), payload); window.showToast("Cập nhật Quyền Hệ Thống thành công!", "success"); window.safeHide('student-details-modal'); window.openAdminDashboard(); // Reload data } catch(e) { window.showToast("Lỗi phân quyền.", "error"); } }; window.saveGrade = async (studentId) => { const lesson = window.safeEl('grade-lesson').value; const score = window.safeEl('grade-score').value; const comment = window.safeEl('grade-comment').value; if(!lesson || !score) return window.showToast("Cần bài học và Điểm!", "warning"); try { const gradeData = { score: score, comment: comment, date: new Date().toLocaleDateString('vi-VN') }; await updateDoc(getDocRef("students", studentId), { [`scoresObj.${lesson}`]: gradeData }); window.showToast("Đã lưu điểm thành công!", "success"); window.openStudentDetails(studentId); // Gửi Email Báo Điểm Tự Động const studentData = window.adminStudentsData[studentId]; if (studentData && studentData.email) { window.sendEmailNotification('grade', { email: studentData.email, name: studentData.name, course: COURSE_NAMES[studentData.registeredCourse] || studentData.registeredCourse, lesson: lesson.replace('c1_', 'Bài '), score: score, comment: comment }); } } catch(e) { window.showToast("Lỗi lưu điểm.", "error"); } }; window.approveStudent = async (id) => { if(confirm("Cấp quyền truy cập hệ thống cho học viên này?")) { try { await updateDoc(getDocRef("students", id), { status: "approved" }); window.openAdminDashboard(); window.safeHide('student-details-modal'); window.showToast("Cấp quyền thành công!", "success");} catch(e) {} } }; window.deleteStudent = async (id) => { if(confirm("Xóa vĩnh viễn học viên này?")) { try { await deleteDoc(getDocRef("students", id)); window.openAdminDashboard(); window.safeHide('student-details-modal'); window.showToast("Xoá hồ sơ thành công!", "info");} catch(e) {} } }; window.loadSingleLessonCMS = async () => { const courseId = window.safeEl('admin-course-selector').value; const chapterNum = window.safeEl('admin-chapter-num').value; const lessonNum = window.safeEl('admin-lesson-num').value; if(!courseId || !chapterNum || !lessonNum) return window.showToast("Nhập đủ Tọa độ.", "error"); const lessonKey = `c${chapterNum}_l${lessonNum}`; window.appState.adminEditingCourseId = courseId; window.appState.adminEditingLessonKey = lessonKey; const container = window.safeEl('cms-editor-content'); container.innerHTML = `
Đang tải dữ liệu...
`; let d = {}; try { const docSnap = await getDoc(getDocRef("course_lessons", courseId)); if(docSnap.exists() && docSnap.data()[lessonKey]) d = docSnap.data()[lessonKey]; } catch(e) {} const html = `
Biên soạn CMS

[${COURSE_NAMES[courseId]}] Chương ${chapterNum} - Bài ${lessonNum}

`; container.innerHTML = html; container.classList.remove('border-dashed', 'border-gray-700/50', 'bg-black/10', 'p-10', 'md:p-20'); }; window.saveSingleLessonCMS = async () => { const courseId = window.appState.adminEditingCourseId; const lessonKey = window.appState.adminEditingLessonKey; if(!courseId || !lessonKey) return window.showToast("Chưa xác định được bài giảng!", "error"); const btn = window.safeEl('btn-save-cms'); const ogHTML = btn ? btn.innerHTML : 'LƯU VÀO CƠ SỞ DỮ LIỆU'; if (btn) { btn.innerHTML = " ĐANG LƯU..."; btn.disabled = true; } let ytInput = window.safeEl('edit-yt').value.trim(); let ytId = ytInput; const ytRegex = /(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))([\w-]{11})/; const match = ytInput.match(ytRegex); if (match) ytId = match[1]; const payload = { chapterTitle: window.safeEl('edit-chapter-title').value, lessonTitle: window.safeEl('edit-lesson-title').value, instructorName: window.safeEl('edit-instructor-name').value, instructorTitle: window.safeEl('edit-instructor-title').value, yt: ytId, img: window.safeEl('edit-img').value, pdf: window.safeEl('edit-pdf').value, test: window.safeEl('edit-test').value }; try { await setDoc(getDocRef("course_lessons", courseId), { [lessonKey]: payload }, { merge: true }); window.showToast("Mã hoá bài giảng thành công!", "success"); } catch(e) { console.error("Lỗi lưu CMS:", e); window.showToast("Lỗi lưu DB: " + e.message, "error"); } finally { if (btn) { btn.innerHTML = ogHTML; btn.disabled = false; } } }; // --- CẤU HÌNH GIAO DIỆN --- window.loadExpertConfig = async () => { try { const docSnap = await getDoc(getDocRef("config", "homepage")); if(docSnap.exists()) { const data = docSnap.data(); for(let i=1; i<=3; i++) { if(data[`exp${i}`]) { window.safeEl(`cfg-exp${i}-img`).value = data[`exp${i}`].img || ''; window.safeEl(`cfg-exp${i}-name`).value = data[`exp${i}`].name || ''; window.safeEl(`cfg-exp${i}-role`).value = data[`exp${i}`].role || ''; window.safeEl(`cfg-exp${i}-desc`).value = data[`exp${i}`].desc || ''; } } } } catch(e) {} }; window.saveExpertConfig = async () => { const payload = {}; for(let i=1; i<=3; i++) { payload[`exp${i}`] = { img: window.safeEl(`cfg-exp${i}-img`).value, name: window.safeEl(`cfg-exp${i}-name`).value, role: window.safeEl(`cfg-exp${i}-role`).value, desc: window.safeEl(`cfg-exp${i}-desc`).value, }; } try { await setDoc(getDocRef("config", "homepage"), payload); window.showToast("Lưu Cấu hình thành công!", "success"); window.applyExpertConfigToUI(payload); } catch(e) {} }; window.applyExpertConfigToUI = (data) => { for(let i=1; i<=3; i++) { if(data[`exp${i}`] && data[`exp${i}`].name) { if(window.safeEl(`exp${i}-img`)) window.safeEl(`exp${i}-img`).src = data[`exp${i}`].img; if(window.safeEl(`exp${i}-name`)) window.safeEl(`exp${i}-name`).innerText = data[`exp${i}`].name; if(window.safeEl(`exp${i}-role`)) window.safeEl(`exp${i}-role`).innerText = data[`exp${i}`].role; if(window.safeEl(`exp${i}-desc`)) window.safeEl(`exp${i}-desc`).innerText = data[`exp${i}`].desc; } } }; // --- CẤU HÌNH HỌC PHÍ --- window.loadPricingConfig = async () => { try { const docSnap = await getDoc(getDocRef("config", "pricing")); if(docSnap.exists()) { const data = docSnap.data(); const courseKeys = ['thcs_6', 'thcs_7', 'thcs_8', 'thcs_9', 'thpt_10', 'thpt_11', 'thpt_12', 'thpt_onthi', 'cam_6', 'cam_7', 'cam_8', 'cam_9', 'cam_10', 'cam_igcse', 'teacher_geogebra', 'teacher_manim', 'teacher_method']; courseKeys.forEach(k => { const el = window.safeEl(`price_${k}`); if(el && data[`price_${k}`]) el.value = data[`price_${k}`]; }); if(window.safeEl('price_qr_url')) window.safeEl('price_qr_url').value = data['qr_url'] || ''; } } catch(e) {} }; window.savePricingConfig = async () => { const courseKeys = ['thcs_6', 'thcs_7', 'thcs_8', 'thcs_9', 'thpt_10', 'thpt_11', 'thpt_12', 'thpt_onthi', 'cam_6', 'cam_7', 'cam_8', 'cam_9', 'cam_10', 'cam_igcse', 'teacher_geogebra', 'teacher_manim', 'teacher_method']; const payload = {}; courseKeys.forEach(k => { const el = window.safeEl(`price_${k}`); if(el) payload[`price_${k}`] = el.value.trim(); }); if(window.safeEl('price_qr_url')) payload['qr_url'] = window.safeEl('price_qr_url').value.trim(); try { await setDoc(getDocRef("config", "pricing"), payload); window.showToast("Đã cập nhật Bảng Giá & Mã QR Học Phí!", "success"); window.applyPricingToUI(payload); } catch(e) { window.showToast("Lỗi lưu cấu hình giá.", "error"); } }; window.applyPricingToUI = (data) => { if(!data) return; window.appState.pricingConfig = data; const badges = document.querySelectorAll('.price-tag'); badges.forEach(badge => { const courseCode = badge.getAttribute('data-course'); if(data[courseCode] && data[courseCode].trim() !== '') { badge.innerText = data[courseCode]; } else { badge.innerText = 'Liên hệ'; } }); const qrDisplay = window.safeEl('payment-qr-display'); if (qrDisplay) { if (data['qr_url'] && data['qr_url'].trim() !== '') { qrDisplay.src = data['qr_url']; qrDisplay.classList.remove('hidden-view'); } else { qrDisplay.classList.add('hidden-view'); } } }; // --- ĐĂNG TIN TỨC VÀ RENDER GIAO DIỆN NỔI BẬT --- window.fetchAndRenderNews = async () => { const grid = window.safeEl('homepage-news-grid'); if(!grid) return; try { const snap = await getDocs(getDbRef("news_posts")); let posts = []; snap.forEach(doc => posts.push({ id: doc.id, ...doc.data() })); if(posts.length === 0) { posts = [ { id: 'm1', title: 'Bí quyết giúp trẻ hết sợ môn Toán', desc: 'Phương pháp giáo dục tiến trình độc quyền giúp xây dựng nền tảng tư duy vững chắc, khơi dậy niềm đam mê học tập tự nhiên.', img: 'https://images.unsplash.com/photo-1427504494785-3a9ca7044f45?w=800&q=80', content: '...', createdAt: Date.now() }, { id: 'm2', title: 'Cấu trúc bài thi IGCSE chuẩn', desc: 'Phân tích chi tiết nhất về cấu trúc bài thi, cách tối ưu thời gian...', img: 'https://images.unsplash.com/photo-1434030216411-0b793f4b4173?w=800&q=80', content: '...', createdAt: Date.now() - 1000 }, { id: 'm3', title: 'Hoạt hình Manim trong giáo dục', desc: 'Ứng dụng công nghệ đồ họa tiên tiến nhất.', img: 'https://images.unsplash.com/photo-1550439062-609e1531270e?w=800&q=80', content: '...', createdAt: Date.now() - 2000 } ]; } posts.sort((a,b) => b.createdAt - a.createdAt); window.appState.newsData = posts; let html = ''; posts.slice(0, 5).forEach((p, index) => { const dateStr = new Date(p.createdAt).toLocaleDateString('vi-VN'); let safeImg = p.img || 'https://images.unsplash.com/photo-1509228468518-180dd4864904?w=800&q=80'; if (index === 0) { html += `
Tin Nổi Bật
${dateStr}

${p.title}

${p.desc}

Đọc Bài Viết
`; } else { html += `
${dateStr}

${p.title}

${p.desc}

Xem Chi Tiết
`; } }); grid.innerHTML = html; } catch(e) { console.error("News fetch error:", e); } }; window.renderAdminNewsList = () => { const tbody = window.safeEl('admin-news-list'); if(!tbody) return; if(!window.appState.newsData || window.appState.newsData.length === 0 || window.appState.newsData[0].id.startsWith('m')) { tbody.innerHTML = "Chưa có bài đăng thật."; return; } let html = ''; window.appState.newsData.forEach(p => { if(p.id.startsWith('m')) return; const d = new Date(p.createdAt).toLocaleDateString('vi-VN'); html += `
${p.title}
${d} `; }); tbody.innerHTML = html; }; window.submitNewsPost = async () => { const title = window.safeEl('news-title').value; const desc = window.safeEl('news-desc').value; const content = window.safeEl('news-content').value; const img = window.safeEl('news-img').value; const link = window.safeEl('news-link').value; if (!title || !desc || !content) return window.showToast("Điền đủ Tiêu đề, Mô tả, Nội dung!", "warning"); const btn = window.safeEl('btn-submit-news'); const ogHTML = btn.innerHTML; btn.innerHTML = " Đang tải lên..."; btn.disabled = true; try { await addDoc(getDbRef("news_posts"), { title, desc, content, img, link, createdAt: Date.now() }); window.showToast("Bản tin đã lên sóng!", "success"); await window.fetchAndRenderNews(); window.renderAdminNewsList(); window.safeEl('news-title').value = ''; window.safeEl('news-desc').value = ''; window.safeEl('news-content').value = ''; window.safeEl('news-img').value = ''; window.safeEl('news-link').value = ''; } catch(e) { window.showToast("Lỗi đẩy dữ liệu.", "error"); } finally { btn.innerHTML = ogHTML; btn.disabled = false; } }; window.deleteNewsPost = async (id) => { if(confirm("Xóa bài này?")) { try { await deleteDoc(getDocRef("news_posts", id)); await window.fetchAndRenderNews(); window.renderAdminNewsList(); } catch(e) {} } }; window.openNewsModal = (id) => { if (!window.appState.newsData) return; const p = window.appState.newsData.find(x => x.id === id); if (!p) return; const header = window.safeEl('news-modal-header'); if (p.link && (p.link.includes('youtube') || p.link.includes('youtu.be'))) { let ytSrc = p.link.replace('watch?v=', 'embed/').replace('youtu.be/', 'youtube.com/embed/'); header.innerHTML = ``; } else { let safeImg = p.img || 'https://images.unsplash.com/photo-1509228468518-180dd4864904?w=800&q=80'; header.innerHTML = ``; } window.safeEl('news-modal-date').innerText = new Date(p.createdAt).toLocaleDateString('vi-VN'); window.safeEl('news-modal-title').innerText = p.title; window.safeEl('news-modal-content').innerText = p.content; const actionDiv = window.safeEl('news-modal-action'); if (p.link && !p.link.includes('youtube') && !p.link.includes('youtu.be')) { actionDiv.innerHTML = ` Mở Nguồn Đính Kèm`; actionDiv.classList.remove('hidden-view'); } else { actionDiv.innerHTML = ''; actionDiv.classList.add('hidden-view'); } window.safeShow('news-detail-modal'); document.body.style.overflow = 'hidden'; }; window.submitNewsletter = async (e, form) => { e.preventDefault(); const email = form.querySelector('input').value; try { await window.sendEmailNotification('newsletter', { email: email }); window.showToast("Đăng ký thành công!", "success"); } catch(err) {} form.reset(); }; const initCanvasAuth = async () => { window.fetchAndRenderNews(); try { const docCfg = await getDoc(getDocRef("config", "homepage")); if(docCfg.exists()) window.applyExpertConfigToUI(docCfg.data()); const docPrice = await getDoc(getDocRef("config", "pricing")); if(docPrice.exists()) window.applyPricingToUI(docPrice.data()); } catch(e) {} try { if (typeof __initial_auth_token !== 'undefined' && __initial_auth_token) await signInWithCustomToken(auth, __initial_auth_token); else await signInAnonymously(auth); onAuthStateChanged(auth, async (user) => { if (user) { const localSession = localStorage.getItem('lms_session'); if (localSession) { const data = JSON.parse(localSession); // Phục hồi Master Admin test tĩnh if (data.uid === 'master-admin') { window.appState.isLoggedIn = true; window.appState.isAdmin = true; window.appState.user = { uid: 'master-admin', name: "Giám Đốc Đào Tạo", role: 'master', status: 'approved', progressObj: {} }; window.updateUIAfterAuth(); return; } if (data.uid) { if (!data.uid.startsWith('demo-')) { try { const docSnap = await getDoc(getDocRef("students", data.uid)); if(docSnap.exists()) { window.appState.isLoggedIn = true; const dbUser = docSnap.data(); window.appState.user = { uid: data.uid, ...dbUser }; if (!window.appState.user.progressObj) window.appState.user.progressObj = {}; const userRole = dbUser.role || 'student'; if (userRole === 'master' || userRole.startsWith('sub_') || userRole === 'teacher') { window.appState.isAdmin = true; } else { window.appState.isAdmin = false; } window.updateUIAfterAuth(); } } catch(e) {} } } } } }); } catch(e) {} }; initCanvasAuth(); //]]>

No comments:

Post a Comment

TechMath Edu

Hệ Thống Đào Tạo Độc Quyền

Mật khẩu từ 8 ký tự trở lên, gồm chữ hoa, chữ thường, số & ký tự đặc biệt (@$!%*?&).

TechMath Edu · Hệ sinh thái đào tạo số

Đào tạo học thuật chuyển đổi số giáo dục

TechMath Edu đồng hành cùng học sinh học vững kiến thức, giáo viên đổi mới phương pháp và nhà trường phát triển giáo dục số.

Học sinh THCS · THPT Training giáo viên Chuyển đổi số
Dành cho học sinh · giáo viên · nhà trường

Lộ trình phát triển

Khóa học văn hóa

Toán, Lí, Hóa, Văn, Anh, luyện thi vào 10 và THPT.

Training giáo viên

Thiết kế bài dạy, học liệu, trò chơi học tập và kiểm tra đánh giá.

Blog giáo dục

Chia sẻ phương pháp học tập, đổi mới dạy học và chuyển đổi số.

HọcLộ trình rõ
DạyHọc liệu hay
Kết nốiCộng đồng
Khóa học văn hóa

Lộ trình dành cho học sinh

Tập trung học thật, hiểu sâu, rèn phương pháp làm bài và phát triển tư duy. Các khóa đang mở sẽ được hệ thống hiển thị động bên dưới từ phần quản trị.

Toán
Vật lí
Hóa học
Ngữ văn
Tiếng Anh
Luyện thi
Đối tượng phục vụ

Một hệ sinh thái cho nhiều nhu cầu giáo dục

Mỗi nhóm người học có một lộ trình riêng: học sinh cần nền tảng và điểm số, giáo viên cần năng lực số, nhà trường cần giải pháp triển khai, cộng đồng cần tri thức giáo dục đáng tin cậy.

Học sinh · Phụ huynh

Học chắc kiến thức, có lộ trình rõ ràng, rèn tư duy và kỹ năng giải đề.

Giáo viên

Ứng dụng AI, thiết kế bài dạy, trò chơi học tập và kiểm tra đánh giá theo năng lực.

Nhà trường · Trung tâm

Workshop, chuyên đề chuyển đổi số, bồi dưỡng đội ngũ và truyền thông giáo dục.

Người đọc Blog

Theo dõi bài viết về Chuyển đổi số giáo dục, phương pháp dạy học, tư duy toán và triết học giáo dục.

Training giáo viên

Giúp giáo viên đổi mới phương pháp, làm chủ công cụ và xây dựng năng lực số

Không chỉ học công cụ AI, giáo viên cần thay đổi tư duy thiết kế hoạt động học: mục tiêu rõ, nhiệm vụ sắc, sản phẩm học tập cụ thể và đánh giá được năng lực học sinh.

Tư vấn khóa training

AI trong dạy học

Thiết kế prompt, bài giảng, học liệu, đề kiểm tra và trợ lý giáo viên.

Giáo án theo Công văn 5512

Tổ chức hoạt động khởi động, hình thành kiến thức, luyện tập, vận dụng.

Phiếu học tập · Trò chơi

Tạo hoạt động học vui, có phân hóa, có sản phẩm và có kiểm tra kết quả.

Đánh giá theo năng lực

Ma trận mục tiêu, rubric, câu hỏi biết hiểu vận dụng và phản hồi học tập.

Thương hiệu giáo viên

Xây dựng hình ảnh chuyên môn, nội dung số và kênh chia sẻ giáo dục.

Workshop nhà trường

Chuyên đề chuyển đổi số, đổi mới dạy học và phát triển đội ngũ.

Chuyển đổi số giáo dục

Không gian giải pháp dành cho giáo viên, nhà trường và trung tâm

Phần này được thiết kế lại theo hướng an toàn dữ liệu: không nhúng công cụ chat ngoài, không mở khung hỏi đáp có nguy cơ lộ thông tin. TechMath Edu tập trung vào workshop, học liệu, quy trình số và hệ thống quản trị học tập.

An toàn dữ liệu

Không đưa dữ liệu học viên, phụ huynh hoặc giáo viên vào công cụ chat công khai. Ưu tiên quy trình rõ và kiểm soát được.

Workshop giáo viên

Tổ chức chuyên đề Chuyển đổi số giáo dục, thiết kế giáo án, phiếu học tập, trò chơi học tập và kiểm tra đánh giá.

Hệ thống học liệu

Chuẩn hóa tài liệu, đề thi, video bài giảng, phản hồi học tập và lộ trình luyện tập cho từng nhóm học viên.

Giải pháp nhà trường

Xây dựng kế hoạch chuyển đổi số, bồi dưỡng đội ngũ, truyền thông học thuật và nâng cao năng lực triển khai.

Đội ngũ đồng hành học thuật

Hội đồng chuyên môn TechMath Edu

Mỗi môn học có thể có nhiều giáo viên, cố vấn hoặc đại diện chuyên môn cùng tham gia xây dựng học liệu, phản biện nội dung và đồng hành với học viên.

Hội đồng chuyên môn đang được cập nhật từ trang quản trị.

Trải nghiệm thực tế

Phản hồi từ phụ huynh, học viên và giáo viên

Blog giáo dục

Bài viết, tài liệu và góc nhìn giáo dục

Các chủ đề trọng tâm: Chuyển đổi số giáo dục, phương pháp dạy học, tư duy Toán học, thi giáo viên giỏi, triết học giáo dục và chuyển đổi số giáo dục.

Chuyển đổi số giáo dụcPhương pháp dạy họcTư duy Toán họcThi giáo viên giỏiTriết học giáo dụcChuyển đổi số giáo dục
Định hướng lộ trình

Đăng ký tư vấn học tập hoặc training

Để lại thông tin, TechMath Edu sẽ liên hệ để xác định nhu cầu: học văn hóa, luyện thi, training giáo viên, workshop nhà trường hoặc tư vấn Giải pháp số.

  • Lộ trình cá nhân hóa cho học sinh
  • Chuyên đề thực chiến cho giáo viên
  • Workshop chuyển đổi số cho nhà trường
Bản Tin Giáo Dục

Tất Cả Tin Tức & Cập Nhật

Thư Viện Số

Tài Liệu & Đề Thi

Lọc Khối Lớp

Chọn nhanh theo giữa kì, cuối kì Toán 6-12, THPT Quốc Gia, tuyển sinh 10 hoặc theo tên đề thi đã tạo.

Yêu Cầu Đóng Học Phí

Đang cập nhật...

Bài học này thuộc khu vực VIP. Vui lòng hoàn tất thanh toán để hệ thống tự động mở khóa.

Thông tin thanh toán

Số Tài Khoản
0789363936
Ngân hàng
TECHCOMBANK
Chủ tài khoản
Cao Thanh Phúc
Nội dung chuyển khoản
SĐT + TEN HOC VIEN
Bấm vào đây để Tải Ảnh Lên
Hỗ trợ chụp từ Camera hoặc Thư viện
Ảnh đã sẵn sàng. Bấm Xác Thực!

Ghi Nhận Thành Công!

Tải lên hoàn tất. Bạn có thể nán lại đây chờ Ban Quản Trị duyệt để vào lớp học.

Đang Khởi Tạo Giáo Trình

Vui lòng đợi giây lát...

Chưa Đạt Điều Kiện

Vui lòng hoàn thành các yêu cầu của Bài học trước đó để mở khóa phần này.

Tiến trình0%

Quản Trị Hệ Thống

Định Danh Khóa Học/Quyền Trạng thái Minh chứng phí Thao Tác

Theo Dõi Tiến Độ Học Tập

Học Viên Số Mục Hoàn Thành Bài Tập PDF Tỷ Lệ Mở Khóa Chi Tiết
Vui lòng chọn khóa học.

Thống kê tài liệu chi tiết

Theo dõi từng tài liệu: lượt xem trước, lượt tải, thời điểm xem/tải cuối cùng theo giờ Việt Nam.

Lượt vào web thật
0
Tổng lượt mở website.
Lượt xem tài liệu
0
Tổng lượt bấm xem trước.
Lượt tải tài liệu
0
Tổng lượt bấm tải PDF.
Cập nhật gần nhất
Chưa có
Có đủ thứ, ngày, giờ.
Tự ghi số liệu khi học sinh bấm xem trước hoặc tải tài liệu. Đang xem lúc: Đang cập nhật...
Tài liệu Nhóm Lượt xem thật Lượt tải thật Xem cuối Tải cuối Cập nhật
Chưa có dữ liệu tài liệu.

Tải Lên / Sửa Tài Liệu (PDF)

Tạo / Sửa Đề Thi Online

techmathedu.com/exam/

Quản Lý Tài Liệu & Đề Thi

Phân loại Tiêu đề / Lớp Ngày tạo Hành động
Vui lòng chọn loại tài liệu để tải danh sách.

Thêm Khóa Học Mới Vào Hệ Thống

Cấu Hình Giá Khóa Học (Khóa bị bỏ trống sẽ tự động ẩn ở trang chủ)

Khối THCS
Khối THPT
Quản Trị & Sư Phạm
Hệ Quốc Tế (Cambridge / IGCSE)
Cấu hình Mã QR Thanh Toán
Lưu bài tập PDF vào Google Drive

Dùng Web App được triển khai bằng tài khoản giaoductoan@gmail.com. Hệ thống sẽ lưu PDF theo khóa học, học viên và bài học.

Data Form từ khách hàng được lưu dự phòng tại đây.
Tổng lượt xem trang
0
Tất cả lượt mở website.
Phiên truy cập
0
Một phiên/trình duyệt/ngày.
Người xem trang web
0
Tổng trình duyệt đã từng vào web.
Hôm nay
0
Lượt xem trong ngày Việt Nam.
Người xem hôm nay: 0
Giờ hệ thống Việt Nam: Đang cập nhật... Lượt vào web gần nhất: Chưa có dữ liệu

Số liệu thật từng tài liệu

Phần này chỉ nằm trong admin: lượt xem/lượt tải thật từ Firestore, không phải số hiển thị công khai.

Lượt vào web thật
0
Tổng lượt mở website.
Lượt xem tài liệu thật
0
Tổng lượt bấm xem trước tài liệu.
Lượt tải tài liệu thật
0
Tổng lượt bấm tải tài liệu.
Cập nhật gần nhất
Chưa có
Hiển thị thứ, ngày, giờ Việt Nam.
Số liệu thật chỉ dành cho quản trị. Đang xem lúc: Đang cập nhật...
Tài liệu Nhóm Lượt xem thật Lượt tải thật Xem cuối Tải cuối Cập nhật
Chưa có dữ liệu tài liệu.
Thời Gian Loại Người Gửi Nội Dung Thao Tác
Đang nạp...

Thiết lập Tọa độ phía trên và bấm Tải Lên Form.

Tiêu đềNgày đăngHành động

Cấu hình Hội đồng chuyên môn

Có thể thêm không giới hạn thành viên và nhiều người đại diện cho cùng một môn. Thứ tự trong Admin cũng là thứ tự hiển thị ngoài website.

Chưa có thành viên. Bấm Thêm thành viên để bắt đầu.

Tắt “Hiển thị” nếu muốn tạm ẩn một người mà không xóa dữ liệu.

Viewer

Viết Đánh Giá

Hồ Sơ Học Viên & Tiến Độ