DelayTimerNode.vue 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <template>
  2. <div class="node-wrapper">
  3. <div class="node-container">
  4. <div
  5. class="node-box"
  6. :class="[
  7. { 'node-config-error': !currentNode.showText },
  8. `${useTaskStatusClass(currentNode?.activityStatus)}`
  9. ]"
  10. >
  11. <div class="node-title-container">
  12. <!-- TODO @芋艿 需要更换图标 -->
  13. <div class="node-title-icon copy-task"><span class="iconfont icon-copy"></span></div>
  14. <input
  15. v-if="!readonly && showInput"
  16. type="text"
  17. class="editable-title-input"
  18. @blur="blurEvent()"
  19. v-mountedFocus
  20. v-model="currentNode.name"
  21. :placeholder="currentNode.name"
  22. />
  23. <div v-else class="node-title" @click="clickTitle">
  24. {{ currentNode.name }}
  25. </div>
  26. </div>
  27. <div class="node-content" @click="openNodeConfig">
  28. <div class="node-text" :title="currentNode.showText" v-if="currentNode.showText">
  29. {{ currentNode.showText }}
  30. </div>
  31. <div class="node-text" v-else>
  32. {{ NODE_DEFAULT_TEXT.get(NodeType.DELAY_TIMER_NODE) }}
  33. </div>
  34. <Icon v-if="!readonly" icon="ep:arrow-right-bold" />
  35. </div>
  36. <div v-if="!readonly" class="node-toolbar">
  37. <div class="toolbar-icon"
  38. ><Icon color="#0089ff" icon="ep:circle-close-filled" :size="18" @click="deleteNode"
  39. /></div>
  40. </div>
  41. </div>
  42. <!-- 传递子节点给添加节点组件。会在子节点前面添加节点 -->
  43. <NodeHandler
  44. v-if="currentNode"
  45. v-model:child-node="currentNode.childNode"
  46. :current-node="currentNode"
  47. />
  48. </div>
  49. <DelayTimerNodeConfig
  50. v-if="!readonly && currentNode"
  51. ref="nodeSetting"
  52. :flow-node="currentNode"
  53. />
  54. </div>
  55. </template>
  56. <script setup lang="ts">
  57. import { SimpleFlowNode, NodeType, NODE_DEFAULT_TEXT } from '../consts'
  58. import NodeHandler from '../NodeHandler.vue'
  59. import { useNodeName2, useWatchNode, useTaskStatusClass } from '../node'
  60. import DelayTimerNodeConfig from '../nodes-config/DelayTimerNodeConfig.vue'
  61. defineOptions({
  62. name: 'DelayTimerNode'
  63. })
  64. const props = defineProps({
  65. flowNode: {
  66. type: Object as () => SimpleFlowNode,
  67. required: true
  68. }
  69. })
  70. // 定义事件,更新父组件。
  71. const emits = defineEmits<{
  72. 'update:flowNode': [node: SimpleFlowNode | undefined]
  73. }>()
  74. // 是否只读
  75. const readonly = inject<Boolean>('readonly')
  76. // 监控节点的变化
  77. const currentNode = useWatchNode(props)
  78. // 节点名称编辑
  79. const { showInput, blurEvent, clickTitle } = useNodeName2(currentNode, NodeType.DELAY_TIMER_NODE)
  80. const nodeSetting = ref()
  81. // 打开节点配置
  82. const openNodeConfig = () => {
  83. if (readonly) {
  84. return
  85. }
  86. nodeSetting.value.showDelayTimerNodeConfig(currentNode.value)
  87. nodeSetting.value.openDrawer()
  88. }
  89. // 删除节点。更新当前节点为孩子节点
  90. const deleteNode = () => {
  91. emits('update:flowNode', currentNode.value.childNode)
  92. }
  93. </script>
  94. <style lang="scss" scoped></style>