Không Có Quyền Truy Cập

Trang này chỉ dành cho tài khoản quản trị. Vui lòng đăng nhập bằng tài khoản admin để tiếp tục.

Tài khoản {{ currentUser.name }} không có quyền vào khu quản trị. Bạn vẫn đang đăng nhập bình thường, không cần đăng nhập lại.

Đăng Nhập
Khóa Học Danh Mục Cẩm Nang Trang Gia Sư

{{ loadError }}

Báo Cáo Vi Phạm

Người dùng bấm nút Báo cáo trong chat thì đơn rơi vào đây. Mỗi lần bấm "Xem hội thoại" đều được ghi vào nhật ký quản trị, đúng như Chính sách bảo mật đã công bố.

Tạm Khóa Nhắn Tin (dập lửa)

Đang khóa gửi tin Đang mở, nhắn tin chạy bình thường

Khóa thì không ai gửi được tin hay tệp mới, kể cả gia sư. Mọi người vẫn đọc được hội thoại cũ, và chặn nằm ở máy chủ chứ không phải chỉ ẩn nút.

Để TRỐNG ô này thì nhắn tin chạy bình thường. Điền chữ vào là khóa, và đúng câu chữ vừa gõ sẽ hiện ra cho người dùng đọc.

{{ khoaChat.trim().length }}/300 ký tự. Dài quá, máy chủ sẽ từ chối lưu.

Chưa lưu

Tạm Khóa Lớp Học Video (dập lửa)

Đang khóa vào lớp Đang mở, lớp học chạy bình thường

Khóa thì không ai vào phòng học mới được. Buổi đang diễn ra KHÔNG bị cắt ngang — người đang học cứ học tiếp tới khi phòng tự đóng. Chưa cấu hình máy chủ trung chuyển (TURN) thì lớp học video đã tắt sẵn, không cần đụng ô này.

Để TRỐNG ô này thì lớp học chạy bình thường. Điền chữ vào là khóa, và đúng câu chữ vừa gõ sẽ hiện ra cho người dùng đọc.

{{ khoaVideo.trim().length }}/300 ký tự. Dài quá, máy chủ sẽ từ chối lưu.

Chưa lưu

Đang tải...

Không có báo cáo nào ở nhóm này.

{{ nhanLyDoBC(b.lyDo) }} {{ nhanTrangThaiBC(b.trangThai) }} #{{ b.id }} · {{ formatNgayGio(b.taoLuc) }}

{{ b.nguoiBao.name }} ({{ b.nguoiBao.email }}) báo cáo {{ b.biBao.name || 'tài khoản đã xóa' }} ({{ b.biBao.email }})

{{ b.moTa }}

Buổi học #{{ b.buoi.id }} · {{ b.buoi.ngay }} lúc {{ b.buoi.gio }} · gia sư {{ b.buoi.giaSu || 'không rõ' }} · trạng thái {{ b.buoi.trangThai }}

Báo cáo trỏ vào một tin nhắn cụ thể — bấm Xem hội thoại để đọc.

Ghi chú xử lý: {{ b.adminGhiChu }}

Tin Nhắn Gắn Cờ

Bộ lọc tự động cho tin đi qua nhưng đánh dấu để người thật xem lại. Phán "Bình thường" là gỡ cờ; phán "Chặn" là giấu tin khỏi người nhận, người gửi vẫn thấy tin của mình.

Đang tải...

Không còn tin nào chờ xem. Sạch hàng đợi.

{{ t.lyDoLoc }} {{ formatNgayGio(t.luc) }} · {{ t.nguoiGui.name }} ({{ t.nguoiGui.email }})

Nội dung chỉ mở qua nút Xem hội thoại (lần xem được ghi nhật ký).

Kèm tệp: {{ t.tepTen }}

Bài Test Toàn Sàn

Bốn ô chữ gia sư gõ cho học sinh đọc (tên bài, lời dặn, nhận xét chấm, nhận xét từng câu) hiện nguyên văn ở đây. Mỗi lượt mở được ghi vết trong nhật ký quản trị, đúng như bản Chính Sách Bảo Mật đã công bố.

Đang tải...

Không có bài test nào khớp bộ lọc này.

{{ b.ten }}

{{ b.tenNguoiGiao || b.tenGiaSu }} → {{ b.tenHocSinh }} · {{ b.soCau }} câu · {{ b.phut }} phút

{{ b.chamLuc ? 'Đã chấm' : (b.nopLuc ? 'Chờ chấm' : 'Chưa nộp') }}

Lời dặn

{{ b.loiDan }}

Nhận xét chấm bài

{{ b.nhanXetGs }}

Nhận xét từng câu

{{ n.diem }} {{ n.nhanXet }}

Kiểm Tra Tin Nhắn

Xem lại mọi cuộc trò chuyện giữa gia sư và học sinh để bảo đảm chất lượng và ngăn giao dịch đưa ra ngoài nền tảng. Mỗi lần mở một hội thoại đều được ghi vào nhật ký quản trị nội bộ; người dùng không nhận thông báo.

Đang tải...

Chưa có cuộc trò chuyện nào khớp.

{{ c.tenGiaSu }} ↔ {{ c.tenHocSinh }} Đã đóng

{{ c.soTin }} tin · hoạt động gần nhất {{ formatNgayGio(c.tinCuoi) }}

Trang {{ ktTrang }}

Phát Thông Báo Mới

Thông báo hiện ở quả chuông trên header của mọi người dùng đã đăng nhập, kèm chấm đỏ cho tới khi họ mở chuông. Không gửi email, không đẩy về điện thoại.

{{ tbTieuDe.trim().length }}/120 ký tự, một dòng.

{{ tbNoiDung.trim().length }}/1000 ký tự.

Đã Phát ({{ tbList.length }})

Chưa phát thông báo nào.

{{ tb.tieuDe }}

{{ tb.noiDung }}

{{ formatNgayGio(tb.luc) }} · {{ tb.nguoiPhat }}

Tổng Quan

Số liệu tính thẳng từ sổ ví, ghi danh, lịch học, luyện tập — không có bảng thống kê riêng nên không lệch với thực tế.

Cần bạn xử lý

Không có hồ sơ ứng tuyển, yêu cầu nạp ví hay báo cáo nào đang chờ.

Nhật Ký Quản Trị ({{ formatSo(nhatKyTotal) }})

Chưa có hành động quản trị nào được ghi lại.

{{ e.action }} {{ e.adminEmail }} {{ formatDateTime(e.createdAt) }} {{ e.targetType }} #{{ e.targetId }} · {{ tomTatDetail(e.detail) }}

Kiểm Duyệt Cộng Đồng

Ẩn là cách mềm: bài biến mất với mọi người, riêng tác giả vẫn thấy kèm lý do, và hoàn lại được. Chỉ xóa hẳn với nội dung không được phép lưu.

{{ formatSo(cdSummary.posts) }} bài ({{ formatSo(cdSummary.hiddenPosts) }} ẩn) · {{ formatSo(cdSummary.comments) }} bình luận ({{ formatSo(cdSummary.hiddenComments) }} ẩn) · 24 giờ qua: {{ formatSo(cdSummary.last24h.posts) }} bài, {{ formatSo(cdSummary.last24h.comments) }} bình luận

Không có bài viết nào trong mục này.

Hiện {{ cdPosts.length }} / {{ formatSo(cdTotal) }} bài, mới nhất trước.

{{ post.tag }} {{ post.title }} Đã ẩn
{{ formatDateTime(post.createdAt) }}

{{ post.author.name }} · {{ post.author.email }} · {{ post.likeCount }} tim · {{ post.commentCount }} bình luận ({{ post.hiddenCommentCount }} ẩn)

{{ post.content }}

Ẩn lúc {{ formatDateTime(post.hidden.at) }} bởi {{ post.hidden.byEmail }} — lý do: {{ post.hidden.reason }}

Đang tải bình luận...

Bài này chưa có bình luận.

{{ c.author.name }} · {{ c.author.email }} · {{ formatDateTime(c.createdAt) }}Đã ẩn

{{ c.text }}

Lý do ẩn: {{ c.hidden.reason }}

Trang Chủ

Những thứ ở đây hiện ngay trên trang chủ vpathacademy.com. Đổi xong bấm Lưu là trang chủ đổi theo, không cần lập trình viên.

Soạn nội dung trang chủ Sửa mọi chữ, số, giá, ảnh, ẩn/hiện và thứ tự từng khối. Có nháp, xem thử, xuất bản và lịch sử để quay lại. Soạn nội dung trang Về Chúng Tôi Sửa lời giới thiệu, câu chuyện của VPath và danh sách đội ngũ — tải được ảnh chân dung. Cũng có nháp, xem thử, xuất bản và lịch sử như trang chủ. Soạn chuyên mục Cẩm Nang Sửa chữ trong từng bài hướng dẫn, thêm bài mới, đổi thứ tự trên dưới, ẩn bài khỏi chuyên mục. Cũng có nháp, xem thử, xuất bản và lịch sử.

Video Giới Thiệu

Tải video lên từ máy. Chưa có video thì trang chủ tự ẩn cả khối, không hiện chữ "sắp ra mắt". Nhận MP4, MOV hoặc WEBM, không giới hạn dung lượng (file càng nặng thì tải càng lâu, cứ để cửa sổ mở tới khi thanh tiến độ đủ 100%). Nên dùng MP4 (H.264): video .mov quay bằng iPhone ở chế độ High Efficiency là HEVC, một số trình duyệt không phát được và khung sẽ đen.

Video đang dùng

Chưa có video, khối này đang ẩn trên trang chủ

Đang tải lên {{ tienDoVideo }}%. Đừng đóng tab.

Ảnh bìa (hiện trước khi bấm phát)

Chưa có ảnh bìa, trình duyệt tự lấy khung đầu video

Video Đã Tải Lên ({{ khoVideo.length }})

Chưa có video nào trong kho.

{{ v.ten }} {{ (v.dungLuong / 1048576).toFixed(1) }}MB Đang dùng

Đơn Xin Tư Vấn

Khách để lại số ở form cuối trang chủ. Gọi xong thì đánh dấu để khỏi gọi trùng nhau.

Đang tải...
Chưa có đơn nào{{ tuVanLoc ? ' ở trạng thái này' : '' }}.

{{ don.hoTen }}

{{ don.soDienThoai }}

{{ don.lopMon || 'Không ghi lớp/môn' }} · gửi {{ formatDateTime(don.guiLuc) }}

{{ don.trangThai === 'moi' ? 'Chưa gọi' : (don.trangThai === 'da-goi' ? 'Đã gọi' : 'Bỏ qua') }}

Báo Lỗi Câu Hỏi

Học sinh báo lỗi hoặc góp ý trên từng câu của trang Ôn Tập. Bấm Mở Câu để xem đúng câu đó, sửa xong thì đánh dấu Đã sửa.

Đang tải...
Chưa có báo cáo nào{{ baoLoiCauLoc ? ' ở trạng thái này' : '' }}.

{{ nhanLoaiBaoLoi(bc.loai) }} (đang xem {{ bc.cheDoXem === 'markscheme' ? 'Mark Scheme' : 'Question' }})

Câu {{ bc.cau.questionNumber || '?' }} · {{ bc.cau.level }} {{ bc.cau.subject }} · {{ bc.cau.paperCode }}/{{ bc.cau.paperNumber }}/{{ bc.cau.variant }} · {{ bc.cau.sessionPeriod }} {{ bc.cau.year }}

{{ bc.moTa }}

{{ bc.nguoiGui ? (bc.nguoiGui.ten + ' (' + bc.nguoiGui.email + ')') : 'Tài khoản đã xoá' }} · gửi {{ formatDateTime(bc.guiLuc) }} · xử lý bởi {{ bc.nguoiXuLy }}

{{ bc.trangThai === 'moi' ? 'Chưa xử lý' : (bc.trangThai === 'da-sua' ? 'Đã sửa' : 'Bỏ qua') }}
Mở Câu

Gói Đăng Ký Luyện Theo Chủ Đề

Ai cũng xem miễn phí trọn một chủ đề mỗi môn (chủ đề đầu của paper đầu). Mua gói, còn ngày dùng thử hoặc được tặng ngày thì mở toàn bộ kho. Gia sư, worker và admin luôn được mở sẵn.

Số Ngày Dùng Thử Người Mới

0 = tắt dùng thử. Chỉ tặng tài khoản MỚI, và chỉ phát khi họ XÁC MINH EMAIL xong — đăng ký suông chưa có gì.

Bảng Gói ({{ goiDs.length }})

Giá trên thẻ giá của trang chủ KHÔNG tự đổi theo bảng này — đổi giá xong nhớ sửa khối giá trong Soạn nội dung trang chủ.

Chưa có gói nào. Bấm Thêm Gói để tạo gói đầu tiên.

Tên Giá Giá gạch Số ngày Nhãn Thứ tự Trạng thái Lượt mua Thao tác
{{ g.name }} {{ formatMoney(g.price) }} {{ formatMoney(g.originalPrice) }} — {{ formatSo(g.durationDays) }} {{ g.badge }} — {{ g.orderIndex }} Đang bán Ngừng bán {{ formatSo(g.soLuotMua) }}

Gói Của Học Sinh

Tìm một học sinh để xem hạn hiện tại và lịch sử, tặng thêm ngày hoặc thu hồi quyền truy cập.

{{ hsChon.name }}

{{ hsChon.email }} · ID {{ hsChon.id }}

Quản Lý Gia Sư

Hồ sơ hiện ở trang Gia Sư công khai. Không xóa được hồ sơ (lịch học và đánh giá trỏ vào) — muốn gỡ khỏi trang thì tắt nhận học.

Lệnh Rút Tiền Gia Sư

Luật đã chốt 30/08/2026: thu nhập tháng N rút được từ ngày 15 tháng N+1; server đã kiểm số dư trước khi cho gia sư gửi lệnh. Chuyển khoản xong mới bấm Đã Chuyển — nút đó là sổ sách, không phải lệnh chuyển tiền.

Đang tải...

Không có lệnh nào ở nhóm này.

{{ l.soTien.toLocaleString('vi-VN') }}đ · {{ l.tenGiaSu }}

#{{ l.id }} · {{ formatNgayGio(l.taoLuc) }} · {{ l.emailGiaSu || 'hồ sơ chưa gắn tài khoản' }}

{{ l.nhanTien }}

{{ l.adminGhiChu }}

Đã chốt sổ

Đơn Ứng Tuyển Gia Sư {{ soDonGiaSuCho }} chờ

Duyệt là tạo hồ sơ gia sư và cấp quyền tutor cho tài khoản đó. Quyền tutor mở luôn toàn bộ kho Luyện Theo Chủ Đề miễn phí, nên mỗi lần duyệt có một cái giá thật.

Đang tải...

Không có hồ sơ nào ở trạng thái này.

{{ d.displayName }}

{{ d.nguoiGui.name }} · {{ d.nguoiGui.email }} · {{ d.phone }} Tài khoản đang bị khóa

{{ (d.subjects || []).join(', ') }} · {{ (d.levels || []).join(', ') }}

{{ Number(d.pricePerHour).toLocaleString('vi-VN') }}đ mỗi giờ · {{ d.yearsExperience }} năm

{{ d.headline }}

{{ d.bio }}

Mã số thuế
{{ d.maSoThue || 'chưa khai' }}
Gửi lúc
{{ formatNgayGio(d.createdAt) }}
Cam kết trẻ em
{{ d.camKetTreEmAt ? formatNgayGio(d.camKetTreEmAt) : 'CHƯA có' }}
Hồ sơ đã tạo
#{{ d.tutorId }}
{{ d.cv ? d.cv.ten : 'Hồ sơ này KHÔNG có CV' }} {{ tenLoaiCv(d.cv.loai) }} · {{ coChuDungLuong(d.cv.bytes) }} Đơn nộp trước ngày CV thành bắt buộc. Hỏi thêm qua số điện thoại trước khi duyệt.

Ghi chú của admin: {{ d.adminNote }}

Công Tắc Đặt Lịch Cũ (đã bỏ)

Có chữ (không còn tác dụng) Đang trống

Từ 03/09/2026 học sinh không còn tự đặt buổi trên web: VPath trao đổi với gia đình, gán gia sư rồi xếp lịch. Đường tự đặt đã đóng hẳn ở máy chủ (trả 410), nên công tắc này không còn tác dụng gì. Giữ lại để câu thông báo cũ không biến mất khỏi lịch sử; bật hay tắt đều không đổi gì. Muốn tạm dừng cả khu Gia sư thì dùng khoá gia_su_bao_tri ở khối Bảo Trì.

Để TRỐNG ô này thì đặt lịch chạy bình thường. Điền chữ vào là khóa đặt lịch, và đúng câu chữ vừa gõ sẽ hiện ra cho học sinh đọc. Thông báo hiện thành một đoạn liền: chỗ xuống dòng sẽ được gộp lại thành dấu cách khi lưu.

{{ khoaDatLich.trim().length }}/300 ký tự. Dài quá, máy chủ sẽ từ chối lưu.

Chưa lưu

Nút "Điền câu mặc định" chỉ ghi sẵn chữ vào ô, chưa có hiệu lực gì. Sửa lại câu chữ cho vừa ý rồi bấm Lưu.

Tạm Khoá Bảo Trì Cả Khu

Khoá một khu là người dùng thường (kể cả khách) mở trang nào của khu đó cũng chỉ thấy màn "đang bảo trì" kèm câu bên dưới, và mọi API của khu trả lỗi 503. Tài khoản admin và worker vẫn vào bình thường để kiểm tra. Để TRỐNG rồi Lưu là mở lại.

{{ o.ten }}

Đang khoá bảo trì Đang mở

{{ o.dang.trim().length }}/300 ký tự

Chưa lưu

Chương Đầu Chỉ Mở Cho Người Được Mời

Đang bật, chỉ người được mời xem được Đang tắt, chương đầu mở cho tất cả mọi người

Bật lên thì chương đầu của mỗi khóa chỉ mở cho học sinh đã mua khóa đó hoặc được mời xem demo (mời từng địa chỉ email trong trang Quản trị khóa học). Tắt đi thì chương đầu của MỌI khóa mở cho tất cả mọi người, kể cả khách chưa đăng nhập, đúng như quy ước ngày 06/09. Ô này không liên quan tới khối bảo trì bên trên: khu đang bảo trì thì người ngoài vẫn bị chặn ở cửa trước.

Học Thử Không Giới Hạn Cho Tài Khoản Admin

Đang bật, chỉ nên giữ trong lúc test Đang tắt, admin theo luật một lần như học sinh

Bật lên thì riêng tài khoản admin đặt buổi học thử 30 phút bao nhiêu lần cũng được và không tiêu lượt, để test đặt lịch trên dữ liệu thật mà không phí quyền học thử. Học sinh thường không bị ảnh hưởng. Buổi test đặt ra vẫn là buổi thật trong Lịch Dạy: test xong nhớ hủy chúng đi.

{{ gsForm.id ? 'Sửa Hồ Sơ Gia Sư #' + gsForm.id : 'Thêm Gia Sư Mới' }}

Ảnh vuông, tối đa 5MB, PNG/JPEG/WEBP. Ảnh tải lên là ảnh CÔNG KHAI (hiện ở trang Gia Sư cho khách chưa đăng nhập).

Môn dạy
Cấp học

Tài khoản đăng nhập gắn với hồ sơ

{{ gsForm.user.name }} {{ gsForm.user.email }}

Không bắt buộc. Chỉ gắn được tài khoản học sinh (admin/worker bị từ chối); gắn xong vai trò của họ thành Gia sư.

Hồ Sơ Gia Sư ({{ tutors.length }})

{{ t.displayName }} #{{ t.id }} Đã xác minh Tắt nhận học

{{ t.headline }}

{{ t.subjects.join(', ') }} · {{ t.levels.join(', ') }} · {{ formatMoney(t.pricePerHour) }}/giờ · {{ t.bookingCount }} buổi đã đặt

{{ t.user ? 'Tài khoản: ' + t.user.email : 'Chưa gắn tài khoản đăng nhập' }}

Chưa có hồ sơ gia sư nào.

{{ gsXem.tutor.displayName }} #{{ gsXem.tutor.id }}

Buổi học

{{ n.n }} {{ nhanTrangThaiBuoiGS(n.status) }}Chưa có buổi nào

{{ gsXem.soHocSinh }} học sinh riêng

Doanh thu buổi tự đặt

{{ formatMoney(gsXem.tien.doanhThu) }}

{{ gsXem.tien.soBuoiThieuSo }} buổi trước migration 056 không có số, đã bỏ ngoài

Thu nhập gia sư

{{ formatMoney(gsXem.tien.thuNhap) }}

Đã trả {{ formatMoney(gsXem.tien.daTra) }}

Hoa hồng & khiếu nại

{{ gsXem.tutor.hoaHongPercent }}% hoa hồng · {{ gsXem.khieuNai.length }} khiếu nại

{{ gsXem.rutTien.length }} lệnh rút tiền gần đây

Học sinh đánh giá gia sư ({{ gsXem.danhGiaVeGiaSu.length }})

Chưa có đánh giá nào.

{{ r.tenHocSinh }} · {{ r.rating }}/5 sao · {{ formatDateTime(r.luc) }}(đang ẩn)

{{ r.comment }}

Gia sư nhận xét học sinh ({{ gsXem.nhanXetCuaGiaSu.length }})

Chưa có nhận xét buổi học nào.

{{ r.tenHocSinh || 'Học sinh đã xóa tài khoản' }} · {{ formatDateTime(r.luc) }}

{{ r.nhanXet }}

Bài tập đã giao ({{ gsXem.baiTap.length }} gần nhất)

{{ bt.tieuDe }} · giao cho {{ bt.tenHocSinh }} · {{ formatDateTime(bt.luc) }} · đã thu hồi · đã chấm

{{ bt.moTa }}

Bài nộp: {{ bt.nopNoiDung }}

Nhận xét chấm: {{ bt.nhanXet }}

Khiếu nại buổi học ({{ gsXem.khieuNai.length }})

{{ k.nguoiBao || 'Ẩn danh' }} · {{ k.lyDo }} · {{ k.trangThai }} · {{ formatDateTime(k.luc) }}

{{ k.moTa }}

Buổi gần đây ({{ gsXem.buoiGanDay.length }})

NgàyHọc sinhTrạng tháiGiáPhần gia sư
{{ b.ngay }} {{ b.gio }} {{ b.tenHocSinh }}(học thử)(admin xếp)(lịch cố định) {{ nhanTrangThaiBuoiGS(b.status) }} {{ formatMoney(b.price) }} {{ b.tutorEarning === null ? 'Không có số' : formatMoney(b.tutorEarning) }}đã trả

Gán Gia Sư

Gán một gia sư cho một học sinh theo môn. Gán xong thì gia sư mới giao bài được cho em đó, và em mới hiện trong danh sách học sinh của gia sư. Kết thúc phân công sẽ tự huỷ các buổi chưa diễn ra.

{{ pcCanhBao.length }} cặp đang học mà không có buổi nào trong 14 ngày tới

Gia sư là người xếp buổi. Cặp nằm đây nghĩa là học sinh đang chờ mà chưa ai xếp lịch.

  • {{ p.hocSinh.ten }} với {{ p.giaSu.ten }} · {{ p.mon }} chưa có buổi nào

{{ gtChoDuyet.length }} buổi dạy thiếu giờ đang chờ xử lý

Tiền của những buổi này chưa vào phần rút được của gia sư. Duyệt là tiền vào ngay; trả lại thì gia sư sửa báo cáo rồi gửi tiếp. Không có khoản phạt nào.

{{ g.hocSinh }} với {{ g.giaSu }}

{{ formatDate(g.lessonDate) }} · quy định {{ g.phutQuyDinh }} phút · dạy {{ g.phutThucTe }} phút

Bắt đầu {{ formatNgayGio(g.batDauThucTe) }} · Kết thúc {{ formatNgayGio(g.ketThucThucTe) }}

{{ formatMoney(g.tutorEarning) }}

Lý do: {{ g.giaiTrinh.lyDo }}

Giải pháp: {{ g.giaiTrinh.giaiPhap }}

Gia sư chưa gửi báo cáo.

Chưa có phân công nào.

Học sinh Gia sư Môn Buổi Trạng thái Việc
{{ p.hocSinh.ten }} {{ p.hocSinh.email }} {{ p.giaSu.ten }} hồ sơ chưa gắn tài khoản {{ p.mon }} · {{ p.cap }} {{ p.soBuoiDaXep }} buổi · {{ nhanThoiLuong(p.thoiLuongPhut) }} {{ formatMoney(p.giaMoiBuoi) }} một buổi không tính tiền kế tiếp {{ formatDate(p.buoiKeTiep) }} chưa xếp buổi tới {{ nhanKhuon(p.lichCoDinh) }} chưa có lịch cố định đã xếp tới {{ formatDate(p.xepDenNgay) }} {{ p.soBuoiKhongAiVao }} buổi không ai vào phòng chưa có thư mục Drive {{ nhanTrangThaiPhanCong(p.trangThai) }}

Đã chọn: {{ pcForm.hocSinhTen }}

Học sinh: {{ pcForm.hocSinhTen }}

Em này chưa khai ngày sinh. Bắt buộc điền trước khi gán: luật gửi kèm phụ huynh cho người dưới 18 tuổi dựa vào đúng ô này, không biết tuổi thì hệ thống không được phép đoán.

Chỉ hiện hồ sơ đã gắn tài khoản đăng nhập. Hồ sơ chưa gắn thì gán vào cũng không ai dạy được.

Phụ huynh thanh toán ngoài web. Giá một buổi ở đây là tiền công của gia sư: mỗi buổi xếp lên lịch sẽ tính đúng số này. Đổi giá chỉ ăn vào những buổi tạo sau, buổi đã xếp giữ nguyên số tiền đã chốt. Để trống thì buổi ghi 0 đồng, không tính vào thu nhập gia sư hay doanh thu (lớp admin tự dạy).

Chuyển sang Tạm dừng hoặc Kết thúc sẽ huỷ mọi buổi chưa diễn ra của cặp này.

Chỉ admin đọc. Không hiện ra cho gia sư hay học sinh.

{{ pcLoi }}

{{ lichForm.hocSinhTen }} học với {{ lichForm.giaSuTen }}, mỗi buổi {{ nhanThoiLuong(lichForm.thoiLuongPhut) }}.

Khung giờ mỗi tuần

Chưa có khung nào. Thêm một khung rồi bấm Lưu.

Lịch này tự lặp lại hằng tuần. Máy chủ giữ cho lớp luôn có buổi sẵn khoảng tám tuần tới, và tự xếp thêm mỗi tuần. Không phải vào đây bấm lại.

Đã xếp buổi tới {{ formatDate(lichForm.xepDenNgay) }}.

Buổi lẻ, chỉ một ngày

Không lặp lại. Dùng khi lớp chỉ học đúng buổi này, hoặc thêm một buổi ngoài khung giờ cố định. Buổi đang diễn ra vẫn xếp được.

Dừng lịch lặp lại

Để trống là học không hạn. Điền ngày thì lịch chỉ xếp tới hết ngày đó rồi tự dừng, buổi đã xếp trước đó giữ nguyên.

Muốn dừng ngay và huỷ mọi buổi chưa diễn ra thì bấm Kết thúc ở bảng ngoài.

Đã xếp {{ lichKetQua.daTao.length }} buổi.

Đã huỷ {{ lichKetQua.daHuy.length }} buổi tương lai của khung vừa bỏ

  • {{ h.nhan }}

Chỉ xếp tới {{ formatDate(lichKetQua.denNgay) }} vì lớp có ngày kết thúc.

  • {{ b.nhan }}

Bỏ qua {{ lichKetQua.boQua.length }} buổi

  • {{ o.nhan }} — {{ o.lyDo }}

{{ lichLoi }}

Yêu Cầu Nạp Ví

Đối chiếu mã tham chiếu và số tiền với sao kê ngân hàng trước khi duyệt. Bấm duyệt là tiền vào ví ngay và không tự hoàn lại được.

Không có yêu cầu nào trong mục này.

{{ rq.userName }}

{{ rq.userEmail }}

Số dư hiện tại: {{ formatMoney(rq.userWalletBalance) }}

{{ formatMoney(rq.amount) }}

{{ topUpStatusLabel(rq.status) }}

Mã tham chiếu — tìm chuỗi này trong nội dung chuyển khoản

{{ rq.referenceCode }}

Tạo lúc {{ formatDateTime(rq.createdAt) }}

Xử lý lúc {{ formatDateTime(rq.reviewedAt) }} bởi {{ rq.reviewerEmail }}

Ghi chú: {{ rq.note }}

Quản Lý Đánh Giá Khóa Học

Bật/tắt hiển thị từng đánh giá — đánh giá bị ẩn sẽ không hiện với học viên trên trang Khóa Học.

{{ rv.author }} {{ formatDate(rv.createdAt) }}

{{ rv.courseTitle }}

{{ rv.comment || '(Không có nhận xét)' }}

Không có đánh giá nào trong mục này.

Quản Lý Kho Past Papers

Tải lên file đề thi (PDF) và mark scheme để học sinh tra cứu ở trang Ôn Luyện.

Quản Lý Danh Mục Thêm / đổi tên / ẩn cấp học, môn học, component và chủ đề — worker và admin đều sửa được.

Tải Lên Đề Mới

Đề Đã Có ({{ pastPapers.length }})

{{ p.level }} {{ nhanMon(p.level, p.subject) }} · Mã {{ p.paperCode }} · Paper {{ p.paperNumber }}/{{ p.variant }} · {{ p.sessionPeriod }} {{ p.year }}

Chưa có đề thi nào được tải lên.

Nhật Ký Gỡ Đề ({{ formatSo(nhatKyGoDeTotal) }})

Mỗi lần gỡ đề — kể cả xóa từ trang worker — để lại một dòng ở đây: đề nào, ai gỡ, lý do, đã xóa được bao nhiêu file.

Chưa gỡ đề nào.

{{ g.paperLabel }} {{ formatDateTime(g.createdAt) }} · {{ g.performedByEmail || '(không rõ)' }}

Lý do: {{ g.reason }}

{{ g.counts.questions }} câu hỏi · {{ g.counts.images }} ảnh · {{ g.counts.affectedUsers }} học sinh bị ảnh hưởng · {{ g.filesRemoved }} file/thư mục đã xóa · {{ g.filesFailed.length }} chưa xóa được: {{ g.filesFailed.join(', ') }}

Quản Lý Tài Khoản Worker

Worker là tài khoản chuyên để tải Past Paper lên và cắt câu hỏi tại trang worker.html — không có quyền admin khác.

Tạo Tài Khoản Worker Mới

Danh Sách Worker ({{ workers.length }})

{{ w.name }} {{ w.email }} · tạo lúc {{ formatDate(w.createdAt) }}

Chưa có tài khoản worker nào.

Quản Lý Người Dùng

Toàn quyền với tài khoản học sinh: sửa hồ sơ, cộng/trừ ví, mở khóa học, đặt lại mật khẩu, xoá tài khoản.

{{ tieuDeDanhSachUser }} ({{ usersTotal }})

Không tìm thấy tài khoản nào.

{{ selectedUser.user.name }}

ID {{ selectedUser.user.id }} · tham gia {{ formatDate(selectedUser.user.createdAt) }}

Hồ Sơ & Quyền Hạn

Vai trò Gia sư đi kèm hồ sơ ở tab Gia Sư — tài khoản còn gắn hồ sơ thì không đổi sang vai khác được (gỡ liên kết bên đó trước).

Hồ sơ gia sư

#{{ selectedUser.tutorProfile.id }} {{ selectedUser.tutorProfile.displayName }} ({{ selectedUser.tutorProfile.isActive ? 'đang nhận học' : 'tắt nhận học' }}) —

Ví

{{ formatMoney(selectedUser.user.walletBalance) }}

Đặt Lại Mật Khẩu

Mật khẩu cũ mất hiệu lực ngay. Không xem được mật khẩu hiện tại — hệ thống chỉ lưu bản mã hóa.

Khóa Học Đã Mở ({{ selectedUser.enrollments.length }})

Chưa có khóa nào.
{{ e.title || ('Khóa #' + e.courseId) }} {{ formatDate(e.purchasedAt) }}

Lịch Sử Ví ({{ selectedUser.transactions.length }})

Chưa có giao dịch nào.
{{ t.description }} {{ t.amount > 0 ? '+' : '' }}{{ formatMoney(t.amount) }}

Buổi Luyện Tập ({{ selectedUser.practiceSessions.length }})

Chưa luyện buổi nào.
{{ s.subject }} · {{ s.level }} {{ s.correctCount }}/{{ s.totalQuestions }}

Bài Đăng & Đánh Giá

Chưa có bài đăng hay đánh giá nào.
{{ p.title }}
{{ r.rating }}/5 · {{ r.courseTitle || ('Khóa #' + r.courseId) }}

Buổi Học Với Gia Sư ({{ selectedUser.tutorBookings.length }})

{{ b.tutorName || ('Gia sư #' + b.tutorId) }} · {{ formatDate(b.lessonDate) }} {{ formatMoney(b.price) }} · {{ b.status }}

Xoá Tài Khoản

Xoá vĩnh viễn tài khoản này cùng toàn bộ dữ liệu học tập: khóa học đã mở, lịch sử ví, buổi luyện tập, bài đăng, đánh giá, lịch học gia sư. Không thể hoàn tác. Đề và câu hỏi người này từng tải lên sẽ được giữ lại.

Yêu Cầu Xóa Tài Khoản

Học sinh tự gửi từ trang Tài Khoản. Kiểm tra số dư ví và khóa học đã mua trước khi xóa — xóa là mất luôn tiền trong ví của họ, không hoàn lại được.

Đang tải...

Không có yêu cầu nào

Chưa có học sinh nào xin xóa tài khoản ở trạng thái này.

{{ r.userName }}

{{ r.userEmail }} · gửi lúc {{ formatDateTime(r.createdAt) }}

{{ deletionStatusLabel(r.status) }}

Số dư ví hiện tại

{{ formatMoney(r.walletBalanceNow) }}

Lúc gửi yêu cầu: {{ formatMoney(r.walletBalanceAtRequest) }}

Khóa học đã mở

{{ r.courseCount }}

Tài khoản Worker — đề đã tải lên vẫn được giữ

Lý do: {{ r.reason }}

Ghi chú admin: {{ r.adminNote }} — {{ r.reviewerEmail }}

Ví còn tiền. Xử lý hoàn/rút tiền cho học sinh TRƯỚC khi xóa tài khoản.

{{ anState.moTa }}

3–500 ký tự. Tác giả vẫn thấy bài của mình kèm lý do này; người khác không thấy nữa. Hiện lại được bất cứ lúc nào.

Đổi giá hay số ngày chỉ áp cho lượt mua MỚI — người đã mua giữ nguyên hạn cũ. Giá gạch là giá cũ hiện gạch ngang cạnh giá thật, bỏ trống nếu không giảm giá.

{{ goDeState.loi }}

{{ videoAdminLoi || 'Đang mở video...' }}

Bản ghi tự động của buổi học. Mỗi lượt mở đều được ghi nhật ký quản trị.