in spring-ai-alibaba-jmanus/src/main/resources/static/plan-template/js/plan-template.js [477:612]
async function executePlan() {
if (isExecuting) {
return;
}
if (!currentPlanTemplateId) {
alert('没有可执行的计划模板');
return;
}
try {
isExecuting = true;
updateUIState();
let jsonContent = jsonEditor.value.trim();
let response;
// 获取执行参数(如果有)
let executionParams = null;
if (planParamsInput && planParamsInput.value.trim()) {
try {
executionParams = planParamsInput.value.trim();
console.log('使用自定义参数执行计划:', executionParams);
} catch (e) {
console.error('参数JSON解析错误', e);
alert('无效的参数JSON格式: ' + e.message);
isExecuting = false;
updateUIState();
return;
}
}
// 检查JSON内容是否已修改
let isModified = true;
if (currentVersionIndex >= 0 && planVersions.length > 0) {
const latestVersion = planVersions[currentVersionIndex];
isModified = jsonContent !== latestVersion;
}
if (isModified) {
// JSON已修改,先保存新版本
// 保存此版本到版本历史
saveToVersionHistory(jsonContent);
// 保存到服务器
await savePlanToServer(currentPlanTemplateId, jsonContent);
console.log('修改后的JSON已保存,使用计划模板ID执行');
}
// 使用现有计划模板ID执行,使用统一的API函数
// 如果有参数,则传递参数对象;否则不传递额外参数
if (executionParams) {
// 使用带参数的执行方式
response = await ManusAPI.executePlan(currentPlanTemplateId, executionParams);
} else {
// 使用无参数的执行方式
response = await ManusAPI.executePlan(currentPlanTemplateId);
}
// 更新当前计划ID
currentPlanId = response.planId;
// 检查并初始化聊天区域
if (!chatArea) {
chatArea = document.querySelector('.simple-chat-area .dialog-round-container');
}
// 如果聊天区域不存在,则创建一个
if (!chatArea) {
const simpleChatArea = document.querySelector('.simple-chat-area');
if (simpleChatArea) {
chatArea = document.createElement('div');
chatArea.className = 'dialog-round-container';
chatArea.dataset.dialogRoundId = 'auto-created';
chatArea.dataset.planId = currentPlanId;
simpleChatArea.appendChild(chatArea);
console.log('创建了新的对话容器');
} else {
console.error('无法找到 .simple-chat-area 元素');
alert('UI元素初始化失败,请刷新页面重试');
return; // 中止执行
}
}
// 隐藏空聊天提示
const emptyMessage = document.querySelector('.empty-chat-message');
if (emptyMessage) {
emptyMessage.style.display = 'none';
}
// 添加用户输入到聊天区域
const userMessage = document.createElement('div');
userMessage.className = 'message user-message';
userMessage.innerHTML = `<p>执行计划: ${planPromptInput.value || '计划执行'}</p>`;
chatArea.appendChild(userMessage);
// 创建AI消息容器
const aiStepsContainer = document.createElement('div');
aiStepsContainer.className = 'message ai-message ai-steps-container';
chatArea.appendChild(aiStepsContainer);
// 通知右侧边栏和聊天处理器
if (typeof PlanUIEvents !== 'undefined') {
// 发出对话轮次开始事件
PlanUIEvents.EventSystem.emit(PlanUIEvents.UI_EVENTS.DIALOG_ROUND_START, {
planId: currentPlanId,
query: planPromptInput.value || '计划执行'
});
// 模拟发送plan-update事件
if (currentPlanData) {
PlanUIEvents.EventSystem.emit('plan-update', currentPlanData);
}
}
// 静默方式提示用户(不使用alert,避免打断用户体验)
console.log('计划执行请求已提交,可以在右侧边栏查看执行进度');
// 更新API URL
if (currentPlanTemplateId) {
apiUrlElement.textContent = `http://your-domain/api/plan-template/execute/${currentPlanTemplateId}`;
}
// 开始轮询执行状态
lastSequenceSize = 0; // 重置序列大小,以便接收所有执行记录
startPolling();
} catch (error) {
console.error('执行计划出错:', error);
alert('执行计划失败: ' + error.message);
} finally {
isExecuting = false;
updateUIState();
}
}