fix: 修复前端捕获按钮的问题

This commit is contained in:
SikongJueluo 2025-07-16 17:46:21 +08:00
parent bcee42d8c1
commit 822091243e
No known key found for this signature in database
2 changed files with 35 additions and 26 deletions

View File

@ -298,9 +298,8 @@ const [useProvideLogicAnalyzer, useLogicAnalyzerState] = createInjectionState(
return; return;
} }
const release = await operationMutex.acquire();
isCapturing.value = true; isCapturing.value = true;
const release = await operationMutex.acquire();
try { try {
const client = AuthManager.createAuthenticatedLogicAnalyzerClient(); const client = AuthManager.createAuthenticatedLogicAnalyzerClient();
@ -313,17 +312,14 @@ const [useProvideLogicAnalyzer, useLogicAnalyzerState] = createInjectionState(
alert?.info("开始捕获信号...", 2000); alert?.info("开始捕获信号...", 2000);
// 2. 轮询捕获状态 // 2. 轮询捕获状态
const pollCaptureStatus = async (): Promise<boolean> => { let captureCompleted = false;
// 如果不再处于捕获状态,说明被停止了 while (isCapturing.value) {
if (!isCapturing.value) {
return false;
}
const status = await client.getCaptureStatus(); const status = await client.getCaptureStatus();
// 检查是否捕获完成 // 检查是否捕获完成
if (status === CaptureStatus.CaptureDone) { if (status === CaptureStatus.CaptureDone) {
return true; captureCompleted = true;
break;
} }
// 检查是否仍在捕获中 // 检查是否仍在捕获中
@ -334,15 +330,12 @@ const [useProvideLogicAnalyzer, useLogicAnalyzerState] = createInjectionState(
) { ) {
// 等待500毫秒后继续轮询 // 等待500毫秒后继续轮询
await new Promise((resolve) => setTimeout(resolve, 500)); await new Promise((resolve) => setTimeout(resolve, 500));
return await pollCaptureStatus(); continue;
} }
// 其他状态视为错误 // 其他状态视为错误
throw new Error(`捕获状态异常: ${status}`); // throw new Error(`捕获状态异常: ${status}`);
}; }
// 等待捕获完成
const captureCompleted = await pollCaptureStatus();
// 如果捕获被停止,不继续处理数据 // 如果捕获被停止,不继续处理数据
if (!captureCompleted) { if (!captureCompleted) {
@ -371,27 +364,45 @@ const [useProvideLogicAnalyzer, useLogicAnalyzerState] = createInjectionState(
return; return;
} }
// 设置捕获状态为false这会使轮询停止
isCapturing.value = false;
const release = await operationMutex.acquire();
try { try {
const client = AuthManager.createAuthenticatedLogicAnalyzerClient(); const client = AuthManager.createAuthenticatedLogicAnalyzerClient();
// 执行强制捕获来停止当前捕获 // 执行强制捕获来停止当前捕获
const forceSuccess = await client.setCaptureMode(false, true); const forceSuccess = await client.setCaptureMode(false, false);
if (!forceSuccess) { if (!forceSuccess) {
throw new Error("无法执行强制捕获"); throw new Error("无法停止捕获");
} }
// 设置捕获状态为false这会使轮询停止
isCapturing.value = false;
alert.info("已停止强制捕获...", 2000); alert.info("已停止强制捕获...", 2000);
} catch (error) { } catch (error) {
console.error("停止捕获失败:", error); console.error("停止捕获失败:", error);
alert.error(
`停止捕获失败: ${error instanceof Error ? error.message : "未知错误"}`,
3000,
);
} finally {
release();
} }
}; };
const forceCapture = async () => { const forceCapture = async () => {
// 设置捕获状态为false这会使轮询停止
isCapturing.value = false;
const release = await operationMutex.acquire();
try { try {
await stopCapture(); const client = AuthManager.createAuthenticatedLogicAnalyzerClient();
// 执行强制捕获来停止当前捕获
const forceSuccess = await client.setCaptureMode(true, true);
if (!forceSuccess) {
throw new Error("无法执行强制捕获");
}
await getCaptureData(); await getCaptureData();
alert.success(`捕获完成!`, 3000); alert.success(`捕获完成!`, 3000);
} catch (error) { } catch (error) {
@ -400,6 +411,8 @@ const [useProvideLogicAnalyzer, useLogicAnalyzerState] = createInjectionState(
`强制捕获失败: ${error instanceof Error ? error.message : "未知错误"}`, `强制捕获失败: ${error instanceof Error ? error.message : "未知错误"}`,
3000, 3000,
); );
} finally{
release();
} }
}; };

View File

@ -46,9 +46,6 @@
'from-red-500 to-red-600 hover:from-red-600 hover:to-red-700 focus:ring-red-300': 'from-red-500 to-red-600 hover:from-red-600 hover:to-red-700 focus:ring-red-300':
analyzer.isCapturing.value, analyzer.isCapturing.value,
}" }"
:disabled="
analyzer.isOperationInProgress.value && !analyzer.isCapturing.value
"
@click=" @click="
analyzer.isCapturing.value analyzer.isCapturing.value
? analyzer.stopCapture() ? analyzer.stopCapture()
@ -71,7 +68,6 @@
<button <button
v-if="analyzer.isCapturing.value" v-if="analyzer.isCapturing.value"
class="group relative px-8 py-3 bg-gradient-to-r from-orange-500 to-orange-600 hover:from-orange-600 hover:to-orange-700 text-white font-medium rounded-lg shadow-lg hover:shadow-xl transform hover:scale-105 transition-all duration-200 ease-in-out focus:outline-none focus:ring-4 focus:ring-orange-300 active:scale-95" class="group relative px-8 py-3 bg-gradient-to-r from-orange-500 to-orange-600 hover:from-orange-600 hover:to-orange-700 text-white font-medium rounded-lg shadow-lg hover:shadow-xl transform hover:scale-105 transition-all duration-200 ease-in-out focus:outline-none focus:ring-4 focus:ring-orange-300 active:scale-95"
:disabled="analyzer.isOperationInProgress.value"
@click="analyzer.forceCapture()" @click="analyzer.forceCapture()"
> >
<span class="flex items-center gap-2"> <span class="flex items-center gap-2">