diff --git a/src/components/SimpleProcessDesignerV2/src/NodeHandler.vue b/src/components/SimpleProcessDesignerV2/src/NodeHandler.vue
index 4dfd51ad..c3c2c380 100644
--- a/src/components/SimpleProcessDesignerV2/src/NodeHandler.vue
+++ b/src/components/SimpleProcessDesignerV2/src/NodeHandler.vue
@@ -46,6 +46,13 @@
延迟器
+
@@ -120,7 +127,10 @@ const addNode = (type: number) => {
type: AssignEmptyHandlerType.APPROVE
},
assignStartUserHandlerType: AssignStartUserHandlerType.START_USER_AUDIT,
- childNode: props.childNode
+ childNode: props.childNode,
+ createTaskListener: {
+ enable: false
+ }
}
emits('update:childNode', data)
}
@@ -225,6 +235,17 @@ const addNode = (type: number) => {
}
emits('update:childNode', data)
}
+ if (type === NodeType.ROUTE_BRANCH_NODE) {
+ const data: SimpleFlowNode = {
+ id: 'GateWay_' + generateUUID(),
+ name: NODE_DEFAULT_NAME.get(NodeType.ROUTE_BRANCH_NODE) as string,
+ showText: '',
+ type: NodeType.ROUTE_BRANCH_NODE,
+ childNode: props.childNode,
+ defaultFlowId: 'Flow_' + generateUUID()
+ }
+ emits('update:childNode', data)
+ }
}
diff --git a/src/components/SimpleProcessDesignerV2/src/ProcessNodeTree.vue b/src/components/SimpleProcessDesignerV2/src/ProcessNodeTree.vue
index 419501ac..4c87d5b0 100644
--- a/src/components/SimpleProcessDesignerV2/src/ProcessNodeTree.vue
+++ b/src/components/SimpleProcessDesignerV2/src/ProcessNodeTree.vue
@@ -44,6 +44,12 @@
:flow-node="currentNode"
@update:flow-node="handleModelValueUpdate"
/>
+
+
()
+provide('processNodeTree', processNodeTree)
const errorDialogVisible = ref(false)
let errorNodes: SimpleFlowNode[] = []
diff --git a/src/components/SimpleProcessDesignerV2/src/consts.ts b/src/components/SimpleProcessDesignerV2/src/consts.ts
index 10d8a21b..daa91f78 100644
--- a/src/components/SimpleProcessDesignerV2/src/consts.ts
+++ b/src/components/SimpleProcessDesignerV2/src/consts.ts
@@ -44,7 +44,11 @@ export enum NodeType {
/**
* 包容分支节点 (对应包容网关)
*/
- INCLUSIVE_BRANCH_NODE = 53
+ INCLUSIVE_BRANCH_NODE = 53,
+ /**
+ * 路由分支节点
+ */
+ ROUTE_BRANCH_NODE = 54
}
export enum NodeId {
@@ -93,6 +97,8 @@ export interface SimpleFlowNode {
assignEmptyHandler?: AssignEmptyHandler
// 审批节点的审批人与发起人相同时,对应的处理类型
assignStartUserHandlerType?: number
+ // 创建任务监听器
+ createTaskListener: ListenerHandler
// 条件类型
conditionType?: ConditionType
// 条件表达式
@@ -105,6 +111,9 @@ export interface SimpleFlowNode {
activityStatus?: TaskStatusEnum
// 延迟设置
delaySetting?: DelaySetting
+ // 路由分支
+ routeGroup?: RouteCondition[]
+ defaultFlowId?: string
}
// 候选人策略枚举 ( 用于审批节点。抄送节点 )
export enum CandidateStrategy {
@@ -222,6 +231,31 @@ export type AssignEmptyHandler = {
userIds?: number[]
}
+/**
+ * 监听器的结构定义
+ */
+export type ListenerHandler = {
+ enable: boolean
+ path: string
+ header: ListenerMap[]
+ body: ListenerMap[]
+}
+export type ListenerMap = {
+ key: string
+ type: number
+ value: string
+}
+export const LISTENER_MAP_TYPES = [
+ {
+ value: 1,
+ label: '固定值'
+ },
+ {
+ value: 2,
+ label: '表单'
+ }
+]
+
// 审批拒绝类型枚举
export enum RejectHandlerType {
/**
@@ -421,6 +455,7 @@ NODE_DEFAULT_TEXT.set(NodeType.COPY_TASK_NODE, '请配置抄送人')
NODE_DEFAULT_TEXT.set(NodeType.CONDITION_NODE, '请设置条件')
NODE_DEFAULT_TEXT.set(NodeType.START_USER_NODE, '请设置发起人')
NODE_DEFAULT_TEXT.set(NodeType.DELAY_TIMER_NODE, '请设置延迟器')
+NODE_DEFAULT_TEXT.set(NodeType.ROUTE_BRANCH_NODE, '请设置路由节点')
export const NODE_DEFAULT_NAME = new Map()
NODE_DEFAULT_NAME.set(NodeType.USER_TASK_NODE, '审批人')
@@ -428,6 +463,7 @@ NODE_DEFAULT_NAME.set(NodeType.COPY_TASK_NODE, '抄送人')
NODE_DEFAULT_NAME.set(NodeType.CONDITION_NODE, '条件')
NODE_DEFAULT_NAME.set(NodeType.START_USER_NODE, '发起人')
NODE_DEFAULT_NAME.set(NodeType.DELAY_TIMER_NODE, '延迟器')
+NODE_DEFAULT_NAME.set(NodeType.ROUTE_BRANCH_NODE, '路由分支')
// 候选人策略。暂时不从字典中取。 后续可能调整。控制显示顺序
export const CANDIDATE_STRATEGY: DictDataVO[] = [
@@ -604,3 +640,13 @@ export const DELAY_TYPE = [
{ label: '固定时长', value: DelayTypeEnum.FIXED_TIME_DURATION },
{ label: '固定日期', value: DelayTypeEnum.FIXED_DATE_TIME }
]
+
+/**
+ * 路由分支结构定义
+ */
+export type RouteCondition = {
+ nodeId: string
+ conditionType: number
+ conditionExpression: string
+ conditionGroups: ConditionGroup
+}
diff --git a/src/components/SimpleProcessDesignerV2/src/nodes-config/RouteNodeConfig.vue b/src/components/SimpleProcessDesignerV2/src/nodes-config/RouteNodeConfig.vue
new file mode 100644
index 00000000..2d31f159
--- /dev/null
+++ b/src/components/SimpleProcessDesignerV2/src/nodes-config/RouteNodeConfig.vue
@@ -0,0 +1,405 @@
+
+
+
+
+
+
+
+
+
+
+ 路由{{ index + 1 }}
+
+
+
+ 删除
+
+
+
+
+
+ {{ dict.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 新增路由分支
+
+
+
+
+
+ 确 定
+ 取 消
+
+
+
+
+
+
+
diff --git a/src/components/SimpleProcessDesignerV2/src/nodes-config/UserTaskNodeConfig.vue b/src/components/SimpleProcessDesignerV2/src/nodes-config/UserTaskNodeConfig.vue
index d4b1101f..fd82f8f0 100644
--- a/src/components/SimpleProcessDesignerV2/src/nodes-config/UserTaskNodeConfig.vue
+++ b/src/components/SimpleProcessDesignerV2/src/nodes-config/UserTaskNodeConfig.vue
@@ -19,7 +19,8 @@
:placeholder="nodeName"
/>
- {{ nodeName }}
+ {{ nodeName }}
+
@@ -434,6 +435,137 @@
+
+
+
+
+ 创建任务
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 添加一行
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 添加一行
+
+
+
+
+
+
+ 指派任务执行人员
+
+
+
+
+
+
+
+ 完成任务
+
+
+
+
+
+
+
@@ -469,7 +601,8 @@ import {
ASSIGN_EMPTY_HANDLER_TYPES,
AssignEmptyHandlerType,
FieldPermissionType,
- ProcessVariableEnum
+ ProcessVariableEnum,
+ LISTENER_MAP_TYPES
} from '../consts'
import {
@@ -662,6 +795,13 @@ const saveConfig = async () => {
currentNode.value.fieldsPermission = fieldsPermissionConfig.value
// 设置按钮权限
currentNode.value.buttonsSetting = buttonsSetting.value
+ // 创建任务监听器
+ currentNode.value.createTaskListener = {
+ enable: configForm.value.createTaskListenerEnable,
+ path: configForm.value.createTaskListenerPath,
+ header: configForm.value.createTaskListenerHeader,
+ body: configForm.value.createTaskListenerBody
+ }
currentNode.value.showText = showText
settingVisible.value = false
@@ -713,6 +853,11 @@ const showUserTaskNodeConfig = (node: SimpleFlowNode) => {
buttonsSetting.value = cloneDeep(node.buttonsSetting) || DEFAULT_BUTTON_SETTING
// 4. 表单字段权限配置
getNodeConfigFormFields(node.fieldsPermission)
+ // 5. 创建任务监听器
+ configForm.value.createTaskListenerEnable = node.createTaskListener.enable
+ configForm.value.createTaskListenerPath = node.createTaskListener.path
+ configForm.value.createTaskListenerHeader = node.createTaskListener.header ?? []
+ configForm.value.createTaskListenerBody = node.createTaskListener.body ?? []
}
defineExpose({ openDrawer, showUserTaskNodeConfig }) // 暴露方法给父组件
@@ -825,6 +970,17 @@ function useTimeoutHandler() {
cTimeoutMaxRemindCount
}
}
+
+const addTaskListenerMap = (arr) => {
+ arr.push({
+ key: '',
+ type: 1,
+ value: ''
+ })
+}
+const deleteTaskListenerMap = (arr, index) => {
+ arr.splice(index, 1)
+}