生成的测评链接

This commit is contained in:
朱潮 2025-11-16 23:32:09 +08:00
parent e22a116872
commit 63b004412a

View File

@ -2370,28 +2370,37 @@
generateBtn.querySelector('.button-text').textContent = '正在生成链接...'; generateBtn.querySelector('.button-text').textContent = '正在生成链接...';
generateBtn.disabled = true; generateBtn.disabled = true;
// 调用后端API创建会话和开始答题一样的逻辑 // iOS兼容性使用setTimeout确保请求是用户直接触发的
const response = await fetch('/api/create-session', { const response = await new Promise((resolve, reject) => {
method: 'POST', setTimeout(async () => {
headers: { try {
'Content-Type': 'application/json' const fetchResponse = await fetch('/api/create-session', {
}, method: 'POST',
body: JSON.stringify({ headers: {
name: studentName, 'Content-Type': 'application/json'
school: studentSchool, },
grade: studentGrade, body: JSON.stringify({
phone: studentPhone, name: studentName,
selectedSubject: document.getElementById('subjectFilterSelect').value || '', school: studentSchool,
selectedSemester: document.getElementById('gradeFilterSelect').value || '', grade: studentGrade,
selectedExamType: '', phone: studentPhone,
selectedUnit: document.getElementById('unitFilterSelect').value || '', selectedSubject: document.getElementById('subjectFilterSelect').value || '',
selectedCategory: '', selectedSemester: document.getElementById('gradeFilterSelect').value || '',
selectedQuestionType: '', selectedExamType: '',
selectedTag: this.selectedTag, selectedUnit: document.getElementById('unitFilterSelect').value || '',
selectedTagsList: [], selectedCategory: '',
questionsConfig: this.currentRules, selectedQuestionType: '',
scoreRange: scoreRange selectedTag: this.selectedTag,
}) selectedTagsList: [],
questionsConfig: this.currentRules,
scoreRange: scoreRange
})
});
resolve(fetchResponse);
} catch (error) {
reject(error);
}
}, 0);
}); });
if (!response.ok) { if (!response.ok) {
@ -2437,11 +2446,19 @@
} catch (error) { } catch (error) {
console.error('生成测评链接失败:', error); console.error('生成测评链接失败:', error);
this.showErrorDialog('生成测评链接失败', const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent);
`创建测评链接时发生错误:<br><br> const errorMessage = error.message.includes('not allowed') && isIOS
? `iOS设备权限限制请确保<br><br>
• 在Safari设置中允许网页访问网络<br>
• 尝试在Safari中"重新加载页面"<br>
• 检查是否启用了"限制网页跟踪"<br>
• 如仍失败请尝试使用其他浏览器如Chrome<br><br>
技术细节:${error.message}`
: `创建测评链接时发生错误:<br><br>
错误信息:${error.message}<br><br> 错误信息:${error.message}<br><br>
请检查网络连接或联系技术支持。` 请检查网络连接或联系技术支持。`;
);
this.showErrorDialog('生成测评链接失败', errorMessage);
} finally { } finally {
// 恢复按钮状态 // 恢复按钮状态
const generateBtn = document.getElementById('generateLinkBtn'); const generateBtn = document.getElementById('generateLinkBtn');
@ -2506,28 +2523,37 @@
startBtn.querySelector('.button-text').textContent = '正在创建答题会话...'; startBtn.querySelector('.button-text').textContent = '正在创建答题会话...';
startBtn.disabled = true; startBtn.disabled = true;
// 调用后端API创建会话 // iOS兼容性使用setTimeout确保请求是用户直接触发的
const response = await fetch('/api/create-session', { const response = await new Promise((resolve, reject) => {
method: 'POST', setTimeout(async () => {
headers: { try {
'Content-Type': 'application/json' const fetchResponse = await fetch('/api/create-session', {
}, method: 'POST',
body: JSON.stringify({ headers: {
name: studentName, 'Content-Type': 'application/json'
school: studentSchool, },
grade: studentGrade, body: JSON.stringify({
phone: studentPhone, name: studentName,
selectedSubject: document.getElementById('subjectFilterSelect').value || '', school: studentSchool,
selectedSemester: document.getElementById('gradeFilterSelect').value || '', grade: studentGrade,
selectedExamType: '', phone: studentPhone,
selectedUnit: document.getElementById('unitFilterSelect').value || '', selectedSubject: document.getElementById('subjectFilterSelect').value || '',
selectedCategory: '', selectedSemester: document.getElementById('gradeFilterSelect').value || '',
selectedQuestionType: '', selectedExamType: '',
selectedTag: this.selectedTag, selectedUnit: document.getElementById('unitFilterSelect').value || '',
selectedTagsList: [], selectedCategory: '',
questionsConfig: this.currentRules, selectedQuestionType: '',
scoreRange: scoreRange selectedTag: this.selectedTag,
}) selectedTagsList: [],
questionsConfig: this.currentRules,
scoreRange: scoreRange
})
});
resolve(fetchResponse);
} catch (error) {
reject(error);
}
}, 0);
}); });
if (!response.ok) { if (!response.ok) {
@ -2549,11 +2575,19 @@
} catch (error) { } catch (error) {
console.error('开始答题失败:', error); console.error('开始答题失败:', error);
this.showErrorDialog('开始答题失败', const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent);
`创建答题会话时发生错误:<br><br> const errorMessage = error.message.includes('not allowed') && isIOS
? `iOS设备权限限制请确保<br><br>
• 在Safari设置中允许网页访问网络<br>
• 尝试在Safari中"重新加载页面"<br>
• 检查是否启用了"限制网页跟踪"<br>
• 如仍失败请尝试使用其他浏览器如Chrome<br><br>
技术细节:${error.message}`
: `创建答题会话时发生错误:<br><br>
错误信息:${error.message}<br><br> 错误信息:${error.message}<br><br>
请检查网络连接或联系技术支持。` 请检查网络连接或联系技术支持。`;
);
this.showErrorDialog('开始答题失败', errorMessage);
// 恢复按钮状态 // 恢复按钮状态
const startBtn = document.getElementById('startSurvey'); const startBtn = document.getElementById('startSurvey');