Ruoyi-flowable集成vfrom

---Ruoyi-flowable集成vfrom
引入插件
npm i vform-builds

--------main.js引入部分
//VForm库
import 'element-ui/lib/theme-chalk/index.css'  //引入element-ui样式
import 'vform-builds/dist/VFormDesigner.css'  //引入VForm样式
import VForm from 'vform-builds'  //引入VForm库
Vue.use(Element)  //全局注册element-ui
Vue.use(VForm)  //全局注册VForm(同时注册了v-form-designe、v-form-render等组件)
/* 注意:如果你的项目中有使用axios,请用下面一行代码将全局axios复位为你的axios!! */
window.axios = axios
//VForm库

---自动插槽 保存字样被遮掩加入属性:toolbarMaxWidth: 490,
---表单设计界面


--------------前端渲染数据-----------------------
---HTML

--JS
 //查看节点、查看流程图
this.historyTaskList = data.historyTaskList;
//表单
console.log(this.$refs.vFormRef)
this.$refs.vFormRef.setFormJson(data.taskFormData)
//回显数据
this.$nextTick(() => {
  this.$refs.vFormRef.setFormData(this.processFormList)
})

----------后台返回
public R detail(String procInsId, String deployId, String taskId) {
    return R.ok(processService.queryProcessDetail_vfrom(procInsId, deployId, taskId));
}

-----前端存储核心
let formJson = this.$refs.vfDesigner.getFormJson()
this.form.content = JSON.stringify(formJson);

---------后端表单返回前端核心--
JsonUtils.parseObject(formService.queryById(formId).getContent(), Map.class)


---总结vfrom常用方法:
from-data、from-json、getFieldWidgets()获取表单所有字段组件、getContainerWidgets()获取表单所有容器组件

this.$refs.vFormRef.setFormData(this.processFormList)
this.$refs.vFormRef.setFormJson(data.taskFormData)


----后端组装(测试用例)
public WfDetailVo_vfrom queryProcessDetail_vfrom(String procInsId, String deployId, String taskId) {
        WfDetailVo_vfrom detailVo = new WfDetailVo_vfrom();
        
        HistoricTaskInstance taskIns = historyService.createHistoricTaskInstanceQuery()
                .taskId(taskId)
                .includeIdentityLinks()
                .includeProcessVariables()
                .includeTaskLocalVariables()
                .singleResult();
        if (taskIns == null) {
            throw new ServiceException("没有可办理的任务!");
        }
        
        HistoricProcessInstance historicProcIns = historyService.createHistoricProcessInstanceQuery().processInstanceId(procInsId).includeProcessVariables().singleResult();
        
        HistoricActivityInstance startInstance = historyService.createHistoricActivityInstanceQuery()
                .processInstanceId(historicProcIns.getId())
                .activityId(historicProcIns.getStartActivityId())
                .singleResult();
                
        Process process = repositoryService.getBpmnModel(historicProcIns.getProcessDefinitionId()).getMainProcess();
        
        StartEvent startEvent = (StartEvent) process.getFlowElement(startInstance.getActivityId());
        
        WfDeployFormVo deployFormVo= deployFormMapper.selectVoOne(new LambdaQueryWrapper()
                .eq(WfDeployForm::getDeployId, deployId)
                .eq(WfDeployForm::getFormKey, startEvent.getFormKey())
                .eq(WfDeployForm::getNodeKey, startEvent.getId()));
                
        System.out.println(deployFormVo);
        System.out.println(deployFormVo.getContent());
        
        //代办事项里的当前表单记录
        detailVo.setTaskFormData(JsonUtils.parseObject(deployFormVo.getContent(), Map.class));
        //已办事项里的流转记录
        detailVo.setHistoryTaskList(historyTaskList(procInsId));
        //已办事项里的历史表单记录
        detailVo.setProcessFormList(historicProcIns.getProcessVariables());
        
        System.out.println(detailVo);

        return detailVo;
    }

-----from表单控制部分

-----通过cookie传递的节点名称控制from表单字、及是否必填
var  _self=this
 _self.disableForm()

var cookie=document.cookie
console.log(cookie)
var result=cookie.split("nodeFrom=")[1].split(";")[0]
var nodeName=decodeURIComponent(result)
console.log(nodeName)


var start_node=["文件名称","主送单位","reportType","说明"]
var second_node=["主办科室"]
var third_node=["项目负责人"]
var fourth_node=["环评单位","行业类别","会议日期","时限要求","时限小结","审批人员联系方式","环评单位联系方式","是否退稿","退稿日期"]
var hytzqp_node=[]
var zzpg_node=["科室内审人员","是否复核","复核日期","专家打分","综合打分"]
var ksns_node=["总工"]
var zgsh_node=["审核日期"]

var sd_node=[]
var yfgd_node=[]
var gdqr_node=["是否归档","归档日期"]

var dataMap={"开始":start_node,"总经理分发":second_node,"科室分发":third_node,"项目负责人会议安排":fourth_node,
"会议通知签批":hytzqp_node,"组织评审":zzpg_node,
"科室内审":ksns_node,"总工审核":zgsh_node,"审定":sd_node,"印发归档":yfgd_node,"归档确认":gdqr_node}

for(var key in dataMap){
  var value = dataMap[ key ]; 
  if(nodeName==key){
  _self.enableWidgets(value)
  for (var prop in value) {
  console.log(value[prop])
      var someRef = _self.getWidgetRef(value[prop])
      console.log(someRef)
   someRef.setRequired(true)
  }
 
  }
}

-----------------下拉
let allCookies = document.cookie
let token=allCookies.split("Admin-Token=")[1].split(";")[0]
console.log(token)
var _self=this
axios.post("/workflow_backend/ark/choice/unitList",{},{
  headers:{
    'Authorization':token
  }}).then(function(res){
    var add=_self.getWidgetRef("select42080")
    console.log(res.data.data)
    add.loadOptions(res.data.data)
    add.setValue()
  console.log(res.data)
}).catch(function(error){
  console.log(error)
})

----------级联--后端获取的是id
let allCookies = document.cookie
let token=allCookies.split("Admin-Token=")[1].split(";")[0]
var result=cookie.split("nodeFrom=")[1].split(";")[0]
var nodeName=decodeURIComponent(result)
var _self=this
axios.post("/workflow_backend/ark/choice/dept",{},{
  headers:{
    'Authorization':'Bearer '+token
  }}).then(function(res){
  console.log(res.data.data)
        var add=_self.getWidgetRef("项目")
      add.loadOptions(res.data.data)
      add.setValue()
}).catch(function(error){
  console.log(error)
})

---设置是否必填

let someRef = this.getWidgetRef('组件唯一名称')
someRef.setRequired(ture)

借鉴文档:https://www.vform666.com/document.html

你可能感兴趣的:(vue.js,javascript,前端)