feat: 添加一键优化提示词功能
- 在 ICHelperPanel.ts 添加 optimizePrompt 消息处理分支 - 新增 promptOptimizeService.ts 调用后端优化 API - 完善 WebView 端优化按钮交互逻辑
This commit is contained in:
@ -60,35 +60,97 @@ export function getOptimizeButtonScript(): string {
|
||||
return `
|
||||
let isOptimized = false; // 标记是否已优化
|
||||
let originalText = ''; // 保存原始文本用于撤回
|
||||
let isOptimizing = false; // 标记是否正在优化中
|
||||
|
||||
function handleOptimize() {
|
||||
console.log('[Optimize] handleOptimize 被调用');
|
||||
console.log('[Optimize] isOptimizing:', isOptimizing);
|
||||
console.log('[Optimize] isOptimized:', isOptimized);
|
||||
console.log('[Optimize] messageInput:', messageInput);
|
||||
|
||||
if (isOptimizing) {
|
||||
console.log('[Optimize] 正在优化中,忽略点击');
|
||||
return; // 正在优化中,忽略点击
|
||||
}
|
||||
|
||||
if (isOptimized) {
|
||||
// 撤回操作
|
||||
console.log('[Optimize] 执行撤回操作');
|
||||
messageInput.value = originalText;
|
||||
resetOptimizeButton();
|
||||
} else {
|
||||
// 优化操作
|
||||
const currentText = messageInput.value.trim();
|
||||
console.log('[Optimize] 当前输入内容:', currentText);
|
||||
console.log('[Optimize] 内容长度:', currentText.length);
|
||||
|
||||
if (!currentText) {
|
||||
console.log('[Optimize] 输入框为空,不执行优化');
|
||||
return; // 输入框为空,不执行优化
|
||||
}
|
||||
|
||||
originalText = messageInput.value; // 保存原始文本
|
||||
isOptimizing = true;
|
||||
console.log('[Optimize] 开始优化,显示加载状态');
|
||||
|
||||
// 使用死数据替换输入框内容
|
||||
const optimizedTexts = [
|
||||
'请帮我优化这段代码,提高性能和可读性',
|
||||
'请分析这个问题并给出最佳解决方案',
|
||||
'请帮我重构这段代码,使其更加简洁高效',
|
||||
'请检查代码中的潜在问题并提供改进建议'
|
||||
];
|
||||
const randomText = optimizedTexts[Math.floor(Math.random() * optimizedTexts.length)];
|
||||
messageInput.value = randomText;
|
||||
// 显示加载状态
|
||||
showOptimizeLoading();
|
||||
|
||||
// 切换到撤回状态
|
||||
isOptimized = true;
|
||||
updateOptimizeButton();
|
||||
// 发送优化请求到扩展
|
||||
console.log('[Optimize] 发送 optimizePrompt 消息');
|
||||
vscode.postMessage({
|
||||
command: 'optimizePrompt',
|
||||
prompt: currentText
|
||||
});
|
||||
console.log('[Optimize] postMessage 已发送');
|
||||
}
|
||||
|
||||
messageInput.focus();
|
||||
autoResizeTextarea();
|
||||
}
|
||||
|
||||
// 处理优化结果
|
||||
function handleOptimizeResult(success, optimizedPrompt, error) {
|
||||
isOptimizing = false;
|
||||
hideOptimizeLoading();
|
||||
|
||||
if (success && optimizedPrompt) {
|
||||
messageInput.value = optimizedPrompt;
|
||||
isOptimized = true;
|
||||
updateOptimizeButton();
|
||||
} else {
|
||||
// 优化失败,恢复原始文本
|
||||
messageInput.value = originalText;
|
||||
console.error('优化失败:', error);
|
||||
}
|
||||
|
||||
messageInput.focus();
|
||||
autoResizeTextarea();
|
||||
}
|
||||
|
||||
function showOptimizeLoading() {
|
||||
const optimizeButton = document.getElementById('optimizeButton');
|
||||
const optimizeIcon = document.getElementById('optimizeIcon');
|
||||
if (optimizeButton && optimizeIcon) {
|
||||
optimizeButton.disabled = true;
|
||||
optimizeButton.style.opacity = '0.5';
|
||||
// 显示加载动画
|
||||
optimizeIcon.innerHTML = '<circle cx="512" cy="512" r="400" fill="none" stroke="#409eff" stroke-width="60" stroke-dasharray="1200" stroke-dashoffset="0"><animateTransform attributeName="transform" type="rotate" from="0 512 512" to="360 512 512" dur="1s" repeatCount="indefinite"/></circle>';
|
||||
}
|
||||
}
|
||||
|
||||
function hideOptimizeLoading() {
|
||||
const optimizeButton = document.getElementById('optimizeButton');
|
||||
if (optimizeButton) {
|
||||
optimizeButton.disabled = false;
|
||||
optimizeButton.style.opacity = '1';
|
||||
}
|
||||
// 恢复图标会在 updateOptimizeButton 或 resetOptimizeButton 中处理
|
||||
if (!isOptimized) {
|
||||
resetOptimizeButton();
|
||||
}
|
||||
}
|
||||
|
||||
function updateOptimizeButton() {
|
||||
const optimizeIcon = document.getElementById('optimizeIcon');
|
||||
const optimizeTooltip = document.getElementById('optimizeTooltip');
|
||||
|
||||
Reference in New Issue
Block a user