Skip to content

Commit 3fc7ea7

Browse files
committed
refactor(FieldSelect.tsx): enhance tooltip functionality and event handling; update styles for disabled select items
1 parent ead6787 commit 3fc7ea7

3 files changed

Lines changed: 60 additions & 4 deletions

File tree

packages/dag/src/components/monitor/components/LineChart.vue

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,6 @@ export default {
179179
180180
if (this.end === 100) {
181181
const isEmptyData = options.series.every((t) => !t.data.length)
182-
console.log('options.series', options.series)
183182
this.extend = Object.assign(
184183
{},
185184
{

packages/form/src/components/field-select/FieldSelect.tsx

Lines changed: 56 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,15 @@ export const FieldSelect = defineComponent({
1919
modelValue: String,
2020
loading: Boolean,
2121
},
22+
inheritAttrs: false,
2223
setup: (props, { attrs, slots }) => {
2324
const labelRef = ref<HTMLElement>()
2425
const showTooltip = ref(false)
2526
const isTextOverflow = ref(false)
2627
const tooltipContent = ref('')
2728
const selectRef = ref<SelectV2Instance>()
29+
const tooltipRef = ref()
30+
const isMouseInTooltip = ref(false)
2831

2932
const checkTextOverflow = (element: HTMLElement, text: string) => {
3033
if (!element || !text) return false
@@ -165,10 +168,61 @@ export const FieldSelect = defineComponent({
165168
}
166169
}
167170

171+
const onMouseLeave = () => {
172+
// 延迟检查,给鼠标移动到 tooltip 的时间
173+
setTimeout(() => {
174+
// 如果鼠标不在 tooltip 内,则隐藏
175+
if (!isMouseInTooltip.value) {
176+
showTooltip.value = false
177+
}
178+
}, 100)
179+
}
180+
181+
const setupTooltipListeners = () => {
182+
if (!tooltipRef.value?.contentRef) return
183+
184+
const contentEl = tooltipRef.value.popperRef.contentRef as HTMLElement
185+
186+
const handleMouseEnter = () => {
187+
isMouseInTooltip.value = true
188+
}
189+
190+
const handleMouseLeave = () => {
191+
isMouseInTooltip.value = false
192+
showTooltip.value = false
193+
}
194+
195+
contentEl.addEventListener('mouseenter', handleMouseEnter)
196+
contentEl.addEventListener('mouseleave', handleMouseLeave)
197+
198+
// 返回清理函数
199+
return () => {
200+
contentEl.removeEventListener('mouseenter', handleMouseEnter)
201+
contentEl.removeEventListener('mouseleave', handleMouseLeave)
202+
}
203+
}
204+
205+
let cleanupTooltipListeners: (() => void) | undefined
206+
207+
// 监听 tooltip 显示状态,当显示时设置事件监听器
208+
watch(showTooltip, (visible) => {
209+
if (visible) {
210+
// 等待 tooltip 渲染完成后再设置监听器
211+
nextTick(() => {
212+
cleanupTooltipListeners = setupTooltipListeners()
213+
})
214+
} else {
215+
// tooltip 隐藏时清理监听器
216+
cleanupTooltipListeners?.()
217+
cleanupTooltipListeners = undefined
218+
}
219+
})
220+
168221
let unwatch: any
169222

170223
onBeforeMount(() => {
171224
unwatch?.()
225+
cleanupTooltipListeners?.()
172226
})
173227

174228
onMounted(() => {
@@ -219,6 +273,7 @@ export const FieldSelect = defineComponent({
219273

220274
return props.enableTooltip ? (
221275
<ElTooltip
276+
ref={tooltipRef}
222277
visible={showTooltip.value}
223278
placement="top"
224279
content={tooltipContent.value}
@@ -238,9 +293,7 @@ export const FieldSelect = defineComponent({
238293
dataSource={fieldOptions.value}
239294
loading={props.loading}
240295
onMouseenter={onMouseEnter}
241-
onMouseleave={() => {
242-
showTooltip.value = false
243-
}}
296+
onMouseleave={onMouseLeave}
244297
>
245298
{{
246299
...children,

packages/styles/src/element/index.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,10 @@
232232
color: var(--icon-n3);
233233
font-size: 12px;
234234
}
235+
236+
.el-select__wrapper.is-disabled .el-select__selected-item {
237+
user-select: text;
238+
}
235239
}
236240

237241
.el-select__popper.el-select__popper {

0 commit comments

Comments
 (0)