view.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642
  1. var property={
  2. width:3000,
  3. height:3000,
  4. toolBtns:["task","node"],
  5. haveHead:false,
  6. headBtns:["new","save"],//如果haveHead=true,则定义HEAD区的按钮
  7. haveTool:false,//是否可编辑??????????????????????????????????
  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. //bpmComponent解析后的数据容器
  24. var startList=new Array();
  25. var endList=new Array();
  26. var taskList=new Array();
  27. var decisionList=new Array();
  28. //选中的start,end,task,decision的容器
  29. var selectTask=null;
  30. var selectStart=null;
  31. var selectEnd=null;
  32. var selectDecision=null;
  33. var haveDrag=false;
  34. $(document).ready(function(){
  35. property.initLabelText= $("#fileName").val();
  36. // 初始化
  37. demo=$.createGooFlow($("#demo"),property);
  38. var version=document.getElementById("version").value;
  39. //加载数据
  40. var datas=$("#jsonData").html();
  41. if(datas!=''){
  42. var json=eval('('+datas+')');
  43. var bpmdata;
  44. if(version!=""){
  45. var haveFind=false;
  46. for(var i=0;i<json.objectKey.length;i++){
  47. if(json.objectKey[i].version==version){
  48. // demo.loadData(json.objectKey[i])
  49. bpmdata=json.objectKey[i];
  50. haveFind=true;
  51. break;
  52. }
  53. }
  54. if(!haveFind){
  55. alert("找不到json版本: "+version)
  56. }
  57. }else{
  58. // demo.loadData(json);
  59. bpmdata=json;
  60. }
  61. if(bpmdata){
  62. //console.log(bpmdata);
  63. var allNode={};
  64. for(var key in bpmdata.lines){
  65. var thisline=bpmdata.lines[key];
  66. allNode[thisline.from]=1;
  67. allNode[thisline.to]=1;
  68. }
  69. for(var key in bpmdata.nodes){
  70. var node=bpmdata.nodes[key]
  71. if(!allNode[node.id]){
  72. delete bpmdata.nodes[node.id];
  73. }
  74. }
  75. demo.loadData(bpmdata);
  76. }
  77. }
  78. // 解析已走流程数据
  79. var shList=eval("("+$("#shListData").html()+")")
  80. //console.log(shList);
  81. var jdList=[];
  82. //标记节点,生成线数据
  83. for (var i=0;i<shList.length;i++) {
  84. var jdid=shList[i].jdid;
  85. // $("#"+jdid).css("border-color","red");
  86. focusNode(jdid);
  87. jdList.push(jdid);
  88. }
  89. // 记录jdList.length
  90. var jdList_length=jdList.length;
  91. // 添加开始结束的ID
  92. var trans=new translate();
  93. trans.obj=demo.exportData();
  94. var startNode,endNodes;
  95. //// 放入开始节点
  96. // startNode=translate.getStartNode();
  97. // if(startNode!=null){
  98. // jdList.push(startNode.id)
  99. // }
  100. //// 放入结束节点
  101. // endNodes=translate.getEndNode();
  102. // //只有两个节点,审核节点数据有数据加入
  103. // if(translate.getNodeSize()==2||jdList_length!=0){
  104. // for(var i=0;i<endNodes.length;i++){
  105. // jdList.push(endNodes[i].id)
  106. // };
  107. // }
  108. //
  109. //
  110. //
  111. // jdList_length=null;
  112. //// 标记连线
  113. // for(var i=0;i<jdList.length;i++){
  114. // var fromid=jdList[i];
  115. // for(var j=0;j<jdList.length;j++){
  116. // var toid=jdList[j];
  117. // var line= translate.getLine(fromid,toid)
  118. // if(line!=null){
  119. // demo.focusItem(line.id)
  120. // }
  121. // }
  122. // }
  123. startNode=trans.getStartNode();
  124. endNodes=trans.getEndNode();
  125. var alllines=trans.getNoRepeatNameObj()["lines"];
  126. var allnodes=trans.getNoRepeatNameObj()["nodes"];
  127. //补充连线
  128. function findNextLines(node){
  129. var result=new Array();
  130. for(var key in alllines){
  131. if(alllines[key].from==node.id){
  132. result.push(alllines[key])
  133. }
  134. }
  135. return result;
  136. }
  137. function inShList(node){
  138. // console.log(node.id)
  139. for(var i=0;i<shList.length;i++){
  140. if(shList[i].jdid==node.id){
  141. return true;
  142. }
  143. }
  144. return false;
  145. }
  146. function isAgreeTask(node){
  147. for(var i=0;i<shList.length;i++){
  148. if(shList[i].jdid==node.id){
  149. if(shList[i].shyjm=="55"){
  150. return false;//不同意
  151. }else{
  152. return true;//同意,越过
  153. }
  154. }
  155. }
  156. //console.log("probem")
  157. return null;
  158. }
  159. function hasTask(node,type){
  160. var typeValue;
  161. // 1 审核中
  162. // 51 同意
  163. // 53 越过
  164. // 55 退回
  165. // 57 手动收回
  166. // 58 逾期收回
  167. if(type=="agree"){
  168. typeValue=51
  169. }else if(type=="reject"){
  170. typeValue=55
  171. }else if(type=="pending"){
  172. typeValue=1
  173. }else if(type=="over"){
  174. typeValue=53
  175. }else if(type=="manualreject"){
  176. typeValue=57
  177. }else if(type=="timeoutreject"){
  178. typeValue=58
  179. }
  180. for(var i=0;i<shList.length;i++){
  181. if(shList[i].jdid==node.id){
  182. if(shList[i].shyjm==typeValue){
  183. return true;//存在
  184. }else{
  185. // return false;
  186. }
  187. }
  188. }
  189. // console.log("probem")
  190. return false;
  191. }
  192. function isAllFromShList(node){
  193. var fromLines=new Array();
  194. for(var key in alllines){
  195. if(alllines[key].to==node.id){
  196. fromLines.push(alllines[key])
  197. }
  198. }
  199. for(var i=0;i<fromLines.length;i++){
  200. var inIt=false;
  201. for(var j=0;j<shList.length;j++){
  202. if(fromLines[i].to==shList[j].jdid){
  203. inIt=true;
  204. }
  205. }
  206. if(inIt==false){
  207. return false
  208. }
  209. }
  210. return true;
  211. }
  212. var z=0;
  213. function moreDue(node){
  214. z++;
  215. if(z>500){return}
  216. var thisNode=arguments[0];
  217. if(typeof thisNode=="string"){
  218. thisNode=allnodes[node];
  219. }
  220. // console.log(thisNode.id)
  221. var nodeType=thisNode.realtype;
  222. var lines=findNextLines(thisNode);
  223. //console.log(nodeType)
  224. if(thisNode.realtype=="start"){
  225. for(var i=0; i<lines.length;i++){
  226. demo.focusItem(lines[i].id,false,true);
  227. moreDue(lines[i].to);
  228. }
  229. }
  230. if(nodeType=="task"){
  231. //console.log(lines)
  232. if(inShList(thisNode)){
  233. if(hasTask(thisNode,"agree")){//同意
  234. for(var i=0; i<lines.length;i++){
  235. if(lines[i].status=="agree"){
  236. // if(allnodes[lines[i].to].realtype!="end"){
  237. demo.focusItem(lines[i].id,false,true)
  238. moreDue(lines[i].to)
  239. // }
  240. }
  241. }
  242. }
  243. if(hasTask(thisNode,"over")){//越过
  244. for(var i=0; i<lines.length;i++){
  245. if(lines[i].status=="agree"){
  246. demo.focusItem(lines[i].id,false,true)
  247. moreDue(lines[i].to)
  248. }
  249. }
  250. }
  251. if(hasTask(thisNode,"reject")){//退回
  252. for(var i=0; i<lines.length;i++){
  253. if(lines[i].status=="reject"){
  254. demo.focusItem(lines[i].id,false,true)
  255. moreDue(lines[i].to)
  256. }
  257. }
  258. }
  259. if(hasTask(thisNode,"manualreject")){//手动退回
  260. for(var i=0; i<lines.length;i++){
  261. if(lines[i].status=="reject"){
  262. demo.focusItem(lines[i].id,false,true)
  263. moreDue(lines[i].to)
  264. }
  265. }
  266. }
  267. if(hasTask(thisNode,"timeoutreject")){//定时退回
  268. for(var i=0; i<lines.length;i++){
  269. if(lines[i].status=="reject"){
  270. demo.focusItem(lines[i].id,false,true)
  271. moreDue(lines[i].to)
  272. }
  273. }
  274. }
  275. if(hasTask(thisNode,"pending")){//审核中
  276. for(var i=0; i<lines.length;i++){
  277. // if(lines[i].status=="reject"){
  278. if(allnodes[lines[i].to].realtype!="end"){
  279. // demo.focusItem(lines[i].id)
  280. lines[i].deal=true;
  281. moreDue(lines[i].to)
  282. }
  283. // }
  284. }
  285. }
  286. for(var i=0; i<lines.length;i++){
  287. if(allnodes[lines[i].to].realtype!="task"&&allnodes[lines[i].to].realtype!="join"&&allnodes[lines[i].to].realtype!="end"&&lines[i].deal!=true){
  288. demo.focusItem(lines[i].id,false,true)
  289. lines[i].deal=true;
  290. moreDue(lines[i].to)
  291. }
  292. }
  293. }
  294. }
  295. if(nodeType=="subprocess"){
  296. focusNode(thisNode.id);
  297. for(var i=0; i<lines.length;i++){
  298. if(inShList({id:lines[i].to}) ){
  299. demo.focusItem(lines[i].id,false,true)
  300. moreDue(lines[i].to)
  301. }
  302. }
  303. }
  304. if(nodeType=="transmit"){
  305. focusNode(thisNode.id);
  306. for(var i=0; i<lines.length;i++){
  307. if(inShList({id:lines[i].to}) ){
  308. demo.focusItem(lines[i].id,false,true)
  309. moreDue(lines[i].to)
  310. }
  311. }
  312. }
  313. if(nodeType=="fork"||nodeType=="foreach"){
  314. for(var i=0;i<lines.length;i++){
  315. demo.focusItem(lines[i].id,false,true);
  316. moreDue(lines[i].to);
  317. }
  318. for(var i=0; i<lines.length;i++){
  319. if(allnodes[lines[i].to].realtype!="task"&&allnodes[lines[i].to].realtype!="end"&&lines[i].deal!=true){
  320. demo.focusItem(lines[i].id,false,true)
  321. // lines[i].deal=true;
  322. // moreDue(lines[i].to)
  323. }
  324. }
  325. }
  326. if(nodeType=="decision"){
  327. focusNode(thisNode.id);
  328. for(var i=0; i<lines.length;i++){
  329. if(inShList({id:lines[i].to}) ){
  330. demo.focusItem(lines[i].id,false,true)
  331. moreDue(lines[i].to)
  332. }
  333. }
  334. for(var i=0; i<lines.length;i++){
  335. if(allnodes[lines[i].to].realtype=="foreach"&&allnodes[lines[i].to].realtype!="end"&&lines[i].deal!=true){
  336. demo.focusItem(lines[i].id,false,true)
  337. lines[i].deal=true;
  338. moreDue(lines[i].to)
  339. }
  340. }
  341. }
  342. if(nodeType=="join"){
  343. if(isAllFromShList(thisNode)){
  344. for(var i=0;i<lines.length;i++){
  345. demo.focusItem(lines[i].id,false,true);
  346. moreDue(lines[i].to);
  347. }
  348. }
  349. }
  350. if(nodeType=="end"){
  351. }
  352. }
  353. moreDue(startNode);
  354. var floatDiv='<div id="floatDiv" style="position:absolute;border:1px black solid;display:block;width:800px;background-color:white;"></div>';
  355. $(document.body).append(floatDiv);
  356. $("#floatDiv").hide()
  357. $("#demo").delegate(".GooFlow_item","mouseenter",function(){
  358. var e=window.event;
  359. $("#floatDiv").show()
  360. var thisId=this.id;
  361. var haveSelect=false;
  362. var generalHTML=generalDiv(thisId);
  363. if(generalHTML==""){
  364. $("#floatDiv").hide();
  365. return
  366. }
  367. $("#floatDiv").html(generalHTML);
  368. function generalDiv(id){
  369. // if(allnodes[id].readtype=="task"||allnodes[id].readtype=="transmit"){
  370. //
  371. // }else{
  372. // return ""
  373. // }
  374. var result=""
  375. if(allnodes[id].assignee){
  376. result="<h4>办理人:"
  377. +allnodes[id].assignee.replace(/@env./,"").replace(/@/,"")
  378. +((allnodes[id].taskChain&&allnodes[id].taskChain==1)?"(部门内审核)":"")
  379. +"</h4>";
  380. }
  381. //console.log(shList)
  382. for(var i=0;i<shList.length;i++){
  383. if(shList[i].jdid==id){
  384. //申请人转换
  385. if(shList[i].translate){
  386. // continue;
  387. result+=""
  388. +"<div class='aa' style='float:left'>"
  389. +"<table>"
  390. +"<tr><th>转换时间:</th><td>"+shList[i].shsj
  391. +"</td><tr>"
  392. +"<tr><th>转换人员:</th><td>"+shList[i].shryid
  393. +(shList[i].shbm?("("+shList[i].shbm+")"):"")
  394. +"</td><tr>"
  395. +"</table>"
  396. +"</div>"
  397. }else{
  398. result+=""
  399. +"<div class='aa' style='float:left'>"
  400. +"<table>"
  401. // +(shList[i].shbm?("<tr><th>部门:</th><td>"+shList[i].shbm+"</td><tr>"):"")
  402. +(shList[i].shyjm==1?"":("<tr><th>审核时间:</th><td>"+shList[i].shsj+"</td><tr>"))
  403. +"<tr><th>审核人员:</th><td>"+shList[i].shryid+(shList[i].shbm?("("+shList[i].shbm+")"):"")+"</td><tr>"
  404. +(shList[i].dlryid?("<tr><th>代理人:</th><td>"+shList[i].dlryid+"</td><tr>"):"")
  405. +"<tr><th>审核意见:</th><td>"+(function(shyjm){
  406. if(shyjm==1){
  407. return "审核中"
  408. }else if(shyjm==51){
  409. return "同意"
  410. }else if(shyjm==55){
  411. return "退回"
  412. }else if(shyjm==57){
  413. return "手动退回"
  414. }else if(shyjm==58){
  415. return "逾期退回"
  416. }else if(shyjm==53){
  417. return "越过"
  418. }else if(shyjm==54){
  419. return "逾期越过"
  420. }else{
  421. return "未知"
  422. }
  423. }(shList[i].shyjm))
  424. +"</td><tr>"
  425. +(shList[i].sm? ("<tr><th>说明:</th><td>"+shList[i].sm+"</td><tr>"):"")
  426. +"</table>"
  427. +"</div>"
  428. }
  429. }
  430. }
  431. // result+=result
  432. return result
  433. }
  434. $("#floatDiv").css("left",parseInt(this.style.left)+parseInt(this.clientWidth)).css("top",parseInt(this.style.top)+parseInt(this.clientHeight))
  435. }).delegate(".GooFlow_item","mouseleave",function(){
  436. // $("#floatDiv").hide()
  437. })
  438. });
  439. //***********************************************************************
  440. function focusNode(id){
  441. demo.focusItem(id,false,true);
  442. }
  443. //复制对象
  444. function clone(myObj){
  445. if(typeof(myObj) != 'object') return myObj;
  446. if(myObj == null) return myObj;
  447. var myNewObj = new Object();
  448. for(var i in myObj)
  449. myNewObj[i] = clone(myObj[i]);
  450. return myNewObj;
  451. }
  452. function findPosX(obj) {
  453. var curleft = 0;
  454. if (obj && obj.offsetParent) {
  455. while (obj.offsetParent) {
  456. curleft += obj.offsetLeft;
  457. obj = obj.offsetParent;
  458. }
  459. } else if (obj && obj.x) curleft += obj.x;
  460. return curleft;
  461. }
  462. function findPosY(obj) {
  463. var curtop = 0;
  464. if (obj && obj.offsetParent) {
  465. while (obj.offsetParent) {
  466. curtop += obj.offsetTop;
  467. obj = obj.offsetParent;
  468. }
  469. } else if (obj && obj.y) curtop += obj.y;
  470. return curtop;
  471. }
  472. //从URL获取参数
  473. function getURLParam(name) {
  474. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
  475. var r = window.location.search.substr(1).match(reg);
  476. if (r != null) return unescape(r[2]); return null;
  477. }