更多ruoyi-nbcio功能请看演示系统
gitee源代码地址
前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio
演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/
更多nbcio-boot功能请看演示系统
gitee源代码地址
后端代码: https://gitee.com/nbacheng/nbcio-boot
前端代码:https://gitee.com/nbacheng/nbcio-vue.git
在线演示(包括H5) : http://218.75.87.38:9888
1、原先vue2代码如下:
<template> <div class="panel-tab__content"> <el-form :model="flowConditionForm" label-width="90px" size="small" @submit.prevent> <el-form-item label="流转类型"> <el-select v-model="flowConditionForm.type" @change="updateFlowType"> <el-option label="普通流转路径" value="normal" /> <el-option label="默认流转路径" value="default" /> <el-option label="条件流转路径" value="condition" /> </el-select> </el-form-item> <el-form-item label="条件格式" v-if="flowConditionForm.type === 'condition'" key="condition"> <el-select v-model="flowConditionForm.conditionType"> <el-option label="表达式" value="expression" /> <el-option label="脚本" value="script" /> </el-select> </el-form-item> <el-form-item label="表达式" v-if="flowConditionForm.conditionType && flowConditionForm.conditionType === 'expression'" key="express"> <el-input v-model="flowConditionForm.body" clearable @change="updateFlowCondition" /> </el-form-item> <template v-if="flowConditionForm.conditionType && flowConditionForm.conditionType === 'script'"> <el-form-item label="脚本语言" key="language"> <el-input v-model="flowConditionForm.language" clearable @change="updateFlowCondition" /> </el-form-item> <el-form-item label="脚本类型" key="scriptType"> <el-select v-model="flowConditionForm.scriptType"> <el-option label="内联脚本" value="inlineScript" /> <el-option label="外部脚本" value="externalScript" /> </el-select> </el-form-item> <el-form-item label="脚本" v-if="flowConditionForm.scriptType === 'inlineScript'" key="body"> <el-input v-model="flowConditionForm.body" type="textarea" clearable @change="updateFlowCondition" /> </el-form-item> <el-form-item label="资源地址" v-if="flowConditionForm.scriptType === 'externalScript'" key="resource"> <el-input v-model="flowConditionForm.resource" clearable @change="updateFlowCondition" /> </el-form-item> </template> </el-form> </div> </template> <script> export default { name: 'FlowCondition', props: { businessObject: Object, type: String }, data() { return { flowConditionForm: {} }; }, watch: { businessObject: { immediate: true, handler() { this.$nextTick(() => this.resetFlowCondition()); } } }, methods: { resetFlowCondition() { this.bpmnElement = window.bpmnInstances.bpmnElement; this.bpmnElementSource = this.bpmnElement.source; this.bpmnElementSourceRef = this.bpmnElement.businessObject.sourceRef; if (this.bpmnElementSourceRef && this.bpmnElementSourceRef.default && this.bpmnElementSourceRef.default.id === this.bpmnElement.id) { // 默认 this.flowConditionForm = { type: 'default' }; } else if (!this.bpmnElement.businessObject.conditionExpression) { // 普通 this.flowConditionForm = { type: 'normal' }; } else { // 带条件 const conditionExpression = this.bpmnElement.businessObject.conditionExpression; this.flowConditionForm = { ...conditionExpression, type: 'condition' }; // resource 可直接标识 是否是外部资源脚本 if (this.flowConditionForm.resource) { this.flowConditionForm['conditionType'] = 'script' this.flowConditionForm['scriptType'] = 'externalScript' return; } if (conditionExpression.language) { this.flowConditionForm['conditionType'] = 'script' this.flowConditionForm['scriptType'] = 'inlineScript' return; } this.flowConditionForm['conditionType'] = 'expression' } }, updateFlowType(flowType) { // 正常条件类 if (flowType === 'condition') { this.flowConditionRef = window.bpmnInstances.moddle.create('bpmn:FormalExpression'); window.bpmnInstances.modeling.updateProperties(this.bpmnElement, { conditionExpression: this.flowConditionRef }); return; } // 默认路径 if (flowType === 'default') { window.bpmnInstances.modeling.updateProperties(this.bpmnElement, { conditionExpression: null }); window.bpmnInstances.modeling.updateProperties(this.bpmnElementSource, { default: this.bpmnElement }); return; } // 正常路径,如果来源节点的默认路径是当前连线时,清除父元素的默认路径配置 if (this.bpmnElementSourceRef.default && this.bpmnElementSourceRef.default.id === this.bpmnElement.id) { window.bpmnInstances.modeling.updateProperties(this.bpmnElementSource, { default: null }); } window.bpmnInstances.modeling.updateProperties(this.bpmnElement, { conditionExpression: null }); }, updateFlowCondition() { const { conditionType, scriptType, body, resource, language } = this.flowConditionForm; let condition; if (conditionType === 'expression') { condition = window.bpmnInstances.moddle.create('bpmn:FormalExpression', { body }); } else { if (scriptType === 'inlineScript') { condition = window.bpmnInstances.moddle.create('bpmn:FormalExpression', { body, language }); this.flowConditionForm['resource'] = '' } else { this.flowConditionForm['body'] = '' condition = window.bpmnInstances.moddle.create('bpmn:FormalExpression', { resource, language }); } } window.bpmnInstances.modeling.updateProperties(this.bpmnElement, { conditionExpression: condition }); } }, beforeUnmount() { this.bpmnElement = null; this.bpmnElementSource = null; this.bpmnElementSourceRef = null; } }; </script>
2、修改成vue3的代码如下:
<template> <div class="panel-tab__content"> <el-form :model="flowConditionForm" label-width="90px" size="small" @submit.prevent> <el-form-item label="流转类型"> <el-select v-model="flowConditionForm.type" @change="updateFlowType"> <el-option label="普通流转路径" value="normal" /> <el-option label="默认流转路径" value="default" /> <el-option label="条件流转路径" value="condition" /> </el-select> </el-form-item> <el-form-item label="条件格式" v-if="flowConditionForm.type === 'condition'" key="condition"> <el-select v-model="flowConditionForm.conditionType"> <el-option label="表达式" value="expression" /> <el-option label="脚本" value="script" /> </el-select> </el-form-item> <el-form-item label="表达式" v-if="flowConditionForm.conditionType && flowConditionForm.conditionType === 'expression'" key="express"> <el-input v-model="flowConditionForm.body" clearable @change="updateFlowCondition" /> </el-form-item> <template v-if="flowConditionForm.conditionType && flowConditionForm.conditionType === 'script'"> <el-form-item label="脚本语言" key="language"> <el-input v-model="flowConditionForm.language" clearable @change="updateFlowCondition" /> </el-form-item> <el-form-item label="脚本类型" key="scriptType"> <el-select v-model="flowConditionForm.scriptType"> <el-option label="内联脚本" value="inlineScript" /> <el-option label="外部脚本" value="externalScript" /> </el-select> </el-form-item> <el-form-item label="脚本" v-if="flowConditionForm.scriptType === 'inlineScript'" key="body"> <el-input v-model="flowConditionForm.body" type="textarea" clearable @change="updateFlowCondition" /> </el-form-item> <el-form-item label="资源地址" v-if="flowConditionForm.scriptType === 'externalScript'" key="resource"> <el-input v-model="flowConditionForm.resource" clearable @change="updateFlowCondition" /> </el-form-item> </template> </el-form> </div> </template> <script lang="ts" setup> defineOptions({ name: 'FlowCondition' }) const props = defineProps({ businessObject: Object, type: String }) const flowConditionForm = ref<any>({}) const bpmnElement = ref() const bpmnElementSource = ref() const bpmnElementSourceRef = ref() const flowConditionRef = ref() const bpmnInstances = () => (window as any)?.bpmnInstances watch( () => props.businessObject, (val) => { nextTick(() => { resetFlowCondition() }) }, { immediate: true } ) const resetFlowCondition = () => { bpmnElement.value = bpmnInstances().bpmnElement bpmnElementSource.value = bpmnElement.value.source bpmnElementSourceRef.value = bpmnElement.value.businessObject.sourceRef if ( bpmnElementSourceRef.value && bpmnElementSourceRef.value.default && bpmnElementSourceRef.value.default.id === bpmnElement.value.id && flowConditionForm.value.type == 'default' ) { // 默认 flowConditionForm.value = { type: 'default' } } else if (!bpmnElement.value.businessObject.conditionExpression) { // 普通 flowConditionForm.value = { type: 'normal' } } else { // 带条件 const conditionExpression = bpmnElement.value.businessObject.conditionExpression flowConditionForm.value = { ...conditionExpression, type: 'condition' } // resource 可直接标识 是否是外部资源脚本 if (flowConditionForm.value.resource) { flowConditionForm.value['conditionType'] = 'script' flowConditionForm.value['scriptType'] = 'externalScript' return } if (conditionExpression.language) { flowConditionForm.value['conditionType'] = 'script' flowConditionForm.value['scriptType'] = 'inlineScript' return } flowConditionForm.value['conditionType'] = 'expression' } } const updateFlowType = (flowType) => { // 正常条件类 if (flowType === 'condition') { flowConditionRef.value = bpmnInstances().moddle.create('bpmn:FormalExpression') bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), { conditionExpression: flowConditionRef.value }) return } // 默认路径 if (flowType === 'default') { bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), { conditionExpression: null }) bpmnInstances().modeling.updateProperties(toRaw(bpmnElementSource.value), { default: bpmnElement.value }) return } // 正常路径,如果来源节点的默认路径是当前连线时,清除父元素的默认路径配置 if ( bpmnElementSourceRef.value.default && bpmnElementSourceRef.value.default.id === bpmnElement.value.id ) { bpmnInstances().modeling.updateProperties(toRaw(bpmnElementSource.value), { default: null }) } bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), { conditionExpression: null }) } const updateFlowCondition = () => { let { conditionType, scriptType, body, resource, language } = flowConditionForm.value let condition if (conditionType === 'expression') { condition = bpmnInstances().moddle.create('bpmn:FormalExpression', { body }) } else { if (scriptType === 'inlineScript') { condition = bpmnInstances().moddle.create('bpmn:FormalExpression', { body, language }) // this.$set(this.flowConditionForm, "resource", ""); flowConditionForm.value['resource'] = '' } else { // this.$set(this.flowConditionForm, "body", ""); flowConditionForm.value['body'] = '' condition = bpmnInstances().moddle.create('bpmn:FormalExpression', { resource, language }) } } bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), { conditionExpression: condition }) } onBeforeUnmount(() => { bpmnElement.value = null bpmnElementSource.value = null bpmnElementSourceRef.value = null }) </script>
3、效果图如下: