Lashtw commited on
Commit
4829881
·
verified ·
1 Parent(s): a285279

Upload 10 files

Browse files
Files changed (1) hide show
  1. src/views/InstructorView.js +34 -31
src/views/InstructorView.js CHANGED
@@ -592,40 +592,43 @@ export function setupInstructorEvents() {
592
  }
593
  };
594
 
595
- // Bind Reject Button Logic
596
- const btnReject = document.getElementById('btn-reject-task');
597
- if (btnReject) {
598
- // Remove existing listeners to avoid duplicates (cloneNode trick)
599
- const newBtn = btnReject.cloneNode(true);
600
- btnReject.parentNode.replaceChild(newBtn, btnReject);
601
-
602
- newBtn.addEventListener('click', async () => {
603
- const modal = document.getElementById('broadcast-modal');
604
- const userId = modal.dataset.userId;
605
- const challengeId = modal.dataset.challengeId;
606
- const roomCode = localStorage.getItem('vibecoding_room_code');
607
-
608
- console.log('Reject attempt - Click details:', { dataset: modal.dataset, userId, challengeId, roomCode });
609
-
610
- if (!userId || !challengeId) {
611
- console.error('Missing userId or challengeId');
612
- return;
613
- }
 
 
614
 
615
- if (confirm('確定要退回此學員的進度嗎?學員將需要重新作答。')) {
616
- try {
617
- const { resetProgress } = await import("../services/classroom.js");
618
- const success = await resetProgress(userId, roomCode, challengeId);
619
 
620
- if (success) {
621
- alert('已成功退回,學員將需要重新作答。');
622
- window.closeBroadcastModal();
623
- } else {
624
- alert('找不到該學員的進度紀錄,無法退回 (Document Not Found)。');
 
 
 
 
625
  }
626
- } catch (e) {
627
- console.error("Reject failed:", e);
628
- alert('退回失敗: ' + e.message);
629
  }
630
  }
631
  });
 
592
  }
593
  };
594
 
595
+ // Bind Reject Button Logic (Delegated)
596
+ if (!window._rejectListenerAttached) {
597
+ window._rejectListenerAttached = true;
598
+ document.body.addEventListener('click', async (e) => {
599
+ const btnReject = e.target.closest('#btn-reject-task');
600
+ if (btnReject) {
601
+ console.log("Reject button clicked (Delegated Event)");
602
+ const modal = document.getElementById('broadcast-modal');
603
+ if (!modal) return;
604
+
605
+ const userId = modal.dataset.userId;
606
+ const challengeId = modal.dataset.challengeId;
607
+ const roomCode = localStorage.getItem('vibecoding_room_code');
608
+
609
+ console.log('Reject attempt - Click details:', { dataset: modal.dataset, userId, challengeId, roomCode });
610
+
611
+ if (!userId || !challengeId) {
612
+ console.error('Missing userId or challengeId');
613
+ alert("錯誤:無法讀取學員資訊 (Missing ID)");
614
+ return;
615
+ }
616
 
617
+ if (confirm('確定要退回此學員的進度嗎?學員將需要重新作答。')) {
618
+ try {
619
+ const { resetProgress } = await import("../services/classroom.js");
620
+ const success = await resetProgress(userId, roomCode, challengeId);
621
 
622
+ if (success) {
623
+ alert('已成功退回,學員將需要重新作答。');
624
+ window.closeBroadcastModal();
625
+ } else {
626
+ alert('找不到該學員的進度紀錄,無法退回 (Document Not Found)。');
627
+ }
628
+ } catch (e) {
629
+ console.error("Reject failed:", e);
630
+ alert('退回失敗: ' + e.message);
631
  }
 
 
 
632
  }
633
  }
634
  });