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