基于jeecgboot的flowable流程增加节点表单的支持(二)

简介: 基于jeecgboot的flowable流程增加节点表单的支持(二)

2、进入流程编辑页面如下,其中传入相应的数据,结构如下

designerData: {
          loading: false,
          bpmnXml: '',
          deploymentId: null,
          form: {
            users: [],
            groups: [],
            categorys: [],
            processName: null,
            processKey: null
          }
        },

其中users和groups是用户与角色,categorys是流程分类,

<!--用bpmn-process-designer 流程图 -->
    <el-dialog :z-index="1000" :title="designerData.title" :visible.sync="designerOpen" append-to-body fullscreen>
      <process-designer
        :key="designerOpen"
        style="border:1px solid rgba(0, 0, 0, 0.1);"
        ref="modelDesigner"
        v-loading="designerData.loading"
        :bpmnXml="designerData.bpmnXml"
        :designerForm="designerData.form"
        @save="save"
      />
    </el-dialog>
//其中,上面的组件如下
<template>
  <div class="process-design" :style="'display: flex; height:' + height">
    <bpmn-process-designer
      v-model="xmlString"
      v-bind="controlForm"
      keyboard
      simulation
      ref="processDesigner"
      :events="[
        'element.click',
        'connection.added',
        'connection.removed',
        'connection.changed'
      ]"
      @element-click="elementClick"
      @init-finished="initModeler"
      @event="handlerEvent"
      @save="onSaveProcess"
    />
    <bmpn-process-penal :bpmn-modeler="modeler" :prefix="controlForm.prefix" 
      :users="controlForm.users" :groups="controlForm.groups" :categorys="controlForm.categorys" class="process-panel" />
  </div>
</template>

     主要是两个部分,一个是bpmn-process-designer,是流程设计相关的内容,另外一个是bmpn-process-penal右边流程属性相关的页面内容

    3、其中,表单选择这块主要修改ElementForm.vue  ,注释掉大部分不用的内容,取出需要选择的form表单内容

<el-form size="mini" label-width="80px" @submit.native.prevent>
    <el-form-item label="表单" prop="formKey">
        <el-select v-model="formKey" placeholder="请选择表单" @change="updateElementFormKey" clearable>
          <el-option v-for="item in formList" :key="item.id" :label="item.formName" :value="`${item.id}`" />
        </el-select>
    </el-form-item>
/** 查询表单列表 */
    getFormList() {
      listForm().then(response => this.formList = response.result.records)
    },

4、流程的基础属性里增加流程分类

<template v-if="elementBaseInfo.$type === 'bpmn:Process'">
        <el-form-item label="流程分类">
         <el-select v-model="elementBaseInfo.processCategory" 
            clearable @change="updateBaseInfo('processCategory')"  placeholder="请选择">
            <el-option
               v-for="item in categorys"
               :key="item.id"
               :label="item.name"
               :value="item.id">
             </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="版本标签">
          <el-input v-model="elementBaseInfo.versionTag" clearable @change="updateBaseInfo('versionTag')" />
        </el-form-item>
        <el-form-item label="可执行">
          <el-switch v-model="elementBaseInfo.isExecutable" active-text="是" inactive-text="否" @change="updateBaseInfo('isExecutable')" />
        </el-form-item>
      </template>

5、同时增加流程分类的信息写入

if (key === "processCategory") {//写入流程分类信息
        window.bpmnInstances.modeling.updateProperties(this.bpmnElement, {
          'flowable:processCategory': this.elementBaseInfo[key] //兼容老系统
        });
        this.bpmnElement.processCategory = this.elementBaseInfo[key]
        return;
      }

6、UserTask.vue里修改任务相关内容,主要是用户选择以及控制多实例相关内容

<el-row>
      <h4><b>设置用户类型</b></h4>
      <el-radio-group v-model="defaultTaskForm.dataType" @change="changeDataType">
        <div v-if="bDisplayUser">
          <el-radio label="ASSIGNEE">指定用户</el-radio>
        </div>
        <el-radio label="USERS">候选用户</el-radio>
        <el-radio label="ROLES">候选角色</el-radio>
      </el-radio-group>
    </el-row>
    <el-row>
      <div v-if="defaultTaskForm.dataType === 'ASSIGNEE'">
        <el-select v-model="userTaskForm.assignee" filterable allow-create clearable @change="updateElementTask('assignee')">
          <el-option v-for="ak in users" :key="ak.id" :label="ak.name" :value="ak.id" />
        </el-select>
      </div>   
    </el-row>
    <el-row>
      <div v-if="defaultTaskForm.dataType === 'USERS'">
        <el-select v-model="userTaskForm.candidateUsers" multiple collapse-tags @change="updateElementTask('candidateUsers')">
          <el-option v-for="uk in users" :key="uk.id" :label="uk.name" :value="uk.id" />
        </el-select>
      </div>   
    </el-row>
    <el-row>
      <div v-if="defaultTaskForm.dataType === 'ROLES'">
        <el-select v-model="userTaskForm.candidateGroups" multiple collapse-tags @change="updateElementTask('candidateGroups')">
          <el-option v-for="gk in groups" :key="gk.name" :label="gk.name" :value="gk.name" />
        </el-select>
      </div>  
    </el-row>
    <el-row v-if="defaultTaskForm.dataType === 'USERS' || defaultTaskForm.dataType === 'ROLES'">
      <h4><b>多实例</b></h4>
      <div>
        <element-multi-instance :business-object="bpmnElement.businessObject" @multiInsEvent="multiIns"/>
      </div>  
    </el-row>

7、ElementMultiInstance.vue多实例文件修改,主要修改部分如下

window.bpmnInstances.modeling.updateProperties(this.bpmnElement, {
        assignee: "${assignee}"  //对多实例,指定用户固定为${assignee}
      });
      //对多实例,目前相关参数给出默认值,用户也可以修改,但相应后端软件也要做调整
      this.loopInstanceForm.collection = "${multiInstanceHandler.getUserName(execution)}";
      this.loopInstanceForm.elementVariable = "assignee";
      this.loopInstanceForm.completionCondition = "${nrOfCompletedInstances>=nrOfInstances}";
      window.bpmnInstances.modeling.updateModdleProperties(this.bpmnElement, this.multiLoopInstance, {
        collection: "${multiInstanceHandler.getUserName(execution)}",
        elementVariable: "assignee"
      });
      let completionCondition = null;
      completionCondition = window.bpmnInstances.moddle.create("bpmn:FormalExpression", { body: "${nrOfCompletedInstances>=nrOfInstances}" });
      window.bpmnInstances.modeling.updateModdleProperties(this.bpmnElement, this.multiLoopInstance, {
        completionCondition
      });
      this.$emit('multiInsEvent',false);//隐藏父组件的指定用户


相关文章
|
6月前
|
前端开发
基于jeecgboot的flowable流程支持退回到发起人节点表单修改功能
基于jeecgboot的flowable流程支持退回到发起人节点表单修改功能
598 0
|
5月前
|
前端开发 数据库 JavaScript
基于Flowable的流程挂接自定义业务表单的设计与实践
文章讨论了如何在Flowable流程引擎中挂接自定义业务表单,以及相关设计和实践的步骤。文章中包含了一些前后端代码示例,如Vue组件的模板和脚本部分,这些代码用于实现与Flowable流程引擎交互的界面。例如,有一个按钮组件用于提交申请,点击后会触发applySubmit方法,该方法会与后端API进行交互,处理流程启动、查询关联流程等逻辑。
49365 11
|
6月前
|
前端开发
基于jeecgboot的flowable流程增加节点表单的支持(四)
基于jeecgboot的flowable流程增加节点表单的支持(四)
76 1
|
6月前
基于jeecgboot的flowable流程增加节点表单的支持(三)
基于jeecgboot的flowable流程增加节点表单的支持(三)
150 1
|
6月前
|
前端开发
基于jeecgboot的flowable流程增加节点自动跳过功能
基于jeecgboot的flowable流程增加节点自动跳过功能
443 2
|
6月前
|
监控 前端开发 NoSQL
基于jeecgboot的flowable复杂会签加用户选择流程实现
基于jeecgboot的flowable复杂会签加用户选择流程实现
142 2
|
6月前
|
前端开发
基于jeecgboot的flowable流程设计器的用户选择问题修复
基于jeecgboot的flowable流程设计器的用户选择问题修复
89 1
|
6月前
|
前端开发
基于jeecgboot的flowable流程任务excel导出功能
基于jeecgboot的flowable流程任务excel导出功能
61 1
|
6月前
基于jeecgboot的flowable流程支持online表单审批线上发布
基于jeecgboot的flowable流程支持online表单审批线上发布
71 1
|
6月前
基于jeecgboot的支持flowable的排它网关之后的会签功能(二)
基于jeecgboot的支持flowable的排它网关之后的会签功能(二)
59 1