Skip to content

Commit 8855b77

Browse files
committed
Merge branch 'feature/bpm' of https://github.com/yudaocode/yudao-ui-admin-vue3 into feature/bpm
# Conflicts: # src/components/SimpleProcessDesignerV2/src/SimpleProcessDesigner.vue # src/views/bpm/model/form/ProcessDesign.vue # src/views/bpm/simple/SimpleModelDesign.vue
2 parents 732b174 + f3b28f4 commit 8855b77

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 & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ const props = defineProps({
5959
startUserIds : {
6060
type: Array,
6161
required: false
62+
},
63+
value: {
64+
type: [String, Object],
65+
required: false
6266
}
6367
})
6468
@@ -71,6 +75,10 @@ const userOptions = ref<UserApi.UserVO[]>([]) // 用户列表
7175
const deptOptions = ref<DeptApi.DeptVO[]>([]) // 部门列表
7276
const deptTreeOptions = ref()
7377
const userGroupOptions = ref<UserGroupApi.UserGroupVO[]>([]) // 用户组列表
78+
79+
// 添加当前值的引用
80+
const currentValue = ref<SimpleFlowNode | undefined>()
81+
7482
provide('formFields', formFields)
7583
provide('formType', formType)
7684
provide('roleList', roleOptions)
@@ -87,10 +95,10 @@ const errorDialogVisible = ref(false)
8795
let errorNodes: SimpleFlowNode[] = []
8896
8997
// 添加更新模型的方法
90-
const updateModel = (key?: string, name?: string) => {
98+
const updateModel = () => {
9199
if (!processNodeTree.value) {
92100
processNodeTree.value = {
93-
name: name || '发起人',
101+
name: '发起人',
94102
type: NodeType.START_USER_NODE,
95103
id: NodeId.START_USER_NODE_ID,
96104
childNode: {
@@ -99,45 +107,78 @@ const updateModel = (key?: string, name?: string) => {
99107
type: NodeType.END_EVENT_NODE
100108
}
101109
}
102-
} else if (name) {
103-
// 更新现有模型的名称
104-
processNodeTree.value.name = name
110+
// 初始化时也触发一次保存
111+
saveSimpleFlowModel(processNodeTree.value)
105112
}
106113
}
107114
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)
112130
}
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+
)
114154
115155
const saveSimpleFlowModel = async (simpleModelNode: SimpleFlowNode) => {
116156
if (!simpleModelNode) {
117-
message.error('模型数据为空')
118157
return
119158
}
159+
160+
// 校验节点
161+
errorNodes = []
162+
validateNode(simpleModelNode, errorNodes)
163+
if (errorNodes.length > 0) {
164+
errorDialogVisible.value = true
165+
return
166+
}
167+
120168
try {
121-
loading.value = true
122169
if (props.modelId) {
123170
// 编辑模式
124171
const data = {
125172
id: props.modelId,
126173
simpleModel: simpleModelNode
127174
}
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)
138176
}
139-
} finally {
140-
loading.value = false
177+
// 无论是编辑还是新建模式,都更新当前值并触发事件
178+
currentValue.value = simpleModelNode
179+
emits('success', simpleModelNode)
180+
} catch (error) {
181+
console.error('保存失败:', error)
141182
}
142183
}
143184
@@ -191,7 +232,6 @@ onMounted(async () => {
191232
if (formType.value === 10) {
192233
const bpmnForm = (await getForm(bpmnModel.formId)) as unknown as FormVO
193234
formFields.value = bpmnForm?.fields
194-
console.log('formFields.value', formFields.value)
195235
}
196236
}
197237
}
@@ -203,31 +243,23 @@ onMounted(async () => {
203243
userOptions.value = await UserApi.getSimpleUserList()
204244
// 获得部门列表
205245
deptOptions.value = await DeptApi.getSimpleDeptList()
206-
207246
deptTreeOptions.value = handleTree(deptOptions.value as DeptApi.DeptVO[], 'id')
208247
// 获取用户组列表
209248
userGroupOptions.value = await UserGroupApi.getUserGroupSimpleList()
210249
250+
// 加载流程数据
211251
if (props.modelId) {
212-
//获取 SIMPLE 设计器模型
252+
// 获取 SIMPLE 设计器模型
213253
const result = await getBpmSimpleModel(props.modelId)
214254
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()
230258
}
259+
} else if (props.value) {
260+
await loadProcessData(props.value)
261+
} else {
262+
updateModel()
231263
}
232264
} finally {
233265
loading.value = false
@@ -238,14 +270,36 @@ const simpleProcessModelRef = ref()
238270
239271
/** 获取当前流程数据 */
240272
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)
243296
}
244-
return undefined
245297
}
246298
247299
defineExpose({
248300
getCurrentFlowData,
249-
updateModel
301+
updateModel,
302+
loadProcessData,
303+
refresh
250304
})
251305
</script>

0 commit comments

Comments
 (0)