From 221918bba28d2384d03c596a68256d7832e4a0e0 Mon Sep 17 00:00:00 2001 From: 潘志宝 <979469083@qq.com> Date: 星期一, 06 一月 2025 13:30:50 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/views/bpm/simple/SimpleModelDesign.vue | 148 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 142 insertions(+), 6 deletions(-) diff --git a/src/views/bpm/simple/SimpleModelDesign.vue b/src/views/bpm/simple/SimpleModelDesign.vue index 1740e03..eed0099 100644 --- a/src/views/bpm/simple/SimpleModelDesign.vue +++ b/src/views/bpm/simple/SimpleModelDesign.vue @@ -1,6 +1,15 @@ <template> <ContentWrap :bodyStyle="{ padding: '20px 16px' }"> - <SimpleProcessDesigner :model-id="modelId" @success="close" /> + <SimpleProcessDesigner + :model-id="modelId" + :model-key="modelKey" + :model-name="modelName" + :value="currentValue" + @success="handleSuccess" + @init-finished="handleInit" + :start-user-ids="startUserIds" + ref="designerRef" + /> </ContentWrap> </template> <script setup lang="ts"> @@ -9,11 +18,138 @@ defineOptions({ name: 'SimpleModelDesign' }) -const router = useRouter() // 路由 -const { query } = useRoute() // 路由的查询 -const modelId = query.modelId as string -const close = () => { - router.push({ path: '/bpm/manager/model' }) + +const props = defineProps<{ + modelId?: string + modelKey?: string + modelName?: string + value?: string + startUserIds?: number[] +}>() + +const emit = defineEmits(['success', 'init-finished']) +const designerRef = ref() +const isInitialized = ref(false) +const currentValue = ref('') + +// 初始化或更新当前值 +const initOrUpdateValue = async () => { + console.log('initOrUpdateValue', props.value) + if (props.value) { + currentValue.value = props.value + // 如果设计器已经初始化,立即加载数据 + if (isInitialized.value && designerRef.value) { + try { + await designerRef.value.loadProcessData(props.value) + await nextTick() + if (designerRef.value.refresh) { + await designerRef.value.refresh() + } + } catch (error) { + console.error('加载流程数据失败:', error) + } + } + } } + +// 监听属性变化 +watch( + [() => props.modelKey, () => props.modelName, () => props.value], + async ([newKey, newName, newValue], [oldKey, oldName, oldValue]) => { + if (designerRef.value && isInitialized.value) { + try { + if (newKey && newName && (newKey !== oldKey || newName !== oldName)) { + await designerRef.value.updateModel(newKey, newName) + } + if (newValue && newValue !== oldValue) { + currentValue.value = newValue + await designerRef.value.loadProcessData(newValue) + await nextTick() + if (designerRef.value.refresh) { + await designerRef.value.refresh() + } + } + } catch (error) { + console.error('更新流程数据失败:', error) + } + } + }, + { deep: true, immediate: true } +) + +// 初始化完成回调 +const handleInit = async () => { + try { + isInitialized.value = true + emit('init-finished') + + // 等待下一个tick,确保设计器已经准备好 + await nextTick() + + // 初始化完成后,设置初始值 + if (props.modelKey && props.modelName) { + await designerRef.value.updateModel(props.modelKey, props.modelName) + } + if (props.value) { + currentValue.value = props.value + await designerRef.value.loadProcessData(props.value) + // 再次刷新确保数据正确加载 + await nextTick() + if (designerRef.value.refresh) { + await designerRef.value.refresh() + } + } + } catch (error) { + console.error('初始化流程数据失败:', error) + } +} + +// 修改成功回调 +const handleSuccess = (data?: any) => { + console.warn('handleSuccess', data) + if (data && data !== currentValue.value) { + currentValue.value = data + emit('success', data) + } +} + +/** 获取当前流程数据 */ +const getCurrentFlowData = async () => { + try { + if (designerRef.value) { + const data = await designerRef.value.getCurrentFlowData() + if (data) { + currentValue.value = data + } + return data + } + return currentValue.value || undefined + } catch (error) { + console.error('获取流程数据失败:', error) + return currentValue.value || undefined + } +} + +// 组件创建时初始化数据 +onMounted(() => { + initOrUpdateValue() +}) + +// 组件卸载前保存数据 +onBeforeUnmount(async () => { + try { + const data = await getCurrentFlowData() + if (data) { + emit('success', data) + } + } catch (error) { + console.error('保存数据失败:', error) + } +}) + +defineExpose({ + getCurrentFlowData, + refresh: () => designerRef.value?.refresh?.() +}) </script> <style lang="scss" scoped></style> -- Gitblit v1.9.3