This commit is contained in:
guanj
2026-07-09 14:41:56 +08:00
parent 71df1ac4be
commit 69e6a1f93f
4 changed files with 1001 additions and 1013 deletions

View File

@@ -103,7 +103,7 @@ const highlightDiagram = async () => {
let findProcessTask = false //是否已经高亮了进行中的任务 let findProcessTask = false //是否已经高亮了进行中的任务
//进行中高亮之后的任务 key 集合,用于过滤掉 taskList 进行中后面的任务,避免进行中后面的数据 Hover 还有数据 //进行中高亮之后的任务 key 集合,用于过滤掉 taskList 进行中后面的任务,避免进行中后面的数据 Hover 还有数据
let removeTaskDefinitionKeyList = [] let removeTaskDefinitionKeyList = []
// debugger //
//芋道这里取值是rootElements[0].flowElements //芋道这里取值是rootElements[0].flowElements
bpmnModeler.getDefinitions().rootElements[1].flowElements?.forEach((n: any) => { bpmnModeler.getDefinitions().rootElements[1].flowElements?.forEach((n: any) => {
let activity: any = activityList.find((m: any) => m.key === n.id) // 找到对应的活动 let activity: any = activityList.find((m: any) => m.key === n.id) // 找到对应的活动
@@ -135,7 +135,6 @@ const highlightDiagram = async () => {
// 处理 outgoing 出线 // 处理 outgoing 出线
const outgoing = getActivityOutgoing(activity) const outgoing = getActivityOutgoing(activity)
outgoing?.forEach((nn: any) => { outgoing?.forEach((nn: any) => {
// debugger
let targetActivity: any = activityList.find((m: any) => m.key === nn.targetRef.id) let targetActivity: any = activityList.find((m: any) => m.key === nn.targetRef.id)
// 如果目标活动存在则根据该活动是否结束进行【bpmn:SequenceFlow】连线的高亮设置 // 如果目标活动存在则根据该活动是否结束进行【bpmn:SequenceFlow】连线的高亮设置
if (targetActivity) { if (targetActivity) {

View File

@@ -1,463 +1,459 @@
<template> <template>
<div class='panel-tab__content'> <div class='panel-tab__content'>
<el-table :data='elementListenersList' size='small' border> <el-table :data='elementListenersList' size='small' border>
<el-table-column label='序号' width='80px' type='index' /> <el-table-column label='序号' width='80px' type='index' />
<el-table-column label='事件类型' min-width='100px' prop='event' /> <el-table-column label='事件类型' min-width='100px' prop='event' />
<el-table-column <el-table-column
label='监听器类型' label='监听器类型'
min-width='100px' min-width='100px'
show-overflow-tooltip show-overflow-tooltip
:formatter='(row) => listenerTypeObject[row.listenerType]' :formatter='(row) => listenerTypeObject[row.listenerType]'
/> />
<el-table-column label='操作' width='100px'> <el-table-column label='操作' width='100px'>
<template #default='scope'> <template #default='scope'>
<el-button size='small' link @click='openListenerForm(scope.row, scope.$index)' <el-button size='small' link @click='openListenerForm(scope.row, scope.$index)'
>编辑 >编辑
</el-button </el-button
> >
<el-divider direction='vertical' /> <el-divider direction='vertical' />
<el-button size='small' link style='color: #ff4d4f' @click='removeListener(scope.$index)' <el-button size='small' link style='color: #ff4d4f' @click='removeListener(scope.$index)'
>移除 >移除
</el-button </el-button
> >
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class='element-drawer__button'> <div class='element-drawer__button'>
<XButton <XButton
type="primary" type="primary"
preIcon="ep:plus" preIcon="ep:plus"
title="添加监听器" title="添加监听器"
size="small" size="small"
@click="openListenerForm(null)" @click="openListenerForm(null)"
/> />
<!-- <Plus type='primary'--> <!-- <Plus type='primary'-->
<!-- title='添加监听器'--> <!-- title='添加监听器'-->
<!-- size='small'--> <!-- size='small'-->
<!-- @click='openListenerForm(null)' />--> <!-- @click='openListenerForm(null)' />-->
<XButton <XButton
type="success" type="success"
preIcon="ep:select" preIcon="ep:select"
title="选择监听器" title="选择监听器"
size="small" size="small"
@click="openProcessListenerDialog" @click="openProcessListenerDialog"
/> />
<!-- <Select--> <!-- <Select-->
<!-- type='success'--> <!-- type='success'-->
<!-- title='选择监听器'--> <!-- title='选择监听器'-->
<!-- size='small'--> <!-- size='small'-->
<!-- @click='openProcessListenerDialog'--> <!-- @click='openProcessListenerDialog'-->
<!-- />--> <!-- />-->
</div> </div>
<!-- 监听器 编辑/创建 部分 --> <!-- 监听器 编辑/创建 部分 -->
<el-drawer <el-drawer
v-model='listenerFormModelVisible' v-model='listenerFormModelVisible'
title='执行监听器' title='执行监听器'
:size='`${width}px`' :size='`${width}px`'
append-to-body append-to-body
destroy-on-close destroy-on-close
> >
<el-form :model='listenerForm' label-width='96px' ref='listenerFormRef'> <el-form :model='listenerForm' label-width='96px' ref='listenerFormRef'>
<el-form-item <el-form-item
label='事件类型' label='事件类型'
prop='event' prop='event'
:rules="{ required: true, trigger: ['blur', 'change'] }" :rules="{ required: true, trigger: ['blur', 'change'] }"
> >
<el-select v-model='listenerForm.event'> <el-select v-model='listenerForm.event'>
<el-option label='start' value='start' /> <el-option label='start' value='start' />
<el-option label='end' value='end' /> <el-option label='end' value='end' />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
label='监听器类型' label='监听器类型'
prop='listenerType' prop='listenerType'
:rules="{ required: true, trigger: ['blur', 'change'] }" :rules="{ required: true, trigger: ['blur', 'change'] }"
> >
<el-select v-model='listenerForm.listenerType'> <el-select v-model='listenerForm.listenerType'>
<el-option <el-option
v-for='i in Object.keys(listenerTypeObject)' v-for='i in Object.keys(listenerTypeObject)'
:key='i' :key='i'
:label='listenerTypeObject[i]' :label='listenerTypeObject[i]'
:value='i' :value='i'
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
v-if="listenerForm.listenerType === 'classListener'" v-if="listenerForm.listenerType === 'classListener'"
label='Java类' label='Java类'
prop='class' prop='class'
key='listener-class' key='listener-class'
:rules="{ required: true, trigger: ['blur', 'change'] }" :rules="{ required: true, trigger: ['blur', 'change'] }"
> >
<el-input v-model='listenerForm.class' clearable /> <el-input v-model='listenerForm.class' clearable />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
v-if="listenerForm.listenerType === 'expressionListener'" v-if="listenerForm.listenerType === 'expressionListener'"
label='表达式' label='表达式'
prop='expression' prop='expression'
key='listener-expression' key='listener-expression'
:rules="{ required: true, trigger: ['blur', 'change'] }" :rules="{ required: true, trigger: ['blur', 'change'] }"
> >
<el-input v-model='listenerForm.expression' clearable /> <el-input v-model='listenerForm.expression' clearable />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
v-if="listenerForm.listenerType === 'delegateExpressionListener'" v-if="listenerForm.listenerType === 'delegateExpressionListener'"
label='代理表达式' label='代理表达式'
prop='delegateExpression' prop='delegateExpression'
key='listener-delegate' key='listener-delegate'
:rules="{ required: true, trigger: ['blur', 'change'] }" :rules="{ required: true, trigger: ['blur', 'change'] }"
> >
<el-input v-model='listenerForm.delegateExpression' clearable /> <el-input v-model='listenerForm.delegateExpression' clearable />
</el-form-item> </el-form-item>
<template v-if="listenerForm.listenerType === 'scriptListener'"> <template v-if="listenerForm.listenerType === 'scriptListener'">
<el-form-item <el-form-item
label='脚本格式' label='脚本格式'
prop='scriptFormat' prop='scriptFormat'
key='listener-script-format' key='listener-script-format'
:rules="{ required: true, trigger: ['blur', 'change'], message: '请填写脚本格式' }" :rules="{ required: true, trigger: ['blur', 'change'], message: '请填写脚本格式' }"
> >
<el-input v-model='listenerForm.scriptFormat' clearable /> <el-input v-model='listenerForm.scriptFormat' clearable />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
label='脚本类型' label='脚本类型'
prop='scriptType' prop='scriptType'
key='listener-script-type' key='listener-script-type'
:rules="{ required: true, trigger: ['blur', 'change'], message: '请选择脚本类型' }" :rules="{ required: true, trigger: ['blur', 'change'], message: '请选择脚本类型' }"
> >
<el-select v-model='listenerForm.scriptType'> <el-select v-model='listenerForm.scriptType'>
<el-option label='内联脚本' value='inlineScript' /> <el-option label='内联脚本' value='inlineScript' />
<el-option label='外部脚本' value='externalScript' /> <el-option label='外部脚本' value='externalScript' />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
v-if="listenerForm.scriptType === 'inlineScript'" v-if="listenerForm.scriptType === 'inlineScript'"
label='脚本内容' label='脚本内容'
prop='value' prop='value'
key='listener-script' key='listener-script'
:rules="{ required: true, trigger: ['blur', 'change'], message: '请填写脚本内容' }" :rules="{ required: true, trigger: ['blur', 'change'], message: '请填写脚本内容' }"
> >
<el-input v-model='listenerForm.value' clearable /> <el-input v-model='listenerForm.value' clearable />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
v-if="listenerForm.scriptType === 'externalScript'" v-if="listenerForm.scriptType === 'externalScript'"
label='资源地址' label='资源地址'
prop='resource' prop='resource'
key='listener-resource' key='listener-resource'
:rules="{ required: true, trigger: ['blur', 'change'], message: '请填写资源地址' }" :rules="{ required: true, trigger: ['blur', 'change'], message: '请填写资源地址' }"
> >
<el-input v-model='listenerForm.resource' clearable /> <el-input v-model='listenerForm.resource' clearable />
</el-form-item> </el-form-item>
</template> </template>
</el-form> </el-form>
<el-divider /> <el-divider />
<p class='listener-filed__title'> <p class='listener-filed__title'>
<span><Menu />注入字段</span> <span><Menu />注入字段</span>
<XButton type='primary' @click='openListenerFieldForm(null)' title='添加字段' /> <XButton type='primary' @click='openListenerFieldForm(null)' title='添加字段' />
</p> </p>
<el-table <el-table
:data='fieldsListOfListener' :data='fieldsListOfListener'
size='small' size='small'
max-height='240' max-height='240'
fit fit
border border
style='flex: none' style='flex: none'
> >
<el-table-column label='序号' width='80px' type='index' /> <el-table-column label='序号' width='80px' type='index' />
<el-table-column label='字段名称' min-width='100px' prop='name' /> <el-table-column label='字段名称' min-width='100px' prop='name' />
<el-table-column <el-table-column
label='字段类型' label='字段类型'
min-width='80px' min-width='80px'
show-overflow-tooltip show-overflow-tooltip
:formatter='(row) => fieldTypeObject[row.fieldType]' :formatter='(row) => fieldTypeObject[row.fieldType]'
/> />
<el-table-column <el-table-column
label='字段值/表达式' label='字段值/表达式'
min-width='100px' min-width='100px'
show-overflow-tooltip show-overflow-tooltip
:formatter='(row) => row.string || row.expression' :formatter='(row) => row.string || row.expression'
/> />
<el-table-column label='操作' width='130px'> <el-table-column label='操作' width='130px'>
<template #default='scope'> <template #default='scope'>
<el-button size='small' link @click='openListenerFieldForm(scope.row, scope.$index)' <el-button size='small' link @click='openListenerFieldForm(scope.row, scope.$index)'
>编辑 >编辑
</el-button </el-button
> >
<el-divider direction='vertical' /> <el-divider direction='vertical' />
<el-button <el-button
size='small' size='small'
link link
style='color: #ff4d4f' style='color: #ff4d4f'
@click='removeListenerField(scope.$index)' @click='removeListenerField(scope.$index)'
>移除 >移除
</el-button </el-button
> >
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class='element-drawer__button'> <div class='element-drawer__button'>
<el-button @click='listenerFormModelVisible = false'> </el-button> <el-button @click='listenerFormModelVisible = false'> </el-button>
<el-button type='primary' @click='saveListenerConfig'> </el-button> <el-button type='primary' @click='saveListenerConfig'> </el-button>
</div> </div>
</el-drawer> </el-drawer>
<!-- 注入西段 编辑/创建 部分 --> <!-- 注入西段 编辑/创建 部分 -->
<el-dialog <el-dialog
title='字段配置' title='字段配置'
v-model='listenerFieldFormModelVisible' v-model='listenerFieldFormModelVisible'
width='600px' width='600px'
append-to-body append-to-body
destroy-on-close destroy-on-close
> >
<el-form <el-form
:model='listenerFieldForm' :model='listenerFieldForm'
label-width='96spx' label-width='96spx'
ref='listenerFieldFormRef' ref='listenerFieldFormRef'
style='height: 136px' style='height: 136px'
> >
<el-form-item <el-form-item
label='字段名称:' label='字段名称:'
prop='name' prop='name'
:rules="{ required: true, trigger: ['blur', 'change'] }" :rules="{ required: true, trigger: ['blur', 'change'] }"
> >
<el-input v-model='listenerFieldForm.name' clearable /> <el-input v-model='listenerFieldForm.name' clearable />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
label='字段类型:' label='字段类型:'
prop='fieldType' prop='fieldType'
:rules="{ required: true, trigger: ['blur', 'change'] }" :rules="{ required: true, trigger: ['blur', 'change'] }"
> >
<el-select v-model='listenerFieldForm.fieldType'> <el-select v-model='listenerFieldForm.fieldType'>
<el-option <el-option
v-for='i in Object.keys(fieldTypeObject)' v-for='i in Object.keys(fieldTypeObject)'
:key='i' :key='i'
:label='fieldTypeObject[i]' :label='fieldTypeObject[i]'
:value='i' :value='i'
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
v-if="listenerFieldForm.fieldType === 'string'" v-if="listenerFieldForm.fieldType === 'string'"
label='字段值:' label='字段值:'
prop='string' prop='string'
key='field-string' key='field-string'
:rules="{ required: true, trigger: ['blur', 'change'] }" :rules="{ required: true, trigger: ['blur', 'change'] }"
> >
<el-input v-model='listenerFieldForm.string' clearable /> <el-input v-model='listenerFieldForm.string' clearable />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
v-if="listenerFieldForm.fieldType === 'expression'" v-if="listenerFieldForm.fieldType === 'expression'"
label='表达式:' label='表达式:'
prop='expression' prop='expression'
key='field-expression' key='field-expression'
:rules="{ required: true, trigger: ['blur', 'change'] }" :rules="{ required: true, trigger: ['blur', 'change'] }"
> >
<el-input v-model='listenerFieldForm.expression' clearable /> <el-input v-model='listenerFieldForm.expression' clearable />
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
<el-button size='small' @click='listenerFieldFormModelVisible = false'> </el-button> <el-button size='small' @click='listenerFieldFormModelVisible = false'> </el-button>
<el-button size='small' type='primary' @click='saveListenerFiled'> </el-button> <el-button size='small' type='primary' @click='saveListenerFiled'> </el-button>
</template> </template>
</el-dialog> </el-dialog>
</div> </div>
<!-- 选择弹窗 --> <!-- 选择弹窗 -->
<ProcessListenerDialog ref='processListenerDialogRef' @select='selectProcessListener' /> <ProcessListenerDialog ref='processListenerDialogRef' @select='selectProcessListener' />
</template> </template>
<script lang='ts' setup> <script lang='ts' setup>
import { ElMessageBox } from 'element-plus' import { ElMessageBox } from 'element-plus'
import XButton from '@/components/XButton/src/XButton.vue' import XButton from '@/components/XButton/src/XButton.vue'
import { Plus, Select, Menu } from '@element-plus/icons-vue' import { Plus, Select, Menu } from '@element-plus/icons-vue'
import { createListenerObject, updateElementExtensions } from '../../utils' import { createListenerObject, updateElementExtensions } from '../../utils'
import { import {
initListenerType, initListenerType,
initListenerForm, initListenerForm,
listenerType, listenerType,
fieldType, fieldType,
initListenerForm2 initListenerForm2
} from './utilSelf' } from './utilSelf'
import ProcessListenerDialog from './ProcessListenerDialog.vue' import ProcessListenerDialog from './ProcessListenerDialog.vue'
defineOptions({ name: 'ElementListeners' }) defineOptions({ name: 'ElementListeners' })
const props = defineProps({ const props = defineProps({
id: String, id: String,
type: String type: String
}) })
const prefix = inject('prefix') const prefix = inject('prefix')
const width = inject('width') const width = inject('width')
const elementListenersList = ref<any[]>([]) // 监听器列表 const elementListenersList = ref<any[]>([]) // 监听器列表
const listenerForm = ref<any>({}) // 监听器详情表单 const listenerForm = ref<any>({}) // 监听器详情表单
const listenerFormModelVisible = ref(false) // 监听器 编辑 侧边栏显示状态 const listenerFormModelVisible = ref(false) // 监听器 编辑 侧边栏显示状态
const fieldsListOfListener = ref<any[]>([]) const fieldsListOfListener = ref<any[]>([])
const listenerFieldForm = ref<any>({}) // 监听器 注入字段 详情表单 const listenerFieldForm = ref<any>({}) // 监听器 注入字段 详情表单
const listenerFieldFormModelVisible = ref(false) // 监听器 注入字段表单弹窗 显示状态 const listenerFieldFormModelVisible = ref(false) // 监听器 注入字段表单弹窗 显示状态
const editingListenerIndex = ref(-1) // 监听器所在下标,-1 为新增 const editingListenerIndex = ref(-1) // 监听器所在下标,-1 为新增
const editingListenerFieldIndex = ref(-1) // 字段所在下标,-1 为新增 const editingListenerFieldIndex = ref(-1) // 字段所在下标,-1 为新增
const listenerTypeObject = ref(listenerType) const listenerTypeObject = ref(listenerType)
const fieldTypeObject = ref(fieldType) const fieldTypeObject = ref(fieldType)
const bpmnElement = ref() const bpmnElement = ref()
const otherExtensionList = ref() const otherExtensionList = ref()
const bpmnElementListeners = ref() const bpmnElementListeners = ref()
const listenerFormRef = ref() const listenerFormRef = ref()
const listenerFieldFormRef = ref() const listenerFieldFormRef = ref()
const bpmnInstances = () => (window as any)?.bpmnInstances const bpmnInstances = () => (window as any)?.bpmnInstances
const resetListenersList = () => { const resetListenersList = () => {
bpmnElement.value = bpmnInstances().bpmnElement bpmnElement.value = bpmnInstances().bpmnElement
otherExtensionList.value = [] otherExtensionList.value = []
bpmnElementListeners.value = bpmnElementListeners.value =
bpmnElement.value.businessObject?.extensionElements?.values?.filter( bpmnElement.value.businessObject?.extensionElements?.values?.filter(
(ex) => ex.$type === `${prefix}:ExecutionListener` (ex) => ex.$type === `${prefix}:ExecutionListener`
) ?? [] ) ?? []
elementListenersList.value = bpmnElementListeners.value.map((listener) => elementListenersList.value = bpmnElementListeners.value.map((listener) =>
initListenerType(listener) initListenerType(listener)
) )
} }
// 打开 监听器详情 侧边栏 // 打开 监听器详情 侧边栏
const openListenerForm = (listener, index?) => { const openListenerForm = (listener, index?) => {
// debugger if (listener) {
if (listener) { listenerForm.value = initListenerForm(listener)
listenerForm.value = initListenerForm(listener) editingListenerIndex.value = index
editingListenerIndex.value = index } else {
} else { listenerForm.value = {}
listenerForm.value = {} editingListenerIndex.value = -1 // 标记为新增
editingListenerIndex.value = -1 // 标记为新增 }
} if (listener && listener.fields) {
if (listener && listener.fields) { fieldsListOfListener.value = listener.fields.map((field) => ({
fieldsListOfListener.value = listener.fields.map((field) => ({ ...field,
...field, fieldType: field.string ? 'string' : 'expression'
fieldType: field.string ? 'string' : 'expression' }))
})) } else {
} else { fieldsListOfListener.value = []
fieldsListOfListener.value = [] listenerForm.value['fields'] = []
listenerForm.value['fields'] = [] }
} // 打开侧边栏并清楚验证状态
// 打开侧边栏并清楚验证状态 listenerFormModelVisible.value = true
listenerFormModelVisible.value = true nextTick(() => {
nextTick(() => { if (listenerFormRef.value) {
if (listenerFormRef.value) { listenerFormRef.value.clearValidate()
listenerFormRef.value.clearValidate() }
} })
}) }
} // 打开监听器字段编辑弹窗
// 打开监听器字段编辑弹窗 const openListenerFieldForm = (field, index?) => {
const openListenerFieldForm = (field, index?) => { listenerFieldForm.value = field ? JSON.parse(JSON.stringify(field)) : {}
listenerFieldForm.value = field ? JSON.parse(JSON.stringify(field)) : {} editingListenerFieldIndex.value = field ? index : -1
editingListenerFieldIndex.value = field ? index : -1 listenerFieldFormModelVisible.value = true
listenerFieldFormModelVisible.value = true nextTick(() => {
nextTick(() => { if (listenerFieldFormRef.value) {
if (listenerFieldFormRef.value) { listenerFieldFormRef.value.clearValidate()
listenerFieldFormRef.value.clearValidate() }
} })
}) }
} // 保存监听器注入字段
// 保存监听器注入字段 const saveListenerFiled = async () => {
const saveListenerFiled = async () => { let validateStatus = await listenerFieldFormRef.value.validate()
// debugger if (!validateStatus) return // 验证不通过直接返回
let validateStatus = await listenerFieldFormRef.value.validate() if (editingListenerFieldIndex.value === -1) {
if (!validateStatus) return // 验证不通过直接返回 fieldsListOfListener.value.push(listenerFieldForm.value)
if (editingListenerFieldIndex.value === -1) { listenerForm.value.fields.push(listenerFieldForm.value)
fieldsListOfListener.value.push(listenerFieldForm.value) } else {
listenerForm.value.fields.push(listenerFieldForm.value) fieldsListOfListener.value.splice(editingListenerFieldIndex.value, 1, listenerFieldForm.value)
} else { listenerForm.value.fields.splice(editingListenerFieldIndex.value, 1, listenerFieldForm.value)
fieldsListOfListener.value.splice(editingListenerFieldIndex.value, 1, listenerFieldForm.value) }
listenerForm.value.fields.splice(editingListenerFieldIndex.value, 1, listenerFieldForm.value) listenerFieldFormModelVisible.value = false
} nextTick(() => {
listenerFieldFormModelVisible.value = false listenerFieldForm.value = {}
nextTick(() => { })
listenerFieldForm.value = {} }
}) // 移除监听器字段
} const removeListenerField = (index) => {
// 移除监听器字段 ElMessageBox.confirm('确认移除该字段吗?', '提示', {
const removeListenerField = (index) => { confirmButtonText: '确 认',
// debugger cancelButtonText: '取 消'
ElMessageBox.confirm('确认移除该字段吗?', '提示', { })
confirmButtonText: '确 认', .then(() => {
cancelButtonText: '取 消' fieldsListOfListener.value.splice(index, 1)
}) listenerForm.value.fields.splice(index, 1)
.then(() => { })
fieldsListOfListener.value.splice(index, 1) .catch(() => console.info('操作取消'))
listenerForm.value.fields.splice(index, 1) }
}) // 移除监听器
.catch(() => console.info('操作取消')) const removeListener = (index) => {
} ElMessageBox.confirm('确认移除该监听器吗?', '提示', {
// 移除监听器 confirmButtonText: '确 认',
const removeListener = (index) => { cancelButtonText: '取 消'
ElMessageBox.confirm('确认移除该监听器吗?', '提示', { })
confirmButtonText: '确 认', .then(() => {
cancelButtonText: '取 消' bpmnElementListeners.value.splice(index, 1)
}) elementListenersList.value.splice(index, 1)
.then(() => { updateElementExtensions(
bpmnElementListeners.value.splice(index, 1) bpmnElement.value,
elementListenersList.value.splice(index, 1) otherExtensionList.value.concat(bpmnElementListeners.value)
updateElementExtensions( )
bpmnElement.value, })
otherExtensionList.value.concat(bpmnElementListeners.value) .catch(() => console.info('操作取消'))
) }
}) // 保存监听器配置
.catch(() => console.info('操作取消')) const saveListenerConfig = async () => {
} let validateStatus = await listenerFormRef.value.validate()
// 保存监听器配置 if (!validateStatus) return // 验证不通过直接返回
const saveListenerConfig = async () => { const listenerObject = createListenerObject(listenerForm.value, false, prefix)
// debugger if (editingListenerIndex.value === -1) {
let validateStatus = await listenerFormRef.value.validate() bpmnElementListeners.value.push(listenerObject)
if (!validateStatus) return // 验证不通过直接返回 elementListenersList.value.push(listenerForm.value)
const listenerObject = createListenerObject(listenerForm.value, false, prefix) } else {
if (editingListenerIndex.value === -1) { bpmnElementListeners.value.splice(editingListenerIndex.value, 1, listenerObject)
bpmnElementListeners.value.push(listenerObject) elementListenersList.value.splice(editingListenerIndex.value, 1, listenerForm.value)
elementListenersList.value.push(listenerForm.value) }
} else { // 保存其他配置
bpmnElementListeners.value.splice(editingListenerIndex.value, 1, listenerObject) otherExtensionList.value =
elementListenersList.value.splice(editingListenerIndex.value, 1, listenerForm.value) bpmnElement.value.businessObject?.extensionElements?.values?.filter(
} (ex) => ex.$type !== `${prefix}:ExecutionListener`
// 保存其他配置 ) ?? []
otherExtensionList.value = updateElementExtensions(
bpmnElement.value.businessObject?.extensionElements?.values?.filter( bpmnElement.value,
(ex) => ex.$type !== `${prefix}:ExecutionListener` otherExtensionList.value.concat(bpmnElementListeners.value)
) ?? [] )
updateElementExtensions( // 4. 隐藏侧边栏
bpmnElement.value, listenerFormModelVisible.value = false
otherExtensionList.value.concat(bpmnElementListeners.value) listenerForm.value = {}
) }
// 4. 隐藏侧边栏
listenerFormModelVisible.value = false // 打开监听器弹窗
listenerForm.value = {} const processListenerDialogRef = ref()
} const openProcessListenerDialog = async () => {
processListenerDialogRef.value.open('execution')
// 打开监听器弹窗 }
const processListenerDialogRef = ref() const selectProcessListener = (listener) => {
const openProcessListenerDialog = async () => { const listenerForm = initListenerForm2(listener)
processListenerDialogRef.value.open('execution') const listenerObject = createListenerObject(listenerForm, false, prefix)
} bpmnElementListeners.value.push(listenerObject)
const selectProcessListener = (listener) => { elementListenersList.value.push(listenerForm)
const listenerForm = initListenerForm2(listener)
const listenerObject = createListenerObject(listenerForm, false, prefix) // 保存其他配置
bpmnElementListeners.value.push(listenerObject) otherExtensionList.value =
elementListenersList.value.push(listenerForm) bpmnElement.value.businessObject?.extensionElements?.values?.filter(
(ex) => ex.$type !== `${prefix}:ExecutionListener`
// 保存其他配置 ) ?? []
otherExtensionList.value = updateElementExtensions(
bpmnElement.value.businessObject?.extensionElements?.values?.filter( bpmnElement.value,
(ex) => ex.$type !== `${prefix}:ExecutionListener` otherExtensionList.value.concat(bpmnElementListeners.value)
) ?? [] )
updateElementExtensions( }
bpmnElement.value,
otherExtensionList.value.concat(bpmnElementListeners.value) watch(
) () => props.id,
} (val) => {
val &&
watch( val.length &&
() => props.id, nextTick(() => {
(val) => { resetListenersList()
val && })
val.length && },
nextTick(() => { { immediate: true }
resetListenersList() )
}) </script>
},
{ immediate: true }
)
</script>

View File

@@ -748,6 +748,13 @@ const init = () => {
console.error('WebSocket 客户端实例不存在') console.error('WebSocket 客户端实例不存在')
return return
} }
echartsDataV1.value = initEcharts('#DAA520', 0, 'A相')
echartsDataV2.value = initEcharts('#2E8B57', 0, 'B相')
echartsDataV3.value = initEcharts('#A52a2a', 0, 'C相')
echartsDataA1.value = initEcharts('#DAA520', 1, 'A相')
echartsDataA2.value = initEcharts('#2E8B57', 1, 'B相')
echartsDataA3.value = initEcharts('#A52a2a', 1, 'C相')
if (monitoringPoint.state.comFlag == 0) { if (monitoringPoint.state.comFlag == 0) {
loading.value = false loading.value = false
return ElMessage({ return ElMessage({
@@ -757,13 +764,7 @@ const init = () => {
} }
loading.value = true loading.value = true
const url = localStorage.getItem('WebSocketUrl') || 'null' //'ws://192.168.1.68:10407/api/pushMessage/' const url = localStorage.getItem('WebSocketUrl') || 'null' //'ws://192.168.1.68:10407/api/pushMessage/'
echartsDataV1.value = initEcharts('#DAA520', 0, 'A相')
echartsDataV2.value = initEcharts('#2E8B57', 0, 'B相')
echartsDataV3.value = initEcharts('#A52a2a', 0, 'C相')
echartsDataA1.value = initEcharts('#DAA520', 1, 'A相')
echartsDataA2.value = initEcharts('#2E8B57', 1, 'B相')
echartsDataA3.value = initEcharts('#A52a2a', 1, 'C相')
let pids = monitoringPoint.state.pid.split(',') let pids = monitoringPoint.state.pid.split(',')
dataSocket.socketServe.connect(`${url}${adminInfo.id},${monitoringPoint.state.lineId},${pids[pids.length - 2]}`) dataSocket.socketServe.connect(`${url}${adminInfo.id},${monitoringPoint.state.lineId},${pids[pids.length - 2]}`)
@@ -1176,16 +1177,10 @@ onBeforeUnmount(() => {
} }
} }
:deep(.view_bot) { :deep(.vxe-cell) {
.vxe-table--render-default .vxe-body--column:not(.col--ellipsis),
.vxe-table--render-default .vxe-footer--column:not(.col--ellipsis),
.vxe-table--render-default .vxe-header--column:not(.col--ellipsis) {
padding: 5px !important;
}
.vxe-table--body-wrapper {
min-height: 32px !important; min-height: 32px !important;
}
} }
::v-deep .el-collapse-item__header { ::v-deep .el-collapse-item__header {

File diff suppressed because it is too large Load Diff