From 3c9d1879e059d33a785c02b10f4d57fd2024b8d3 Mon Sep 17 00:00:00 2001
From: hongjli <3117313295@qq.com>
Date: 星期一, 28 四月 2025 15:57:36 +0800
Subject: [PATCH] 渲染echarts图优化
---
src/app/globals.css | 25 ++++++++++++
src/app/chat/page.tsx | 64 +++++++++++++++++++++++++-------
2 files changed, 75 insertions(+), 14 deletions(-)
diff --git a/src/app/chat/page.tsx b/src/app/chat/page.tsx
index 7c8d06c..7f6ac0c 100644
--- a/src/app/chat/page.tsx
+++ b/src/app/chat/page.tsx
@@ -50,17 +50,18 @@
const hasRenderedRef = useRef<boolean>(false);
const chartInstanceRef = useRef<any>(null);
- // 鍒濆鍖朌OM瀹瑰櫒
+ // 鍒濆鍖朌OM瀹瑰櫒 - 鎻愬墠璁剧疆鍥哄畾楂樺害
useEffect(() => {
- // 纭繚瀹瑰櫒鍑嗗濂戒簡
+ // 纭繚瀹瑰櫒鍑嗗濂戒簡骞朵笖鏈夌‘瀹氱殑楂樺害
if (chartContainerRef.current) {
- // 璁剧疆涓�涓垵濮嬮珮搴﹀拰瀹藉害锛岄伩鍏�"invalid dom"閿欒
+ // 璁剧疆涓�涓浐瀹氱殑楂樺害锛岄伩鍏嶆覆鏌撳悗鍙樺寲
const container = chartContainerRef.current;
container.style.width = '100%';
- container.style.height = '400px';
+ container.style.height = '400px'; // 鍥哄畾楂樺害400px
+ container.style.minHeight = '400px'; // 闃叉楂樺害鍙樺皬
// 娣诲姞涓存椂鍐呭锛岀‘淇滵OM娓叉煋瀹屾垚
- container.innerHTML = '<div style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;"><span>姝e湪鍑嗗鍥捐〃...</span></div>';
+ container.innerHTML = '<div style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:#f5f7f9;"><span>姝e湪鍑嗗鍥捐〃...</span></div>';
}
}, []);
@@ -115,6 +116,18 @@
const chartOption = safeFunc();
if (chartOption) {
+ // 绂佺敤鍔ㄧ敾锛岄伩鍏嶆覆鏌撴椂鐨勫竷灞�鍙樺寲
+ chartOption.animation = false;
+
+ // 淇敼tooltip閰嶇疆锛岀‘淇濇樉绀哄湪閫傚綋浣嶇疆
+ if (chartOption.tooltip) {
+ chartOption.tooltip = {
+ ...chartOption.tooltip,
+ confine: false, // 涓嶉檺鍒跺湪鍥捐〃鍖哄煙鍐�
+ extraCssText: 'z-index:9999; pointer-events:auto; margin-top:60px;',
+ };
+ }
+
chartInstance.setOption(chartOption);
setError(null);
} else {
@@ -184,6 +197,16 @@
// 濡傛灉涓诲浘琛ㄥ凡缁忓垵濮嬪寲锛屽鐢ㄥ叾閰嶇疆
if (chartInstanceRef.current) {
const option = chartInstanceRef.current.getOption();
+
+ // 璋冩暣妯℃�佺獥鍙d腑tooltip鐨勯厤缃�
+ if (option && option.tooltip) {
+ option.tooltip = {
+ ...option.tooltip,
+ confine: false,
+ extraCssText: 'z-index:10000; margin-top: 0; max-width: 80vw;',
+ };
+ }
+
modalChartInstance.setOption(option);
} else {
// 濡傛灉涓诲浘琛ㄦ病鏈夊垵濮嬪寲锛屽皾璇曚粠浠g爜鍒濆鍖�
@@ -204,6 +227,15 @@
const chartOption = safeFunc();
if (chartOption) {
+ // 璋冩暣妯℃�佺獥鍙g殑tooltip閰嶇疆
+ if (chartOption.tooltip) {
+ chartOption.tooltip = {
+ ...chartOption.tooltip,
+ confine: false,
+ extraCssText: 'z-index:10000; max-width: 80vw;',
+ };
+ }
+
modalChartInstance.setOption(chartOption);
} else {
throw new Error("鏃犳硶鑾峰彇妯℃�佸浘琛ㄩ厤缃�");
@@ -258,13 +290,13 @@
</div>
)}
- {/* 鍥捐〃瀹瑰櫒 */}
+ {/* 鍥捐〃瀹瑰櫒 - 鍥哄畾楂樺害 */}
<div
ref={chartContainerRef}
className="w-full bg-white border border-gray-200 rounded-lg overflow-hidden chart-container"
style={{
- height: '300px',
- minHeight: '300px',
+ height: '400px',
+ minHeight: '400px',
visibility: 'visible',
position: 'relative'
}}
@@ -333,22 +365,26 @@
// 妫�鏌ユ秷鎭槸鍚﹀畬鏁� - 閫氳繃鐖剁粍浠朵紶閫掔殑isMessageComplete鐘舵��
const isComplete = useContext(MessageCompletionContext);
- // 鍦ㄦ秷鎭湭瀹屾垚鏃舵樉绀哄姞杞藉姩鐢�
+ // 鍦ㄦ秷鎭湭瀹屾垚鏃舵樉绀哄姞杞藉姩鐢� - 鍥哄畾楂樺害鍖归厤鍥捐〃
if (language === 'javascript' && !isComplete) {
return (
- <div className="w-full bg-gray-50 rounded-md my-4 p-6 text-center">
- <div className="flex flex-col items-center justify-center">
+ <div className="w-full bg-gray-50 rounded-md my-4 p-6 text-center" style={{height: '400px'}}>
+ <div className="flex flex-col items-center justify-center h-full">
<div className="animate-spin rounded-full h-8 w-8 border-t-2 border-b-2 border-gray-400 mb-4"></div>
- <p className="text-gray-500">浠g爜鍔犺浇涓�...</p>
+ <p className="text-gray-500">鍔犺浇涓�...</p>
<p className="text-xs text-gray-400 mt-2">绛夊緟娑堟伅瀹屾垚鍚庡皢娓叉煋鍥捐〃</p>
</div>
</div>
);
}
- // 娑堟伅瀹屾垚鍚庯紝濡傛灉鏄浘琛ㄤ唬鐮佸垯娓叉煋涓哄浘琛�
+ // 娑堟伅瀹屾垚鍚庯紝濡傛灉鏄浘琛ㄤ唬鐮佸垯娓叉煋涓哄浘琛� - 鍦ㄥ閮ㄥ寘瑁呬竴灞傚浐瀹氶珮搴﹀鍣�
if (isEchartsCode() && isComplete) {
- return <EchartsRenderer code={value} />;
+ return (
+ <div style={{height: '400px', minHeight: '400px', position: 'relative'}}>
+ <EchartsRenderer code={value} />
+ </div>
+ );
}
// 鏅�欽avaScript浠g爜鎴栧叾浠栬瑷�鐨勪唬鐮佸潡锛岀洿鎺ユ樉绀轰唬鐮�
diff --git a/src/app/globals.css b/src/app/globals.css
index 611ff50..546c47c 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -870,3 +870,28 @@
body:has(.echart-wrapper:has(+ .fullscreen-controls)) {
overflow: hidden;
}
+
+/* 褰诲簳鍥哄畾鍥捐〃瀹瑰櫒鐨勯珮搴� */
+[data-echarts-container="true"] {
+ height: 400px !important;
+ min-height: 400px !important;
+ width: 100%;
+ position: relative;
+}
+
+/* 纭繚tooltip鏄剧ず鍦ㄩ�傚綋浣嶇疆 */
+.echarts-tooltip-wrap,
+div[class*="echarts-tooltip"],
+div[class*="tooltip"] {
+ z-index: 9999 !important;
+ top: auto !important; /* 闃叉鍥哄畾鍦ㄩ《閮� */
+ transform: translateY(0) !important; /* 闃叉鍚戜笂鍋忕Щ */
+ max-width: 80vw !important; /* 闄愬埗鏈�澶у搴� */
+ pointer-events: auto !important;
+}
+
+/* 纭繚鐑姏鍥総ooltip鍦ㄩ珮椋庨櫓鍖哄煙鏄剧ず鏃朵笉浼氳瀵艰埅鏍忛伄鎸� */
+body .ec-tooltip,
+body .echarts-tooltip {
+ margin-top: 60px !important; /* 纭繚涓嶄細鏄剧ず鍦ㄥ鑸爮涔嬩笂 */
+}
--
Gitblit v1.9.3