Spaces:
Running
Running
Upload 10 files
Browse files- src/views/InstructorView.js +43 -43
src/views/InstructorView.js
CHANGED
|
@@ -375,6 +375,46 @@ export async function renderInstructorView() {
|
|
| 375 |
|
| 376 |
export function setupInstructorEvents() {
|
| 377 |
console.log("Starting setupInstructorEvents...");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 378 |
|
| 379 |
// Login Logic
|
| 380 |
const authErrorMsg = document.getElementById('auth-error');
|
|
@@ -801,6 +841,8 @@ const checkPermissions = (instructor) => {
|
|
| 801 |
if (!instructor) return;
|
| 802 |
|
| 803 |
currentInstructor = instructor;
|
|
|
|
|
|
|
| 804 |
|
| 805 |
// UI References (Live Query)
|
| 806 |
const liveCreateBtn = document.getElementById('create-room-btn');
|
|
@@ -1401,50 +1443,7 @@ if (navInstBtn) {
|
|
| 1401 |
|
| 1402 |
|
| 1403 |
|
| 1404 |
-
// Expose Nav Functions Globally
|
| 1405 |
-
window.openAdminPanel = () => {
|
| 1406 |
-
// Validation handled by UI visibility, but double check
|
| 1407 |
-
if (!currentInstructor?.permissions?.includes('add_question')) return alert("無權限");
|
| 1408 |
|
| 1409 |
-
// Use a simple prompt for now or open a modal
|
| 1410 |
-
// For now, let's just toggle the admin view (or navigate)
|
| 1411 |
-
// Since we reverted AdminView, we might just show an alert or a different modal
|
| 1412 |
-
// Based on original code, it seemed to just show an alert or navigate?
|
| 1413 |
-
alert("管理功能尚未開放 (Admin Function Placeholder)");
|
| 1414 |
-
};
|
| 1415 |
-
|
| 1416 |
-
window.openInstructorPanel = async () => {
|
| 1417 |
-
if (!currentInstructor?.permissions?.includes('manage_instructors')) return alert("無權限");
|
| 1418 |
-
|
| 1419 |
-
const modal = document.getElementById('instructor-modal');
|
| 1420 |
-
if (modal) {
|
| 1421 |
-
modal.classList.remove('hidden');
|
| 1422 |
-
await loadInstructorList();
|
| 1423 |
-
}
|
| 1424 |
-
};
|
| 1425 |
-
|
| 1426 |
-
// Add Instructor Event
|
| 1427 |
-
window.addInstructorHandler = async () => {
|
| 1428 |
-
const email = document.getElementById('new-inst-email').value.trim();
|
| 1429 |
-
const name = document.getElementById('new-inst-name').value.trim();
|
| 1430 |
-
const perms = [];
|
| 1431 |
-
if (document.getElementById('perm-room').checked) perms.push('create_room');
|
| 1432 |
-
if (document.getElementById('perm-q').checked) perms.push('add_question');
|
| 1433 |
-
if (document.getElementById('perm-inst').checked) perms.push('manage_instructors');
|
| 1434 |
-
|
| 1435 |
-
if (!email || !name) return alert("請輸入完整資料");
|
| 1436 |
-
|
| 1437 |
-
try {
|
| 1438 |
-
await addInstructor(email, name, perms);
|
| 1439 |
-
alert("新增成功");
|
| 1440 |
-
await loadInstructorList(); // Reload
|
| 1441 |
-
document.getElementById('new-inst-email').value = '';
|
| 1442 |
-
document.getElementById('new-inst-name').value = '';
|
| 1443 |
-
} catch (e) {
|
| 1444 |
-
console.error(e);
|
| 1445 |
-
alert("新增失敗: " + e.message);
|
| 1446 |
-
}
|
| 1447 |
-
};
|
| 1448 |
|
| 1449 |
const btnAddInst = document.getElementById('btn-add-inst');
|
| 1450 |
if (btnAddInst) {
|
|
@@ -2605,3 +2604,4 @@ if (navInstBtn) {
|
|
| 2605 |
|
| 2606 |
|
| 2607 |
|
|
|
|
|
|
| 375 |
|
| 376 |
export function setupInstructorEvents() {
|
| 377 |
console.log("Starting setupInstructorEvents...");
|
| 378 |
+
if (typeof window.currentInstructor === 'undefined') window.currentInstructor = null;
|
| 379 |
+
|
| 380 |
+
|
| 381 |
+
// --- Global Nav Functions (Hoisted) ---
|
| 382 |
+
window.openAdminPanel = () => {
|
| 383 |
+
if (!window.currentInstructor?.permissions?.includes('add_question')) return alert("無權限");
|
| 384 |
+
alert("管理功能尚未開放 (Admin Function Placeholder)");
|
| 385 |
+
};
|
| 386 |
+
|
| 387 |
+
window.openInstructorPanel = async () => {
|
| 388 |
+
if (!window.currentInstructor?.permissions?.includes('manage_instructors')) return alert("無權限");
|
| 389 |
+
const modal = document.getElementById('instructor-modal');
|
| 390 |
+
if (modal) {
|
| 391 |
+
modal.classList.remove('hidden');
|
| 392 |
+
if (typeof loadInstructorList === 'function') await loadInstructorList();
|
| 393 |
+
else console.error("loadInstructorList not found");
|
| 394 |
+
}
|
| 395 |
+
};
|
| 396 |
+
|
| 397 |
+
window.addInstructorHandler = async () => {
|
| 398 |
+
const email = document.getElementById('new-inst-email').value.trim();
|
| 399 |
+
const name = document.getElementById('new-inst-name').value.trim();
|
| 400 |
+
const perms = [];
|
| 401 |
+
if (document.getElementById('perm-room').checked) perms.push('create_room');
|
| 402 |
+
if (document.getElementById('perm-q').checked) perms.push('add_question');
|
| 403 |
+
if (document.getElementById('perm-inst').checked) perms.push('manage_instructors');
|
| 404 |
+
|
| 405 |
+
if (!email || !name) return alert("請輸入完整資料");
|
| 406 |
+
|
| 407 |
+
try {
|
| 408 |
+
await addInstructor(email, name, perms);
|
| 409 |
+
alert("新增成功");
|
| 410 |
+
if (typeof loadInstructorList === 'function') await loadInstructorList();
|
| 411 |
+
document.getElementById('new-inst-email').value = '';
|
| 412 |
+
document.getElementById('new-inst-name').value = '';
|
| 413 |
+
} catch (e) {
|
| 414 |
+
console.error(e);
|
| 415 |
+
alert("新增失敗: " + e.message);
|
| 416 |
+
}
|
| 417 |
+
};
|
| 418 |
|
| 419 |
// Login Logic
|
| 420 |
const authErrorMsg = document.getElementById('auth-error');
|
|
|
|
| 841 |
if (!instructor) return;
|
| 842 |
|
| 843 |
currentInstructor = instructor;
|
| 844 |
+
window.currentInstructor = instructor; // Sync global for nav functions
|
| 845 |
+
|
| 846 |
|
| 847 |
// UI References (Live Query)
|
| 848 |
const liveCreateBtn = document.getElementById('create-room-btn');
|
|
|
|
| 1443 |
|
| 1444 |
|
| 1445 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1446 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1447 |
|
| 1448 |
const btnAddInst = document.getElementById('btn-add-inst');
|
| 1449 |
if (btnAddInst) {
|
|
|
|
| 2604 |
|
| 2605 |
|
| 2606 |
|
| 2607 |
+
|