fix ui teacher
Some checks failed
Deploy on Master Change / deploy (push) Failing after 37s

This commit is contained in:
2026-07-02 16:05:59 +07:00
parent 1b424ab62d
commit 3fa8778084
4 changed files with 40 additions and 46 deletions

View File

@@ -61,7 +61,6 @@ export const ExamRoomWorkspace: React.FC<Props> = ({ 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<Props> = ({ 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<Props> = ({ examId, onBack }) => {
<p className="config-card-desc">
Mỗi gói đ gồm <strong>1 file PDF</strong> (đ chính) <strong>tài nguyên kèm</strong> (nh, zip, doc). Chia ngẫu nhiên sẽ gán cả gói cho từng sinh viên.
</p>
{!prepEditable && (
{!canModifyPapers && (
<p className="config-card-desc" style={{ color: 'var(--danger)' }}>
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.
</p>
)}
{prepEditable && (
{canModifyPapers && (
<div style={{ display: 'flex', flexDirection: 'column', gap: '0.65rem', marginBottom: '0.75rem' }}>
<input
className="search-input"
@@ -749,7 +752,7 @@ export const ExamRoomWorkspace: React.FC<Props> = ({ examId, onBack }) => {
/>
</label>
<label className="login-field">
<span>Tài nguyên kèm (tùy chọn, nhiều file)</span>
<span>Tài nguyên kèm (tùy chọn, many files)</span>
<input
type="file"
multiple
@@ -800,7 +803,7 @@ export const ExamRoomWorkspace: React.FC<Props> = ({ examId, onBack }) => {
))
)}
</ul>
{prepEditable && (
{canModifyPapers && (
<div style={{ display: 'flex', gap: '0.35rem', marginTop: '0.5rem', flexWrap: 'wrap' }}>
<label className="btn btn-ghost btn-sm" style={{ cursor: 'pointer' }}>
+ Tài nguyên
@@ -815,7 +818,7 @@ export const ExamRoomWorkspace: React.FC<Props> = ({ examId, onBack }) => {
))}
</div>
)}
{papers.length > 0 && students.length > 0 && prepEditable && (
{papers.length > 0 && students.length > 0 && canModifyPapers && (
<button type="button" className="btn btn-secondary" style={{ width: '100%', marginTop: '0.65rem' }} onClick={assignRandomPackages}>
Chia gói đ ngẫu nhiên
</button>

View File

@@ -91,7 +91,6 @@ export const LearningTab: React.FC = () => {
const handleActivateClass = async (cls: ClassItem) => {
setShowAddClassModal(false);
try {
await apiApplyScheduleTemplate(cls.rkId);
await apiSaveAllowedApps(cls.rkId, DEFAULT_ALLOWED_APPS);
await loadActiveClasses();
handleOpenConfig(cls as ActiveClassItem);
@@ -564,16 +563,16 @@ export const LearningTab: React.FC = () => {
borderRadius: 'var(--radius-sm)',
transition: 'var(--transition)'
}}
onMouseEnter={(e) => {
e.currentTarget.style.borderColor = 'rgba(187, 33, 38, 0.25)';
e.currentTarget.style.backgroundColor = '#fff';
e.currentTarget.style.boxShadow = 'var(--shadow-sm)';
}}
onMouseLeave={(e) => {
e.currentTarget.style.borderColor = 'var(--border-color)';
e.currentTarget.style.backgroundColor = 'var(--bg-app)';
e.currentTarget.style.boxShadow = 'none';
}}
onMouseEnter={(e) => {
e.currentTarget.style.borderColor = 'rgba(187, 33, 38, 0.25)';
e.currentTarget.style.backgroundColor = '#fff';
e.currentTarget.style.boxShadow = 'var(--shadow-sm)';
}}
onMouseLeave={(e) => {
e.currentTarget.style.borderColor = 'var(--border-color)';
e.currentTarget.style.backgroundColor = 'var(--bg-app)';
e.currentTarget.style.boxShadow = 'none';
}}
>
<div>
<div style={{ fontWeight: 700, color: 'var(--text-primary)', fontSize: '0.9rem' }}>{c.classCode}</div>