01 · Bắt đầu
Quy trình từ lúc truy cập website đến khi bạn có thể dùng đúng khu vực của mình.
- Mở trang NTB SKILL CLUBChọn Đăng nhập Google hoặc Bắt đầu với Google. Hệ thống chuyển bạn đến Google để xác thực, sau đó đưa về callback đã cấu hình.
- Kiểm tra trạng thái tài khoảnNếu là tài khoản mới và đợt tạo tài khoản đang mở, bạn sẽ được yêu cầu điền hồ sơ. Nếu đợt tạo tài khoản tắt, chỉ tài khoản đã tồn tại mới đăng nhập được.
- Hoàn thiện hồ sơĐiền đủ họ và tên, lớp, ngày tháng năm sinh theo định dạng hiển thị. Có thể tải avatar trong giới hạn 5 MB. Nút gửi chỉ sáng khi toàn bộ trường bắt buộc hợp lệ.
- Chờ chủ nhiệm phê duyệtHồ sơ chưa gửi hoặc chưa đủ dữ liệu không đi vào hàng chờ. Sau khi nhấn gửi, hồ sơ mới xuất hiện tại khu vực phê duyệt của chủ nhiệm.
Mẹo: Nếu vừa đổi thông tin mà chưa thấy cập nhật, hãy tải lại trang sau khi thao tác hoàn tất. Hệ thống dùng cache-buster cho tài sản giao diện, còn dữ liệu tài khoản được đọc lại từ Sanity.
02 · Tài khoản và hồ sơ
Thông tin nhận diện dùng cho tài khoản và cách cập nhật an toàn.
Họ và tên · lớp · ngày sinh
Ba trường này là dữ liệu hồ sơ cốt lõi. Ngày sinh được tự định dạng theo DD/MM/YYYY; ngày, tháng và năm được kiểm tra hợp lệ trước khi gửi.
Avatar cá nhân
Chấp nhận ảnh JPEG, PNG, WebP hoặc GIF, tối đa 5 MB. Khi cập nhật ảnh, ảnh cũ được dọn khỏi Sanity nếu không còn được tài khoản nào khác tham chiếu.
Cập nhật thông tin
- Mở Cài đặt tài khoảnChọn mục tài khoản trong navbar, rồi mở phần hồ sơ cá nhân.
- Chỉnh thông tinSửa họ tên, lớp hoặc ngày sinh; kiểm tra phần xem trước avatar nếu có tải ảnh mới.
- Lưu thay đổiNhấn nút lưu một lần. Mỗi nút thao tác có cooldown 5 giây để tránh gửi trùng.
Lưu ý: Đổi tên hiển thị không làm đổi email Google. Email là định danh tài khoản và được dùng để xác định quyền, lịch sử điểm danh và cuộc trò chuyện riêng.
03 · Thành viên và phân quyền
Members là khu vực quản lý, chỉ tài khoản có quyền admin mới nhìn thấy và thao tác được.
Bảng thành viên hiển thị gì?
Danh sách gồm những tài khoản đã được phê duyệt, trình bày theo hàng/card ngang để có thể xem đủ trên máy tính và kéo ngang khi cần. Mỗi thành viên thông thường có:
Thông tin nhận diện
Avatar, họ và tên, email, lớp, chức vụ và tag quyền: admin god, admin mini hoặc user.
Chuyên cần
Số lần có mặt, trễ, vắng, điểm chuyên cần và thống kê theo từng sự kiện dạng có mặt|trễ|vắng/buổi.
Các cấp quyền
| Cấp | Khả năng chính | Giới hạn |
|---|---|---|
| Admin god | Quản trị thành viên, sự kiện, ca QR, nhật ký, điểm chuyên cần và phê duyệt. | Không thể xoá/giáng chức tài khoản owner được hệ thống bảo vệ. |
| Admin mini | Tạo ca điểm danh, đề xuất sự kiện, tạo nhóm chat và thao tác theo quyền được cấp. | Phân quyền người khác phải gửi chủ nhiệm duyệt. |
| User | Xem khu vực được mở cho thành viên, quét QR và sử dụng chat. | Không có đặc quyền quản trị, không thấy Members/admin pages. |
| Coder / Nhà sáng lập | Tài khoản hệ thống đặc biệt, giữ tag Coder và quyền admin god theo cấu hình. | Không tính là thành viên; không hiển thị lớp, điểm hay lịch sử sự kiện ở Members. |
Phê duyệt tài khoản mới
Chủ nhiệm mở tab phê duyệt để xem hồ sơ đã gửi. Có thể duyệt, từ chối hoặc phân quyền ngay tại hồ sơ. Chỉ sau khi được duyệt, tài khoản mới vào Members và được tính vào dữ liệu quản lý. Hồ sơ chưa hoàn thành không được đưa vào hàng chờ.
Phân quyền và chức vụ tùy chỉnh
Chủ nhiệm dùng trang Quyền lực hóa để tạo chức vụ mới và gán một trong ba nhóm quyền. Các chức vụ mặc định không thể bị xóa. Tên chức vụ chỉ dùng chữ cái ASCII/chữ Việt có dấu và khoảng trắng; từ khóa liên quan coder/lập trình viên bị chặn để bảo vệ vai trò hệ thống.
04 · Sự kiện câu lạc bộ
Sự kiện là nơi gom các buổi hoạt động để thống kê chuyên cần có ngữ cảnh.
Tạo đề xuất sự kiện
- Chọn Sự kiệnMở trang Events và chọn nút tạo đề xuất.
- Nhập nội dungĐiền tên sự kiện, mô tả, ngày giờ, địa điểm và số buổi hoạt động. Ngày giờ dùng DD/MM/YYYY-HH:MM; dấu gạch và dấu hai chấm được tự định dạng.
- Kiểm tra lịchHệ thống tự xác định thứ, kiểm tra số ngày của từng tháng và năm nhuận, đồng thời chặn giờ ngoài 00:00–23:59.
- Gửi hoặc công bốAdmin cấp phù hợp có thể tạo trực tiếp theo quyền; các admin khác gửi đề xuất để chủ nhiệm phê duyệt.
Chỉnh sửa và xóa
Trên từng card sự kiện có nút chỉnh sửa và xóa. Chỉnh sửa được tên người đề xuất, mô tả, thời gian, địa điểm và số buổi. Xóa là thao tác không hoàn tác, nên hệ thống mở hộp xác nhận riêng trước khi thực hiện.
Quan trọng: Chỉ sự kiện đã duyệt mới có thể làm nguồn thống kê chính thức. Số buổi hoạt động của sự kiện là mẫu số dùng trong thống kê từng sự kiện.
05 · Điểm danh bằng QR
Đây là quy trình đầy đủ cho cả người tạo ca và thành viên quét mã.
A. Admin tạo một ca điểm danh
- Mở trang Điểm danhChọn Tạo mã điểm danh. Chỉ tài khoản admin được backend xác thực mới thấy và dùng nút này.
- Chọn sự kiện liên kếtChọn sự kiện đã duyệt nếu muốn ca này tính vào thống kê. Có thể chọn không liên kết để thử camera/mã; ca test không ghi có mặt, trễ hoặc vắng thật.
- Nhập mốc thời gianĐiền giờ bắt đầu và kết thúc theo DD/MM/YYYY-HH:MM. Hệ thống chặn ngày/tháng/giờ/phút không hợp lệ, không cho giờ âm, không nhận 24:00; phút 60 sẽ được chuẩn hóa sang giờ kế tiếp khi phù hợp.
- Cấu hình điểmNhập điểm cộng khi đúng giờ, điểm trừ khi đi trễ và điểm trừ khi vắng. Đây là cấu hình áp dụng cho ca có liên kết sự kiện.
- Tạo mãHệ thống sinh mã xác thực ngẫu nhiên 15 ký tự chữ-số và QR chứa dữ liệu ca. Mỗi admin có thể tạo nhiều ca độc lập cùng lúc; ca của admin này không làm mất QR của admin khác.
B. Thành viên quét mã
- Mở nút Quét QRTrên điện thoại, cho phép trình duyệt dùng camera khi được hỏi. Trên máy tính có camera cũng có thể dùng trình quét.
- Đưa QR vào khungGiữ mã nằm rõ trong khung. Nếu không dùng được camera, chọn nhập mã thủ công và gõ đủ 15 ký tự.
- Chờ hệ thống phản hồiServer kiểm tra mã, ca, tài khoản đăng nhập và mốc thời gian. Không thể tự sửa dữ liệu chỉ bằng cách sửa giao diện trình duyệt.
- Xem kết quảTrong thời hạn, tài khoản được ghi có mặt và cộng điểm theo cấu hình. Sau giờ kết thúc, lượt quét mới được ghi là trễ và trừ điểm. Khi ca đã đóng, QR không còn xuất hiện và không nhận lượt mới.
C. Khi nào ghi vắng?
Với ca có liên kết sự kiện, khi admin đóng ca, hệ thống đối chiếu danh sách thành viên đã duyệt. Người không có bản ghi trong ca được ghi vắng và trừ điểm theo cấu hình vắng. Vì vậy, chưa tổ chức ca thì không tự phát sinh vắng.
D. Cách đọc thống kê
| Hiển thị | Ý nghĩa |
|---|---|
| a|b|c/x buổi | a lần có mặt, b lần trễ, c lần vắng trên x buổi đã cấu hình của sự kiện. |
| Ca không liên kết | Chỉ dùng để test; không cộng/trừ điểm, không ghi có mặt/trễ/vắng và không làm thay đổi thống kê. |
| Nhiều QR | Mỗi QR có sessionId và dữ liệu xác thực riêng; có thể hoạt động song song. |
| Đã đóng | Ca biến mất khỏi khu vực QR đang hiệu lực; lịch sử vẫn được giữ để thống kê nếu ca đã liên kết. |
Không chia sẻ mã tùy tiện: QR là vé xác thực cho một ca cụ thể. Nếu nghi ngờ mã bị lộ, admin nên đóng ca và tạo ca mới thay vì tiếp tục dùng mã cũ.
06 · Chat thời gian thực
Chat hỗ trợ sảnh chung, hội thoại riêng và nhóm chat; danh sách cuộc trò chuyện được tối ưu cho mobile.
A. Sảnh chung
Sảnh chung là cuộc trò chuyện mặc định của câu lạc bộ. Avatar sảnh dùng logo.jpg. Thành viên đã đăng nhập có thể đọc và gửi tin nhắn theo quyền truy cập chat.
B. Chat riêng từng người
- Mở danh sách hội thoạiTrên mobile, khi vào Chat ban đầu sẽ thấy danh sách cuộc hội thoại, chưa cố định trong một cuộc trò chuyện.
- Chọn người muốn nhắnMạng lưới bạn bè mặc định kết nối tất cả tài khoản; người mới được nhìn thấy các tài khoản còn lại mà không cần gửi lời mời thủ công.
- Nhắn tin thời gian thựcChọn một người để mở socket riêng. Tin nhắn mới được đồng bộ trực tiếp khi kết nối ổn định.
- Đọc tin chưa đọcDanh sách hiển thị số tin chưa đọc theo từng hội thoại. Khi mở hội thoại, số chưa đọc của hội thoại đó được đánh dấu đã xem.
C. Nhóm chat
Admin god và admin mini có thể tạo nhóm, đặt tên nhóm, thêm hoặc đuổi thành viên trong nhóm do mình tạo. Tài khoản tạo nhóm có quyền đổi tên nhóm đó theo chính sách hiện hành.
D. Lịch sử, thu hồi và thao tác tin nhắn
512 tin nhắn gần nhất
Hội thoại riêng giữ tối đa 512 tin nhắn mới nhất; khi vượt giới hạn, tin cũ nhất bị loại trước.
Chỉ thu hồi tin của mình
Chuột phải hoặc nhấn giữ tin của người khác không có tùy chọn thu hồi. Bảng tùy chọn thu hồi chỉ hiện trên tin nhắn do chính bạn gửi.
Bạn có thể quay về danh sách bằng nút mũi tên trái trong header cuộc trò chuyện. Ô nhập tự giãn theo nội dung đến tối đa 250 px; trên mobile các nút chat giữ kích thước 38 × 38 px và thanh cuộn được làm gọn/ẩn.
Nếu realtime bị ngắt: kiểm tra mạng, dùng nút làm mới cuộc trò chuyện, rồi mở lại hội thoại. Tin nhắn đã lưu trên server không phụ thuộc riêng vào việc một tab đang mở.
07 · Khu vực quản trị
Các tính năng độc quyền chỉ hiển thị sau khi server xác nhận vai trò.
Nhật ký hoạt động
Chủ nhiệm xem ai đã tạo/sửa/xóa sự kiện, tạo hoặc đóng ca, phân quyền, duyệt thành viên và điều chỉnh dữ liệu. Hệ thống tự giữ 50 bản ghi mới nhất và xóa bản cũ nhất khi vượt giới hạn.
Điểm chuyên cần
Trang điều khiển cho admin cho phép cộng/trừ điểm theo tài khoản. Trang ẩn kiểm soát sâu chỉ được backend cho chủ nhiệm truy cập.
Bật/tắt đăng ký
Chủ nhiệm bật đợt tạo tài khoản khi muốn nhận hồ sơ mới; khi tắt, tài khoản mới không thể khởi tạo hồ sơ, chỉ tài khoản đã có mới đăng nhập.
Xóa dữ liệu lịch sử
Chỉ chủ nhiệm có thể xóa lịch sử điểm danh hoặc nhật ký hoạt động sau khi các ca đang mở đã được đóng.
Nguyên tắc thao tác admin
- Quyền được xác minh lại tại backend, không dựa vào việc ẩn/hiện nút ở frontend.
- Không thể phân quyền, giáng chức hoặc xóa tài khoản owner được bảo vệ bởi hệ thống.
- Admin mini khi phân quyền người khác sẽ tạo đề xuất; chủ nhiệm mới là người phê duyệt cuối.
- Chủ nhiệm có thể phân quyền trực tiếp theo quyền cao nhất của mình.
08 · Giao diện và hiển thị
Một vài hành vi giao diện giúp sử dụng ổn định trên máy tính và màn hình nhỏ.
| Khu vực | Hành vi |
|---|---|
| Theme | Theme sáng/tối dùng chung trên các page; nút mặt trời/mặt trăng giữ kích thước đồng nhất. Trang điểm danh được giữ theme sáng theo cấu hình. |
| Mobile | Navbar có nút ba gạch; Chat mở danh sách hội thoại trước; Members có thể kéo ngang để xem đủ cột. |
| Loading | Màn hình loading phủ toàn bộ viewport trước khi web hiển thị, có thanh tiến trình và animation riêng. |
| Cooldown | Cùng một nút hoặc cùng một form cần chờ 5 giây sau khi bấm; nút khác không bị khóa theo. |
09 · Xử lý lỗi thường gặp
Các bước kiểm tra nhanh trước khi liên hệ quản trị viên.
| Hiện tượng | Cách xử lý |
|---|---|
| Không thấy Members/admin page | Kiểm tra tài khoản đã được duyệt chưa và vai trò có phải admin không. Đăng xuất/đăng nhập lại để lấy phiên mới. |
| QR không hợp lệ | Nhập đủ mã 15 ký tự, không thêm khoảng trắng; kiểm tra ca còn trong thời gian hoạt động, chưa bị đóng và đang đăng nhập đúng tài khoản. |
| Không mở được camera | Cho phép quyền camera cho domain, dùng HTTPS, kiểm tra camera không bị ứng dụng khác chiếm dụng hoặc dùng nhập mã thủ công. |
| Tin nhắn không cập nhật | Kiểm tra mạng, mở lại hội thoại hoặc bấm làm mới. Nếu chỉ một nhóm bị lỗi, báo admin kèm thời điểm và tên hội thoại. |
| Thông tin hồ sơ không gửi | Điền đủ họ tên, lớp, ngày sinh; kiểm tra ngày hợp lệ và dung lượng avatar không quá 5 MB. |
Khi báo lỗi, không gửi mật khẩu, mã phiên, mã QR đang hoạt động hoặc ảnh chụp chứa thông tin riêng tư. Chỉ cung cấp mô tả, thời điểm, thiết bị và bước tái hiện.