赞
踩
更多ruoyi-nbcio功能请看演示系统
gitee源代码地址
前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio
演示地址:RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/
更多nbcio-boot功能请看演示系统
gitee源代码地址
后端代码: https://gitee.com/nbacheng/nbcio-boot
前端代码:https://gitee.com/nbacheng/nbcio-vue.git
在线演示(包括H5) : http://122.227.135.243: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、效果图如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。