From c1be90c673be9459857649bda19aca09744c7067 Mon Sep 17 00:00:00 2001 From: engvuchen <1742284391@qq.com> Date: Tue, 30 Sep 2025 17:18:52 +0800 Subject: [PATCH] =?UTF-8?q?fix(tooltip):=20tooltip=20=E6=BA=90=E7=A0=81?= =?UTF-8?q?=EF=BC=8C=E5=A7=8B=E7=BB=88=E6=98=BE=E7=A4=BA=20popup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit closed #6028 --- packages/components/popup/popup.tsx | 25 ++++++++++++++++++++++- packages/components/textarea/textarea.tsx | 9 +++----- packages/components/tooltip/tooltip.tsx | 3 --- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/packages/components/popup/popup.tsx b/packages/components/popup/popup.tsx index c0c1091ead..e1553c9eaa 100644 --- a/packages/components/popup/popup.tsx +++ b/packages/components/popup/popup.tsx @@ -60,6 +60,29 @@ const parentKey = Symbol() as InjectionKey<{ assertMouseLeave: (ev: MouseEvent) => void; }>; +/** 判断是否为空字符串,或是空插槽 */ +function isEmptyContent(node: any) { + if (['', undefined, null].includes(node)) return true; + + const innerNodes = node instanceof Array ? node : [node]; + const r = innerNodes.filter((node) => { + // 过滤注释节点 + if (node?.type?.toString() === 'Symbol(Comment)') return false; + + // 检查 VNode 是否为空 + if (node && typeof node === 'object' && node.type) { + // 如果 children 为空字符串或空数组,认为是空节点 + if (node.children === '' || (Array.isArray(node.children) && node.children.length === 0)) { + return false; + } + } + + return true; + }); + + return !r.length; +} + function getPopperPlacement(placement: TdPopupProps['placement']): Placement { return placement.replace(/-(left|top)$/, '-start').replace(/-(right|bottom)$/, '-end') as Placement; } @@ -498,7 +521,7 @@ export default defineComponent({ return () => { const content = renderTNodeJSX('content'); - const hidePopup = props.hideEmptyPopup && ['', undefined, null].includes(content); + const hidePopup = props.hideEmptyPopup && isEmptyContent(content); const overlay = visible.value || !props.destroyOnClose ? ( diff --git a/packages/components/textarea/textarea.tsx b/packages/components/textarea/textarea.tsx index 59187985da..92ce577485 100644 --- a/packages/components/textarea/textarea.tsx +++ b/packages/components/textarea/textarea.tsx @@ -139,7 +139,6 @@ export default defineComponent({ const formItem = inject(FormItemInjectionKey, undefined); const emitBlur = (e: FocusEvent) => { if (!e.target) return; - adjustTextareaHeight(); focused.value = false; props.onBlur?.(innerValue.value, { e }); formItem?.handleBlur(); @@ -188,7 +187,9 @@ export default defineComponent({ // watch watch( () => innerValue.value, - () => adjustTextareaHeight(), + () => { + nextTick(() => adjustTextareaHeight()); + }, ); watch(refTextareaElem, (el) => { @@ -208,10 +209,6 @@ export default defineComponent({ } }); - watch(innerValue, () => { - nextTick(() => adjustTextareaHeight()); - }); - watch(() => props.autosize, adjustTextareaHeight, { deep: true }); expose({ diff --git a/packages/components/tooltip/tooltip.tsx b/packages/components/tooltip/tooltip.tsx index 62a8f736b7..f055a72869 100644 --- a/packages/components/tooltip/tooltip.tsx +++ b/packages/components/tooltip/tooltip.tsx @@ -110,9 +110,6 @@ export default defineComponent({ }); return () => { const content = renderTNodeJSX('content'); - if (!content && !props.content) { - return renderContent('default', 'triggerElement'); - } return (