Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -282,21 +282,26 @@ const editingListenerIndex = ref(-1) // 监听器所在下标,-1 为新增
const editingListenerFieldIndex = ref(-1) // 字段所在下标,-1 为新增
const listenerTypeObject = ref(listenerType)
const fieldTypeObject = ref(fieldType)
const bpmnElement = ref()
const otherExtensionList = ref()
const bpmnElementListeners = ref()
const listenerFormRef = ref()
const listenerFieldFormRef = ref()
const bpmnInstances = () => (window as any)?.bpmnInstances

const resetListenersList = () => {
bpmnElement.value = bpmnInstances().bpmnElement
const instances = bpmnInstances()
if (!instances || !instances.bpmnElement) return

// 直接使用原始BPMN元素,避免Vue响应式代理问题
const bpmnElement = instances.bpmnElement
const businessObject = bpmnElement.businessObject

otherExtensionList.value =
bpmnElement.value.businessObject?.extensionElements?.values?.filter(
businessObject?.extensionElements?.values?.filter(
(ex) => ex.$type !== `${prefix}:ExecutionListener`
) ?? [] // 保留非监听器类型的扩展属性,避免移除监听器时清空其他配置(如审批人等)。相关案例:https://gitee.com/yudaocode/yudao-ui-admin-vue3/issues/ICMSYC
bpmnElementListeners.value =
bpmnElement.value.businessObject?.extensionElements?.values?.filter(
businessObject?.extensionElements?.values?.filter(
(ex) => ex.$type === `${prefix}:ExecutionListener`
) ?? []
elementListenersList.value = bpmnElementListeners.value.map((listener) =>
Expand Down Expand Up @@ -378,10 +383,13 @@ const removeListener = (index) => {
cancelButtonText: '取 消'
})
.then(() => {
const instances = bpmnInstances()
if (!instances || !instances.bpmnElement) return

bpmnElementListeners.value.splice(index, 1)
elementListenersList.value.splice(index, 1)
updateElementExtensions(
bpmnElement.value,
instances.bpmnElement,
otherExtensionList.value.concat(bpmnElementListeners.value)
)
})
Expand All @@ -392,7 +400,13 @@ const saveListenerConfig = async () => {
// debugger
let validateStatus = await listenerFormRef.value.validate()
if (!validateStatus) return // 验证不通过直接返回

const instances = bpmnInstances()
if (!instances || !instances.bpmnElement) return

const bpmnElement = instances.bpmnElement
const listenerObject = createListenerObject(listenerForm.value, false, prefix)

if (editingListenerIndex.value === -1) {
bpmnElementListeners.value.push(listenerObject)
elementListenersList.value.push(listenerForm.value)
Expand All @@ -402,11 +416,11 @@ const saveListenerConfig = async () => {
}
// 保存其他配置
otherExtensionList.value =
bpmnElement.value.businessObject?.extensionElements?.values?.filter(
bpmnElement.businessObject?.extensionElements?.values?.filter(
(ex) => ex.$type !== `${prefix}:ExecutionListener`
) ?? []
updateElementExtensions(
bpmnElement.value,
bpmnElement,
otherExtensionList.value.concat(bpmnElementListeners.value)
)
// 4. 隐藏侧边栏
Expand All @@ -420,18 +434,22 @@ const openProcessListenerDialog = async () => {
processListenerDialogRef.value.open('execution')
}
const selectProcessListener = (listener) => {
const instances = bpmnInstances()
if (!instances || !instances.bpmnElement) return

const bpmnElement = instances.bpmnElement
const listenerForm = initListenerForm2(listener)
const listenerObject = createListenerObject(listenerForm, false, prefix)
bpmnElementListeners.value.push(listenerObject)
elementListenersList.value.push(listenerForm)

// 保存其他配置
otherExtensionList.value =
bpmnElement.value.businessObject?.extensionElements?.values?.filter(
bpmnElement.businessObject?.extensionElements?.values?.filter(
(ex) => ex.$type !== `${prefix}:ExecutionListener`
) ?? []
updateElementExtensions(
bpmnElement.value,
bpmnElement,
otherExtensionList.value.concat(bpmnElementListeners.value)
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -329,25 +329,28 @@ const listenerFieldFormModelVisible = ref(false) // 监听器 注入字段表单
const editingListenerIndex = ref(-1) // 监听器所在下标,-1 为新增
const editingListenerFieldIndex = ref(-1) // 字段所在下标,-1 为新增
const listenerFieldForm = ref<any>({}) // 监听器 注入字段 详情表单
const bpmnElement = ref()
const bpmnElementListeners = ref()
const otherExtensionList = ref()
const listenerFormRef = ref()
const listenerFieldFormRef = ref()
const bpmnInstances = () => (window as any)?.bpmnInstances

const resetListenersList = () => {
console.log(
bpmnInstances().bpmnElement,
'window.bpmnInstances.bpmnElementwindow.bpmnInstances.bpmnElementwindow.bpmnInstances.bpmnElementwindow.bpmnInstances.bpmnElementwindow.bpmnInstances.bpmnElementwindow.bpmnInstances.bpmnElement'
)
bpmnElement.value = bpmnInstances().bpmnElement
const instances = bpmnInstances()
if (!instances || !instances.bpmnElement) return

// 直接使用原始BPMN元素,避免Vue响应式代理问题
const bpmnElement = instances.bpmnElement
const businessObject = bpmnElement.businessObject

console.log(bpmnElement, 'bpmnElement - resetListenersList')

otherExtensionList.value =
bpmnElement.value.businessObject?.extensionElements?.values?.filter(
businessObject?.extensionElements?.values?.filter(
(ex) => ex.$type !== `${prefix}:TaskListener`
) ?? [] // 保留非监听器类型的扩展属性,避免移除监听器时清空其他配置(如审批人等)。相关案例:https://gitee.com/yudaocode/yudao-ui-admin-vue3/issues/ICMSYC
bpmnElementListeners.value =
bpmnElement.value.businessObject?.extensionElements?.values?.filter(
businessObject?.extensionElements?.values?.filter(
(ex) => ex.$type === `${prefix}:TaskListener`
) ?? []
elementListenersList.value = bpmnElementListeners.value.map((listener) =>
Expand Down Expand Up @@ -385,10 +388,13 @@ const removeListener = (listener, index?) => {
cancelButtonText: '取 消'
})
.then(() => {
const instances = bpmnInstances()
if (!instances || !instances.bpmnElement) return

bpmnElementListeners.value.splice(index, 1)
elementListenersList.value.splice(index, 1)
updateElementExtensions(
bpmnElement.value,
instances.bpmnElement,
otherExtensionList.value.concat(bpmnElementListeners.value)
)
})
Expand All @@ -398,7 +404,13 @@ const removeListener = (listener, index?) => {
const saveListenerConfig = async () => {
let validateStatus = await listenerFormRef.value.validate()
if (!validateStatus) return // 验证不通过直接返回

const instances = bpmnInstances()
if (!instances || !instances.bpmnElement) return

const bpmnElement = instances.bpmnElement
const listenerObject = createListenerObject(listenerForm.value, true, prefix)

if (editingListenerIndex.value === -1) {
bpmnElementListeners.value.push(listenerObject)
elementListenersList.value.push(listenerForm.value)
Expand All @@ -408,11 +420,11 @@ const saveListenerConfig = async () => {
}
// 保存其他配置
otherExtensionList.value =
bpmnElement.value.businessObject?.extensionElements?.values?.filter(
bpmnElement.businessObject?.extensionElements?.values?.filter(
(ex) => ex.$type !== `${prefix}:TaskListener`
) ?? []
updateElementExtensions(
bpmnElement.value,
bpmnElement,
otherExtensionList.value.concat(bpmnElementListeners.value)
)
// 4. 隐藏侧边栏
Expand Down Expand Up @@ -464,18 +476,22 @@ const openProcessListenerDialog = async () => {
processListenerDialogRef.value.open('task')
}
const selectProcessListener = (listener) => {
const instances = bpmnInstances()
if (!instances || !instances.bpmnElement) return

const bpmnElement = instances.bpmnElement
const listenerForm = initListenerForm2(listener)
const listenerObject = createListenerObject(listenerForm, true, prefix)
bpmnElementListeners.value.push(listenerObject)
elementListenersList.value.push(listenerForm)

// 保存其他配置
otherExtensionList.value =
bpmnElement.value.businessObject?.extensionElements?.values?.filter(
bpmnElement.businessObject?.extensionElements?.values?.filter(
(ex) => ex.$type !== `${prefix}:TaskListener`
) ?? []
updateElementExtensions(
bpmnElement.value,
bpmnElement,
otherExtensionList.value.concat(bpmnElementListeners.value)
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,24 +67,28 @@ const elementPropertyList = ref<any[]>([])
const propertyForm = ref<any>({})
const editingPropertyIndex = ref(-1)
const propertyFormModelVisible = ref(false)
const bpmnElement = ref()
const otherExtensionList = ref()
const bpmnElementProperties = ref()
const bpmnElementPropertyList = ref()
const attributeFormRef = ref()
const bpmnInstances = () => (window as any)?.bpmnInstances

const resetAttributesList = () => {
bpmnElement.value = bpmnInstances().bpmnElement
const instances = bpmnInstances()
if (!instances || !instances.bpmnElement) return

// 直接使用原始BPMN元素,避免Vue响应式代理问题
const bpmnElement = instances.bpmnElement
const businessObject = bpmnElement.businessObject

otherExtensionList.value = [] // 其他扩展配置
bpmnElementProperties.value =
// bpmnElement.value.businessObject?.extensionElements?.filter((ex) => {
bpmnElement.value.businessObject?.extensionElements?.values?.filter((ex) => {
businessObject?.extensionElements?.values?.filter((ex) => {
if (ex.$type !== `${prefix}:Properties`) {
otherExtensionList.value.push(ex)
}
return ex.$type === `${prefix}:Properties`
}) ?? [];
}) ?? []

// 保存所有的 扩展属性字段
bpmnElementPropertyList.value = bpmnElementProperties.value.reduce(
Expand Down Expand Up @@ -123,23 +127,28 @@ const removeAttributes = (attr, index) => {
const saveAttribute = () => {
console.log(propertyForm.value, 'propertyForm.value')
const { name, value } = propertyForm.value
const instances = bpmnInstances()
if (!instances || !instances.bpmnElement) return

const bpmnElement = instances.bpmnElement

if (editingPropertyIndex.value !== -1) {
bpmnInstances().modeling.updateModdleProperties(
toRaw(bpmnElement.value),
toRaw(bpmnElementPropertyList.value)[toRaw(editingPropertyIndex.value)],
instances.modeling.updateModdleProperties(
bpmnElement,
bpmnElementPropertyList.value[editingPropertyIndex.value],
{
name,
value
}
)
} else {
// 新建属性字段
const newPropertyObject = bpmnInstances().moddle.create(`${prefix}:Property`, {
const newPropertyObject = instances.moddle.create(`${prefix}:Property`, {
name,
value
})
// 新建一个属性字段的保存列表
const propertiesObject = bpmnInstances().moddle.create(`${prefix}:Properties`, {
const propertiesObject = instances.moddle.create(`${prefix}:Properties`, {
values: bpmnElementPropertyList.value.concat([newPropertyObject])
})
updateElementExtensions(propertiesObject)
Expand All @@ -148,10 +157,14 @@ const saveAttribute = () => {
resetAttributesList()
}
const updateElementExtensions = (properties) => {
const extensions = bpmnInstances().moddle.create('bpmn:ExtensionElements', {
const instances = bpmnInstances()
if (!instances || !instances.bpmnElement) return

const bpmnElement = instances.bpmnElement
const extensions = instances.moddle.create('bpmn:ExtensionElements', {
values: otherExtensionList.value.concat([properties])
})
bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), {
instances.modeling.updateProperties(bpmnElement, {
extensionElements: extensions
})
}
Expand Down
4 changes: 2 additions & 2 deletions src/components/bpmnProcessDesigner/package/utils.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { toRaw } from 'vue'
const bpmnInstances = () => (window as any)?.bpmnInstances
// 创建监听器实例
export function createListenerObject(options, isTask, prefix) {
Expand Down Expand Up @@ -61,7 +60,8 @@ export function updateElementExtensions(element, extensionList) {
const extensions = bpmnInstances().moddle.create('bpmn:ExtensionElements', {
values: extensionList
})
bpmnInstances().modeling.updateProperties(toRaw(element), {
// 直接使用原始元素对象,不需要toRaw包装
bpmnInstances().modeling.updateProperties(element, {
extensionElements: extensions
})
}
Expand Down