@@ -54,6 +54,15 @@ const props = defineProps({
54
54
modelName: {
55
55
type: String ,
56
56
required: false
57
+ },
58
+ // 可发起流程的人员编号
59
+ startUserIds : {
60
+ type: Array ,
61
+ required: false
62
+ },
63
+ value: {
64
+ type: [String , Object ],
65
+ required: false
57
66
}
58
67
})
59
68
@@ -66,6 +75,10 @@ const userOptions = ref<UserApi.UserVO[]>([]) // 用户列表
66
75
const deptOptions = ref <DeptApi .DeptVO []>([]) // 部门列表
67
76
const deptTreeOptions = ref ()
68
77
const userGroupOptions = ref <UserGroupApi .UserGroupVO []>([]) // 用户组列表
78
+
79
+ // 添加当前值的引用
80
+ const currentValue = ref <SimpleFlowNode | undefined >()
81
+
69
82
provide (' formFields' , formFields )
70
83
provide (' formType' , formType )
71
84
provide (' roleList' , roleOptions )
@@ -74,17 +87,18 @@ provide('userList', userOptions)
74
87
provide (' deptList' , deptOptions )
75
88
provide (' userGroupList' , userGroupOptions )
76
89
provide (' deptTree' , deptTreeOptions )
90
+ provide (' startUserIds' , props .startUserIds )
77
91
78
92
const message = useMessage () // 国际化
79
93
const processNodeTree = ref <SimpleFlowNode | undefined >()
80
94
const errorDialogVisible = ref (false )
81
95
let errorNodes: SimpleFlowNode [] = []
82
96
83
97
// 添加更新模型的方法
84
- const updateModel = (key ? : string , name ? : string ) => {
98
+ const updateModel = () => {
85
99
if (! processNodeTree .value ) {
86
100
processNodeTree .value = {
87
- name: name || ' 发起人' ,
101
+ name: ' 发起人' ,
88
102
type: NodeType .START_USER_NODE ,
89
103
id: NodeId .START_USER_NODE_ID ,
90
104
childNode: {
@@ -93,45 +107,78 @@ const updateModel = (key?: string, name?: string) => {
93
107
type: NodeType .END_EVENT_NODE
94
108
}
95
109
}
96
- } else if (name ) {
97
- // 更新现有模型的名称
98
- processNodeTree .value .name = name
110
+ // 初始化时也触发一次保存
111
+ saveSimpleFlowModel (processNodeTree .value )
99
112
}
100
113
}
101
114
102
- // 监听属性变化
103
- watch ([() => props .modelKey , () => props .modelName ], ([newKey , newName ]) => {
104
- if (! props .modelId && newKey && newName ) {
105
- updateModel (newKey , newName )
115
+ // 加载流程数据
116
+ const loadProcessData = async (data : any ) => {
117
+ try {
118
+ if (data ) {
119
+ const parsedData = typeof data === ' string' ? JSON .parse (data ) : data
120
+ processNodeTree .value = parsedData
121
+ currentValue .value = parsedData
122
+ // 确保数据加载后刷新视图
123
+ await nextTick ()
124
+ if (simpleProcessModelRef .value ?.refresh ) {
125
+ await simpleProcessModelRef .value .refresh ()
126
+ }
127
+ }
128
+ } catch (error ) {
129
+ console .error (' 加载流程数据失败:' , error )
106
130
}
107
- }, { immediate: true , deep: true })
131
+ }
132
+
133
+ // 监听属性变化
134
+ watch (
135
+ () => props .value ,
136
+ async (newValue , oldValue ) => {
137
+ if (newValue && newValue !== oldValue ) {
138
+ await loadProcessData (newValue )
139
+ }
140
+ },
141
+ { immediate: true , deep: true }
142
+ )
143
+
144
+ // 监听流程节点树变化,自动保存
145
+ watch (
146
+ () => processNodeTree .value ,
147
+ async (newValue , oldValue ) => {
148
+ if (newValue && oldValue && JSON .stringify (newValue ) !== JSON .stringify (oldValue )) {
149
+ await saveSimpleFlowModel (newValue )
150
+ }
151
+ },
152
+ { deep: true }
153
+ )
108
154
109
155
const saveSimpleFlowModel = async (simpleModelNode : SimpleFlowNode ) => {
110
156
if (! simpleModelNode ) {
111
- message .error (' 模型数据为空' )
112
157
return
113
158
}
159
+
160
+ // 校验节点
161
+ errorNodes = []
162
+ validateNode (simpleModelNode , errorNodes )
163
+ if (errorNodes .length > 0 ) {
164
+ errorDialogVisible .value = true
165
+ return
166
+ }
167
+
114
168
try {
115
- loading .value = true
116
169
if (props .modelId ) {
117
170
// 编辑模式
118
171
const data = {
119
172
id: props .modelId ,
120
173
simpleModel: simpleModelNode
121
174
}
122
- const result = await updateBpmSimpleModel (data )
123
- if (result ) {
124
- message .success (' 修改成功' )
125
- emits (' success' )
126
- } else {
127
- message .alert (' 修改失败' )
128
- }
129
- } else {
130
- // 新建模式,直接返回数据
131
- emits (' success' , simpleModelNode )
175
+ await updateBpmSimpleModel (data )
132
176
}
133
- } finally {
134
- loading .value = false
177
+ // 无论是编辑还是新建模式,都更新当前值并触发事件
178
+ currentValue .value = simpleModelNode
179
+ emits (' success' , simpleModelNode )
180
+ } catch (error ) {
181
+ console .error (' 保存失败:' , error )
135
182
}
136
183
}
137
184
@@ -196,31 +243,23 @@ onMounted(async () => {
196
243
userOptions .value = await UserApi .getSimpleUserList ()
197
244
// 获得部门列表
198
245
deptOptions .value = await DeptApi .getSimpleDeptList ()
199
-
200
246
deptTreeOptions .value = handleTree (deptOptions .value as DeptApi .DeptVO [], ' id' )
201
247
// 获取用户组列表
202
248
userGroupOptions .value = await UserGroupApi .getUserGroupSimpleList ()
203
249
250
+ // 加载流程数据
204
251
if (props .modelId ) {
205
- // 获取 SIMPLE 设计器模型
252
+ // 获取 SIMPLE 设计器模型
206
253
const result = await getBpmSimpleModel (props .modelId )
207
254
if (result ) {
208
- processNodeTree .value = result
209
- }
210
- }
211
-
212
- // 如果没有现有模型,创建初始模型
213
- if (! processNodeTree .value ) {
214
- processNodeTree .value = {
215
- name: props .modelName || ' 发起人' ,
216
- type: NodeType .START_USER_NODE ,
217
- id: NodeId .START_USER_NODE_ID ,
218
- childNode: {
219
- id: NodeId .END_EVENT_NODE_ID ,
220
- name: ' 结束' ,
221
- type: NodeType .END_EVENT_NODE
222
- }
255
+ await loadProcessData (result )
256
+ } else {
257
+ updateModel ()
223
258
}
259
+ } else if (props .value ) {
260
+ await loadProcessData (props .value )
261
+ } else {
262
+ updateModel ()
224
263
}
225
264
} finally {
226
265
loading .value = false
@@ -231,14 +270,36 @@ const simpleProcessModelRef = ref()
231
270
232
271
/** 获取当前流程数据 */
233
272
const getCurrentFlowData = async () => {
234
- if (simpleProcessModelRef .value ) {
235
- return await simpleProcessModelRef .value .getCurrentFlowData ()
273
+ try {
274
+ if (simpleProcessModelRef .value ) {
275
+ const data = await simpleProcessModelRef .value .getCurrentFlowData ()
276
+ if (data ) {
277
+ currentValue .value = data
278
+ return data
279
+ }
280
+ }
281
+ return currentValue .value
282
+ } catch (error ) {
283
+ console .error (' 获取流程数据失败:' , error )
284
+ return currentValue .value
285
+ }
286
+ }
287
+
288
+ // 刷新方法
289
+ const refresh = async () => {
290
+ try {
291
+ if (currentValue .value ) {
292
+ await loadProcessData (currentValue .value )
293
+ }
294
+ } catch (error ) {
295
+ console .error (' 刷新失败:' , error )
236
296
}
237
- return undefined
238
297
}
239
298
240
299
defineExpose ({
241
300
getCurrentFlowData ,
242
- updateModel
301
+ updateModel ,
302
+ loadProcessData ,
303
+ refresh
243
304
})
244
305
</script >
0 commit comments