@@ -59,6 +59,10 @@ const props = defineProps({
59
59
startUserIds : {
60
60
type: Array ,
61
61
required: false
62
+ },
63
+ value: {
64
+ type: [String , Object ],
65
+ required: false
62
66
}
63
67
})
64
68
@@ -71,6 +75,10 @@ const userOptions = ref<UserApi.UserVO[]>([]) // 用户列表
71
75
const deptOptions = ref <DeptApi .DeptVO []>([]) // 部门列表
72
76
const deptTreeOptions = ref ()
73
77
const userGroupOptions = ref <UserGroupApi .UserGroupVO []>([]) // 用户组列表
78
+
79
+ // 添加当前值的引用
80
+ const currentValue = ref <SimpleFlowNode | undefined >()
81
+
74
82
provide (' formFields' , formFields )
75
83
provide (' formType' , formType )
76
84
provide (' roleList' , roleOptions )
@@ -87,10 +95,10 @@ const errorDialogVisible = ref(false)
87
95
let errorNodes: SimpleFlowNode [] = []
88
96
89
97
// 添加更新模型的方法
90
- const updateModel = (key ? : string , name ? : string ) => {
98
+ const updateModel = () => {
91
99
if (! processNodeTree .value ) {
92
100
processNodeTree .value = {
93
- name: name || ' 发起人' ,
101
+ name: ' 发起人' ,
94
102
type: NodeType .START_USER_NODE ,
95
103
id: NodeId .START_USER_NODE_ID ,
96
104
childNode: {
@@ -99,45 +107,78 @@ const updateModel = (key?: string, name?: string) => {
99
107
type: NodeType .END_EVENT_NODE
100
108
}
101
109
}
102
- } else if (name ) {
103
- // 更新现有模型的名称
104
- processNodeTree .value .name = name
110
+ // 初始化时也触发一次保存
111
+ saveSimpleFlowModel (processNodeTree .value )
105
112
}
106
113
}
107
114
108
- // 监听属性变化
109
- watch ([() => props .modelKey , () => props .modelName ], ([newKey , newName ]) => {
110
- if (! props .modelId && newKey && newName ) {
111
- 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 )
112
130
}
113
- }, { 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
+ )
114
154
115
155
const saveSimpleFlowModel = async (simpleModelNode : SimpleFlowNode ) => {
116
156
if (! simpleModelNode ) {
117
- message .error (' 模型数据为空' )
118
157
return
119
158
}
159
+
160
+ // 校验节点
161
+ errorNodes = []
162
+ validateNode (simpleModelNode , errorNodes )
163
+ if (errorNodes .length > 0 ) {
164
+ errorDialogVisible .value = true
165
+ return
166
+ }
167
+
120
168
try {
121
- loading .value = true
122
169
if (props .modelId ) {
123
170
// 编辑模式
124
171
const data = {
125
172
id: props .modelId ,
126
173
simpleModel: simpleModelNode
127
174
}
128
- const result = await updateBpmSimpleModel (data )
129
- if (result ) {
130
- message .success (' 修改成功' )
131
- emits (' success' )
132
- } else {
133
- message .alert (' 修改失败' )
134
- }
135
- } else {
136
- // 新建模式,直接返回数据
137
- emits (' success' , simpleModelNode )
175
+ await updateBpmSimpleModel (data )
138
176
}
139
- } finally {
140
- loading .value = false
177
+ // 无论是编辑还是新建模式,都更新当前值并触发事件
178
+ currentValue .value = simpleModelNode
179
+ emits (' success' , simpleModelNode )
180
+ } catch (error ) {
181
+ console .error (' 保存失败:' , error )
141
182
}
142
183
}
143
184
@@ -191,7 +232,6 @@ onMounted(async () => {
191
232
if (formType .value === 10 ) {
192
233
const bpmnForm = (await getForm (bpmnModel .formId )) as unknown as FormVO
193
234
formFields .value = bpmnForm ?.fields
194
- console .log (' formFields.value' , formFields .value )
195
235
}
196
236
}
197
237
}
@@ -203,31 +243,23 @@ onMounted(async () => {
203
243
userOptions .value = await UserApi .getSimpleUserList ()
204
244
// 获得部门列表
205
245
deptOptions .value = await DeptApi .getSimpleDeptList ()
206
-
207
246
deptTreeOptions .value = handleTree (deptOptions .value as DeptApi .DeptVO [], ' id' )
208
247
// 获取用户组列表
209
248
userGroupOptions .value = await UserGroupApi .getUserGroupSimpleList ()
210
249
250
+ // 加载流程数据
211
251
if (props .modelId ) {
212
- // 获取 SIMPLE 设计器模型
252
+ // 获取 SIMPLE 设计器模型
213
253
const result = await getBpmSimpleModel (props .modelId )
214
254
if (result ) {
215
- processNodeTree .value = result
216
- }
217
- }
218
-
219
- // 如果没有现有模型,创建初始模型
220
- if (! processNodeTree .value ) {
221
- processNodeTree .value = {
222
- name: props .modelName || ' 发起人' ,
223
- type: NodeType .START_USER_NODE ,
224
- id: NodeId .START_USER_NODE_ID ,
225
- childNode: {
226
- id: NodeId .END_EVENT_NODE_ID ,
227
- name: ' 结束' ,
228
- type: NodeType .END_EVENT_NODE
229
- }
255
+ await loadProcessData (result )
256
+ } else {
257
+ updateModel ()
230
258
}
259
+ } else if (props .value ) {
260
+ await loadProcessData (props .value )
261
+ } else {
262
+ updateModel ()
231
263
}
232
264
} finally {
233
265
loading .value = false
@@ -238,14 +270,36 @@ const simpleProcessModelRef = ref()
238
270
239
271
/** 获取当前流程数据 */
240
272
const getCurrentFlowData = async () => {
241
- if (simpleProcessModelRef .value ) {
242
- 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 )
243
296
}
244
- return undefined
245
297
}
246
298
247
299
defineExpose ({
248
300
getCurrentFlowData ,
249
- updateModel
301
+ updateModel ,
302
+ loadProcessData ,
303
+ refresh
250
304
})
251
305
</script >
0 commit comments