应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

工作流ActivitiOA低代码平台bpmnjs源码分析

  低代码平台第二步:bpmnjs源码分析
  带您感受下低代码的功能实现案例,通过简单的几步操作,就能完成一个模块的CRUD操作。
  更多技术文档请点击查看:bpmnjs源码分析语雀
  预览地址:青锋后台管理系统
  核心代码位置package
  bpmn核心代码全部在package包下面,如下图的位置:
  流程设计器模块processdesigner页面对应内容
  页面布局代码slotnamecontrolheaderslottemplatevif!slots〔controlheader〕elbuttongroupkeyfilecontrolelbutton:sizeheaderButtonSize:typeheaderButtonTypeiconeliconfolderopenedclickrefs。refFile。click()打开文件elbuttonelbutton:sizeheaderButtonSize:typeheaderButtonTypeiconeliconfolderdownloadclicksave()保存elbuttonelbutton:sizeheaderButtonSize:typeheaderButtonTypeiconeliconfolderdownloadclicksaveAndDeploy()保存并部署elbuttoneltooltipeffectlightelbutton:sizeheaderButtonSizetypetextclickdownloadProcessAsXml()下载为XML文件elbuttonbrelbutton:sizeheaderButtonSizetypetextclickdownloadProcessAsSvg()下载为SVG文件elbuttonbrelbutton:sizeheaderButtonSizetypetextclickdownloadProcessAsBpmn()下载为BPMN文件elbuttonelbutton:sizeheaderButtonSize:typeheaderButtonTypeiconelicondownloadclickdeploy()下载文件elbuttoneltooltipeltooltipeffectlightelbutton:sizeheaderButtonSizetypetextclickpreviewProcessXML预览XMLelbuttonbrelbutton:sizeheaderButtonSizetypetextclickpreviewProcessJson预览JSONelbuttonelbutton:sizeheaderButtonSize:typeheaderButtonTypeiconeliconview预览elbuttoneltooltipeltooltipvifsimulationeffectlight:contentthis。simulationStatus?退出模拟:开启模拟elbutton:sizeheaderButtonSize:typeheaderButtonTypeiconeliconcpuclickprocessSimulation模拟elbuttoneltooltipelbuttongroupelbuttongroupkeyaligncontroleltooltipeffectlightcontent向左对齐elbutton:sizeheaderButtonSizeclassalignalignlefticoneliconsdataclickelementsAlign(left)eltooltipeltooltipeffectlightcontent向右对齐elbutton:sizeheaderButtonSizeclassalignalignrighticoneliconsdataclickelementsAlign(right)eltooltipeltooltipeffectlightcontent向上对齐elbutton:sizeheaderButtonSizeclassalignaligntopiconeliconsdataclickelementsAlign(top)eltooltipeltooltipeffectlightcontent向下对齐elbutton:sizeheaderButtonSizeclassalignalignbottomiconeliconsdataclickelementsAlign(bottom)eltooltipeltooltipeffectlightcontent水平居中elbutton:sizeheaderButtonSizeclassalignaligncentericoneliconsdataclickelementsAlign(center)eltooltipeltooltipeffectlightcontent垂直居中elbutton:sizeheaderButtonSizeclassalignalignmiddleiconeliconsdataclickelementsAlign(middle)eltooltipelbuttongroupelbuttongroupkeyscalecontroleltooltipeffectlightcontent缩小视图elbutton:sizeheaderButtonSize:disableddefaultZoom0。2iconeliconzoomoutclickprocessZoomOut()eltooltipelbutton:sizeheaderButtonSize{{Math。floor(this。defaultZoom1010)}}elbuttoneltooltipeffectlightcontent放大视图elbutton:sizeheaderButtonSize:disableddefaultZoom4iconeliconzoominclickprocessZoomIn()eltooltipeltooltipeffectlightcontent重置视图并居中elbutton:sizeheaderButtonSizeiconeliconcscaletooriginalclickprocessReZoom()eltooltipelbuttongroupelbuttongroupkeystackcontroleltooltipeffectlightcontent撤销elbutton:sizeheaderButtonSize:disabled!revocableiconeliconrefreshleftclickprocessUndo()eltooltipeltooltipeffectlightcontent恢复elbutton:sizeheaderButtonSize:disabled!recoverableiconeliconrefreshrightclickprocessRedo()eltooltipeltooltipeffectlightcontent重新绘制elbutton:sizeheaderButtonSizeiconeliconrefreshclickprocessRestarteltooltipelbuttongrouptemplate!用于打开本地文件inputtypefileidfilesrefrefFilestyledisplay:noneaccept。xml,。bpmnchangeimportLocalFileeldialogtitle预览width60:visible。syncpreviewModelVisibleappendtobodydestroyonclosehighlightjs:languagepreviewType:codepreviewResulteldialog设计器控制面板processpanel
  代码重构基础组件refactor
  包含了基础组件、流程表达式、流程表单、监听器、多实例、其他任务、参数设置、信号消息、任务管理等等基础组件。
  了解了代码重构的基础组件,在实际业务中可以根据自己的需求进行修改。
  任务组件改造讲解
  在工作流的设计器中,我们对任务组件做了改造,由于之前的任务只能选择固定的人员或者组织,并没有和实际的数据库进行关联,无法与系统的用户打通,导致设计流程任务审批节点无法动态配置。
  为了打通工作流与系统用户、组织之间的壁垒,我们通过对流程设计器的改造,重新指定了任务组件。
  静态用户任务基础业务介绍
  1、选择静态分配后,我们可以选择用户和组织信息。
  2、选择用户和组织的公共组件可以查看单选用户、单选组织、多选用户、多选组织的案例。
  功能代码介绍
  创建候选静态候选用户表单,可以动态选择用户或者组织。elformitemlabel候选用户vshowuserTaskForm。type0elinputtypetextareavmodeluserTaskForm。candidateUsersNameclearabledisabledelbuttonclickselectCandidateUsers()typeprimarystylemargintop:8px选择elbuttonelbuttonclickclearCandidateUsers()typeprimarystylemargintop:8px清空elbuttonelformitemelformitemlabel候选分组vshowuserTaskForm。type0elinputtypetextareavmodeluserTaskForm。candidateGroupsNameclearabledisabledelbuttonclickselectCandidateGroups()typeprimarystylemargintop:8px选择elbuttonelbuttonclickselectCandidateGroups()typeprimarystylemargintop:8px清空elbuttonelformitem
  重新设置用户表单
  resetTaskForm(){this。set(this。userTaskForm,modelid,this。bpmnElement。parent。id);this。set(this。userTaskForm,nodekey,this。bpmnElement?。id);for(letkeyinthis。defaultTaskForm){letvalue;if(keycandidateUserskeycandidateGroups){valuethis。bpmnElement?。businessObject〔key〕?this。bpmnElement。businessObject〔key〕。split(,):〔〕;if(value!){findUserOrOrganizeNames({type:key,ids:value。join(,)})。then((response){console。log(response);if(keycandidateUsers){this。set(this。userTaskForm,candidateUsers,response。data。data。myIds);this。set(this。userTaskForm,candidateUsersName,response。data。data。myNames);}elseif(keycandidateGroups){this。set(this。userTaskForm,candidateGroups,response。data。data。myIds);this。set(this。userTaskForm,candidateGroupsName,response。data。data。myNames);}});}else{if(keycandidateUsers){this。set(this。userTaskForm,candidateUsers,);this。set(this。userTaskForm,candidateUsersName,);}elseif(keycandidateGroups){this。set(this。userTaskForm,candidateGroups,);this。set(this。userTaskForm,candidateGroupsName,);}}}elseif(keyassignee){valuethis。bpmnElement?。businessObject〔key〕this。defaultTaskForm〔key〕;if(value!){findUserOrOrganizeNames({type:key,ids:value})。then((response){this。set(this。userTaskForm,assignee,response。data。data。myIds);this。set(this。userTaskForm,assigneeName,response。data。data。myNames);});}else{this。set(this。userTaskForm,assignee,);this。set(this。userTaskForm,assigneeName,);}}else{valuethis。bpmnElement?。businessObject〔key〕this。defaultTaskForm〔key〕;this。set(this。userTaskForm,key,value);}console。log(keyvalue);}动态用户任务
  elselectvmodeluserTaskForm。assignmodeplaceholder请选择指定类型changeselectAssignMode()eloptionlabel所有人员中选择(根据组织选择)value0eloptioneloptionlabel组织选择(指定组织父节点)value1eloptioneloptionlabel用户组选择(选择指定组内成员)value2eloptioneloptionlabel发起人本组织选择value3eloptioneloptionlabel部门经理value4eloptioneloptionlabel上级领导value5eloptioneloptionlabel分管领导value6eloptioneloptionlabel流程发起人value7eloptioneloptionlabel指定范围选择value8eloptioneloptionlabel代理人(选择单用户)value9eloptioneloptionlabel候选人(选择多用户)value10eloptioneloptionlabel候选组(选择多组织)value11eloptionelselect节点解析所有人员中选择(根据组织选择)
  可以从系统人员中,选择节点需要审批的人员,可以指定一个人或者多个人,如果指定一个,则这个人就是本节点的办理人,如果指定了多个人,则流程下发时由上一级用户选择。
  组织选择(指定组织父节点)
  指定组织父节点后,节点办理人为当前组织下的人员,上一节点用户发起流程可以从改组织下面所有的人员中选择下级节点的办理人。
  用户组选择(选择指定组内成员)
  指定用户分组,节点办理人为当前用户组下的人员,上一节点用户发起流程可以从该分组下面所有的人员中选择下级节点的办理人。
  发起人本组织选择
  节点办理人为当前用户同组织下的人员,上一节点用户发起流程可以从发起人同组织下面所有的人员中选择下级节点的办理人。
  部门经理
  在人员中设置人员的部门经理,流程发起人员发起的流程由发起人的部门经理进行审批。
  上级领导
  在人员中设置人员的上级领导,流程发起人员发起的流程由发起人的上级领导进行审批。
  分管领导
  在人员中设置人员的分管领导,流程发起人员发起的流程由发起人的分管领导进行审批。
  流程发起人
  用户节点由流程发起人审批。
  指定范围选择
  指定范围选择可以选择一个用户集合,用户节点审核时,由上一节点办理人指定用户节点具体的办理人。
  代理人(选择单用户)
  如果节点设置为代理人,则可以指定当前审核代理人,制定后节点由设置的代理人进行审核。
  候选人(选择多用户)
  候选人,可以设置多为候选人,流程审批节点会同时给多为候选人发起审批任务,谁先认领谁审批,由第一个认领的候选人审批。
  候选组(选择多组织)
  候选组的概念同候选人,流程审批节点会同时给多为候选组下的所有人发起审批任务,谁先认领谁审批,由第一个认领的候选人审批。
  在activiti7中,抛弃了候选组审批的功能,在activiti5和activiti6中依然保持着候选组的审批模式。
  功能代码分析
  下面是具体的核心方法源码,完成的源码需要在代码中进行查看和分析。cellclick(row){varkeythis。checktype;lettaskAttrObject。create(null);this。userTaskForm。assigneerow。id;this。dialogVisiblefalse;if(keycandidateUserskeycandidateGroups){taskAttr〔key〕this。userTaskForm〔key〕this。userTaskForm〔key〕。length?this。userTaskForm〔key〕。join():null;}else{taskAttr〔key〕this。userTaskForm〔key〕null;console。log(taskAttr〔key〕);}window。bpmnInstances。modeling。updateProperties(this。bpmnElement,taskAttr);},clearAssignee(key){letvalue;lettaskAttrObject。create(null);if(keycandidateUserskeycandidateGroups){console。log(key);}else{taskAttr〔key〕;this。bpmnElement?。businessObject〔key〕this。defaultTaskForm〔key〕;}this。set(this。userTaskForm,key,);window。bpmnInstances。modeling。updateProperties(this。bpmnElement,taskAttr);},初始化initGroupinitGroup(){findGroupList({})。then((response){this。groupListresponse。data。data;});},选择办理人selectAssignee(){this。dialog(SelectOneUser,assignee,{userid:this。userTaskForm。assignee,username:this。userTaskForm。assigneeName,});},选择候选人selectCandidateUsers(){this。dialog(SelectMoreUser,candidateUsers,{userids:this。userTaskForm。candidateUsers,usernames:this。userTaskForm。candidateUsersName,});},选择候选组selectCandidateGroups(){this。dialog(SelectMoreOrganize,candidateGroups,{organizeids:this。userTaskForm。candidateGroups,organizenames:this。userTaskForm。candidateGroupsName,});},选择单组织selectOneOrganize(){this。dialog(SelectOneOrganize,oneOrganize,{organizeid:this。userTaskForm。organizeid,organizename:this。userTaskForm。organizename,});},选择多用户selectMoreUser(){this。dialog(SelectMoreUser,moreUser,{userids:this。userTaskForm。userids,usernames:this。userTaskForm。usernames,});},选择单用户selectOneUser(){this。dialog(SelectOneUser,oneUser,{userid:this。userTaskForm。userid,username:this。userTaskForm。username,});},选择多组织selectMoreOrganize(){this。dialog(SelectMoreOrganize,moreOrganize,{organizeids:this。userTaskForm。organizeids,organizenames:this。userTaskForm。organizenames,});},选择用户组织弹框dialog(component,fileType,record){console。log(component,fileType,record);constthatthis;this。dialog(component,componentprops{record,on:{ok(){console。log(ok回调);},cancel(){console。log(cancel回调);},close(){console。log(modalclose回调);},initValue(value,type){if(type1){if(fileTypeassignee){that。userTaskForm。assigneevalue。split(:)〔0〕;that。userTaskForm。assigneeNamevalue。split(:)〔1〕;更新文档参数that。updateActivitiProperties(assignee,value。split(:)〔0〕);that。saveAssignMode(value。split(:)〔0〕value。split(:)〔1〕);}elseif(fileTypeoneUser){that。userTaskForm。useridvalue。split(:)〔0〕;that。userTaskForm。usernamevalue。split(:)〔1〕;that。saveAssignMode(value。split(:)〔0〕value。split(:)〔1〕);}}elseif(type2){if(fileTypecandidateUsers){that。userTaskForm。candidateUsersvalue。split(:)〔0〕;that。userTaskForm。candidateUsersNamevalue。split(:)〔1〕;更新文档参数that。updateActivitiProperties(candidateUsers,value。split(:)〔0〕);that。saveAssignMode(value。split(:)〔0〕value。split(:)〔1〕);}elseif(fileTypemoreUser){that。userTaskForm。useridsvalue。split(:)〔0〕;that。userTaskForm。usernamesvalue。split(:)〔1〕;that。saveAssignMode(value。split(:)〔0〕value。split(:)〔1〕);}}elseif(type3){if(fileTypeoneOrganize){that。userTaskForm。organizeidvalue。split(:)〔0〕;that。userTaskForm。organizenamevalue。split(:)〔1〕;that。saveAssignMode(value。split(:)〔0〕value。split(:)〔1〕);}}elseif(type4){if(fileTypecandidateGroups){that。userTaskForm。candidateGroupsvalue。split(:)〔0〕;that。userTaskForm。candidateGroupsNamevalue。split(:)〔1〕;更新文档参数that。updateActivitiProperties(candidateGroups,value。split(:)〔0〕);that。saveAssignMode(value。split(:)〔0〕value。split(:)〔1〕);}elseif(fileTypemoreOrganize){that。userTaskForm。organizeidsvalue。split(:)〔0〕;that。userTaskForm。organizenamesvalue。split(:)〔1〕;that。saveAssignMode(value。split(:)〔0〕value。split(:)〔1〕);}}that。forceUpdate();},},},modalprops{title:操作,width:800,height:500,centered:true,maskClosable:false,okText:确认,cancelText:取消,});},updateActivitiProperties(key,value){lettaskAttr{};taskAttr〔key〕value;window。bpmnInstances。modeling。updateProperties(this。bpmnElement,taskAttr);},selectAssignMode(){letassignmodethis。userTaskForm。assignmode;letassigncontentthis。userTaskForm。assigncontent;if(assignmode0assignmode3assignmode4assignmode5assignmode6assignmode7(assignmode2assigncontent!assigncontent!undefined)){saveAssignment({id:this。userTaskForm。nodeid,type:this。userTaskForm。type,assignmode:this。userTaskForm。assignmode,assigncontent:this。userTaskForm。assigncontent,modelid:this。userTaskForm。modelid,nodekey:this。userTaskForm。nodekey,})。then((response){console。log(response);});}},saveAssignMode(assigncontent){saveAssignment({id:this。userTaskForm。nodeid,type:this。userTaskForm。type,assignmode:this。userTaskForm。assignmode,modelid:this。userTaskForm。modelid,nodekey:this。userTaskForm。nodekey,assigncontent:assigncontent,})。then((response){console。log(response);});},},beforeDestroy(){this。bpmnElementnull;},};

爱喝茶的人注意!这个病在闽南地区高发!据说普通人身体内一大半是水闽南人的身体一半是茶喝茶闽南人可是大有讲究的那必须要喝热茶茶得是刚冲泡出来、滚烫的才有灵魂!但你知道吗?……学习,不是为了挤压别人的生存空间(让别人做草芥而自己做人杰)不必行色匆匆,不必光芒四射,不必成为别人,只需做自己。伍尔夫《一间自己的房间》如果读书不颁发学历,你还会去读吗?如果读书没有考试,也没有学历可颁发,就只是学,你还会……守护生命安全相伴山西省第二人民医院开展产后出血应急演练产后出血是指胎儿娩出后24小时内产妇阴道流血量超过500ml,俗称产后大出血或产后血崩。产后出血是分娩期严重的并发症,位居我国产妇四大死亡原因之首。产后大出血对产妇的影响非常大……泰国极品嫩模长发飘飘,完美身材挑战极限!泰国作为一个崇尚混血的国家,各种风情的美女层出不穷,尤其这还是一个热带国家,清凉的穿着总能让人大饱眼福,今天我们就来看一位泰国的极品嫩模!今天介绍的这位来自泰国的美女名叫……当一个人开始衰老,身体4个迹象藏不住,别不服气衰老会有许多信号发出,每个人都逃避不了,但如果可以保持好的生活习惯,抗衰老措施积极做好,或许可以比同龄人显得年轻,而身体年轻是有好处的,除了器官功能正常发挥,也能降低多种疾病患……进出口银行山东省分行为歌尔股份提供出口订单融资支持近日,进出口银行山东省分行聚焦服务新时代对外开放的工作重心,以外向型企业最关切的需要为出发点制定业务方案,为歌尔股份有限公司提供数亿元出口订单融资,有力地支持了企业外贸业务的发……淘宝下架贞操锁女裤,还有内裤裙在售!服装专家十足的恶趣味设计未来网北京4月10日电(实习生杭彬记者王秀娟王睿智)继贞操锁印花长裤下架后,淘宝上又一款奇怪的服装设计让网友和专业人士大跌眼镜。近日未来网记者登录淘宝发现,一度引发网络热……过年吃橘子嗑瓜子喝饮料上火了怎么办?假期在家,零食吃到停不下来。花生、瓜子、各种坚果,还有必备的砂糖橘可是吃多了也会乐极生悲,不是口腔溃疡,就是嗓子痛,每当这个时候,家里的长辈就会说:这是上火了。那么,到底……第21期娇媚动人旗袍美女细雨飘落樱花下,端庄佳人旗袍裹。娇媚动人春光里,翩然舞动似飘荡。春光明媚绽芳华,鲜花簇拥美人家。轻纱垂下覆盖肩,倩影婀娜醉人眼。关注我!持续更新更多旗袍美女关注我!……洋帅为了给小伙子被红牌罚出,足协却拒与他续约,下任名额已内定中国足球天亮了吗?在最近一段时间中国足球上演狂飙,随着中国足协主席陈戌源被抓,被爆更是贪污了30个亿,中国足球已经是一地鸡毛了,在足协这些害群之马被抓后,中国有救了吗?在……官方格林和泰特离开替补席被禁赛一场北京时间1月16日,NBA联盟宣布处罚公告,火箭球员杰伦格林和杰肖恩泰特因违规离开替补席被联盟分别禁赛1场。在14日国王对阵火箭的比赛中,第四节双方发生冲突。裁判当下吹罚……中国足球上热搜,杜门九虎瑟瑟发抖,足协班子一锅端,已无人主事北京时间2023年4月1日,中国足协的头号人物杜兆才终究还是没能躲过恢恢天网,在不日就将退休之时被监察部门官宣定性了,此事也让中国足球再次登上了热搜,在愚人节这天体验了一回做明……
姆巴佩1。28亿美元登顶足坛球员收入排行,梅西C罗次之近日,福布斯公布了世界足球运动员2022年的收入排行榜,姆巴佩以1。28亿美元超越了梅西和C罗,成为了世界足坛年度收入最高的球员。姆巴佩在今年5月和巴黎圣日耳曼正式续约至……平潭岛旅游没有攻略只教避坑从平潭回来一周啦,缓了好几天,平潭真的真的很美,但是真的给我晒懵了,所以根据亲身经历,吐血整理出这份避雷攻略,要去平潭旅行的可作参考呀!首先最重要的是时间。虽然平潭……要想进步,就只有吸取教训1、要想进步,就只有吸取教训,成功的经验都是歪曲的,成功了,想怎么说都可以,失败者没有发言权,可是,你可以通过他的事例反思,总结。教训,不仅要从自己身上吸取,还要从别人身上吸取……孙红雷携娇妻走红毯,女方全程尬笑表现紧张,互动被网友调侃不熟21日,影帝孙红雷亮相某电影节,并且还带上了自己的小媳妇王俊迪。这二位很少一同出席活动,这次可谓是罕见的合体。在活动进行过程中,王俊迪一直跟在孙红雷身后,显得有些紧张,轮……10月份采购经理指数有所回落经济恢复发展基础需进一步稳固10月31日,国家统计局服务业调查中心、中国物流与采购联合会发布的中国采购经理指数(PMI)显示,10月份,受疫情多发散发等影响,中国采购经理指数有所回落,其中制造业采购经理指……电视盒子哪款好?工程师推荐目前最强的电视盒子对我们普通消费者来说8K貌似是很遥远的事情,毕竟现在智能电视的主流配置是4K分辨率,8K具有76804320分辨率的超精细画面,能带给人震撼的视觉享受,很多电视盒子已经开始支持……完美世界会抛弃CSGO吗?这就得看看完美世界的想法了可能看到这个标题,不少人已经按捺不住喷我的那个事情了,但你还别说啊,你们看看完美世界代理国服那么久的时间里面,CSGO的数据起来了吗?五年时间了,隔壁穿越火线都更新好几轮了,的……2022年最新冲牙器热门品牌排行统计公布最近蓝鲸咨询公布了2022年最新冲牙器热门品牌排行榜,这一次榜单主要考量品牌销量、热度、口碑等方面的数据,而不是单纯将销量作为评价标准!这样相对客观的数据统计能够避免刷榜刷单、……广东陶瓷企业成大湾区潮流达人来源:【消费日报】一桥连三地天堑变通途。临近国庆,对于想去香港、澳门游玩的人来说,55公里长的港珠澳大桥是热门的旅行体验选项。鲜为人知的是,在这项超级工程背后,有着许多广……江苏险胜辽篮,李楠赢球很高兴!杨鸣怀念刘志轩,弗格力挺丛明晨我们都知道今年新赛季江苏两支球队势头非常猛,李楠带领的江苏男篮和西热力江带领的同曦男篮刮起了一股风暴,席卷整个联赛!江苏男篮今天又赢球了,而且是战胜卫冕冠军辽宁男篮,取得……人民币涨近1000点,首套房贷利率下调,国庆节买房划算还是春一、人民币涨近1000点,首套房贷利率下调,国庆节买房划算还是春节?在传统房市营销旺季,有金三银四和金九银十这两个时点;这通常是开发商一年中最优惠活动的时候;对于买家来说……四年终圆梦!辽宁10082战胜广厦,队史第二次获得总冠军记者冯子涵这个夜晚,属于辽宁。4月26日晚,辽宁和广厦决战CBA总决赛第四场。此役,广厦再次变阵,李金效进入首发五虎,孙铭徽也继续带伤出战。最终,阵容更深的辽宁以100:……
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网