async function saveData() { // লোডার সেট করা let cellId = (editingRowIndex === -1 || isInsertMode) ? 'q-cell-new' : `q-cell-${editingRowIndex}`; document.getElementById(cellId).innerHTML = '
'; let action = isInsertMode ? 'insert_before' : (editingRowIndex > -1 ? 'update' : 'insert'); let params = new URLSearchParams(); // বিদ্যমান প্যারামিটারগুলো রাখা হয়েছে params.append('secretKey', SYSTEM_SECRET_KEY); params.append('sheetName', document.getElementById('classSelect').value); params.append('action', action); params.append('rowIndex', editingRowIndex); params.append('Title', document.getElementById('title').value); params.append('QuestionNumber', document.getElementById('qNumber').value); params.append('BookPageNumber', document.getElementById('pageNumber').value); params.append('VideoLink', document.getElementById('videoLink').value); params.append('StartTime', document.getElementById('startTime').value); params.append('EndTime', document.getElementById('endTime').value); // --- নতুন পরিবর্তন এখানে --- // ১. BookPageImage (যদি আপনার ইনপুট থাকে তবে আইডি দিন, না থাকলে ব্ল্যাঙ্ক রাখলাম) params.append('BookPageImage', document.getElementById('pageImage') ? document.getElementById('pageImage').value : ''); // ২. Alphabet ড্রপডাউন থেকে মান সংগ্রহ (H কলামের জন্য) params.append('ALPHABET', document.getElementById('alphabetSelect').value); // ৩. Numeric ID ড্রপডাউন থেকে মান সংগ্রহ (I কলামের জন্য) params.append('NUMERIC-ID', document.getElementById('numericIdSelect').value); // ৪. Status (J কলামের জন্য) - আপনি 'locked' রাখতে চেয়েছেন params.append('Status', 'locked'); // ------------------------- // সার্ভারে ডেটা পাঠানো await fetch(WEB_APP_URL, { method: 'POST', mode: 'no-cors', body: params }); // স্টেট আপডেট এবং রিফ্রেশ লজিক let prevIdx = editingRowIndex; isInsertMode = false; editingRowIndex = -1; await new Promise(r => setTimeout(r, 1500)); await fetchSheetData(document.getElementById('classSelect').value); lastSavedIdx = (action === 'insert') ? sheetData.length - 1 : prevIdx; renderTable(); }