jpdl.js 48 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669
  1. var property = {
  2. width: 3000,
  3. height: 3000,
  4. toolBtns: ["task", "node"],
  5. haveHead: (window.top==self),
  6. headBtns: ["new", "save"], //如果haveHead=true,则定义HEAD区的按钮
  7. haveTool: true, //(重要)是否可编辑??????????????????????????????????
  8. useOperStack: true,
  9. initNum: 1
  10. };
  11. var remark = {
  12. cursor: "指针",
  13. direct: "连线",
  14. start: "start",
  15. end: "end",
  16. task: "task",
  17. node: "decision"
  18. };
  19. var tempData;
  20. var demo;
  21. var selectId;
  22. var selectType;
  23. var HEADTEXT={};
  24. //bpmComponent解析后的数据容器
  25. var startList = new Array();
  26. var endList = new Array();
  27. var taskList = new Array();
  28. var subprocessList=new Array();
  29. var decisionList = new Array();
  30. var transmitList=new Array()
  31. //选中的start,end,task,decision的容器
  32. var selectTask = null;
  33. var selectTransmit = null;
  34. var selectStart = null;
  35. var selectEnd = null;
  36. var selectDecision = null;
  37. var selectSubprocess=null;
  38. var haveDrag = false;
  39. $(document).ready(function() {
  40. $(document.body).append(control.dom)
  41. //url获取设置应用名,默认为env
  42. /* 再去掉,去掉 thisAppName。Lin
  43. var urlAppName = getURLParam("thisAppName");
  44. if (urlAppName != "" || urlAppName != null) {
  45. document.getElementById("thisAppName").value = urlAppName
  46. }
  47. */
  48. property.initLabelText = $("#fileName").val();
  49. demo = $.createGooFlow($("#demo"), property);
  50. demo.setNodeRemarks(remark);
  51. var datas = $("#jsonData").html();
  52. var objectKeyOption= window.parent.document.getElementById("objectKeyOption");
  53. version=document.getElementById("version").value
  54. //先隐藏\n
  55. if(version==""){
  56. version="0";
  57. document.getElementById("version").value="0";
  58. }
  59. //读取检查jaondata
  60. if(datas.length==0){datas="{objectKey:{}}"}
  61. var json = eval('(' + datas + ')');
  62. if(json.nodes||json.lines){
  63. alert("json数据未转换")
  64. return;
  65. }
  66. var componentData=eval("("+ $("#bpmComponentData").html()+")");
  67. taskList=componentData.task;
  68. transmitList=componentData.transmit;
  69. subprocessList=componentData.subprocess;
  70. startList=[componentData.start];
  71. endList=[componentData.end];
  72. console.log(componentData);
  73. for(var i=0;i<json.objectKey.length;i++){
  74. if(json.objectKey[i].version==version){
  75. demo.loadData(json.objectKey[i]);
  76. }
  77. }
  78. //检查开始,结束按钮
  79. checkStartEnd(demo.exportData())
  80. objectKeyOption.style.display="";
  81. // var selects=objectKeyOption.getElementsByTagName("select")[0];
  82. //
  83. // //生成下拉
  84. var kkk=json.objectKey
  85. // //多流程--显隐
  86. // var selects=objectKeyOption.getElementsByTagName("select")[0];
  87. // var selectworkFolw=window.parent.document.getElementById("selectWorkFlow");
  88. // var index=selectworkFolw.selectedIndex;
  89. // var flowName=selectworkFolw.options[index].innerHTML
  90. //// selects.innerHTML="<option value=''>"+flowName+"</option>"
  91. // selects.innerHTML=""
  92. //
  93. //// 生成第一个
  94. if(false&&kkk&&kkk.length>0){
  95. objectKeyOption.style.display="";
  96. for(var i=0;i<kkk.length;i++){
  97. var tempOption=document.createElement("option");
  98. //计算该类别流程是否有设置类别
  99. console.log(kkk[i])
  100. tempOption.innerHTML=kkk[i].name?kkk[i].name:"默认";
  101. tempOption.value=kkk[i].version;
  102. if(false==kkk[i].display){
  103. continue;
  104. }
  105. if(kkk[i].version==version){tempOption.setAttribute("selected",true)}
  106. selects.appendChild(tempOption)
  107. }
  108. }
  109. if((function(){
  110. return componentData.key.length>0;
  111. })()){
  112. objectKeyOption.style.display="";
  113. //新增类别
  114. objectKeyOption.querySelectorAll("[type=button]")[0].style.display=""
  115. //修改
  116. objectKeyOption.querySelectorAll("[type=button]")[1].style.display=""
  117. }else{
  118. objectKeyOption.style.display="";
  119. //新增类别
  120. objectKeyOption.querySelectorAll("[type=button]")[0].style.display=""
  121. //修改
  122. objectKeyOption.querySelectorAll("[type=button]")[1].style.display=""
  123. }
  124. //删除按钮
  125. if(window.parent){
  126. var deleteButton=window.parent.document.querySelector("#deletebutton");
  127. if(!deleteButton){
  128. // deleteButton=document.createElement("input");
  129. // deleteButton.setAttribute("type","button");
  130. // deleteButton.setAttribute("value","删除");
  131. // deleteButton.setAttribute("id","deletebutton");
  132. // deleteButton.setAttribute("class","list-button");
  133. // objectKeyOption.appendChild(deleteButton)
  134. var ce=window.parent.$("#save").clone();
  135. ce.val("删除").attr("id","deletebutton").attr("title","");
  136. deleteButton=ce[0];
  137. window.parent.$("#save").before(deleteButton)
  138. }
  139. if(componentData.key.length==0){
  140. $(deleteButton).remove();
  141. }
  142. deleteButton.onclick=function(){
  143. if(window.confirm("删除当前流程类别?")){
  144. if(version!=""){
  145. var datas = $("#jsonData").html();
  146. var json=eval("("+datas+")");
  147. for(var i=0;i<json.objectKey.length;i++){
  148. if(json.objectKey[i].version==version){
  149. json.objectKey[i].display=false;
  150. json.objectKey[i].codebooks=[];
  151. console.log(json.objectKey[i])
  152. }
  153. }
  154. }else{
  155. alert('非法操作!')
  156. return false;
  157. }
  158. /* 再改,去掉 thisAppName。Lin
  159. $.post($("#saveURL").val() + '&thisAppName=' + document.getElementById("thisAppName").value, {
  160. */ $.post($("#saveURL").val(), {
  161. 'jsonData': JSON.stringify(json),
  162. 'fileName': $("#fileName").val()
  163. }, function(result) {
  164. console.log(result);
  165. //提示弹窗
  166. var notificationScript =document.getElementById("notificationURL").value
  167. if(notificationScript.indexOf("$result")!=-1){
  168. notificationScript=notificationScript.replace("$result",result);
  169. }else{
  170. notificationScript=notificationScript.split("ssToken")[0]+"&result="+result+"&ssToken"+notificationScript.split("ssToken")[1] // ("token"),+"&token"+("token")。Lin
  171. }
  172. eval(notificationScript)
  173. });
  174. }
  175. }
  176. }
  177. //解析数据成工具按钮
  178. if (property.haveTool == false) {
  179. return;
  180. }
  181. // window.event.preventDefault()
  182. var selectdiv = $("#leftDiv");
  183. var allNodes=demo.exportData().nodes;
  184. var modifyData=[];
  185. //task
  186. for (var i = 0; i < taskList.length; i++) {
  187. var task = taskList[i];
  188. var dd=compareNodeData(task,allNodes,"task");
  189. if(dd){
  190. modifyData=modifyData.concat(dd);
  191. }
  192. //杨20210817改 demo.$tool.append("<div draggable='true' ondragend='aNewTask(this," + i + ")' onclick='selectAsTask(this," + i + ")' title='" + task.name + "'><b class='ico2_task'></b><p class='ico2_task_show' >" + task.name + "</p></div>")
  193. demo.$tool.append("<div draggable='true' ondragend='aNewTask(this," + i + ")' onclick='selectAsTask(this," + i + ")' title='" + task.name + "'><b class='ico2_task' style='display: inline-block;'></b><span class='ico2_task_show' style='display: inline-block;height: 36px;border: 0;line-height: 36px;position: absolute;'>" + task.name + "</span></div>")
  194. }
  195. //transmit
  196. for (var i = 0; i < transmitList.length; i++) {
  197. var transmit = transmitList[i];
  198. //杨 demo.$tool.append("<div draggable='true' ondragend='aNewTransmit(this," + i + ")' onclick='selectAsTransmit(this," + i + ")' title='" + transmit.name + "'><b class='ico2_task'></b><p class='ico2_task_show'>" + transmit.name + "</p></div>")
  199. demo.$tool.append("<div draggable='true' ondragend='aNewTransmit(this," + i + ")' onclick='selectAsTransmit(this," + i + ")' title='" + transmit.name + "'><b class='ico2_task' style='display: inline-block;'></b><span class='ico2_task_show' style='display: inline-block;height: 36px;border: 0;line-height: 36px;position: absolute;'>" + transmit.name + "</span></div>")
  200. }
  201. //subprocess
  202. for(var i=0;i<subprocessList.length;i++){
  203. var subprocess=subprocessList[i]
  204. //杨 demo.$tool.append("<div draggable='true' ondragend='aNewSubrocess(this,"+i+")' onclick='selectAsSubprocess(this,"+i+")' title='" + "子工作流" + "'><b class='ico2_task'></b><p class='ico2_task_show'>" + subprocess.name + "</p></div>")
  205. demo.$tool.append("<div draggable='true' ondragend='aNewSubrocess(this,"+i+")' onclick='selectAsSubprocess(this,"+i+")' title='" + "子工作流" + "'><b class='ico2_task' style='display: inline-block;'></b><span class='ico2_task_show' style='display: inline-block;height: 36px;border: 0;line-height: 36px;position: absolute;'>" + subprocess.name + "</span></div>")
  206. }
  207. //decision
  208. for (var i = 0; i < decisionList.length; i++) {
  209. var decision = decisionList[i];
  210. //杨 demo.$tool.append("<div draggable='true' ondragend='aNewDecision(this," + i + ")' onclick='selectAsDecision(this," + i + ")' title='" + decision.name + "'><b class='icon2_decision'></b><p>" + decision.name + "</p></div>")
  211. demo.$tool.append("<div draggable='true' ondragend='aNewDecision(this," + i + ")' onclick='selectAsDecision(this," + i + ")' title='" + decision.name + "'><b class='icon2_decision' style='display: inline-block;'></b><span style='display: inline-block;height: 36px;border: 0;line-height: 36px;position: absolute;'>" + decision.name + "</span></div>")
  212. }
  213. // //start
  214. for (var i = 0; i < startList.length; i++) {
  215. var dd=compareNodeData(startList[i],allNodes,"start");
  216. if(dd){
  217. modifyData=modifyData.concat(dd);
  218. }
  219. // demo.$tool.append("<div draggable='true' ondragend='aNewStart(this," + i + ")' onclick='selectAsStart(this," + i + ")' ><b class='ico2_start'></b><p>" + "开始" + "</p></div>")
  220. }
  221. // //end
  222. for (var i = 0; i < endList.length; i++) {
  223. var dd=compareNodeData(endList[i],allNodes,"end");
  224. if(dd){
  225. modifyData=modifyData.concat(dd);
  226. }
  227. // demo.$tool.append("<div draggable='true' ondragend='aNewEnd(this," + i + ")' onclick='selectAsEnd(this," + i + ");' ><b class='ico2_end'></b><p>" + "结束" + "</p></div>")
  228. }
  229. //分支
  230. // demo.$tool.append("<div draggable='true' ondragend='aNewDecision(this)' onclick='selectAsDecisionDictionary(this)' title='字典'><b class='icon2_decision'></b><p>字典</p></div>")
  231. //并发(合并分支, 动态分支foreach)
  232. //杨 demo.$tool.append("<div draggable='true' ondragend='aNewFork(this)' onclick='selectAsFork(this)' title='分支'><b class='ico2_fork'></b><p>" + "并行" + "</p></div>")
  233. /* "并行" 改为 "并行/分支"。Lin
  234. demo.$tool.append("<div draggable='true' ondragend='aNewFork(this)' onclick='selectAsFork(this)' title='分支'><b class='ico2_fork' style='display: inline-block;'></b><span style='display: inline-block;height: 36px;border: 0;line-height: 36px;position: absolute;'>" + "并行" + "</span></div>") */
  235. demo.$tool.append("<div draggable='true' ondragend='aNewFork(this)' onclick='selectAsFork(this)' title='分支'><b class='ico2_fork' style='display: inline-block;'></b><span style='display: inline-block;height: 36px;border: 0;line-height: 36px;position: absolute;'>" + "并行/分支" + "</span></div>")
  236. //动态分支foreach
  237. // demo.$tool.append("<div draggable='true' ondragend='aNewForeach(this)' onclick='selectAsForeach(this)' title='动态分支'><b class='ico2_fork'></b><p>" + "动态分支" + "</p></div>")
  238. //汇合,等待
  239. //杨 demo.$tool.append("<div draggable='true' ondragend='aNewJoin(this)' onclick='selectAsJoin(this)' title='汇合'><b class='ico2_join'></b><p>" + "汇合" + "</p></div>")
  240. demo.$tool.append("<div draggable='true' ondragend='aNewJoin(this)' onclick='selectAsJoin(this)' title='汇合'><b class='ico2_join' style='display: inline-block;'></b><span style='display: inline-block;height: 36px;border: 0;line-height: 36px;position: absolute;'>" + "汇合" + "</span></div>")
  241. //连线'划线
  242. //杨 demo.$tool.append("<div onclick='selectAsLine(this)' title='连线'><b class='ico2_direct'></b><p>" + "连线" + "</p></div>")
  243. demo.$tool.append("<div onclick='selectAsLine(this)' title='连线'><b class='ico2_direct' style='display: inline-block;'></b><span style='display: inline-block;height: 36px;border: 0;line-height: 36px;position: absolute;'>" + "连线" + "</span></div>")
  244. //鼠标
  245. //杨 demo.$tool.append("<div onclick='selectAsMouse(this)' title='鼠标'><b class='ico2_cursor'></b><p>" + "鼠标" + "</p></div>")
  246. demo.$tool.append("<div onclick='selectAsMouse(this)' title='鼠标'><b class='ico2_cursor' style='display: inline-block;'></b><span style='display: inline-block;height: 36px;border: 0;line-height: 36px;position: absolute;'>" + "鼠标" + "</span></div>")
  247. //////////////////////////
  248. //头信息初始化
  249. setTimeout(function(){
  250. var allNodes=demo.exportData().nodes;
  251. if(modifyData.length>0){
  252. for(var i=0;i<modifyData.length;i++){
  253. var data=modifyData[i];
  254. var id=data.id;
  255. var content="";
  256. var count=1;
  257. for(var key in data){
  258. if(key=="id")continue;
  259. var oldvalue=allNodes[id][key];
  260. var newvalue=data[key];
  261. if(!oldvalue)oldvalue="null"
  262. if(!newvalue)newvalue="null"
  263. content+="\r"+count+".("+ key+")\r"+oldvalue+"\r"+newvalue;
  264. count++;
  265. }
  266. if(window.confirm("发现 流程配置文件 里有新数据(旧值在前):"+ allNodes[id].name+"?\r"+content)){ // "发现新数据! 旧值同新值:"。Lin
  267. for(var key in data){
  268. allNodes[id][key]=data[key];
  269. }
  270. }
  271. }
  272. }
  273. },1000)
  274. /* 再去掉,去掉 thisAppName -- 本来也没用到,IDEA(Unused local variable appName)。Lin
  275. var appName= document.getElementById("thisAppName").value;
  276. */
  277. // var headtext="<bpm name='" + $(head).attr("name") +(version!=""?("."+version):"")+ "' desc='" + $(head).attr("desc")+(version!=""?("."+version):"") + "' key='" + $(head).attr("key") + "' type='" + $(head).attr("type") + "' agree='" + $(head).attr("agree") + "' reject='" + $(head).attr("reject") + "'></bpm>";
  278. HEADTEXT={
  279. bpm_name:componentData.bpm.bpm_name,
  280. bpm_desc:componentData.bpm.bpm_desc,
  281. bpm_type:componentData.bpm.bpm_type,
  282. bpm_agree:componentData.bpm.bpm_agree,
  283. bpm_reject:componentData.bpm.bpm_reject
  284. };
  285. // $("#head_text").html(headtext);
  286. //////////////////////////////
  287. //绑定iframe外按钮保存和发布
  288. if (window.parent.document.getElementById("save") != null) {
  289. window.parent.document.getElementById("save").onclick = function() {
  290. demo.onBtnSaveClick();
  291. }
  292. }
  293. if(window.parent.document.getElementById("deployment")!=null){
  294. window.parent.document.getElementById("deployment").onclick = function() {
  295. // head_confirm();
  296. var version=document.getElementById("version").value;
  297. var datas = $("#jsonData").html();
  298. var json = eval('(' + datas + ')');
  299. if(json.nodes||json.lines){
  300. alert("json数据未转换")
  301. return;
  302. }
  303. var trans=new translate();
  304. for(var i=0;i<json.objectKey.length;i++){
  305. if(json.objectKey[i].version==version){
  306. trans.obj=json.objectKey[i];
  307. break;
  308. }
  309. }
  310. console.log(trans);
  311. if(trans.obj==null){
  312. alert("发布失败");
  313. return;
  314. }
  315. var jpdl = null;
  316. try{
  317. jpdl = trans.toJPDL();
  318. }catch(e){
  319. console.log(e);
  320. alert(e);
  321. return;
  322. }
  323. var params={
  324. 'fileName': $("#fileName").val()
  325. }
  326. params.jpdlName=($("#fileName").val()).replace(".bpmComponent.xml","")
  327. +"."+version+".jpdl.xml"
  328. params.jpdlXML= jpdl
  329. console.log(params)
  330. /* 再改,去掉 thisAppName。Lin
  331. var url = $("#deplopmentURL").val() + '&thisAppName=' + document.getElementById("thisAppName").value
  332. */ var url = $("#deplopmentURL").val()
  333. $.post(url, params,
  334. function(result) {
  335. console.log(result);
  336. result=result.substring(0,20)
  337. var notificationScript =document.getElementById("notificationURL").value
  338. if(notificationScript.indexOf("$result")!=-1){
  339. notificationScript=notificationScript.replace("$result",result);
  340. }else{
  341. notificationScript=notificationScript.split("ssToken")[0]+"&result="+result+"&ssToken"+notificationScript.split("ssToken")[1] // ("token"),+"&token"+("token")。Lin
  342. }
  343. eval(notificationScript)
  344. });
  345. }
  346. }
  347. //直接部署
  348. if(window.parent.document.getElementById("deployment2")!=null){
  349. window.parent.document.getElementById("deployment2").onclick = function() {
  350. /* 再改,去掉 thisAppName。Lin
  351. var url = $("#deplopmentURL2").val() + '&thisAppName=' + document.getElementById("thisAppName").value;
  352. */ var url = $("#deplopmentURL2").val();
  353. var fileName=$("#fileName").val().replace(".bpmComponent.xml","")+(version!=""?("."+version):"")+".bpmComponent.xml"
  354. // return;
  355. $.post(url, {
  356. 'fileName':fileName
  357. },
  358. function(result) {
  359. console.log(result);
  360. var notificationScript =document.getElementById("notificationURL").value
  361. if(notificationScript.indexOf("$result")!=-1){
  362. notificationScript=notificationScript.replace("$result",result);
  363. }else{
  364. notificationScript=notificationScript.split("ssToken")[0]+"&result="+result+"&ssToken"+notificationScript.split("ssToken")[1] // ("token"),+"&token"+("token")。Lin
  365. }
  366. eval(notificationScript)
  367. }
  368. );
  369. }
  370. }
  371. if(window.parent.document.getElementById("clear")!=null){
  372. window.parent.document.getElementById("clear").onclick=function(){
  373. demo.onBtnNewClick()
  374. }
  375. }
  376. if(window.parent.document.getElementById("stop")!=null){
  377. window.parent.document.getElementById("stop").onclick=function(){
  378. demo.onBtnNewClick()
  379. }
  380. }
  381. //删除
  382. demo.onItemDel = function(id, type) {
  383. $(".decisionLine").remove();
  384. return true;
  385. }
  386. //刷新
  387. demo.onFreshClick = function() {
  388. //window.location.reload();
  389. this.loadData(tempData);
  390. console.log(tempData)
  391. }
  392. //保存
  393. demo.onBtnSaveClick = function() {
  394. // head_confirm();
  395. tempData = clone(this.exportData());
  396. //要保存的数据
  397. var data=this.exportData();
  398. var datas = $("#jsonData").html();
  399. var json=eval("("+datas+")");
  400. if(datas.length==0||json.objectKey.length==0){
  401. alert("流程未添加!");
  402. return;
  403. }
  404. for(var k in data.nodes){
  405. if("task"==data.nodes[k].realtype){
  406. if(control.useTaskChain(data.nodes[k].assignee)){
  407. data.nodes[k].taskChain=1;
  408. }
  409. }
  410. }
  411. var findthat=false;
  412. for(var i=0;i<json.objectKey.length;i++){
  413. if(json.objectKey[i].version==version){
  414. json.objectKey[i].nodes=data.nodes
  415. json.objectKey[i].lines=data.lines;
  416. for(var key2 in HEADTEXT){
  417. json.objectKey[i][key2]=HEADTEXT[key2]
  418. }
  419. if(!json.objectKey[i].display){
  420. json.objectKey[i].display="true"
  421. }
  422. if(!json.objectKey[i].codebooks){
  423. json.objectKey[i].codebooks=[];
  424. }
  425. data=json;
  426. findthat=true
  427. break;
  428. }
  429. }
  430. if(findthat==false){
  431. alert("version"+version+"查找失败!")
  432. return;
  433. }
  434. /* 再改,去掉 thisAppName。Lin
  435. $.post($("#saveURL").val() + '&thisAppName=' + document.getElementById("thisAppName").value, {
  436. */ $.post($("#saveURL").val(), {
  437. 'jsonData': JSON.stringify(data),
  438. 'fileName': $("#fileName").val()
  439. }, function(result) {
  440. //提示弹窗
  441. var notificationScript =document.getElementById("notificationURL").value
  442. if(notificationScript.indexOf("$result")!=-1){
  443. notificationScript=notificationScript.replace("$result",result);
  444. }else{
  445. notificationScript=notificationScript.split("ssToken")[0]+"&result="+result+"&ssToken"+notificationScript.split("ssToken")[1] // ("token"),+"&token"+("token")。Lin
  446. }
  447. eval(notificationScript)
  448. });
  449. }
  450. //新表
  451. demo.onBtnNewClick = function() {
  452. $(".decisionLine").remove();
  453. this.clearData()
  454. }
  455. //打开文件
  456. demo.onBtnOpenClick = function() {
  457. console.log("打开")
  458. var datas = $("#jsonData").val();
  459. var json = eval('(' + datas + ')');
  460. console.log(json)
  461. this.loadData(json);
  462. return true;
  463. }
  464. //选中
  465. var lastId;
  466. demo.onItemFocus = function(id, type) {
  467. // console.log(this.$nowType)
  468. console.log(this.exportData()["nodes"][id]||this.exportData()["lines"][id])
  469. selectId = id;
  470. selectType = type;
  471. // if(id==lastId){return;}
  472. lastId = id
  473. var node = (this.exportData())[type + "s"][id];
  474. var co = $("#control_planel");
  475. if (typeof(node) == "undefined") return;
  476. //设置窗口打开中
  477. if(type=="node"&&control.close==false){control.show(demo.$nodeData[selectId])}
  478. co.html("<p><button onClick='control_planel_confirm()'>确定</button></p>")
  479. //.append("<input type='hidden' id='selectType' value='"+node.realtype+"'/>")
  480. //.append("name:<input type='text' id='p_name' value='"+node.name+"'/>")
  481. //选中分支节点decision,显示分支线
  482. if (node.type == "node"||node.type == "fork") {
  483. function timeDelay() {
  484. var thisselectId = selectId;
  485. return function() {
  486. if (haveDrag == false) {
  487. initDecisionLine($("#" + thisselectId));
  488. }
  489. haveDrag = false;
  490. };
  491. }
  492. // 定时触发:
  493. // var aa = timeDelay();
  494. setTimeout(timeDelay(), 100)
  495. co
  496. .append("<p>one thing left to do!</p>")
  497. }
  498. //任务节点task
  499. if (node.type == "task") {
  500. // $(".decisionLine").remove();
  501. co
  502. .append("<p><textarea id='node_text' cols='50' rows='5'><task name='" + node.name + "' assignee='" + node.assignee + "'><service name='" + node.service_name + "' dest='" + node.service_dest + "'/><message title='" + node.message_title + "' content='" + node.message_content + "' /></task></textarea></p>")
  503. }
  504. //结束节点end
  505. if (node.type == "end") {
  506. // $(".decisionLine").remove();
  507. co
  508. .append("<p><textarea id='node_text' cols='50' rows='5'><end name='" + node.bpm_agree + "' ><service name='" + node.agree_service_name + "'/><message title='" + node.agree_message_title + "' content='" + node.agree_message_content + "'></end><end name='" + node.bpm_reject + "' ><service name='" + node.reject_service_name + "'/><message title='" + node.reject_message_title + "' content='" + node.reject_message_content + "'></end></textarea></p>")
  509. }
  510. //开始节点start
  511. if (node.type == "start") {
  512. // $(".decisionLine").remove();
  513. co
  514. .append("<p><textarea id='node_text' cols='50' rows='5'><start><service name='" + node.service_name + "'></start></textarea></p>")
  515. }
  516. //点击线条line
  517. if (type == "line") {
  518. co.append("")
  519. }
  520. return true;
  521. }
  522. // console.log($("#draw_demo"))
  523. });
  524. //确定
  525. function control_planel_confirm() {
  526. var node_text = $("#node_text").val();
  527. var id = selectId;
  528. var type = selectType;
  529. if (type == "node") {
  530. var node = demo.$nodeData[id];
  531. if (node.realtype == "start") {
  532. node.service_name = $($(node_text).find("service")[0]).attr("name");
  533. };
  534. if (node.realtype == "end") {
  535. console.log($(node_text).length);
  536. $(node_text).each(function(index, end) {
  537. if (index == 0) {
  538. node.agree_service_name = $($(end).find("service")[0]).attr("name");
  539. node.agree_message_title = $($(end).find("message")[0]).attr("title");
  540. node.agree_message_content = $($(end).find("message")[0]).attr("content");
  541. } else if (index == 1) {
  542. node.reject_service_name = $($(end).find("service")[0]).attr("name");
  543. node.reject_message_title = $($(end).find("message")[0]).attr("title");
  544. node.reject_message_content = $($(end).find("message")[0]).attr("content");
  545. }
  546. })
  547. };
  548. if (node.realtype == "decision") {
  549. node.key = $("#p_key").val();
  550. };
  551. if (node.realtype == "task") {
  552. var newname = $(node_text).attr("name");
  553. demo.$nodeDom[id].children(".span").text(newname);
  554. demo.$nodeData[id].name = newname;
  555. node.name = $(node_text).attr("name");
  556. node.assignee = $(node_text).attr("assignee");
  557. node.service_name = $($(node_text).find("service")).attr("name");
  558. node.service_dest = $($(node_text).find("service")).attr("dest");
  559. node.message_title = $($(node_text).find("message")).attr("title");
  560. node.message_content = $($(node_text).find("message")).attr("content");
  561. };
  562. }
  563. if (type == "line") {
  564. if (GooFlow.prototype.useSVG != "") {
  565. demo.$lineDom[id].childNodes[2].textContent = newname;
  566. } else {
  567. demo.$lineDom[id].childNodes[1].innerHTML = newname;
  568. }
  569. demo.$lineData[id].name = newname;
  570. }
  571. // $("#control_planel").fadeOut(200).fadeIn(200);
  572. }
  573. function selectAsTask(thisdiv, index) {
  574. var e = window.event;
  575. demo.$nowType = 'task';
  576. $(thisdiv).toggleClass("elementListSelected");
  577. selectTask = taskList[index];
  578. $(".elementListSelected").removeClass("elementListSelected");
  579. $(thisdiv).addClass("elementListSelected")
  580. }
  581. function aNewTask(thisdiv, index) {
  582. var e = window.event;
  583. var selecTask=taskList[index];
  584. var newjson={}
  585. for(var key in selecTask){
  586. newjson[key]=selecTask[key]
  587. }
  588. var aa=getPositioin(demo.$workArea[0]);
  589. newjson.left=parseInt(e.pageX-aa.left);
  590. newjson.top=parseInt(e.pageY-aa.top);
  591. newjson.type="task";
  592. newjson.realtype="task";
  593. // demo.$max++;
  594. // var idd = demo.$id + "_node_" + demo.$max+"";
  595. var idd = composeId("node");
  596. demo.addNode(idd, newjson);
  597. demo.$ghost.empty().hide();
  598. }
  599. function selectAsTransmit(thisdiv, index) {
  600. var e = window.event;
  601. demo.$nowType = 'transmit';
  602. $(thisdiv).toggleClass("elementListSelected");
  603. selectTransmit = transmitList[index];
  604. $(".elementListSelected").removeClass("elementListSelected");
  605. $(thisdiv).addClass("elementListSelected")
  606. }
  607. function aNewTransmit(thisdiv, index) {
  608. var e = window.event;
  609. var selecTransmit=transmitList[index];
  610. var newjson={}
  611. for(var key in selecTransmit){
  612. newjson[key]=selecTransmit[key]
  613. }
  614. var aa=getPositioin(demo.$workArea[0]);
  615. newjson.left=parseInt(e.pageX-aa.left);
  616. newjson.top=parseInt(e.pageY-aa.top);
  617. newjson.type="transmit";
  618. newjson.realtype="transmit";
  619. // demo.$max++;
  620. // var idd = demo.$id + "_node_" + demo.$max+"";
  621. var idd = composeId("node");
  622. demo.addNode(idd, newjson);
  623. demo.$ghost.empty().hide();
  624. }
  625. function selectAsDecision(thisdiv, index) {
  626. var e = window.event;
  627. demo.$nowType = 'node';
  628. $(thisdiv).toggleClass("elementListSelected");
  629. selectDecision = decisionList[index];
  630. $(".elementListSelected").removeClass("elementListSelected");
  631. $(thisdiv).addClass("elementListSelected");
  632. }
  633. function aNewDecision(thisdiv, index) {
  634. if(typeof index=="undefined"){
  635. selectAsDecisionDictionary();
  636. return
  637. }
  638. var e = window.event;
  639. var selectDecision = decisionList[index];
  640. var newjson={}
  641. for(var key in selectDecision){
  642. newjson[key]=selectDecision[key]
  643. }
  644. newjson.condition_name=newjson.condition_name.concat()
  645. var aa=getPositioin(demo.$workArea[0])
  646. newjson.left = e.pageX-aa.left;
  647. newjson.top = e.pageY-aa.top;
  648. newjson.type = "node";
  649. newjson.realtype = "decision";
  650. // console.log(newjson.condition_name)
  651. // demo.$max++
  652. // newjson.id = demo.$id + "_node_" + demo.$max
  653. newjson.id = composeId("node")
  654. demo.addNode(newjson.id, newjson);
  655. // console.log(newjson[id])
  656. initDecisionLine($("#"+newjson.id),newjson.condition_name.length)
  657. }
  658. function selectAsStart(thisdiv, index) {
  659. var e = window.event;
  660. demo.$nowType = 'start';
  661. selectStart = startList[index];
  662. $(".elementListSelected").removeClass("elementListSelected");
  663. $(thisdiv).addClass("elementListSelected")
  664. }
  665. function aNewStart(thisdiv, index) {
  666. var e = window.event;
  667. var selectStart = startList[index];
  668. var newjson={}
  669. for(var key in selectStart){
  670. newjson[key]=selectStart[key]
  671. }
  672. var aa=getPositioin(demo.$workArea[0])
  673. newjson.left = e.pageX-aa.left;
  674. newjson.top = e.pageY-aa.top;
  675. newjson.type = "start";
  676. newjson.realtype = "start";
  677. newjson.name = "开始";
  678. // demo.$max++
  679. // newjson.id = demo.$id + "_node_" + demo.$max
  680. newjson.id=composeId("node")
  681. demo.addNode(newjson.id, newjson);
  682. }
  683. function selectAsEnd(thisdiv, index) {
  684. var e = window.event;
  685. demo.$nowType = 'end';
  686. selectEnd = endList[index];
  687. $(".elementListSelected").removeClass("elementListSelected");
  688. $(".elementListSelected").removeClass("elementListSelected");
  689. $(thisdiv).addClass("elementListSelected");
  690. }
  691. function aNewEnd(thisdiv, index) {
  692. var e = window.event;
  693. var selectEnd = endList[index];
  694. var newjson={}
  695. for(var key in selectEnd){
  696. newjson[key]=selectEnd[key]
  697. }
  698. var aa=getPositioin(demo.$workArea[0])
  699. newjson.left = e.pageX-aa.left;
  700. newjson.top = e.pageY-aa.top;
  701. newjson.type = "end";
  702. newjson.realtype = "end";
  703. newjson.name = "结束";
  704. // demo.$max++
  705. // newjson.id = demo.$id + "_node_" + demo.$max
  706. newjson.id=composeId("node")
  707. demo.addNode(newjson.id, newjson);
  708. }
  709. function selectAsLine(thisdiv) {
  710. var e = window.event;
  711. demo.$nowType = 'direct';
  712. $(".elementListSelected").removeClass("elementListSelected");
  713. $(thisdiv).addClass("elementListSelected");
  714. };
  715. function selectAsMouse(thisdiv) {
  716. var e = window.event;
  717. demo.$nowType = 'mouse';
  718. $(".elementListSelected").removeClass("elementListSelected");
  719. $(thisdiv).addClass("elementListSelected");
  720. };
  721. function selectAsFork(thisdiv) {
  722. demo.$nowType = 'fork'
  723. $(".elementListSelected").removeClass("elementListSelected");
  724. $(thisdiv).addClass("elementListSelected");
  725. };
  726. function aNewFork(thisdiv){
  727. var e = window.event;
  728. var json ={}
  729. var aa=getPositioin(demo.$workArea[0])
  730. json.left = e.pageX-aa.left;
  731. json.top = e.pageY-aa.top;
  732. json.type = "fork";
  733. json.realtype = "fork";
  734. json.name = "并行";
  735. // demo.$max++
  736. // json.id = demo.$id + "_node_" + demo.$max
  737. json.id=composeId("node")
  738. demo.addNode(json.id, json);
  739. }
  740. function selectAsForeach(thisdiv){
  741. demo.$nowType="foreach";
  742. $(".elementListSelected").removeClass("elementListSelected");
  743. $(thisdiv).addClass("elementListSelected");
  744. }
  745. function aNewForeach(thisdiv){
  746. var e = window.event;
  747. var json ={};
  748. var aa=getPositioin(demo.$workArea[0])
  749. json.left = e.pageX-aa.left;
  750. json.top = e.pageY-aa.top;
  751. json.type = "foreach";
  752. json.realtype = "foreach";
  753. json.name = "动态分支";
  754. // demo.$max++
  755. // json.id = demo.$id + "_node_" + demo.$max
  756. json.id=composeId("node")
  757. demo.addNode(json.id, json);
  758. }
  759. function selectAsJoin(thisdiv) {
  760. demo.$nowType = 'join';
  761. $(".elementListSelected").removeClass("elementListSelected");
  762. $(thisdiv).addClass("elementListSelected");
  763. };
  764. function aNewJoin(thisdiv){
  765. var e = window.event;
  766. var json ={};
  767. var aa=getPositioin(demo.$workArea[0])
  768. json.left = e.pageX-aa.left;
  769. json.top = e.pageY-aa.top;
  770. json.type = "join";
  771. json.realtype = "join";
  772. json.name = "汇合";
  773. // demo.$max++
  774. // json.id = demo.$id + "_node_" + demo.$max
  775. json.id=composeId("node")
  776. demo.addNode(json.id, json);
  777. }
  778. function aNewSubrocess(thisdiv,i){
  779. var e = window.event;
  780. var json ={};
  781. var subprocess=subprocessList[i]
  782. for(var key in subprocess){
  783. if(subprocess[key]){
  784. json[key]=subprocess[key];
  785. }
  786. }
  787. var aa=getPositioin(demo.$workArea[0])
  788. json.left = e.pageX-aa.left;
  789. json.top = e.pageY-aa.top;
  790. json.type = "subprocess";
  791. json.realtype = "subprocess";
  792. // json.name = subprocess.name;
  793. // json.subprocesskey=subprocess.subprocesskey;
  794. // if(subprocess.subprocesstype){
  795. // json.subprocesstype=subprocess.subprocesstype
  796. // }
  797. // demo.$max++
  798. // json.id = demo.$id + "_node_" + demo.$max
  799. json.id=composeId("node")
  800. demo.addNode(json.id, json);
  801. }
  802. function selectAsSubprocess(thisdiv,i){
  803. demo.$nowType = 'subprocess';
  804. $(".elementListSelected").removeClass("elementListSelected");
  805. selectSubprocess=subprocessList[i]
  806. $(thisdiv).addClass("elementListSelected");
  807. }
  808. function selectAsDecisionDictionary() {
  809. /* 再改,去掉 thisAppName。Lin
  810. var decisionURL = $("#decisionDictionaryURL")[0].value + "&isNew=1" + '&thisAppName=' + document.getElementById("thisAppName").value;
  811. */ var decisionURL = $("#decisionDictionaryURL")[0].value + "&isNew=1";
  812. // var pp=wd.topWindow.dhxWins.createWindow('wsd',300,300,300,300)
  813. // wd.display.showComponent({show:["wdDialog"],hide:[],url:"",dest:"bgmb_zj",title:"增加",width:300,high:200,wdDialogId:44012802,form:""})
  814. wd.display.showComponent({
  815. show: ["wdDialog"],
  816. hide: [],
  817. url: decisionURL,
  818. title: "字典",
  819. width: 500,
  820. high: 300,
  821. wdDialogId: 223555,
  822. form: ""
  823. })
  824. }
  825. //双击设置
  826. function settingIt(it) {
  827. var id = selectId;
  828. var node = demo.$nodeData[id]
  829. control.show(node)
  830. control.close=false;
  831. return;
  832. if (node.realtype == "task") {
  833. /* 再改,去掉 thisAppName。Lin
  834. var scopeURL = $("#scopeDictionaryURL")[0].value + '&thisAppName=' + document.getElementById("thisAppName").value;
  835. */ var scopeURL = $("#scopeDictionaryURL")[0].value;
  836. wd.display.showComponent({
  837. show: ["wdDialog"],
  838. hide: [],
  839. url: scopeURL,
  840. title: "字典",
  841. width: 500,
  842. high: 300,
  843. wdDialogId: 223555,
  844. form: ""
  845. })
  846. }
  847. if (node.realtype == "decision") {
  848. /* 再改,去掉 thisAppName。Lin
  849. var decisionURL = $("#decisionDictionaryURL")[0].value + "&isNew=0" + '&thisAppName=' + document.getElementById("thisAppName").value;
  850. */ var decisionURL = $("#decisionDictionaryURL")[0].value + "&isNew=0";
  851. wd.display.showComponent({
  852. show: ["wdDialog"],
  853. hide: [],
  854. url: decisionURL,
  855. title: "字典",
  856. width: 500,
  857. high: 300,
  858. wdDialogId: 223555,
  859. form: ""
  860. })
  861. }
  862. }
  863. //头部信息确定按钮
  864. function head_confirm(thisdiv) {
  865. // var allnode = demo.exportData()["nodes"];
  866. // for (var key in allnode) {
  867. // for(var key2 in HEADTEXT){
  868. // allnode[key][key2]=HEADTEXT[key2]
  869. // }
  870. // }
  871. }
  872. //复制对象
  873. function clone(myObj) {
  874. if (typeof(myObj) != 'object') return myObj;
  875. if (myObj == null) return myObj;
  876. var myNewObj = new Object();
  877. for (var i in myObj)
  878. myNewObj[i] = clone(myObj[i]);
  879. return myNewObj;
  880. }
  881. ///////////////////////////////////////////////////////////////
  882. //decision分支线
  883. var decisionLineData={}
  884. function removeDecisionLine(id){
  885. var thisLines=decisionLineData[id];
  886. // console.log(decisionLineData[id])
  887. if(!thisLines){return}
  888. for(var i=0;i<thisLines.length;i++){
  889. $(thisLines[i]).remove()
  890. }
  891. // console.log(thisLines)
  892. // delete thisLines
  893. }
  894. function moveDececisionLine($re){
  895. var e = window.event;
  896. var Xi = 0,Yi = 0;
  897. var tempX, tempY;
  898. // tempX = parseInt($re.css("left")) + parseInt($re.css("width")) / 2;
  899. // tempY = parseInt($re.css("top")) + parseInt($re.css("height")) / 2;
  900. //
  901. tempX=parseInt(findPosX(demo.$ghost[0])) + parseInt(demo.$ghost.css("width")) / 2;
  902. tempY=parseInt(findPosY(demo.$ghost[0])) + parseInt(demo.$ghost.css("height")) / 2;
  903. var startX, startY, temp;
  904. startX = parseInt(findPosX($re[0])) + parseInt($re.css("width")) / 2;
  905. startY =parseInt(findPosY($re[0])) + parseInt($re.css("height")) / 2;
  906. Xi = tempX - startX;
  907. Yi = tempY - startY;
  908. // console.log("ghost"+tempX+" "+tempY)
  909. // console.log("$re"+startX+" "+startY)
  910. // console.log(Xi+" "+Yi)
  911. var lines = decisionLineData[$re[0].id];
  912. if(typeof lines=="undefined"){
  913. initDecisionLine($re);
  914. lines=decisionLineData[$re[0].id];
  915. }
  916. for (var i = 0; i < lines.length; i++) {
  917. var g = lines[i];
  918. var a, b, c;
  919. a = g.childNodes[0];
  920. b = g.childNodes[1];
  921. c = g.childNodes[2];
  922. temp = a.getAttribute("d").split(" ");
  923. a.setAttribute("d", temp[0] + " " + (parseInt(temp[1])+Xi) + " " + (parseInt(temp[2])+Yi) + " " + temp[3] + " " + (parseInt(temp[4]) + Xi) + " " + (parseInt(temp[5]) + Yi));
  924. temp = b.getAttribute("d").split(" ");
  925. b.setAttribute("d", temp[0] + " " + (parseInt(temp[1])+Xi) + " " + (parseInt(temp[2])+Yi) + " " + temp[3] + " " + (parseInt(temp[4]) + Xi) + " " + (parseInt(temp[5]) + Yi));
  926. c.setAttribute("x", (parseInt(temp[4]) + Xi + parseInt(temp[1])+Xi) / 2);
  927. c.setAttribute("y", (parseInt(temp[5]) + Yi + parseInt(temp[2])+Yi) / 2);
  928. }
  929. tempX = startX;
  930. tempY = startY;
  931. }
  932. //初始化(指定容器relative,线总数number)
  933. function initDecisionLine($re) {
  934. removeDecisionLine($re[0].id)
  935. // console.log(decisionLineData)
  936. var startpoint, endpoint;
  937. var lines = new Array()
  938. var Xi = 0,Yi = 0;
  939. var tempX, tempY;
  940. tempX = parseInt($re.css("left")) + parseInt($re.css("width")) / 2;
  941. tempY = parseInt($re.css("top")) + parseInt($re.css("height")) / 2;
  942. var thisNode=demo.$nodeData[$re[0].id]
  943. var conditions=thisNode.condition_name;
  944. if(!conditions)conditions=[];
  945. var num=conditions.length
  946. //// 删除线
  947. // if ($(".decisionLine").length > 0) {
  948. // $(".decisionLine").remove();
  949. // }
  950. for (var i = 0; i < num; i++) {
  951. // 计算线开始点、结束点
  952. startpoint = [parseInt($re.css("left")) + parseInt($re.css("width")) / 2,parseInt($re.css("top")) + parseInt($re.css("height")) / 2];
  953. endpoint=(function(i){return [
  954. startpoint[0] + 100 *(Math.sin(Math.PI*(0.666 / num * i+1.333))),
  955. startpoint[1] + 100 *(Math.cos(Math.PI*(0.666 / num * i+1.333)))]
  956. }(i))
  957. var line = drawDecisionLine($re[0].id + "Line" + i, startpoint, endpoint, false, false, conditions[i]);
  958. lines.push(line);
  959. // 线移动程序
  960. line.onmousedown = function(e){
  961. if (!e) e = window.event;
  962. var lastmouseX, lastmouseY;
  963. // 鼠标最开始位置
  964. lastmouseX = e.pageX;
  965. lastmouseY = e.pageY;
  966. //当前line传给mousemove使用
  967. var thisline = this;
  968. document.onmousemove = function(e) {
  969. if (!e) e = window.event;
  970. var endX, endY, startX, startY, top, left;
  971. // 当前鼠标位置
  972. endX = e.pageX + $(".GooFlow_work")[0].scrollLeft;
  973. endY = e.pageY + $(".GooFlow_work")[0].scrollTop;
  974. // ["M", "250", "250", "L", "415.3018194483593", "609.8219781415537"]
  975. var temp = thisline.childNodes[0].getAttribute("d").split(" ");
  976. startX = parseInt(temp[1]);
  977. startY = parseInt(temp[2]);
  978. //设置位置
  979. thisline.childNodes[0].setAttribute("d", "M " + startX + " " + startY + " L " + (endX - 63) + " " + (endY));
  980. thisline.childNodes[1].setAttribute("d", "M " + startX + " " + startY + " L " + (endX - 63) + " " + (endY));
  981. //文子
  982. thisline.childNodes[2].setAttribute("x", (endX - 55 + startX) / (2));
  983. thisline.childNodes[2].setAttribute("y", (endY + startY) / (2));
  984. //更新鼠标最开始位置
  985. lastmouseX = endX;
  986. lastmouseY = endY;
  987. demo.$workArea.delegate(".GooFlow_item", "mouseenter", {
  988. inthis: this
  989. }, function(e) {
  990. $(this).addClass("item_mark");
  991. });
  992. demo.$workArea.delegate(".GooFlow_item", "mouseleave", {
  993. inthis: this
  994. }, function(e) {
  995. $(this).removeClass("item_mark");
  996. });
  997. return false;
  998. }
  999. document.onmouseup = function(e) {
  1000. document.onmousemove = null;
  1001. // console.log(document.onmousemove);
  1002. var fromId, toId;
  1003. fromId = $re[0].id;
  1004. // console.log(typeof($(".item_mark")[0])!="undefined");
  1005. if ((typeof($(".item_mark")[0])) != "undefined") {
  1006. toId = $(".item_mark")[0].id
  1007. }
  1008. if (toId != null) {
  1009. //添加线
  1010. // var lineId = demo.$id + "_line_" + demo.$max;
  1011. var lineId = composeId("line")
  1012. var newCondition = thisline.childNodes[2].innerHTML
  1013. var lines = demo.exportData()["lines"];
  1014. var fromNode = demo.exportData()["nodes"][fromId];
  1015. var aa = function(){
  1016. var aa = fromNode.condition_name;
  1017. for (var i = 0; i < aa.length; i++) {
  1018. if (aa[i] == newCondition) {
  1019. return i;
  1020. }
  1021. }
  1022. return null;
  1023. }();
  1024. if (aa != null) {
  1025. fromNode.condition_name.splice(aa, 1)
  1026. }
  1027. var isExist = false;
  1028. for (var key in lines) {
  1029. if (lines[key].from == fromId && lines[key].to == toId) {
  1030. var existName = lines[key].name
  1031. newCondition = newCondition + "," + existName
  1032. isExist = true;
  1033. lineId = lines[key].id;
  1034. break;
  1035. }
  1036. }
  1037. if (isExist == false) {
  1038. demo.addLine(lineId, {
  1039. from: fromId,
  1040. to: toId,
  1041. name: newCondition,
  1042. realtype: "decision"
  1043. });
  1044. } else {
  1045. demo.setName(lineId, newCondition, "line")
  1046. }
  1047. // demo.$max++;
  1048. //删除这条分支线
  1049. $(thisline).remove();
  1050. }
  1051. demo.$workArea.undelegate(".GooFlow_item", "mouseenter").undelegate(".GooFlow_item", "mouseleave",
  1052. function() {
  1053. $(".item_mark").remove();
  1054. })
  1055. }
  1056. }
  1057. //
  1058. // 线移动结束
  1059. //提示这条线可以移动
  1060. $(line).css("cursor", "move");
  1061. $("#draw_demo")[0].appendChild(line);
  1062. };
  1063. decisionLineData[$re[0].id]=lines
  1064. }
  1065. ///////////////////////////////////////////////////////////////////////////////////////////////
  1066. //画箭头
  1067. function drawDecisionLine(id, sp, ep, mark, dash, conditionText) {
  1068. var line;
  1069. if (true) {
  1070. line = document.createElementNS("http://www.w3.org/2000/svg", "g");
  1071. var hi = document.createElementNS("http://www.w3.org/2000/svg", "path");
  1072. var path = document.createElementNS("http://www.w3.org/2000/svg", "path");
  1073. if (id != "") line.setAttribute("id", id);
  1074. line.setAttribute("from", sp[0] + "," + sp[1]);
  1075. line.setAttribute("to", ep[0] + "," + ep[1]);
  1076. hi.setAttribute("visibility", "hidden");
  1077. hi.setAttribute("stroke-width", 9);
  1078. hi.setAttribute("fill", "none");
  1079. hi.setAttribute("stroke", "white");
  1080. hi.setAttribute("d", "M " + sp[0] + " " + sp[1] + " L " + ep[0] + " " + ep[1]);
  1081. hi.setAttribute("pointer-events", "stroke");
  1082. path.setAttribute("d", "M " + sp[0] + " " + sp[1] + " L " + ep[0] + " " + ep[1]);
  1083. path.setAttribute("stroke-width", 1.4);
  1084. path.setAttribute("stroke-linecap", "round");
  1085. path.setAttribute("fill", "none");
  1086. if (dash) path.setAttribute("style", "stroke-dasharray:6,5");
  1087. if (mark) {
  1088. path.setAttribute("stroke", "#ff3300");
  1089. path.setAttribute("marker-end", "url(#arrow2)");
  1090. } else {
  1091. // path.setAttribute("stroke","#5068AE");
  1092. path.setAttribute("stroke", "black");
  1093. path.setAttribute("marker-end", "url(#arrow1)");
  1094. }
  1095. line.appendChild(hi);
  1096. line.appendChild(path);
  1097. line.setAttribute("class", "decisionLine")
  1098. line.style.cursor = "crosshair";
  1099. if (id != "" && id != "GooFlow_tmp_line") {
  1100. var text = document.createElementNS("http://www.w3.org/2000/svg", "text");
  1101. line.appendChild(text);
  1102. var x = (ep[0] + sp[0]) / 2;
  1103. var y = (ep[1] + sp[1]) / 2;
  1104. text.setAttribute("text-anchor", "middle");
  1105. text.setAttribute("x", x);
  1106. text.setAttribute("y", y);
  1107. line.style.cursor = "pointer";
  1108. text.style.cursor = "text";
  1109. text.innerHTML = conditionText
  1110. }
  1111. } else {
  1112. line = document.createElement("v:polyline");
  1113. if (id != "") line.id = id;
  1114. //line.style.position="absolute";
  1115. line.points.value = sp[0] + "," + sp[1] + " " + ep[0] + "," + ep[1];
  1116. line.setAttribute("fromTo", sp[0] + "," + sp[1] + "," + ep[0] + "," + ep[1]);
  1117. line.strokeWeight = "1.2";
  1118. line.stroke.EndArrow = "Block";
  1119. line.style.cursor = "crosshair";
  1120. if (id != "" && id != "GooFlow_tmp_line") {
  1121. var text = document.createElement("div");
  1122. //text.innerHTML=id;
  1123. line.appendChild(text);
  1124. var x = (ep[0] - sp[0]) / 2;
  1125. var y = (ep[1] - sp[1]) / 2;
  1126. if (x < 0) x = x * -1;
  1127. if (y < 0) y = y * -1;
  1128. text.style.left = x + "px";
  1129. text.style.top = y - 6 + "px";
  1130. line.style.cursor = "pointer";
  1131. }
  1132. if (dash) line.stroke.dashstyle = "Dash";
  1133. if (mark) line.strokeColor = "#ff3300";
  1134. else line.strokeColor = "#5068AE";
  1135. }
  1136. return line;
  1137. }
  1138. ///////////////////////////////////////////////////////////////////
  1139. //工具程序
  1140. function findPosX(obj) {
  1141. var curleft = 0;
  1142. if (obj && obj.offsetParent) {
  1143. while (obj.offsetParent) {
  1144. curleft += obj.offsetLeft;
  1145. obj = obj.offsetParent;
  1146. }
  1147. } else if (obj && obj.x) curleft += obj.x;
  1148. return curleft;
  1149. }
  1150. function findPosY(obj) {
  1151. var curtop = 0;
  1152. if (obj && obj.offsetParent) {
  1153. while (obj.offsetParent) {
  1154. curtop += obj.offsetTop;
  1155. obj = obj.offsetParent;
  1156. }
  1157. } else if (obj && obj.y) curtop += obj.y;
  1158. return curtop;
  1159. }
  1160. //从URL获取参数
  1161. function getURLParam(name) {
  1162. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
  1163. var r = window.location.search.substr(1).match(reg);
  1164. // console.log(r)
  1165. if (r != null) return unescape(r[2]);
  1166. return null;
  1167. }
  1168. function getPositioin(ele) {
  1169. function findX(obj) {
  1170. var curleft = 0;
  1171. if (obj && obj.offsetParent) {
  1172. while (obj.offsetParent) {
  1173. curleft += obj.offsetLeft-parseInt(obj.style.marginLeft?obj.style.marginLeft:"0");
  1174. obj = obj.offsetParent;
  1175. }
  1176. } else if (obj && obj.x) curleft += obj.x;
  1177. return curleft;
  1178. }
  1179. function findY(obj) {
  1180. var curtop = 0;
  1181. if (obj && obj.offsetParent) {
  1182. while (obj.offsetParent) {
  1183. curtop += obj.offsetTop-parseInt(obj.style.marginTop?obj.style.marginTop:"0");
  1184. obj = obj.offsetParent;
  1185. }
  1186. } else if (obj && obj.y) curtop += obj.y;
  1187. return curtop;
  1188. }
  1189. var left =0-ele.parentNode.scrollLeft,top = 0-ele.parentNode.scrollTop;
  1190. var win = self
  1191. do {
  1192. left = findX(ele) + left-win.document.body.scrollLeft
  1193. top = findY(ele) + top-win.document.body.scrollTop
  1194. win = win.parent;
  1195. ele = win.document.getElementsByTagName("iframe")[0];
  1196. if (window.top == win) {
  1197. left = findX(ele) + left
  1198. top = findY(ele) + top
  1199. }
  1200. } while (function() {
  1201. return window.top != win;
  1202. }())
  1203. return {
  1204. left: left,
  1205. top: (top)
  1206. }
  1207. }
  1208. function checkStartEnd(json){
  1209. var allnodes=json.nodes;
  1210. var hasStartNodes=false;
  1211. var hasEndNode=false;
  1212. //查找是否存在start ,end
  1213. for(var key in allnodes){
  1214. console.log(allnodes[key])
  1215. if(allnodes[key].realtype=="start"){
  1216. hasStartNodes=true;
  1217. }
  1218. if(allnodes[key].realtype=="end"){
  1219. hasEndNode=true;
  1220. }
  1221. }
  1222. if(!hasStartNodes){
  1223. aNewNode("start");
  1224. }
  1225. if(!hasEndNode){
  1226. aNewNode("end")
  1227. }
  1228. }
  1229. function aNewNode(type){
  1230. if(type=="start"){
  1231. var selectStart = startList[0];
  1232. startList
  1233. var newjson={}
  1234. for(var key in selectStart){
  1235. newjson[key]=selectStart[key]
  1236. }
  1237. newjson.left = 200
  1238. newjson.top = 100
  1239. newjson.type = "start";
  1240. newjson.realtype = "start";
  1241. newjson.name = "开始";
  1242. newjson.id=composeId("node")
  1243. demo.addNode(newjson.id, newjson);
  1244. }
  1245. if(type=="end"){
  1246. var selectEnd = endList[0];
  1247. var newjson={}
  1248. for(var key in selectEnd){
  1249. newjson[key]=selectEnd[key]
  1250. }
  1251. newjson.left = 100
  1252. newjson.top = 200
  1253. newjson.type = "end";
  1254. newjson.realtype = "end";
  1255. newjson.name = "结束";
  1256. newjson.finishService="[{\"name\":\"agreeToUse\",\"desc\":\"完成后启用\",\"type\":\"agree\"}]";
  1257. newjson.id = composeId("node")
  1258. demo.addNode(newjson.id, newjson);
  1259. }
  1260. }
  1261. function jpdlFilter(filter){
  1262. var datas = $("#jsonData").html();
  1263. if(datas==""){return false}
  1264. var json=eval("("+datas+")");
  1265. //搜索属性
  1266. var objectKey;
  1267. if(json.objectKey==null){return false}
  1268. for(var i=0;i<json.objectKey.length;i++){
  1269. if(json.objectKey[i].version==version){
  1270. objectKey=json.objectKey[i];
  1271. }
  1272. }
  1273. //没有filter属性
  1274. if(version=="" && !typeof filter=="undefined" ){return true}//隐藏
  1275. if(typeof filter=="undefined" ){return false;}//显示
  1276. if(filter==""){return true;}//隐藏
  1277. if(version==""){return true}//显示
  1278. var taskfilter=eval("({"+filter+"})");
  1279. console.log(taskfilter);
  1280. console.log(objectKey)
  1281. for(var key in taskfilter){
  1282. var filtertype=typeof taskfilter[key];
  1283. console.log(filtertype)
  1284. var dataValue=[];
  1285. var needIt=false;//值相等
  1286. var inIt=false;//有这个参数
  1287. if(filtertype=="number"||filtertype=="string"){
  1288. dataValue.push(taskfilter[key])
  1289. }else if(filtertype=="object"){
  1290. for(var key2 in taskfilter[key]){
  1291. dataValue.push(taskfilter[key][key2])
  1292. }
  1293. }else{
  1294. alert("未知的数据类型");
  1295. }
  1296. console.log(dataValue)
  1297. if(dataValue.length==1){
  1298. if(dataValue[0]==key){
  1299. return false
  1300. }
  1301. }
  1302. for(var i=0;i<objectKey.codebooks.length;i++){
  1303. var codebooks=objectKey.codebooks[i]
  1304. console.log(codebooks)
  1305. for(var j=0;j<codebooks.length;j++){
  1306. var codebook=codebooks[j]
  1307. if(codebook.name==key){
  1308. inIt=true;
  1309. for(var k=0;k<dataValue.length;k++){
  1310. if(dataValue[k]==codebook.value){
  1311. needIt=true;//找到值
  1312. }
  1313. }
  1314. }
  1315. }
  1316. }
  1317. if(!inIt){return true;}
  1318. if(!needIt){return true}
  1319. }
  1320. return false;//显示
  1321. }
  1322. function compareNodeData(componentData,allNodes,type){
  1323. var result=[];
  1324. if(allNodes){
  1325. for(var key in allNodes){
  1326. var node=allNodes[key];
  1327. if(node.realtype!=type)continue;
  1328. if(type=="end"
  1329. ||type=="start" ||
  1330. (type=="task"&&node.service_name==componentData.service_name)){
  1331. // &&node.service_dest==componentData.service_dest
  1332. var dd={}
  1333. var ddcount=0;
  1334. for(var key2 in componentData){
  1335. if(componentData[key2]&&node[key2]!=componentData[key2]){
  1336. if(type=="task"){
  1337. //assignee:"@env.所在部门@"message_content:"请审核播放设备"message_title:"播放设备发布审核"name:"部门审"
  1338. if(key2!="taskChain"&&key2!="name"&&key2!="assignee"&&key2!="message_content"&&key2!="message_title"&&key2!="messagereceipt"&&key2!="usesubprocess"){
  1339. dd[key2]=componentData[key2];
  1340. ddcount++;
  1341. }
  1342. }else{
  1343. if(key2!="name"&&key2!="agree_message_content"&&key2!="agree_message_title"&&key2!="reject_message_content"&&key2!="reject_message_title" ){
  1344. dd[key2]=componentData[key2];
  1345. ddcount++;
  1346. }
  1347. }
  1348. }
  1349. }
  1350. if(ddcount>0){
  1351. dd.id=node.id;
  1352. result.push(dd);
  1353. }
  1354. }
  1355. }
  1356. }
  1357. if(result.length>0)return result;
  1358. }