fix: AI提问时支持文本输入框
- 当options为空时显示textarea让用户自由输入答案
This commit is contained in:
@ -1209,13 +1209,20 @@ export function getMessageAreaScript(): string {
|
|||||||
const inputName = \`q\${qIndex}\`;
|
const inputName = \`q\${qIndex}\`;
|
||||||
const selectedAnswers = savedAnswers[qIndex] || [];
|
const selectedAnswers = savedAnswers[qIndex] || [];
|
||||||
|
|
||||||
const optionsHtml = q.options.map(opt => {
|
// 如果没有选项,显示文本输入框
|
||||||
|
let optionsHtml;
|
||||||
|
if (!q.options || q.options.length === 0) {
|
||||||
|
const savedText = selectedAnswers[0] || '';
|
||||||
|
optionsHtml = \`<textarea class="question-text-input" name="\${inputName}" placeholder="请输入您的答案..." style="width:100%;min-height:80px;padding:8px;border:1px solid var(--vscode-input-border);border-radius:4px;background:var(--vscode-input-background);color:var(--vscode-input-foreground);resize:vertical;" \${isAnswered ? 'disabled' : ''}>\${savedText}</textarea>\`;
|
||||||
|
} else {
|
||||||
|
optionsHtml = q.options.map(opt => {
|
||||||
const isSelected = selectedAnswers.includes(opt);
|
const isSelected = selectedAnswers.includes(opt);
|
||||||
return \`<label class="question-option\${isSelected ? ' selected' : ''}" style="display:flex;align-items:center;gap:6px;cursor:pointer;padding:5px 5px 5px 0;">
|
return \`<label class="question-option\${isSelected ? ' selected' : ''}" style="display:flex;align-items:center;gap:6px;cursor:pointer;padding:5px 5px 5px 0;">
|
||||||
<input type="\${inputType}" name="\${inputName}" value="\${opt}" \${isSelected ? 'checked' : ''} \${isAnswered ? 'disabled' : ''}>
|
<input type="\${inputType}" name="\${inputName}" value="\${opt}" \${isSelected ? 'checked' : ''} \${isAnswered ? 'disabled' : ''}>
|
||||||
<span>\${opt}</span>
|
<span>\${opt}</span>
|
||||||
</label>\`;
|
</label>\`;
|
||||||
}).join('');
|
}).join('');
|
||||||
|
}
|
||||||
|
|
||||||
return \`
|
return \`
|
||||||
<div class="question-item" data-question-index="\${qIndex}" style="margin-bottom:12px;">
|
<div class="question-item" data-question-index="\${qIndex}" style="margin-bottom:12px;">
|
||||||
@ -1238,8 +1245,15 @@ export function getMessageAreaScript(): string {
|
|||||||
submitBtn.addEventListener('click', function() {
|
submitBtn.addEventListener('click', function() {
|
||||||
const answers = {};
|
const answers = {};
|
||||||
questions.forEach((q, qIndex) => {
|
questions.forEach((q, qIndex) => {
|
||||||
|
// 检查是否是文本输入框
|
||||||
|
const textarea = segmentDiv.querySelector(\`textarea[name="q\${qIndex}"]\`);
|
||||||
|
if (textarea) {
|
||||||
|
const value = textarea.value.trim();
|
||||||
|
answers[qIndex] = value ? [value] : [];
|
||||||
|
} else {
|
||||||
const inputs = segmentDiv.querySelectorAll(\`input[name="q\${qIndex}"]:checked\`);
|
const inputs = segmentDiv.querySelectorAll(\`input[name="q\${qIndex}"]:checked\`);
|
||||||
answers[qIndex] = Array.from(inputs).map(input => input.value);
|
answers[qIndex] = Array.from(inputs).map(input => input.value);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
handleMultiQuestionAnswer(segment.askId, answers, segmentDiv);
|
handleMultiQuestionAnswer(segment.askId, answers, segmentDiv);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user