Skip to content

Commit f3b28f4

Browse files
authored
Merge pull request #116 from GoldenZqqq/feature/bpm
流程新增/修改页面bug修复
2 parents 6f724d9 + 1e161d2 commit f3b28f4

File tree

5 files changed

+519
-195
lines changed

5 files changed

+519
-195
lines changed

src/components/SimpleProcessDesignerV2/src/SimpleProcessDesigner.vue

Lines changed: 100 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ const props = defineProps({
5454
modelName: {
5555
type: String,
5656
required: false
57+
},
58+
value: {
59+
type: [String, Object],
60+
required: false
5761
}
5862
})
5963
@@ -66,6 +70,10 @@ const userOptions = ref<UserApi.UserVO[]>([]) // 用户列表
6670
const deptOptions = ref<DeptApi.DeptVO[]>([]) // 部门列表
6771
const deptTreeOptions = ref()
6872
const userGroupOptions = ref<UserGroupApi.UserGroupVO[]>([]) // 用户组列表
73+
74+
// 添加当前值的引用
75+
const currentValue = ref<SimpleFlowNode | undefined>()
76+
6977
provide('formFields', formFields)
7078
provide('formType', formType)
7179
provide('roleList', roleOptions)
@@ -81,10 +89,10 @@ const errorDialogVisible = ref(false)
8189
let errorNodes: SimpleFlowNode[] = []
8290
8391
// 添加更新模型的方法
84-
const updateModel = (key?: string, name?: string) => {
92+
const updateModel = () => {
8593
if (!processNodeTree.value) {
8694
processNodeTree.value = {
87-
name: name || '发起人',
95+
name: '发起人',
8896
type: NodeType.START_USER_NODE,
8997
id: NodeId.START_USER_NODE_ID,
9098
childNode: {
@@ -93,45 +101,78 @@ const updateModel = (key?: string, name?: string) => {
93101
type: NodeType.END_EVENT_NODE
94102
}
95103
}
96-
} else if (name) {
97-
// 更新现有模型的名称
98-
processNodeTree.value.name = name
104+
// 初始化时也触发一次保存
105+
saveSimpleFlowModel(processNodeTree.value)
99106
}
100107
}
101108
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)
106124
}
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+
)
108148
109149
const saveSimpleFlowModel = async (simpleModelNode: SimpleFlowNode) => {
110150
if (!simpleModelNode) {
111-
message.error('模型数据为空')
112151
return
113152
}
153+
154+
// 校验节点
155+
errorNodes = []
156+
validateNode(simpleModelNode, errorNodes)
157+
if (errorNodes.length > 0) {
158+
errorDialogVisible.value = true
159+
return
160+
}
161+
114162
try {
115-
loading.value = true
116163
if (props.modelId) {
117164
// 编辑模式
118165
const data = {
119166
id: props.modelId,
120167
simpleModel: simpleModelNode
121168
}
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)
132170
}
133-
} finally {
134-
loading.value = false
171+
// 无论是编辑还是新建模式,都更新当前值并触发事件
172+
currentValue.value = simpleModelNode
173+
emits('success', simpleModelNode)
174+
} catch (error) {
175+
console.error('保存失败:', error)
135176
}
136177
}
137178
@@ -196,31 +237,23 @@ onMounted(async () => {
196237
userOptions.value = await UserApi.getSimpleUserList()
197238
// 获得部门列表
198239
deptOptions.value = await DeptApi.getSimpleDeptList()
199-
200240
deptTreeOptions.value = handleTree(deptOptions.value as DeptApi.DeptVO[], 'id')
201241
// 获取用户组列表
202242
userGroupOptions.value = await UserGroupApi.getUserGroupSimpleList()
203243
244+
// 加载流程数据
204245
if (props.modelId) {
205-
//获取 SIMPLE 设计器模型
246+
// 获取 SIMPLE 设计器模型
206247
const result = await getBpmSimpleModel(props.modelId)
207248
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()
223252
}
253+
} else if (props.value) {
254+
await loadProcessData(props.value)
255+
} else {
256+
updateModel()
224257
}
225258
} finally {
226259
loading.value = false
@@ -231,14 +264,36 @@ const simpleProcessModelRef = ref()
231264
232265
/** 获取当前流程数据 */
233266
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)
236290
}
237-
return undefined
238291
}
239292
240293
defineExpose({
241294
getCurrentFlowData,
242-
updateModel
295+
updateModel,
296+
loadProcessData,
297+
refresh
243298
})
244299
</script>

0 commit comments

Comments
 (0)