145 lines
5.3 KiB
JavaScript
145 lines
5.3 KiB
JavaScript
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 = `
|
||
<div class="question-item">
|
||
<div class="question-item-title">
|
||
${index + 1}. ${question.title}
|
||
${question.required ? '<span style="color: red; margin-left: 5px;">*</span>' : ''}
|
||
</div>
|
||
${
|
||
question.type === 'text' ?
|
||
`<div class="question-content">
|
||
<textarea class="text-answer" name="question_${question.id}"
|
||
style="width: 100%; min-height: 100px; padding: 8px; margin-top: 10px; resize: vertical;"
|
||
placeholder="请在此输入您的答案"></textarea>
|
||
</div>` :
|
||
`<div class="options">
|
||
${question.options.map(option => `
|
||
<div class="option-item">
|
||
<input type="${question.type}"
|
||
id="option_${question.id}_${option.id}"
|
||
name="question_${question.id}"
|
||
value="${option.id}">
|
||
<label for="option_${question.id}_${option.id}">${option.content}</label>
|
||
</div>
|
||
`).join('')}
|
||
</div>`
|
||
}
|
||
<div class="error-message" id="error_${question.id}">此题为必答题</div>
|
||
</div>
|
||
`;
|
||
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; |