diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 3f70db4..9488e8a 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -35,7 +35,8 @@ "Bash(/data/code/FT_Platform/YG_FT_Platform/test_data_dir.sh:*)", "Bash(grep:*)", "Bash(mysql:*)", - "Bash(ls:*)" + "Bash(ls:*)", + "Bash(xargs:*)" ] } } diff --git a/src/main.py b/src/main.py index 41b1759..a62e3e2 100644 --- a/src/main.py +++ b/src/main.py @@ -466,6 +466,15 @@ def get_model_compare(): return jsonify({'code': 0, 'data': generic_get_all('model_compare')}) +@app.route('/api/model-compare/', methods=['GET']) +def get_model_compare_by_id(id): + """获取单个模型对比任务""" + result = generic_get_by_id('model_compare', id) + if result: + return jsonify({'code': 0, 'data': result}) + return jsonify({'code': 1, 'message': '任务不存在'}) + + @app.route('/api/model-compare', methods=['POST']) def create_model_compare(): data = request.json diff --git a/web/pages/model-compare-chat.html b/web/pages/model-compare-chat.html index 5880343..5db5bf8 100644 --- a/web/pages/model-compare-chat.html +++ b/web/pages/model-compare-chat.html @@ -402,31 +402,49 @@ try { const response = await fetch(`${API_BASE}/model-compare/${compareTaskId}`); const result = await response.json(); - if (result.code === 0) { - compareTaskData = result.data; - updatePageTitle(compareTaskData.model_name || '模型对比'); + console.log('加载对比任务返回:', result); - // 获取任务中的模型列表 - if (compareTaskData.models) { - selectedModelIds = typeof compareTaskData.models === 'string' - ? JSON.parse(compareTaskData.models) - : compareTaskData.models; - renderSelectedModels(); + if (result.code === 0) { + // result.data 可能是单个对象或数组 + const taskData = Array.isArray(result.data) + ? result.data.find(item => item && item.id == compareTaskId) + : result.data; + + if (taskData) { + compareTaskData = taskData; + updatePageTitle(taskData.model_name || '模型对比'); + + // 获取任务中的模型列表 + const modelsField = taskData.models; + console.log('models字段:', modelsField, typeof modelsField); + + if (modelsField) { + try { + if (typeof modelsField === 'string') { + selectedModelIds = JSON.parse(modelsField); + } else if (Array.isArray(modelsField)) { + selectedModelIds = modelsField; + } + console.log('解析后的模型ID:', selectedModelIds); + renderSelectedModels(); + } catch (e) { + console.error('解析模型列表失败:', e); + } + } + } else { + console.warn('未找到对应任务数据'); } } else { - showToast('加载对比任务失败', 'error'); + showToast('加载对比任务失败: ' + result.message, 'error'); } } catch (error) { console.error('加载对比任务失败:', error); - // 使用演示数据 - selectedModelIds = [1, 2, 3, 4]; - renderSelectedModels(); + showToast('加载对比任务失败', 'error'); } } // 更新页面标题 function updatePageTitle(title) { - document.getElementById('compareTitle').textContent = title; document.getElementById('breadcrumbTask').textContent = title; } @@ -522,6 +540,8 @@ // 禁用按钮 isGenerating = true; document.getElementById('startBtn').disabled = true; + document.getElementById('resetBtn').disabled = true; + document.getElementById('resetBtn').classList.add('opacity-50', 'cursor-not-allowed'); // 折叠输入区域,显示输出区域 document.getElementById('inputSection').classList.add('collapsed'); @@ -618,6 +638,8 @@ if (currentStreamingIntervals.length === 0) { isGenerating = false; document.getElementById('startBtn').disabled = false; + document.getElementById('resetBtn').disabled = false; + document.getElementById('resetBtn').classList.remove('opacity-50', 'cursor-not-allowed'); } } }, 30 + Math.random() * 40); // 随机速度,更自然 @@ -633,6 +655,8 @@ isGenerating = false; document.getElementById('startBtn').disabled = false; + document.getElementById('resetBtn').disabled = false; + document.getElementById('resetBtn').classList.remove('opacity-50', 'cursor-not-allowed'); // 展开输入区域 document.getElementById('inputSection').classList.remove('collapsed');