update pay function
This commit is contained in:
@@ -240,6 +240,60 @@ export const MarkdownWithCharts = ({ content, variant = 'auto' }) => {
|
||||
// 移除可能的前后空白和不可见字符
|
||||
cleanContent = cleanContent.replace(/^\s+|\s+$/g, '');
|
||||
|
||||
// 检查 JSON 是否完整并尝试修复
|
||||
// 使用栈来跟踪括号,确保正确的闭合顺序
|
||||
const stack = [];
|
||||
let inString = false;
|
||||
let escape = false;
|
||||
|
||||
for (let i = 0; i < cleanContent.length; i++) {
|
||||
const char = cleanContent[i];
|
||||
|
||||
if (escape) {
|
||||
escape = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (char === '\\' && inString) {
|
||||
escape = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (char === '"') {
|
||||
inString = !inString;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (inString) continue;
|
||||
|
||||
if (char === '{' || char === '[') {
|
||||
stack.push(char);
|
||||
} else if (char === '}') {
|
||||
if (stack.length > 0 && stack[stack.length - 1] === '{') {
|
||||
stack.pop();
|
||||
}
|
||||
} else if (char === ']') {
|
||||
if (stack.length > 0 && stack[stack.length - 1] === '[') {
|
||||
stack.pop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 如果栈不为空,说明有未闭合的括号,需要补全
|
||||
if (stack.length > 0) {
|
||||
logger.warn('检测到不完整的 ECharts JSON,尝试修复', {
|
||||
unclosed: stack.join(''),
|
||||
});
|
||||
|
||||
// 按照栈的逆序补全闭合括号
|
||||
while (stack.length > 0) {
|
||||
const open = stack.pop();
|
||||
cleanContent += open === '{' ? '}' : ']';
|
||||
}
|
||||
|
||||
logger.info('ECharts JSON 已修复');
|
||||
}
|
||||
|
||||
// 尝试解析 JSON
|
||||
const chartOption = JSON.parse(cleanContent);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user