update: 优化代码

This commit is contained in:
lww155
2026-02-04 09:54:21 +08:00
parent 85a83727fd
commit e4cfabeb7e
3 changed files with 60 additions and 40 deletions
+2 -2
View File
@@ -832,12 +832,12 @@ body {
}
.model-select:hover {
background: #4f545c;
border-color: #5865f2;
}
.model-select:focus {
outline: none;
border-color: #40444b;
border-color: #5865f2;
}
.model-select option {
+48 -30
View File
@@ -240,40 +240,58 @@ class App {
log(`拍照成功,图像数据长度: ${photoData.length}`, 'success');
try {
const visionApiUrl = window.visionApiUrl || 'http://localhost:8003/mcp/vision/explain';
log(`正在发送图片到视觉分析接口: ${visionApiUrl}`, 'info');
const xz_tester_vision = localStorage.getItem('xz_tester_vision');
if (xz_tester_vision) {
let visionInfo = null;
const deviceId = document.getElementById('deviceMac')?.value || '';
const clientId = document.getElementById('clientId')?.value || 'web_test_client';
const formData = new FormData();
formData.append('question', question);
formData.append('image', dataURItoBlob(photoData), 'photo.jpg');
const response = await fetch(visionApiUrl, {
method: 'POST',
body: formData,
headers: {
'Device-Id': deviceId,
'Client-Id': clientId
try {
visionInfo = JSON.parse(xz_tester_vision);
} catch (err) {
throw new Error(`视觉配置解析失败`);
}
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
const { url, token } = visionInfo || {};
if (!url || !token) {
throw new Error('视觉分析失败:配置缺少接口地址(url)或令牌(token)');
}
log(`正在发送图片到视觉分析接口: ${url}`, 'info');
const deviceId = document.getElementById('deviceMac')?.value || '';
const clientId = document.getElementById('clientId')?.value || 'web_test_client';
const formData = new FormData();
formData.append('question', question);
formData.append('image', dataURItoBlob(photoData), 'photo.jpg');
const response = await fetch(url, {
method: 'POST',
body: formData,
headers: {
'Device-Id': deviceId,
'Client-Id': clientId,
'Authorization': `Bearer ${token}`
}
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const analysisResult = await response.json();
log(`视觉分析完成: ${JSON.stringify(analysisResult).substring(0, 200)}...`, 'success');
resolve({
success: true,
message: question,
photo_data: photoData,
photo_width: canvas.width,
photo_height: canvas.height,
vision_analysis: analysisResult
});
} else {
log('未配置视觉分析服务', 'warning');
}
const analysisResult = await response.json();
log(`视觉分析完成: ${JSON.stringify(analysisResult).substring(0, 200)}...`, 'success');
resolve({
success: true,
message: question,
photo_data: photoData,
photo_width: canvas.width,
photo_height: canvas.height,
vision_analysis: analysisResult
});
} catch (error) {
log(`视觉分析失败: ${error.message}`, 'error');
resolve({
@@ -306,15 +306,17 @@ export class WebSocketHandler {
} else if (payload.method === 'initialize') {
log(`收到工具初始化请求: ${JSON.stringify(payload.params)}`, 'info');
// 保存视觉分析接口地址
if (payload.params?.capabilities?.vision?.url) {
window.visionApiUrl = payload.params.capabilities.vision.url;
log(`视觉分析接口地址: ${window.visionApiUrl}`, 'success');
// 更新输入框显示
const visionUrlInput = document.getElementById('visionUrl');
if (visionUrlInput) {
visionUrlInput.value = window.visionApiUrl;
}
const visionUrl = document.getElementById('visionUrl');
const visionConfig = payload?.params?.capabilities?.vision;
if (visionConfig && typeof visionConfig === 'object' && visionConfig.url && visionConfig.token) {
const visionConfigStr = JSON.stringify(visionConfig);
localStorage.setItem('xz_tester_vision', visionConfigStr);
if (visionUrl) visionUrl.value = visionConfig.url;
} else {
localStorage.removeItem('xz_tester_vision');
if (visionUrl) visionUrl.value = '';
}
const replyMessage = JSON.stringify({
"session_id": message.session_id || "",
"type": "mcp",