let currentQuestionnaire = null;
function formatDate(timestamp) {
if (!timestamp) return '-';
const date = new Date(timestamp);
return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;
}
function renderQuestion(question, index) {
const questionHtml = `
${index + 1}. ${question.title}
${question.required ? '*' : ''}
${
question.type === 'text' ?
`
` :
`
${question.options.map(option => `
`).join('')}
`
}
此题为必答题
`;
return questionHtml;
}
function loadQuestionnaire() {
const urlParams = new URLSearchParams(window.location.search);
const questionnaireId = urlParams.get('id');
if (!questionnaireId) {
alert('问卷ID不存在!');
window.location.href = 'myQuestion.html';
return;
}
const questionnaireList = JSON.parse(localStorage.getItem('questionnaireList') || '[]');
const questionnaire = questionnaireList.find(q => q.id === questionnaireId);
if (!questionnaire) {
alert('问卷不存在!');
window.location.href = 'myQuestion.html';
return;
}
if (questionnaire.status !== '已发布') {
alert('该问卷尚未发布!');
window.location.href = 'myQuestion.html';
return;
}
currentQuestionnaire = questionnaire;
// 填充问卷信息
document.querySelector('.question-title').textContent = questionnaire.title;
document.querySelector('.end-time').textContent = formatDate(questionnaire.data.endTime);
document.querySelector('.status').textContent = questionnaire.status;
// 渲染问题列表
const questionListHtml = questionnaire.data.questions
.map((question, index) => renderQuestion(question, index))
.join('');
document.querySelector('.question-list').innerHTML = questionListHtml;
}
function validateAnswers() {
let isValid = true;
currentQuestionnaire.data.questions.forEach(question => {
if (!question.required) return;
const errorElement = document.getElementById(`error_${question.id}`);
if (question.type === 'text') {
const answer = document.querySelector(`textarea[name="question_${question.id}"]`).value.trim();
if (!answer) {
errorElement.style.display = 'block';
isValid = false;
} else {
errorElement.style.display = 'none';
}
} else {
const checked = document.querySelector(`input[name="question_${question.id}"]:checked`);
if (!checked) {
errorElement.style.display = 'block';
isValid = false;
} else {
errorElement.style.display = 'none';
}
}
});
return isValid;
}
function submitQuestionnaire() {
if (!validateAnswers()) {
alert('请回答所有问题!');
return;
}
const answers = {
questionnaireId: currentQuestionnaire.id,
submitTime: new Date().getTime(),
answers: currentQuestionnaire.data.questions.map(question => {
if (question.type === 'text') {
return {
questionId: question.id,
type: question.type,
answer: document.querySelector(`textarea[name="question_${question.id}"]`).value.trim()
};
} else {
const selectedOptions = Array.from(
document.querySelectorAll(`input[name="question_${question.id}"]:checked`)
).map(input => parseInt(input.value));
return {
questionId: question.id,
type: question.type,
answer: selectedOptions
};
}
})
};
// 保存答案到 localStorage
let answersList = JSON.parse(localStorage.getItem('questionnaireAnswers') || '[]');
answersList.push(answers);
localStorage.setItem('questionnaireAnswers', JSON.stringify(answersList));
alert('问卷提交成功!');
window.location.href = 'myQuestion.html';
}
window.onload = loadQuestionnaire;