From 3fa8778084a5a4456e98cb022416263a8902565c Mon Sep 17 00:00:00 2001 From: PhuocNTB Date: Thu, 2 Jul 2026 16:05:59 +0700 Subject: [PATCH] fix ui teacher --- .../src/components/ExamRoomWorkspace.tsx | 17 ++++--- management/src/components/LearningTab.tsx | 21 ++++---- server/internal/handlers/handlers_exam.go | 48 ++++++++---------- server/server.exe | Bin 20408320 -> 20407296 bytes 4 files changed, 40 insertions(+), 46 deletions(-) diff --git a/management/src/components/ExamRoomWorkspace.tsx b/management/src/components/ExamRoomWorkspace.tsx index 5b76d00..9200d60 100644 --- a/management/src/components/ExamRoomWorkspace.tsx +++ b/management/src/components/ExamRoomWorkspace.tsx @@ -61,7 +61,6 @@ export const ExamRoomWorkspace: React.FC = ({ examId, onBack }) => { const [editable, setEditable] = useState(false); const [prepEditable, setPrepEditable] = useState(false); const [displayStatus, setDisplayStatus] = useState('draft'); - const canEditApps = displayStatus === 'draft' || displayStatus === 'ready' || displayStatus === 'active'; const [searchMode, setSearchMode] = useState<'single' | 'bulk'>('single'); const [bulkInput, setBulkInput] = useState(''); const [canPublish, setCanPublish] = useState(false); @@ -96,6 +95,10 @@ export const ExamRoomWorkspace: React.FC = ({ examId, onBack }) => { const [pdfLoading, setPdfLoading] = useState(false); const [inlineResource, setInlineResource] = useState<{ url: string; title: string; isImage: boolean } | null>(null); + const canEditApps = displayStatus === 'draft' || displayStatus === 'ready' || displayStatus === 'active'; + const anyPaperSent = students.some((s) => s.paperSentAt); + const canModifyPapers = prepEditable || (!anyPaperSent && (displayStatus === 'draft' || displayStatus === 'ready' || displayStatus === 'active')); + const load = useCallback(async () => { setLoading(true); try { @@ -727,12 +730,12 @@ export const ExamRoomWorkspace: React.FC = ({ examId, onBack }) => {

Mỗi gói đề gồm 1 file PDF (đề chính) và tài nguyên kèm (ảnh, zip, doc…). Chia ngẫu nhiên sẽ gán cả gói cho từng sinh viên.

- {!prepEditable && ( + {!canModifyPapers && (

- Không thể thêm gói đề — phòng đã khóa hoặc đã tới giờ thi. + Không thể thay đổi gói đề — đề thi đã được gửi cho sinh viên hoặc phòng thi đã kết thúc.

)} - {prepEditable && ( + {canModifyPapers && (
= ({ examId, onBack }) => { />