feat: 调整失焦的问题的
This commit is contained in:
parent
57d2686738
commit
6d18c510b8
@ -5,11 +5,18 @@
|
|||||||
<img :src="imageUrl()" alt="" />
|
<img :src="imageUrl()" alt="" />
|
||||||
<div class="text__container">
|
<div class="text__container">
|
||||||
<div class="text__title" v-if="showTextTitle">
|
<div class="text__title" v-if="showTextTitle">
|
||||||
<span class="text">{{ nodeName }}</span>
|
<span class="text">{{ localName }}</span>
|
||||||
<el-icon class="editIcon" @click="showTextTitle = false"><EditPen/></el-icon>
|
<el-icon class="editIcon" @click="startEditing"><EditPen/></el-icon>
|
||||||
</div>
|
</div>
|
||||||
<div class="input_name_container" v-else >
|
<div class="input_name_container" v-else >
|
||||||
<el-input v-model="nodeName" @keydown="handleInputKeydown" />
|
<el-input
|
||||||
|
v-model="localName"
|
||||||
|
@focus="handleInputFocus"
|
||||||
|
@blur="handleInputBlur"
|
||||||
|
@keydown="handleInputKeydown"
|
||||||
|
@click.stop
|
||||||
|
@mousedown.stop
|
||||||
|
/>
|
||||||
<el-button
|
<el-button
|
||||||
class="input_name_select"
|
class="input_name_select"
|
||||||
circle
|
circle
|
||||||
@ -94,15 +101,31 @@ const props = defineProps({
|
|||||||
const emits = defineEmits(['setNodeName'])
|
const emits = defineEmits(['setNodeName'])
|
||||||
|
|
||||||
const showTextTitle = ref(true)
|
const showTextTitle = ref(true)
|
||||||
const nodeName = ref(props.nodeProperties.name || props.nodeName)
|
const localName = ref('')
|
||||||
|
const isEditing = ref(false)
|
||||||
|
|
||||||
|
// 开始编辑
|
||||||
|
const startEditing = () => {
|
||||||
|
isEditing.value = true
|
||||||
|
showTextTitle.value = false
|
||||||
|
|
||||||
|
// 使用 nextTick 确保 DOM 更新后再聚焦
|
||||||
|
nextTick(() => {
|
||||||
|
if (inputRef.value && inputRef.value.input) {
|
||||||
|
inputRef.value.input.focus()
|
||||||
|
// 选择所有文本
|
||||||
|
inputRef.value.input.select()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
const confirmNodeName = () => {
|
const confirmNodeName = () => {
|
||||||
emits('setNodeName', nodeName.value)
|
emits('setNodeName', localName.value)
|
||||||
showTextTitle.value = true
|
showTextTitle.value = true
|
||||||
}
|
}
|
||||||
|
|
||||||
const cancelNodeName = () => {
|
const cancelNodeName = () => {
|
||||||
nodeName.value = props.nodeProperties?.name || props.nodeName
|
localName.value = props.nodeProperties?.name || props.nodeName
|
||||||
showTextTitle.value = true
|
showTextTitle.value = true
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -138,6 +161,32 @@ const execute = () => {
|
|||||||
document.dispatchEvent(myEvent);
|
document.dispatchEvent(myEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const handleInputFocus = (e) => {
|
||||||
|
console.log('Input focused')
|
||||||
|
// 阻止事件冒泡到 LogicFlow
|
||||||
|
e.stopPropagation()
|
||||||
|
e.preventDefault()
|
||||||
|
|
||||||
|
// 设置编辑状态
|
||||||
|
isEditing.value = true
|
||||||
|
|
||||||
|
// 延迟执行,确保事件处理完成
|
||||||
|
setTimeout(() => {
|
||||||
|
if (inputRef.value && inputRef.value.input) {
|
||||||
|
inputRef.value.input.focus()
|
||||||
|
}
|
||||||
|
}, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleInputBlur = (e) => {
|
||||||
|
console.log('Input blurred')
|
||||||
|
// 如果正在编辑,不要立即取消编辑状态
|
||||||
|
if (isEditing.value) {
|
||||||
|
// 可以选择在失焦时自动保存或取消
|
||||||
|
// 这里我们选择不自动保存,让用户点击确认按钮
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const handleInputKeydown = (e) => {
|
const handleInputKeydown = (e) => {
|
||||||
// 阻止事件冒泡到 Logic Flow 节点,避免被其事件拦截
|
// 阻止事件冒泡到 Logic Flow 节点,避免被其事件拦截
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
@ -151,7 +200,12 @@ const imageUrl = () => {
|
|||||||
return new URL(props.icon, import.meta.url).href;
|
return new URL(props.icon, import.meta.url).href;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
localName.value = props.nodeProperties?.name || props.nodeName
|
||||||
|
})
|
||||||
|
|
||||||
onUnmounted(() => {
|
onUnmounted(() => {
|
||||||
|
console.log(34566)
|
||||||
emitter.off("deleteNode");
|
emitter.off("deleteNode");
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
@ -164,6 +218,7 @@ onUnmounted(() => {
|
|||||||
|
|
||||||
.left {
|
.left {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
align-items: center; // 添加垂直居中
|
||||||
|
|
||||||
img {
|
img {
|
||||||
width: 24px;
|
width: 24px;
|
||||||
@ -193,6 +248,18 @@ onUnmounted(() => {
|
|||||||
.el-input {
|
.el-input {
|
||||||
margin-left: 12px;
|
margin-left: 12px;
|
||||||
width: 120px;
|
width: 120px;
|
||||||
|
// 确保输入框有更高的 z-index
|
||||||
|
position: relative;
|
||||||
|
z-index: 1000;
|
||||||
|
|
||||||
|
// 覆盖 Element Plus 的默认样式,确保焦点状态明显
|
||||||
|
:deep(.el-input__wrapper) {
|
||||||
|
box-shadow: 0 0 0 1px #409eff !important;
|
||||||
|
|
||||||
|
&:focus-within {
|
||||||
|
box-shadow: 0 0 0 2px #409eff !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.input_name_select {
|
.input_name_select {
|
||||||
@ -226,4 +293,11 @@ onUnmounted(() => {
|
|||||||
margin: 8px 0;
|
margin: 8px 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 添加全局样式,确保输入框焦点不被其他元素干扰
|
||||||
|
:global(.lf-node) {
|
||||||
|
.el-input__inner {
|
||||||
|
user-select: text !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@ -72,6 +72,10 @@
|
|||||||
v-model="params.withOr"
|
v-model="params.withOr"
|
||||||
placeholder="Select"
|
placeholder="Select"
|
||||||
style="width: 240px"
|
style="width: 240px"
|
||||||
|
@focus="handleInputFocus"
|
||||||
|
@blur="handleInputBlur"
|
||||||
|
@click.stop
|
||||||
|
@mousedown.stop
|
||||||
>
|
>
|
||||||
<el-option key="and" label="AND" value="and" />
|
<el-option key="and" label="AND" value="and" />
|
||||||
<el-option key="or" label="OR" value="or" />
|
<el-option key="or" label="OR" value="or" />
|
||||||
@ -88,6 +92,11 @@
|
|||||||
<!-- <el-input v-model="property.name" placeholder="请输入" clearable /> -->
|
<!-- <el-input v-model="property.name" placeholder="请输入" clearable /> -->
|
||||||
<el-select
|
<el-select
|
||||||
v-model="property.nameType"
|
v-model="property.nameType"
|
||||||
|
@focus="handleInputFocus"
|
||||||
|
@blur="handleInputBlur"
|
||||||
|
@keydown="handleInputKeydown"
|
||||||
|
@click.stop
|
||||||
|
@mousedown.stop
|
||||||
@change="handleTypeChange(index, pIndex)"
|
@change="handleTypeChange(index, pIndex)"
|
||||||
>
|
>
|
||||||
<el-option label="引用" value="quote" />
|
<el-option label="引用" value="quote" />
|
||||||
@ -108,6 +117,11 @@
|
|||||||
v-model="property.name"
|
v-model="property.name"
|
||||||
placeholder="请输入"
|
placeholder="请输入"
|
||||||
clearable
|
clearable
|
||||||
|
@focus="handleInputFocus"
|
||||||
|
@blur="handleInputBlur"
|
||||||
|
@keydown="handleInputKeydown"
|
||||||
|
@click.stop
|
||||||
|
@mousedown.stop
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item
|
||||||
@ -126,6 +140,11 @@
|
|||||||
:options="quoteOptions"
|
:options="quoteOptions"
|
||||||
placeholder="请选择"
|
placeholder="请选择"
|
||||||
@visible-change="visibleChange"
|
@visible-change="visibleChange"
|
||||||
|
@focus="handleInputFocus"
|
||||||
|
@blur="handleInputBlur"
|
||||||
|
@keydown="handleInputKeydown"
|
||||||
|
@click.stop
|
||||||
|
@mousedown.stop
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -136,7 +155,14 @@
|
|||||||
{ required: true, message: '请输入变量名', trigger: 'blur' },
|
{ required: true, message: '请输入变量名', trigger: 'blur' },
|
||||||
]"
|
]"
|
||||||
>
|
>
|
||||||
<el-select v-model="property.condition">
|
<el-select
|
||||||
|
v-model="property.condition"
|
||||||
|
@focus="handleInputFocus"
|
||||||
|
@blur="handleInputBlur"
|
||||||
|
@keydown="handleInputKeydown"
|
||||||
|
@click.stop
|
||||||
|
@mousedown.stop
|
||||||
|
>
|
||||||
<el-option label="等于" value="equal" />
|
<el-option label="等于" value="equal" />
|
||||||
<el-option label="不等于" value="notEqualTo" />
|
<el-option label="不等于" value="notEqualTo" />
|
||||||
<el-option label="为空" value="null" />
|
<el-option label="为空" value="null" />
|
||||||
@ -156,6 +182,11 @@
|
|||||||
<el-select
|
<el-select
|
||||||
v-model="property.type"
|
v-model="property.type"
|
||||||
@change="handleTypeChange(index, pIndex)"
|
@change="handleTypeChange(index, pIndex)"
|
||||||
|
@focus="handleInputFocus"
|
||||||
|
@blur="handleInputBlur"
|
||||||
|
@keydown="handleInputKeydown"
|
||||||
|
@click.stop
|
||||||
|
@mousedown.stop
|
||||||
>
|
>
|
||||||
<el-option label="引用" value="quote" />
|
<el-option label="引用" value="quote" />
|
||||||
<el-option label="输入" value="input" />
|
<el-option label="输入" value="input" />
|
||||||
@ -175,6 +206,11 @@
|
|||||||
v-model="property.input"
|
v-model="property.input"
|
||||||
placeholder="请输入"
|
placeholder="请输入"
|
||||||
clearable
|
clearable
|
||||||
|
@focus="handleInputFocus"
|
||||||
|
@blur="handleInputBlur"
|
||||||
|
@keydown="handleInputKeydown"
|
||||||
|
@click.stop
|
||||||
|
@mousedown.stop
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item
|
||||||
@ -193,6 +229,11 @@
|
|||||||
:options="quoteOptions"
|
:options="quoteOptions"
|
||||||
placeholder="请选择"
|
placeholder="请选择"
|
||||||
@visible-change="visibleChange"
|
@visible-change="visibleChange"
|
||||||
|
@focus="handleInputFocus"
|
||||||
|
@blur="handleInputBlur"
|
||||||
|
@keydown="handleInputKeydown"
|
||||||
|
@click.stop
|
||||||
|
@mousedown.stop
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -415,6 +456,41 @@ const closePopover = () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const handleInputFocus = (e) => {
|
||||||
|
console.log('Input focused')
|
||||||
|
// 阻止事件冒泡到 LogicFlow
|
||||||
|
e.stopPropagation()
|
||||||
|
e.preventDefault()
|
||||||
|
|
||||||
|
// 设置编辑状态
|
||||||
|
isEditing.value = true
|
||||||
|
|
||||||
|
// 延迟执行,确保事件处理完成
|
||||||
|
setTimeout(() => {
|
||||||
|
if (inputRef.value && inputRef.value.input) {
|
||||||
|
inputRef.value.input.focus()
|
||||||
|
}
|
||||||
|
}, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleInputBlur = (e) => {
|
||||||
|
console.log('Input blurred')
|
||||||
|
// 如果正在编辑,不要立即取消编辑状态
|
||||||
|
if (isEditing.value) {
|
||||||
|
// 可以选择在失焦时自动保存或取消
|
||||||
|
// 这里我们选择不自动保存,让用户点击确认按钮
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleInputKeydown = (e) => {
|
||||||
|
// 阻止事件冒泡到 Logic Flow 节点,避免被其事件拦截
|
||||||
|
e.stopPropagation();
|
||||||
|
// 可选:明确放行 Ctrl+V(增强兼容性)
|
||||||
|
if ((e.ctrlKey || e.metaKey) && e.key === "v") {
|
||||||
|
e.returnValue = true; // 允许默认粘贴行为
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
emits("addAnchor", 280, "".concat(props.model.id, "_else"));
|
emits("addAnchor", 280, "".concat(props.model.id, "_else"));
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user