- 在 js/core/app-shell.js:1275 引入 window.mermaid.parse(code) 语法校验,若捕获异常则抛出带有“Mermaid
语法错误”描述的错误,阻断后续渲染流程并避免生成无效图表。
- 在 js/core/app-shell.js:1244 的渲染异常分支中统一处理错误信息,既在查看区域展示,又在输入框末尾追加
(避免重复追加),并自动调整输入框高度,方便用户基于错误提示修改 Mermaid 代码。
This commit is contained in:
@@ -1238,11 +1238,22 @@
|
||||
} catch (error) {
|
||||
this.destroyMermaidPanZoom();
|
||||
console.error('Mermaid 渲染失败:', error);
|
||||
const errorMessage = error.message || '未知错误';
|
||||
this.el.viewer.innerHTML = `
|
||||
<div class="p-4 text-center text-red-500 font-bold">
|
||||
Mermaid 渲染失败:${Utils.escapeHtml(error.message || '未知错误')}
|
||||
Mermaid 渲染失败:${Utils.escapeHtml(errorMessage)}
|
||||
</div>
|
||||
`;
|
||||
if (this.el.chatInput) {
|
||||
const existingValue = this.el.chatInput.value || '';
|
||||
const appendedValue = existingValue.includes(errorMessage)
|
||||
? existingValue
|
||||
: existingValue
|
||||
? `${existingValue}\n${errorMessage}`
|
||||
: errorMessage;
|
||||
this.el.chatInput.value = appendedValue;
|
||||
Utils.autoResizeTextarea(this.el.chatInput);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1256,6 +1267,15 @@
|
||||
if (!code.trim()) {
|
||||
throw new Error('缺少 Mermaid 代码,无法渲染');
|
||||
}
|
||||
try {
|
||||
window.mermaid.parse(code);
|
||||
} catch (parseError) {
|
||||
const syntaxMessage =
|
||||
parseError?.str || parseError?.message || '未知错误';
|
||||
const error = new Error(`Mermaid 语法错误:${syntaxMessage}`);
|
||||
error.isMermaidSyntaxError = true;
|
||||
throw error;
|
||||
}
|
||||
const { svg } = await window.mermaid.render("mermaidSvg", code);
|
||||
const updatedArtifact = {
|
||||
...artifact,
|
||||
|
||||
Reference in New Issue
Block a user