perf: [BPM 工作流] Simple 模型节点名称修改优化

pull/138/head
jason 2025-06-11 21:07:50 +08:00
parent 23a25cb521
commit 070605ec6e
17 changed files with 64 additions and 54 deletions

View File

@ -144,8 +144,8 @@ function clickIcon() {
showInput.value = true; showInput.value = true;
} }
// //
function blurEvent() { function changeNodeName() {
showInput.value = false; showInput.value = false;
currentNode.value.name = currentNode.value.name =
currentNode.value.name || currentNode.value.name ||
@ -166,7 +166,8 @@ defineExpose({ open }); // 提供 open 方法,用于打开弹窗
v-if="showInput" v-if="showInput"
type="text" type="text"
class="mr-2 w-48" class="mr-2 w-48"
@blur="blurEvent()" @blur="changeNodeName()"
@press-enter="changeNodeName()"
v-model:value="currentNode.name" v-model:value="currentNode.name"
:placeholder="currentNode.name" :placeholder="currentNode.name"
/> />

View File

@ -75,9 +75,8 @@ const [Drawer, drawerApi] = useVbenDrawer({
const currentNode = useWatchNode(props); const currentNode = useWatchNode(props);
// //
const { nodeName, showInput, clickIcon, blurEvent, inputRef } = useNodeName( const { nodeName, showInput, clickIcon, changeNodeName, inputRef } =
BpmNodeTypeEnum.COPY_TASK_NODE, useNodeName(BpmNodeTypeEnum.COPY_TASK_NODE);
);
// Tab // Tab
const activeTabName = ref('user'); const activeTabName = ref('user');
@ -216,7 +215,8 @@ defineExpose({ showCopyTaskNodeConfig }); // 暴露方法给父组件
ref="inputRef" ref="inputRef"
type="text" type="text"
class="config-editable-input" class="config-editable-input"
@blur="blurEvent()" @blur="changeNodeName()"
@press-enter="changeNodeName()"
v-model:value="nodeName" v-model:value="nodeName"
:placeholder="nodeName" :placeholder="nodeName"
/> />

View File

@ -45,9 +45,8 @@ const props = defineProps({
// //
const currentNode = useWatchNode(props); const currentNode = useWatchNode(props);
// //
const { nodeName, showInput, clickIcon, blurEvent, inputRef } = useNodeName( const { nodeName, showInput, clickIcon, changeNodeName, inputRef } =
BpmNodeTypeEnum.DELAY_TIMER_NODE, useNodeName(BpmNodeTypeEnum.DELAY_TIMER_NODE);
);
// //
const formRef = ref(); // Ref const formRef = ref(); // Ref
@ -161,7 +160,8 @@ defineExpose({ openDrawer }); // 暴露方法给父组件
ref="inputRef" ref="inputRef"
type="text" type="text"
class="mr-2 w-48" class="mr-2 w-48"
@blur="blurEvent()" @blur="changeNodeName()"
@press-enter="changeNodeName()"
v-model:value="nodeName" v-model:value="nodeName"
:placeholder="nodeName" :placeholder="nodeName"
/> />

View File

@ -41,9 +41,8 @@ const processNodeTree = inject<Ref<SimpleFlowNode>>('processNodeTree');
/** 当前节点 */ /** 当前节点 */
const currentNode = useWatchNode(props); const currentNode = useWatchNode(props);
/** 节点名称 */ /** 节点名称 */
const { nodeName, showInput, clickIcon, blurEvent, inputRef } = useNodeName( const { nodeName, showInput, clickIcon, changeNodeName, inputRef } =
BpmNodeTypeEnum.ROUTER_BRANCH_NODE, useNodeName(BpmNodeTypeEnum.ROUTER_BRANCH_NODE);
);
const routerGroups = ref<RouterSetting[]>([]); const routerGroups = ref<RouterSetting[]>([]);
const nodeOptions = ref<any[]>([]); const nodeOptions = ref<any[]>([]);
const conditionRef = ref<any[]>([]); const conditionRef = ref<any[]>([]);
@ -209,7 +208,8 @@ defineExpose({ openDrawer }); // 暴露方法给父组件
v-if="showInput" v-if="showInput"
type="text" type="text"
class="mr-2 w-48" class="mr-2 w-48"
@blur="blurEvent()" @blur="changeNodeName()"
@press-enter="changeNodeName()"
v-model:value="nodeName" v-model:value="nodeName"
:placeholder="nodeName" :placeholder="nodeName"
/> />

View File

@ -52,9 +52,8 @@ const deptOptions = inject<Ref<SystemDeptApi.Dept[]>>('deptList');
// //
const currentNode = useWatchNode(props); const currentNode = useWatchNode(props);
// //
const { nodeName, showInput, clickIcon, blurEvent, inputRef } = useNodeName( const { nodeName, showInput, clickIcon, changeNodeName, inputRef } =
BpmNodeTypeEnum.START_USER_NODE, useNodeName(BpmNodeTypeEnum.START_USER_NODE);
);
// Tab // Tab
const activeTabName = ref('user'); const activeTabName = ref('user');
@ -150,7 +149,8 @@ defineExpose({ showStartUserNodeConfig });
v-if="showInput" v-if="showInput"
type="text" type="text"
class="config-editable-input" class="config-editable-input"
@blur="blurEvent()" @blur="changeNodeName()"
@press-enter="changeNodeName()"
v-model:value="nodeName" v-model:value="nodeName"
:placeholder="nodeName" :placeholder="nodeName"
/> />

View File

@ -72,9 +72,8 @@ const [Drawer, drawerApi] = useVbenDrawer({
// //
const currentNode = useWatchNode(props); const currentNode = useWatchNode(props);
// //
const { nodeName, showInput, clickIcon, blurEvent, inputRef } = useNodeName( const { nodeName, showInput, clickIcon, changeNodeName, inputRef } =
BpmNodeTypeEnum.TRIGGER_NODE, useNodeName(BpmNodeTypeEnum.TRIGGER_NODE);
);
// //
const formRef = ref(); // Ref const formRef = ref(); // Ref
@ -392,7 +391,8 @@ onMounted(() => {
v-if="showInput" v-if="showInput"
type="text" type="text"
class="config-editable-input" class="config-editable-input"
@blur="blurEvent()" @blur="changeNodeName()"
@press-enter="changeNodeName()"
v-model:value="nodeName" v-model:value="nodeName"
:placeholder="nodeName" :placeholder="nodeName"
/> />

View File

@ -114,9 +114,8 @@ const [Drawer, drawerApi] = useVbenDrawer({
}); });
// //
const { nodeName, showInput, clickIcon, blurEvent, inputRef } = useNodeName( const { nodeName, showInput, clickIcon, changeNodeName, inputRef } =
BpmNodeTypeEnum.USER_TASK_NODE, useNodeName(BpmNodeTypeEnum.USER_TASK_NODE);
);
// Tab // Tab
const activeTabName = ref('user'); const activeTabName = ref('user');
@ -589,7 +588,8 @@ onMounted(() => {
ref="inputRef" ref="inputRef"
type="text" type="text"
class="config-editable-input" class="config-editable-input"
@blur="blurEvent()" @blur="changeNodeName()"
@press-enter="changeNodeName()"
v-model:value="nodeName" v-model:value="nodeName"
:placeholder="nodeName" :placeholder="nodeName"
/> />

View File

@ -32,7 +32,7 @@ const readonly = inject<Boolean>('readonly');
// //
const currentNode = useWatchNode(props); const currentNode = useWatchNode(props);
// //
const { showInput, blurEvent, clickTitle, inputRef } = useNodeName2( const { showInput, changeNodeName, clickTitle, inputRef } = useNodeName2(
currentNode, currentNode,
BpmNodeTypeEnum.COPY_TASK_NODE, BpmNodeTypeEnum.COPY_TASK_NODE,
); );
@ -71,7 +71,8 @@ function deleteNode() {
v-if="!readonly && showInput" v-if="!readonly && showInput"
type="text" type="text"
class="editable-title-input" class="editable-title-input"
@blur="blurEvent()" @blur="changeNodeName()"
@press-enter="changeNodeName()"
v-model:value="currentNode.name" v-model:value="currentNode.name"
:placeholder="currentNode.name" :placeholder="currentNode.name"
/> />

View File

@ -30,7 +30,7 @@ const readonly = inject<Boolean>('readonly');
// //
const currentNode = useWatchNode(props); const currentNode = useWatchNode(props);
// //
const { showInput, blurEvent, clickTitle, inputRef } = useNodeName2( const { showInput, changeNodeName, clickTitle, inputRef } = useNodeName2(
currentNode, currentNode,
BpmNodeTypeEnum.DELAY_TIMER_NODE, BpmNodeTypeEnum.DELAY_TIMER_NODE,
); );
@ -68,7 +68,8 @@ function deleteNode() {
v-if="!readonly && showInput" v-if="!readonly && showInput"
type="text" type="text"
class="editable-title-input" class="editable-title-input"
@blur="blurEvent()" @blur="changeNodeName()"
@press-enter="changeNodeName()"
v-model:value="currentNode.name" v-model:value="currentNode.name"
:placeholder="currentNode.name" :placeholder="currentNode.name"
/> />

View File

@ -73,8 +73,8 @@ watch(
{ deep: true }, { deep: true },
); );
// //
function blurEvent(index: number) { function changeNodeName(index: number) {
showInputs.value[index] = false; showInputs.value[index] = false;
const conditionNode = currentNode.value.conditionNodes?.at( const conditionNode = currentNode.value.conditionNodes?.at(
index, index,
@ -214,7 +214,8 @@ function recursiveFindParentNode(
" "
type="text" type="text"
class="editable-title-input" class="editable-title-input"
@blur="blurEvent(index)" @blur="changeNodeName(index)"
@press-enter="changeNodeName(index)"
v-model:value="item.name" v-model:value="item.name"
/> />
</div> </div>

View File

@ -77,8 +77,8 @@ watch(
}, },
{ deep: true }, { deep: true },
); );
// //
function blurEvent(index: number) { function changeNodeName(index: number) {
showInputs.value[index] = false; showInputs.value[index] = false;
const conditionNode = currentNode.value.conditionNodes?.at( const conditionNode = currentNode.value.conditionNodes?.at(
index, index,
@ -217,7 +217,8 @@ function recursiveFindParentNode(
" "
type="text" type="text"
class="editable-title-input" class="editable-title-input"
@blur="blurEvent(index)" @blur="changeNodeName(index)"
@press-enter="changeNodeName(index)"
v-model:value="item.name" v-model:value="item.name"
/> />
</div> </div>

View File

@ -66,8 +66,8 @@ watch(
}, },
{ deep: true }, { deep: true },
); );
// //
function blurEvent(index: number) { function changeNodeName(index: number) {
showInputs.value[index] = false; showInputs.value[index] = false;
const conditionNode = currentNode.value.conditionNodes?.at( const conditionNode = currentNode.value.conditionNodes?.at(
index, index,
@ -175,7 +175,8 @@ function recursiveFindParentNode(
" "
type="text" type="text"
class="input-max-width editable-title-input" class="input-max-width editable-title-input"
@blur="blurEvent(index)" @blur="changeNodeName(index)"
@press-enter="changeNodeName(index)"
v-model:value="item.name" v-model:value="item.name"
/> />
</div> </div>

View File

@ -33,7 +33,7 @@ const readonly = inject<Boolean>('readonly');
// //
const currentNode = useWatchNode(props); const currentNode = useWatchNode(props);
// //
const { showInput, blurEvent, clickTitle, inputRef } = useNodeName2( const { showInput, changeNodeName, clickTitle, inputRef } = useNodeName2(
currentNode, currentNode,
BpmNodeTypeEnum.ROUTER_BRANCH_NODE, BpmNodeTypeEnum.ROUTER_BRANCH_NODE,
); );
@ -71,7 +71,8 @@ function deleteNode() {
v-if="!readonly && showInput" v-if="!readonly && showInput"
type="text" type="text"
class="editable-title-input" class="editable-title-input"
@blur="blurEvent()" @blur="changeNodeName()"
@press-enter="changeNodeName()"
v-model:value="currentNode.name" v-model:value="currentNode.name"
:placeholder="currentNode.name" :placeholder="currentNode.name"
/> />

View File

@ -37,7 +37,7 @@ const tasks = inject<Ref<any[]>>('tasks', ref([]));
// //
const currentNode = useWatchNode(props); const currentNode = useWatchNode(props);
// //
const { showInput, blurEvent, clickTitle, inputRef } = useNodeName2( const { showInput, changeNodeName, clickTitle, inputRef } = useNodeName2(
currentNode, currentNode,
BpmNodeTypeEnum.START_USER_NODE, BpmNodeTypeEnum.START_USER_NODE,
); );
@ -85,7 +85,8 @@ function nodeClick() {
v-if="!readonly && showInput" v-if="!readonly && showInput"
type="text" type="text"
class="editable-title-input" class="editable-title-input"
@blur="blurEvent()" @blur="changeNodeName()"
@press-enter="changeNodeName()"
v-model:value="currentNode.name" v-model:value="currentNode.name"
:placeholder="currentNode.name" :placeholder="currentNode.name"
/> />

View File

@ -35,7 +35,7 @@ const readonly = inject<Boolean>('readonly');
// //
const currentNode = useWatchNode(props); const currentNode = useWatchNode(props);
// //
const { showInput, blurEvent, clickTitle, inputRef } = useNodeName2( const { showInput, changeNodeName, clickTitle, inputRef } = useNodeName2(
currentNode, currentNode,
BpmNodeTypeEnum.TRIGGER_NODE, BpmNodeTypeEnum.TRIGGER_NODE,
); );
@ -73,7 +73,8 @@ function deleteNode() {
v-if="!readonly && showInput" v-if="!readonly && showInput"
type="text" type="text"
class="editable-title-input" class="editable-title-input"
@blur="blurEvent()" @blur="changeNodeName()"
@press-enter="changeNodeName()"
v-model:value="currentNode.name" v-model:value="currentNode.name"
:placeholder="currentNode.name" :placeholder="currentNode.name"
/> />

View File

@ -36,7 +36,7 @@ const tasks = inject<Ref<any[]>>('tasks', ref([]));
// //
const currentNode = useWatchNode(props); const currentNode = useWatchNode(props);
// //
const { showInput, blurEvent, clickTitle, inputRef } = useNodeName2( const { showInput, changeNodeName, clickTitle, inputRef } = useNodeName2(
currentNode, currentNode,
BpmNodeTypeEnum.USER_TASK_NODE, BpmNodeTypeEnum.USER_TASK_NODE,
); );
@ -91,7 +91,8 @@ function findReturnTaskNodes(
v-if="!readonly && showInput" v-if="!readonly && showInput"
type="text" type="text"
class="editable-title-input" class="editable-title-input"
@blur="blurEvent()" @blur="changeNodeName()"
@press-enter="changeNodeName()"
v-model:value="currentNode.name" v-model:value="currentNode.name"
:placeholder="currentNode.name" :placeholder="currentNode.name"
/> />

View File

@ -628,8 +628,8 @@ export function useNodeName(nodeType: BpmNodeTypeEnum) {
function clickIcon() { function clickIcon() {
showInput.value = true; showInput.value = true;
} }
// 节点名称输入框失去焦点 // 修改节点名称
function blurEvent() { function changeNodeName() {
showInput.value = false; showInput.value = false;
nodeName.value = nodeName.value =
nodeName.value || (NODE_DEFAULT_NAME.get(nodeType) as string); nodeName.value || (NODE_DEFAULT_NAME.get(nodeType) as string);
@ -648,7 +648,7 @@ export function useNodeName(nodeType: BpmNodeTypeEnum) {
showInput, showInput,
inputRef, inputRef,
clickIcon, clickIcon,
blurEvent, changeNodeName,
}; };
} }
@ -670,8 +670,8 @@ export function useNodeName2(
} }
}); });
// 节点名称输入框失去焦点 // 修改节点名称
function blurEvent() { function changeNodeName() {
showInput.value = false; showInput.value = false;
node.value.name = node.value.name =
node.value.name || (NODE_DEFAULT_NAME.get(nodeType) as string); node.value.name || (NODE_DEFAULT_NAME.get(nodeType) as string);
@ -685,7 +685,7 @@ export function useNodeName2(
showInput, showInput,
inputRef, inputRef,
clickTitle, clickTitle,
blurEvent, changeNodeName,
}; };
} }