@@ -54,6 +54,15 @@ const props = defineProps({
5454 modelName: {
5555 type: String ,
5656 required: false
57+ },
58+ // 可发起流程的人员编号
59+ startUserIds : {
60+ type: Array ,
61+ required: false
62+ },
63+ value: {
64+ type: [String , Object ],
65+ required: false
5766 }
5867})
5968
@@ -66,6 +75,10 @@ const userOptions = ref<UserApi.UserVO[]>([]) // 用户列表
6675const deptOptions = ref <DeptApi .DeptVO []>([]) // 部门列表
6776const deptTreeOptions = ref ()
6877const userGroupOptions = ref <UserGroupApi .UserGroupVO []>([]) // 用户组列表
78+
79+ // 添加当前值的引用
80+ const currentValue = ref <SimpleFlowNode | undefined >()
81+
6982provide (' formFields' , formFields )
7083provide (' formType' , formType )
7184provide (' roleList' , roleOptions )
@@ -74,17 +87,18 @@ provide('userList', userOptions)
7487provide (' deptList' , deptOptions )
7588provide (' userGroupList' , userGroupOptions )
7689provide (' deptTree' , deptTreeOptions )
90+ provide (' startUserIds' , props .startUserIds )
7791
7892const message = useMessage () // 国际化
7993const processNodeTree = ref <SimpleFlowNode | undefined >()
8094const errorDialogVisible = ref (false )
8195let errorNodes: SimpleFlowNode [] = []
8296
8397// 添加更新模型的方法
84- const updateModel = (key ? : string , name ? : string ) => {
98+ const updateModel = () => {
8599 if (! processNodeTree .value ) {
86100 processNodeTree .value = {
87- name: name || ' 发起人' ,
101+ name: ' 发起人' ,
88102 type: NodeType .START_USER_NODE ,
89103 id: NodeId .START_USER_NODE_ID ,
90104 childNode: {
@@ -93,45 +107,78 @@ const updateModel = (key?: string, name?: string) => {
93107 type: NodeType .END_EVENT_NODE
94108 }
95109 }
96- } else if (name ) {
97- // 更新现有模型的名称
98- processNodeTree .value .name = name
110+ // 初始化时也触发一次保存
111+ saveSimpleFlowModel (processNodeTree .value )
99112 }
100113}
101114
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 )
106130 }
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+ )
108154
109155const saveSimpleFlowModel = async (simpleModelNode : SimpleFlowNode ) => {
110156 if (! simpleModelNode ) {
111- message .error (' 模型数据为空' )
112157 return
113158 }
159+
160+ // 校验节点
161+ errorNodes = []
162+ validateNode (simpleModelNode , errorNodes )
163+ if (errorNodes .length > 0 ) {
164+ errorDialogVisible .value = true
165+ return
166+ }
167+
114168 try {
115- loading .value = true
116169 if (props .modelId ) {
117170 // 编辑模式
118171 const data = {
119172 id: props .modelId ,
120173 simpleModel: simpleModelNode
121174 }
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 )
132176 }
133- } finally {
134- loading .value = false
177+ // 无论是编辑还是新建模式,都更新当前值并触发事件
178+ currentValue .value = simpleModelNode
179+ emits (' success' , simpleModelNode )
180+ } catch (error ) {
181+ console .error (' 保存失败:' , error )
135182 }
136183}
137184
@@ -196,31 +243,23 @@ onMounted(async () => {
196243 userOptions .value = await UserApi .getSimpleUserList ()
197244 // 获得部门列表
198245 deptOptions .value = await DeptApi .getSimpleDeptList ()
199-
200246 deptTreeOptions .value = handleTree (deptOptions .value as DeptApi .DeptVO [], ' id' )
201247 // 获取用户组列表
202248 userGroupOptions .value = await UserGroupApi .getUserGroupSimpleList ()
203249
250+ // 加载流程数据
204251 if (props .modelId ) {
205- // 获取 SIMPLE 设计器模型
252+ // 获取 SIMPLE 设计器模型
206253 const result = await getBpmSimpleModel (props .modelId )
207254 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 ()
223258 }
259+ } else if (props .value ) {
260+ await loadProcessData (props .value )
261+ } else {
262+ updateModel ()
224263 }
225264 } finally {
226265 loading .value = false
@@ -231,14 +270,36 @@ const simpleProcessModelRef = ref()
231270
232271/** 获取当前流程数据 */
233272const 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 )
236296 }
237- return undefined
238297}
239298
240299defineExpose ({
241300 getCurrentFlowData ,
242- updateModel
301+ updateModel ,
302+ loadProcessData ,
303+ refresh
243304})
244305 </script >
0 commit comments