Form.js 68 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496
  1. MWF.require("MWF.widget.Common", null, false);
  2. //MWF.require("MWF.xAction.org.express.RestActions", null,false);
  3. //MWF.xDesktop.requireApp("Organization", "Selector.package", null, false);
  4. MWF.require("MWF.widget.Identity", null,false);
  5. MWF.xApplication.process = MWF.xApplication.process || {};
  6. MWF.xApplication.process.Xform = MWF.xApplication.process.Xform || {};
  7. MWF.xDesktop.requireApp("process.Xform", "Package", null, false);
  8. MWF.xApplication.process.Xform.Form = MWF.APPForm = new Class({
  9. Implements: [Options, Events],
  10. Extends: MWF.widget.Common,
  11. options: {
  12. "style": "default",
  13. "readonly": false,
  14. "cssPath": "",
  15. "macro": "FormContext",
  16. "parameters": null,
  17. "moduleEvents": ["queryLoad",
  18. "beforeLoad",
  19. "postLoad",
  20. "afterLoad",
  21. "beforeSave",
  22. "afterSave",
  23. "beforeClose",
  24. "beforeProcess",
  25. "beforeProcessWork",
  26. "afterProcess",
  27. "beforeReset",
  28. "afterReset",
  29. "beforeRetract",
  30. "afterRetract",
  31. "beforeReroute",
  32. "afterReroute",
  33. "beforeDelete",
  34. "beforeModulesLoad",
  35. "resize",
  36. "afterModulesLoad"]
  37. },
  38. initialize: function(node, data, options){
  39. this.setOptions(options);
  40. this.container = $(node);
  41. this.container.setStyle("-webkit-user-select", "text");
  42. this.data = data;
  43. this.json = data.json;
  44. this.html = data.html;
  45. this.path = "/x_component_process_Xform/$Form/";
  46. this.cssPath = this.options.cssPath || "/x_component_process_Xform/$Form/"+this.options.style+"/css.wcss";
  47. this._loadCss();
  48. this.modules = [];
  49. this.all = {};
  50. this.forms = {};
  51. //if (!this.personActions) this.personActions = new MWF.xAction.org.express.RestActions();
  52. },
  53. load: function(){
  54. if (this.app){
  55. if (this.app.formNode) this.app.formNode.setStyles(this.json.styles);
  56. if (this.app.addEvent) this.app.addEvent("resize", function(){
  57. this.fireEvent("resize");
  58. }.bind(this))
  59. }
  60. if (!this.businessData.control.allowSave) this.setOptions({"readonly": true});
  61. this.loadMacro(function(){
  62. this.container.set("html", this.html);
  63. this.node = this.container.getFirst();
  64. this._loadEvents();
  65. if (this.fireEvent("queryLoad")){
  66. if (this.app) if (this.app.fireEvent) this.app.fireEvent("queryLoad");
  67. MWF.xDesktop.requireApp("process.Xform", "lp."+MWF.language, null, false);
  68. this._loadBusinessData();
  69. this.fireEvent("beforeLoad");
  70. if (this.app) if (this.app.fireEvent) this.app.fireEvent("beforeLoad");
  71. this.loadContent();
  72. }
  73. }.bind(this));
  74. },
  75. loadMacro: function(callback){
  76. //if (!MWF.Macro[this.options.macro || "FormContext"]){
  77. MWF.require("MWF.xScript.Macro", function(){
  78. this.Macro = new MWF.Macro[this.options.macro || "FormContext"](this);
  79. if (callback) callback();
  80. }.bind(this));
  81. // }else{
  82. // this.Macro = new MWF.Macro[this.options.macro || "FormContext"](this);
  83. // if (callback) callback();
  84. // }
  85. },
  86. loadContent: function(){
  87. this._loadHtml();
  88. this._loadForm();
  89. this.fireEvent("beforeModulesLoad");
  90. if (this.app && this.app.fireEvent) this.app.fireEvent("beforeModulesLoad");
  91. this._loadModules(this.node);
  92. this.fireEvent("afterModulesLoad");
  93. this.fireEvent("postLoad");
  94. this.fireEvent("afterLoad");
  95. if (this.app && this.app.fireEvent){
  96. this.app.fireEvent("afterModulesLoad");
  97. this.app.fireEvent("postLoad");
  98. this.app.fireEvent("afterLoad");
  99. }
  100. },
  101. _loadBusinessData: function(){
  102. if (!this.businessData){
  103. this.businessData = {};
  104. // this.businessData = {
  105. // "data": {
  106. // "select": "222",
  107. // "radio": "bbb",
  108. // "checkbox": ["check1", "check3"],
  109. // "orderData": [
  110. // {
  111. // "orderName": {"namefield": "电脑"},
  112. // "orderCount": {"countField": "3"},
  113. // "priceCount": {"priceField": "9000"}
  114. // },
  115. // {
  116. // "orderName": {"namefield": "路由器"},
  117. // "orderCount": {"countField": "2"},
  118. // "priceCount": {"priceField": "1000"}
  119. // },
  120. // {
  121. // "orderName": {"namefield": "网线"},
  122. // "orderCount": {"countField": "10"},
  123. // "priceCount": {"priceField": "200"}
  124. // }
  125. // ]
  126. //
  127. // }
  128. // };
  129. }
  130. },
  131. _loadHtml: function(){
  132. // this.container.set("html", this.html);
  133. // this.node = this.container.getFirst();
  134. //this.node.setStyle("overflow", "hidden");
  135. this.node.addEvent("selectstart", function(e){
  136. var select = "text";
  137. if (e.target.getStyle("-webkit-user-select")){
  138. select = e.target.getStyle("-webkit-user-select").toString().toLowerCase();
  139. }
  140. if (select!=="text" && select!=="auto") e.preventDefault();
  141. });
  142. },
  143. _loadForm: function(){
  144. this._loadStyles();
  145. this._loadCssLinks();
  146. this._loadScriptSrc();
  147. this._loadJsheader();
  148. //this._loadEvents();
  149. },
  150. _loadStyles: function(){
  151. this.node.setStyles(this.json.styles);
  152. },
  153. _loadCssLinks: function(){
  154. var urls = this.json.cssLinks;
  155. urls.each(function(url){
  156. new Element("link", {
  157. "rel": "stylesheet",
  158. "type": "text/css",
  159. "href": url
  160. }).inject($(document.head));
  161. });
  162. },
  163. _loadScriptSrc: function(){
  164. var urls = this.json.scriptSrc;
  165. urls.each(function(url){
  166. new Element("script", {
  167. "src": url
  168. }).inject($(document.head));
  169. });
  170. },
  171. _loadJsheader: function(){
  172. var code = this.json.jsheader.code;
  173. if (code) Browser.exec(code);
  174. },
  175. _loadEvents: function(){
  176. Object.each(this.json.events, function(e, key){
  177. if (e.code){
  178. if (this.options.moduleEvents.indexOf(key)!==-1){
  179. this.addEvent(key, function(event){
  180. return this.Macro.fire(e.code, this, event);
  181. }.bind(this));
  182. }else{
  183. if (key==="load"){
  184. this.addEvent("postLoad", function(){
  185. return this.Macro.fire(e.code, this);
  186. }.bind(this));
  187. }else if (key==="submit"){
  188. this.addEvent("beforeProcess", function(){
  189. return this.Macro.fire(e.code, this);
  190. }.bind(this));
  191. }else{
  192. this.node.addEvent(key, function(event){
  193. return this.Macro.fire(e.code, this, event);
  194. }.bind(this));
  195. }
  196. }
  197. }
  198. }.bind(this));
  199. },
  200. _getDomjson: function(dom){
  201. var mwfType = dom.get("MWFtype") || dom.get("mwftype");
  202. switch (mwfType) {
  203. case "form":
  204. return this.json;
  205. case "":
  206. return null;
  207. default:
  208. var id = dom.get("id");
  209. if (!id) id = dom.get("MWFId");
  210. if (id){
  211. return this.json.moduleList[id];
  212. }else{
  213. return null;
  214. }
  215. }
  216. },
  217. _getModuleNodes: function(dom){
  218. var moduleNodes = [];
  219. var subDom = dom.getFirst();
  220. while (subDom){
  221. var mwftype = subDom.get("MWFtype") || subDom.get("mwftype");
  222. if (mwftype){
  223. var type = mwftype;
  224. if (type.indexOf("$")===-1){
  225. moduleNodes.push(subDom);
  226. }
  227. if (mwftype !== "datagrid" && mwftype !== "subSource"){
  228. moduleNodes = moduleNodes.concat(this._getModuleNodes(subDom));
  229. }
  230. }else{
  231. moduleNodes = moduleNodes.concat(this._getModuleNodes(subDom));
  232. }
  233. subDom = subDom.getNext();
  234. }
  235. return moduleNodes;
  236. },
  237. _loadModules: function(dom){
  238. //var subDom = this.node.getFirst();
  239. //while (subDom){
  240. // if (subDom.get("MWFtype")){
  241. // var json = this._getDomjson(subDom);
  242. // var module = this._loadModule(json, subDom);
  243. // this.modules.push(module);
  244. // }
  245. // subDom = subDom.getNext();
  246. //}
  247. debugger;
  248. var moduleNodes = this._getModuleNodes(dom);
  249. //alert(moduleNodes.length);
  250. debugger;
  251. moduleNodes.each(function(node){
  252. var json = this._getDomjson(node);
  253. var module = this._loadModule(json, node);
  254. this.modules.push(module);
  255. }.bind(this));
  256. },
  257. _loadModule: function(json, node, beforeLoad){
  258. if (!MWF["APP"+json.type]){
  259. MWF.xDesktop.requireApp("process.Xform", json.type, null, false);
  260. }
  261. var module = new MWF["APP"+json.type](node, json, this);
  262. if (beforeLoad) beforeLoad.apply(module);
  263. if (!this.all[json.id]) this.all[json.id] = module;
  264. if (module.field){
  265. if (!this.forms[json.id]) this.forms[json.id] = module;
  266. }
  267. module.readonly = this.options.readonly;
  268. module.load();
  269. return module;
  270. },
  271. saveOpinion: function(module){
  272. var op = module._getBusinessSectionDataByPerson();
  273. MWF.UD.getDataJson("userOpinion", function(json){
  274. if (!json) json = [];
  275. var idx = json.indexOf(op);
  276. if (idx==-1){
  277. if (json.length>=50) json.shift();
  278. }else{
  279. json.splice(idx, 1);
  280. }
  281. json.push(op);
  282. MWF.UD.putData("userOpinion", json);
  283. }.bind(this), false);
  284. },
  285. getData: function(issubmit){
  286. var data= Object.clone(this.businessData.data);
  287. Object.each(this.forms, function(module, id){
  288. if (module.json.type==="Opinion"){
  289. if (issubmit){
  290. this.saveOpinion(module);
  291. delete data[id];
  292. }else{
  293. var v = module.getData();
  294. data[id] = this.getSectionDataByPerson(v, data[id]);
  295. }
  296. }else{
  297. if (module.json.section==="yes"){
  298. data[id] = this.getSectionData(module, data[id]);
  299. }else{
  300. data[id] = module.getData();
  301. }
  302. }
  303. }.bind(this));
  304. this.businessData.data = data;
  305. this.Macro.environment.setData(this.businessData.data);
  306. return data;
  307. },
  308. getSectionData: function(module, obj){
  309. var v = module.getData();
  310. switch (module.json.sectionBy){
  311. case "person":
  312. return this.getSectionDataByPerson(v, obj);
  313. break;
  314. case "unit":
  315. return this.getSectionDataByUnit(v, obj);
  316. break;
  317. case "activity":
  318. return this.getSectionDataByPActivity(v, obj);
  319. break;
  320. case "script":
  321. return this.getSectionDataByScript(module.json.sectionByScript.code, v, obj);
  322. break;
  323. default:
  324. return v;
  325. }
  326. },
  327. getSectionDataByPerson: function(v, obj) {
  328. var key = layout.desktop.session.user.id;
  329. if (!obj || (typeOf(obj)!=="object")) obj={};
  330. obj[key] = v;
  331. return obj;
  332. },
  333. getSectionDataByUnit: function(v, obj) {
  334. var key = (this.businessData.task) ? this.businessData.task.unit : "";
  335. if (!obj || (typeOf(obj)!=="object")) obj={};
  336. if (key) obj[key] = v;
  337. return obj;
  338. },
  339. getSectionDataByPActivity: function(v, obj) {
  340. var key = (this.businessData.work) ? this.businessData.work.activity : "";
  341. if (!obj || (typeOf(obj)!=="object")) obj={};
  342. if (key) obj[key] = v;
  343. return obj;
  344. },
  345. getSectionDataByScript: function(code, v, obj) {
  346. var key = this.form.Macro.exec(code, this);
  347. if (!obj || (typeOf(obj)!=="object")) obj={};
  348. if (key) obj[key] = v;
  349. return obj;
  350. },
  351. saveWork: function(callback){
  352. if (this.businessData.control["allowSave"]){
  353. this.fireEvent("beforeSave");
  354. if (this.app && this.app.fireEvent) this.app.fireEvent("beforeSave");
  355. this.saveFormData(function(json){
  356. this.app.notice(MWF.xApplication.process.Xform.LP.dataSaved, "success");
  357. if (callback) callback();
  358. this.fireEvent("afterSave");
  359. if (this.app && this.app.fireEvent) this.app.fireEvent("afterSave");
  360. }.bind(this));
  361. }else{
  362. MWF.xDesktop.notice("error", {x: "right", y:"top"}, "Permission Denied");
  363. //if (failure) failure(null, "Permission Denied", "");
  364. }
  365. },
  366. saveFormData: function(callback, failure, history ,data, issubmit){
  367. if (this.officeList){
  368. this.officeList.each(function(module){
  369. module.save(history);
  370. });
  371. }
  372. this.workAction.saveData(callback, failure, this.businessData.work.id, data || this.getData(issubmit));
  373. },
  374. closeWork: function(){
  375. this.fireEvent("beforeClose");
  376. if (this.app && this.app.fireEvent){
  377. this.app.fireEvent("beforeClose");
  378. // this.fireEvent("afterClose");
  379. }
  380. this.app.close();
  381. },
  382. addMessage: function(data){
  383. var content = "";
  384. if (data.length){
  385. data.each(function(work){
  386. var users = [];
  387. work.taskList.each(function(task){
  388. users.push(MWF.name.cn(task.person)+"("+MWF.name.cn(task.unit)+")");
  389. }.bind(this));
  390. content += "<div><b>"+MWF.xApplication.process.Xform.LP.nextActivity+"<font style=\"color: #ea621f\">"+work.fromActivityName+"</font>, "+MWF.xApplication.process.Xform.LP.nextUser+"<font style=\"color: #ea621f\">"+users.join(", ")+"</font></b></div>";
  391. }.bind(this));
  392. }else{
  393. content += MWF.xApplication.process.Xform.LP.workCompleted;
  394. }
  395. //data.workList.each(function(list){
  396. // content += "<div><b>"+MWF.xApplication.process.Xform.LP.nextActivity+"<font style=\"color: #ea621f\">"+list.activityName+"</font>, "+MWF.xApplication.process.Xform.LP.nextUser+"<font style=\"color: #ea621f\">"+list.personList.join(", ")+"</font></b></div>"
  397. //}.bind(this));
  398. var msg = {
  399. "subject": MWF.xApplication.process.Xform.LP.taskProcessed,
  400. "content": "<div>"+MWF.xApplication.process.Xform.LP.taskProcessedMessage+"“"+this.businessData.work.title+"”</div>"+content
  401. };
  402. layout.desktop.message.addTooltip(msg);
  403. return layout.desktop.message.addMessage(msg);
  404. },
  405. formValidation: function(routeName, opinion){
  406. if (this.options.readonly) return true;
  407. this.Macro.environment.form.currentRouteName = routeName;
  408. this.Macro.environment.form.opinion = opinion;
  409. var flag = true;
  410. //flag = this.validation();
  411. Object.each(this.forms, function(field, key){
  412. field.validationMode();
  413. if (!field.validation(routeName, opinion)) flag = false;
  414. }.bind(this));
  415. return flag;
  416. },
  417. validation: function(routeName, opinion, processor){
  418. this.Macro.environment.form.currentRouteName = routeName;
  419. this.Macro.environment.form.opinion = opinion;
  420. var routeFlag = this.validationRoute(processor);
  421. var opinionFlag = this.validationOpinion(processor);
  422. return routeFlag && opinionFlag;
  423. },
  424. validationRoute: function(processor){
  425. if (!this.json.validationRoute) return true;
  426. if (!this.json.validationRoute.code) return true;
  427. var flag = this.Macro.exec(this.json.validationRoute.code, this);
  428. if (!flag) flag = MWF.xApplication.process.Xform.LP.notValidation;
  429. if (flag.toString()!="true"){
  430. this.notValidationRouteMode(flag, processor);
  431. return false;
  432. }
  433. return true;
  434. },
  435. validationOpinion: function(processor){
  436. if (!this.json.validationOpinion) return true;
  437. if (!this.json.validationOpinion.code) return true;
  438. var flag = this.Macro.exec(this.json.validationOpinion.code, this);
  439. if (!flag) flag = MWF.xApplication.process.Xform.LP.notValidation;
  440. if (flag.toString()!="true"){
  441. this.notValidationOpinionMode(flag, processor);
  442. return false;
  443. }
  444. return true;
  445. },
  446. formCustomValidation: function(){
  447. if (!this.json.validationFormCustom) return true;
  448. if (!this.json.validationFormCustom.code) return true;
  449. var flag = this.Macro.exec(this.json.validationFormCustom.code, this);
  450. if (!flag) flag = MWF.xApplication.process.Xform.LP.notValidation;
  451. if (flag.toString()!="true"){
  452. //this.notValidationOpinionMode(flag, processor);
  453. return false;
  454. }
  455. return true;
  456. },
  457. notValidationRouteMode: function(flag, processor){
  458. processor.routeSelectorArea.setStyle("background-color", "#ffe9e9");
  459. new mBox.Notice({
  460. type: "error",
  461. position: {"x": "center", "y": "top"},
  462. move: false,
  463. target: processor.routeSelectorArea,
  464. delayClose: 6000,
  465. content: flag
  466. });
  467. },
  468. notValidationOpinionMode: function(flag, processor){
  469. processor.inputTextarea.setStyle("background-color", "#ffe9e9");
  470. new mBox.Notice({
  471. type: "error",
  472. position: {"x": "center", "y": "top"},
  473. move: false,
  474. target: processor.inputTextarea,
  475. delayClose: 6000,
  476. content: flag
  477. });
  478. },
  479. //fireRtEvent: function(type, args, delay){
  480. // type = removeOn(type);
  481. // var events = this.$events[type];
  482. // if (!events) return this;
  483. // if (!events.length) return this;
  484. // var event = events[events.length-1];
  485. // args = Array.from(args);
  486. // if (delay) fn.delay(delay, this, args);
  487. // else return fn.apply(this, args);
  488. // return this;
  489. //},
  490. submitWork: function(routeName, opinion, callback, processor, data){
  491. if (!this.businessData.control["allowProcessing"]){
  492. MWF.xDesktop.notice("error", {x: "right", y:"top"}, "Permission Denied");
  493. this.app.content.unmask();
  494. processor.node.unmask();
  495. return false;
  496. }
  497. if (!this.formValidation(routeName, opinion)){
  498. this.app.content.unmask();
  499. //this.app.notice("", "error", target, where, offset);
  500. if (callback) callback();
  501. return false;
  502. }
  503. if (!this.validation(routeName, opinion, processor)){
  504. //this.app.content.unmask();
  505. processor.node.unmask();
  506. return false;
  507. }
  508. if (!opinion){
  509. var idx = this.businessData.task.routeNameList.indexOf(routeName);
  510. if (this.businessData.task.routeOpinionList[idx]){
  511. opinion = this.businessData.task.routeOpinionList[idx];
  512. }else{
  513. opinion = routeName;
  514. }
  515. }
  516. this.fireEvent("beforeProcess");
  517. if (this.app && this.app.fireEvent) this.app.fireEvent("beforeProcess");
  518. MWF.require("MWF.widget.Mask", function(){
  519. this.mask = new MWF.widget.Mask({"style": "desktop", "zIndex": 50000});
  520. this.mask.loadNode(this.app.content);
  521. this.fireEvent("beforeSave");
  522. if (this.app && this.app.fireEvent) this.app.fireEvent("beforeSave");
  523. this.saveFormData(function(json){
  524. this.businessData.task.routeName = routeName;
  525. this.businessData.task.opinion = opinion;
  526. this.fireEvent("afterSave");
  527. if (this.app && this.app.fireEvent) this.app.fireEvent("afterSave");
  528. this.workAction.processTask(function(json){
  529. //if (processor) processor.destroy();
  530. //if (processNode) processNode.destroy();
  531. if (callback) callback();
  532. this.fireEvent("afterProcess");
  533. if (this.app && this.app.fireEvent) this.app.fireEvent("afterProcess");
  534. // this.notice(MWF.xApplication.process.Xform.LP.taskProcessed, "success");
  535. this.addMessage(json.data);
  536. if (this.app.taskObject) this.app.taskObject.destroy();
  537. if (layout.mobile){
  538. var uri = new URI(window.location.href);
  539. var redirectlink = uri.getData("redirectlink");
  540. if( redirectlink ){
  541. window.location = decodeURIComponent(redirectlink);
  542. }else{
  543. window.location = "appMobile.html?app=process.TaskCenter";
  544. }
  545. }else{
  546. this.app.close();
  547. }
  548. //window.setTimeout(function(){this.app.close();}.bind(this), 2000);
  549. }.bind(this), null, this.businessData.task.id, this.businessData.task);
  550. }.bind(this), null, true, data, true);
  551. }.bind(this));
  552. },
  553. processWork: function(){
  554. if (this.app.inBrowser){
  555. this.app.content.setStyle("height", document.body.getSize().y);
  556. }
  557. this.fireEvent("beforeProcessWork");
  558. if (this.app && this.app.fireEvent) this.app.fireEvent("beforeProcessWork");
  559. var position = this.app.content.getPosition(this.app.content.getOffsetParent());
  560. this.app.content.mask({
  561. "destroyOnHide": true,
  562. "style": this.app.css.maskNode,
  563. "useIframeShim": true,
  564. "iframeShimOptions": {"browsers": true},
  565. "onShow": function(){
  566. this.shim.shim.setStyles({
  567. "opacity": 0,
  568. "top": ""+position.y+"px",
  569. "left": ""+position.x+"px"
  570. });
  571. }
  572. });
  573. if (!this.formCustomValidation("", "")){
  574. this.app.content.unmask();
  575. // if (callback) callback();
  576. return false;
  577. }
  578. // MWF.require("MWF.widget.Mask", function() {
  579. // this.mask = new MWF.widget.Mask({"style": "desktop", "zIndex": 50000});
  580. // this.mask.loadNode(this.app.content);
  581. if (!this.formValidation("", "")){
  582. this.app.content.unmask();
  583. // if (callback) callback();
  584. return false;
  585. }
  586. var processNode = this.createProcessNode();
  587. this.setProcessNode(processNode);
  588. this.showProcessNode(processNode);
  589. //}.bind(this));
  590. },
  591. createProcessNode: function(){
  592. if (layout.mobile){
  593. var contentSize = this.app.content.getSize();
  594. this.app.css.processNode_from.width = contentSize.x+"px";
  595. this.app.css.processNode.width = contentSize.x+"px";
  596. }
  597. var processNode = new Element("div", {"styles": this.app.css.processNode_from}).inject(this.app.content);
  598. processNode.position({
  599. relativeTo: this.app.content,
  600. position: "topcenter",
  601. edge: "topcenter"
  602. });
  603. return processNode;
  604. },
  605. getOpinion: function(){
  606. var opinion = "";
  607. Object.each(this.forms, function(m, id){
  608. if (m.json.type==="Opinion") if (this.businessData.data[id]) opinion += " "+m._getBusinessSectionDataByPerson();
  609. }.bind(this));
  610. return opinion.trim();
  611. },
  612. setProcessNode: function(processNode){
  613. var _self = this;
  614. debugger;
  615. MWF.xDesktop.requireApp("process.Work", "Processor", function(){
  616. new MWF.xApplication.process.Work.Processor(processNode, this.businessData.task, {
  617. "style": (layout.mobile) ? "mobile" : "default",
  618. "opinion": this.getOpinion(),
  619. "onCancel": function(){
  620. processNode.destroy();
  621. _self.app.content.unmask();
  622. delete this;
  623. },
  624. "onSubmit": function(routeName, opinion){
  625. _self.submitWork(routeName, opinion, function(){
  626. this.destroy();
  627. processNode.destroy();
  628. delete this;
  629. }.bind(this), this);
  630. }
  631. })
  632. }.bind(this));
  633. },
  634. showProcessNode: function(processNode){
  635. var size = this.app.content.getSize();
  636. var nodeSize = processNode.getSize();
  637. var top = size.y/2-nodeSize.y/2-20;
  638. var left = size.x/2-nodeSize.x/2;
  639. if (top<0) top = 0;
  640. this.app.css.processNode.top = ""+top+"px";
  641. this.app.css.processNode.left = ""+left+"px";
  642. var morph = new Fx.Morph(processNode, {
  643. "duration": 300,
  644. "transition": Fx.Transitions.Expo.easeOut
  645. });
  646. morph.start(this.app.css.processNode);
  647. },
  648. confirm: function(type, e, title, text, width, height, ok, cancel, callback, mask, style){
  649. MWF.require("MWF.xDesktop.Dialog", function(){
  650. var size = this.container.getSize();
  651. var x = 0;
  652. var y = 0;
  653. if (typeOf(e)==="element"){
  654. var position = e.getPosition(this.app.content);
  655. x = position.x;
  656. y = position.y;
  657. }else{
  658. if (Browser.name=="firefox"){
  659. x = parseFloat(e.event.clientX || e.event.x);
  660. y = parseFloat(e.event.clientY || e.event.y);
  661. }else{
  662. x = parseFloat(e.event.x);
  663. y = parseFloat(e.event.y);
  664. }
  665. if (e.target){
  666. var position = e.target.getPosition(this.app.content);
  667. //var position = e.target.getPosition();
  668. x = position.x;
  669. y = position.y;
  670. }
  671. }
  672. // if (Browser.Platform.ios){
  673. // $("textdiv").set("text", "$(document.body).getScroll().y: "+$(document.body).getScroll().y);
  674. // y = y-$(document.body).getScroll().y;
  675. // }
  676. if (x+parseFloat(width)>size.x){
  677. x = x-parseFloat(width);
  678. }
  679. if (x<0) x = 10;
  680. if (y+parseFloat(height)>size.y){
  681. y = y-parseFloat(height);
  682. }
  683. if (y<0) y = 10;
  684. //var x = parseFloat((Browser.name==="firefox") ? e.event.clientX : e.event.x);
  685. //var y = parseFloat((Browser.name==="firefox") ? e.event.clientY : e.event.y);
  686. // if (x+parseFloat(width)>size.x){
  687. // x = x-parseFloat(width);
  688. // }
  689. if (x<0) x = 20;
  690. var dlg = new MWF.xDesktop.Dialog({
  691. "title": title,
  692. "style": style || "o2",
  693. "top": y,
  694. "left": x-20,
  695. "fromTop":e.event.y,
  696. "fromLeft": (Browser.name==="firefox") ? e.event.clientX-20 : e.event.x-20,
  697. "width": width,
  698. "height": height,
  699. "text": text,
  700. "container": this.app.content,
  701. "maskNode": mask || this.app.content,
  702. "buttonList": [
  703. {
  704. "text": MWF.LP.process.button.ok,
  705. "action": ok
  706. },
  707. {
  708. "text": MWF.LP.process.button.cancel,
  709. "action": cancel
  710. }
  711. ]
  712. });
  713. switch (type.toLowerCase()){
  714. case "success":
  715. dlg.content.setStyle("background-image", "url(data:image/png;base64,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)");
  716. break;
  717. case "error":
  718. dlg.content.setStyle("background-image", "url(data:image/png;base64,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)");
  719. break;
  720. case "info":
  721. dlg.content.setStyle("background-image", "url(data:image/png;base64,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)");
  722. break;
  723. case "warn":
  724. dlg.content.setStyle("background-image", "url(data:image/png;base64,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)");
  725. break;
  726. default:
  727. }
  728. dlg.show();
  729. }.bind(this));
  730. },
  731. notice: function(content, type, target, where){
  732. if (!where) where = {"x": "right", "y": "top"};
  733. if (!target) target = this.node;
  734. if (!type) type = "ok";
  735. var noticeTarget = target || layout.layout.contentNode;
  736. new mBox.Notice({
  737. type: type,
  738. position: where,
  739. move: false,
  740. target: noticeTarget,
  741. delayClose: (type==="error") ? 5000 : 1000,
  742. offset: {
  743. x: 10,
  744. y: where.y.toString().toLowerCase()==="bottom" ? 10 : 10
  745. },
  746. content: content
  747. });
  748. },
  749. resetWork: function(){
  750. if (!this.businessData.control["allowReset"]){
  751. MWF.xDesktop.notice("error", {x: "right", y:"top"}, "Permission Denied");
  752. return false;
  753. }
  754. MWF.require("MWF.xDesktop.Dialog", function(){
  755. var width = 680;
  756. var height = 300;
  757. var p = MWF.getCenterPosition(this.app.content, width, height);
  758. var _self = this;
  759. var dlg = new MWF.xDesktop.Dialog({
  760. "title": this.app.lp.reset,
  761. "style": "work",
  762. "top": p.y-100,
  763. "left": p.x,
  764. "fromTop": p.y-100,
  765. "fromLeft": p.x,
  766. "width": width,
  767. "height": height,
  768. "url": this.app.path+"reset.html",
  769. "container": this.app.content,
  770. "isClose": true,
  771. "onPostShow": function(){
  772. $("resetWork_okButton").addEvent("click", function(){
  773. _self.doResetWork(this);
  774. }.bind(this));
  775. $("resetWork_cancelButton").addEvent("click", function(){
  776. this.close();
  777. }.bind(this));
  778. $("resetWork_selPeopleButton").addEvent("click", function(){
  779. _self.selectPeople(this);
  780. }.bind(this));
  781. }
  782. });
  783. dlg.show();
  784. }.bind(this));
  785. },
  786. selectPeople: function(dlg){
  787. var range = this.businessData.activity.resetRange || "department";
  788. var count = this.businessData.activity.resetCount || 0;
  789. switch (range){
  790. case "unit":
  791. this.selectPeopleUnit(dlg, this.businessData.task.unit, count);
  792. // this.personActions.getDepartmentByIdentity(function(json){
  793. // this.selectPeopleDepartment(dlg, json.data, count);
  794. // }.bind(this), null, this.businessData.task.identity);
  795. break;
  796. case "topUnit":
  797. MWF.require("MWF.xScript.Actions.UnitActions", function(){
  798. orgActions = new MWF.xScript.Actions.UnitActions();
  799. var data = {"unitList": [this.businessData.task.unit]};
  800. orgActions.listUnitSupNested(data, function(json){
  801. v = json.data[0];
  802. this.selectPeopleUnit(dlg, v, count);
  803. }.bind(this));
  804. }.bind(this));
  805. // this.personActions.getCompanyByIdentity(function(json){
  806. // this.selectPeopleCompany(dlg, json.data, count)
  807. // }.bind(this), null, this.businessData.task.identity);
  808. break;
  809. default:
  810. this.selectPeopleAll(dlg, count);
  811. }
  812. },
  813. selectPeopleUnit: function(dlg, unit, count){
  814. var names = dlg.identityList || [];
  815. var areaNode = $("resetWork_selPeopleArea");
  816. var options = {
  817. "values": names,
  818. "type": "identity",
  819. "count": count,
  820. "units": (unit) ? [unit]: [],
  821. "title": this.app.lp.reset,
  822. "onComplete": function (items) {
  823. areaNode.empty();
  824. var identityList = [];
  825. items.each(function(item){
  826. new MWF.widget.O2Identity(item.data, areaNode, {"style": "reset"});
  827. identityList.push(item.data.distinguishedName);
  828. }.bind(this));
  829. dlg.identityList = identityList;
  830. }.bind(this)
  831. };
  832. var selector = new MWF.O2Selector(this.app.content, options);
  833. },
  834. // selectPeopleDepartment: function(dlg, department, count){
  835. // var names = dlg.identityList || [];
  836. // var areaNode = $("resetWork_selPeopleArea");
  837. // var options = {
  838. // "names": names,
  839. // "type": "identity",
  840. // "count": count,
  841. // "departments": (department) ? [department.name]: [],
  842. // "title": this.app.lp.reset,
  843. // "onComplete": function (items) {
  844. // areaNode.empty();
  845. // var identityList = [];
  846. // items.each(function(item){
  847. // var explorer = {
  848. // "actions": this.personActions,
  849. // "app": {"lp": this.app.lp}
  850. // };
  851. // new MWF.widget.Identity(item.data, areaNode, explorer, false, null, {"style": "reset"});
  852. // identityList.push(item.data.name);
  853. // }.bind(this));
  854. // dlg.identityList = identityList;
  855. // }.bind(this)
  856. // };
  857. //
  858. // var selector = new MWF.OrgSelector(this.app.content, options);
  859. // },
  860. // selectPeopleCompany: function(dlg, company, count){
  861. // var names = dlg.identityList || [];
  862. // var areaNode = $("resetWork_selPeopleArea");
  863. // var options = {
  864. // "names": names,
  865. // "type": "identity",
  866. // "count": count,
  867. // "companys": [company.name],
  868. // "title": this.app.lp.reset,
  869. // "onComplete": function (items) {
  870. // areaNode.empty();
  871. // var identityList = [];
  872. // items.each(function(item){
  873. // var explorer = {
  874. // "actions": this.personActions,
  875. // "app": {"lp": this.app.lp}
  876. // };
  877. // new MWF.widget.Identity(item.data, areaNode, explorer, false, null, {"style": "reset"});
  878. // identityList.push(item.data.name);
  879. // }.bind(this));
  880. // dlg.identityList = identityList;
  881. // }.bind(this)
  882. // };
  883. //
  884. // var selector = new MWF.Selector(this.app.content, options);
  885. // },
  886. selectPeopleAll: function(dlg, count){
  887. var names = dlg.identityList || [];
  888. var areaNode = $("resetWork_selPeopleArea");
  889. var options = {
  890. "values": names,
  891. "type": "identity",
  892. "count": count,
  893. "title": this.app.lp.reset,
  894. "onComplete": function (items) {
  895. areaNode.empty();
  896. var identityList = [];
  897. items.each(function(item){
  898. new MWF.widget.O2Identity(item.data, areaNode, {"style": "reset"});
  899. identityList.push(item.data.distinguishedName);
  900. }.bind(this));
  901. dlg.identityList = identityList;
  902. }.bind(this)
  903. };
  904. var selector = new MWF.O2Selector(this.app.content, options);
  905. },
  906. doResetWork: function(dlg){
  907. var names = dlg.identityList || [];
  908. if (!names.length){
  909. this.app.notice(MWF.xApplication.process.Xform.LP.inputResetPeople, "error", dlg.node);
  910. return false;
  911. }
  912. var opinion = $("resetWork_opinion").get("value");
  913. var nameText = [];
  914. names.each(function(n){ nameText.push(MWF.name.cn(n)); });
  915. if (!opinion){
  916. opinion = MWF.xApplication.process.Xform.LP.resetTo+": "+nameText.join(", ");
  917. }
  918. MWF.require("MWF.widget.Mask", function(){
  919. this.mask = new MWF.widget.Mask({"style": "desktop", "zIndex": 50000});
  920. this.mask.loadNode(this.app.content);
  921. this.fireEvent("beforeReset");
  922. if (this.app && this.app.fireEvent) this.app.fireEvent("beforeReset");
  923. this.resetWorkToPeson(names, opinion, function(){
  924. this.workAction.getJobByWork(function(workJson){
  925. this.fireEvent("afterReset");
  926. if (this.app && this.app.fireEvent) this.app.fireEvent("afterReset");
  927. this.addResetMessage(workJson.data);
  928. this.app.notice(MWF.xApplication.process.Xform.LP.resetOk+": "+MWF.name.cns(names).join(", "), "success");
  929. this.app.close();
  930. }.bind(this), null, this.businessData.work.id);
  931. dlg.close();
  932. if (this.mask) {this.mask.hide(); this.mask = null;}
  933. }.bind(this), function(xhr, text, error){
  934. var errorText = error+":"+text;
  935. if (xhr) errorText = xhr.responseText;
  936. this.app.notice("request json error: "+errorText, "error", dlg.node);
  937. if (this.mask) {this.mask.hide(); this.mask = null;}
  938. }.bind(this));
  939. }.bind(this));
  940. //var data = {
  941. // "opinion": opinion,
  942. // "routeName": MWF.xApplication.process.Xform.LP.reset,
  943. // "identityList": names
  944. //}
  945. //
  946. //this.workAction.resetWork(function(json){
  947. //
  948. //}.bind(this), null, this.businessData.task.id, data);
  949. },
  950. resetWorkToPeson: function(identityList, opinion, success, failure){
  951. var data = {
  952. "opinion": opinion,
  953. "routeName": MWF.xApplication.process.Xform.LP.reset,
  954. "identityList": identityList
  955. };
  956. this.saveFormData(
  957. function(json){
  958. this.workAction.resetWork(
  959. function(json){
  960. if (success) success();
  961. }.bind(this),
  962. function(xhr, text, error){
  963. if (failure) failure(xhr, text, error);
  964. },
  965. this.businessData.task.id, data
  966. );
  967. }.bind(this),
  968. function(xhr, text, error){
  969. if (failure) failure(xhr, text, error);
  970. }, true, null, true
  971. );
  972. },
  973. addResetMessage: function(data){
  974. var users = [];
  975. data.taskList.each(function(task){
  976. users.push(MWF.name.cn(task.person)+"("+MWF.name.cn(task.unit)+")");
  977. }.bind(this));
  978. var content = "<div><b>"+MWF.xApplication.process.Xform.LP.currentActivity+"<font style=\"color: #ea621f\">"+data.work.activityName+"</font>, "+MWF.xApplication.process.Xform.LP.nextUser+"<font style=\"color: #ea621f\">"+users.join(", ")+"</font></b></div>";
  979. var msg = {
  980. "subject": MWF.xApplication.process.Xform.LP.workReset,
  981. "content": "<div>"+MWF.xApplication.process.Xform.LP.resetWorkInfor+"“"+this.businessData.work.title+"”</div>"+content
  982. };
  983. layout.desktop.message.addTooltip(msg);
  984. return layout.desktop.message.addMessage(msg);
  985. },
  986. retractWork: function(e, ev){
  987. var _self = this;
  988. var p = MWF.getCenterPosition(this.app.content, 300, 150);
  989. var event = {
  990. "event":{
  991. "x": p.x,
  992. "y": p.y-200,
  993. "clientX": p.x,
  994. "clientY": p.y-200
  995. }
  996. };
  997. this.app.confirm("infor", event, MWF.xApplication.process.Xform.LP.retractTitle, MWF.xApplication.process.Xform.LP.retractText, 300, 120, function(){
  998. _self.app.content.mask({
  999. "style": {
  1000. "background-color": "#999",
  1001. "opacity": 0.6
  1002. }
  1003. });
  1004. MWF.require("MWF.widget.Mask", function(){
  1005. _self.mask = new MWF.widget.Mask({"style": "desktop", "zIndex": 50000});
  1006. _self.mask.loadNode(_self.app.content);
  1007. _self.fireEvent("beforeRetract");
  1008. if (_self.app && _self.app.fireEvent) _self.app.fireEvent("beforeRetract");
  1009. _self.doRetractWork(function(){
  1010. _self.workAction.getJobByWork(function(workJson){
  1011. _self.fireEvent("afterRetract");
  1012. if (_self.app && _self.app.fireEvent) _self.app.fireEvent("afterRetract");
  1013. _self.app.notice(MWF.xApplication.process.Xform.LP.workRetract, "success");
  1014. _self.app.content.unmask();
  1015. _self.app.reload(workJson.data);
  1016. }, null, _self.businessData.work.id);
  1017. this.close();
  1018. if (_self.mask) {_self.mask.hide(); _self.mask = null;}
  1019. }.bind(this));
  1020. }.bind(this), function(xhr, text, error){
  1021. var errorText = error+":"+text;
  1022. if (xhr) errorText = xhr.responseText;
  1023. _self.app.notice("request json error: "+errorText, "error", dlg.node);
  1024. if (_self.mask) {_self.mask.hide(); _self.mask = null;}
  1025. });
  1026. //this.close();
  1027. }, function(){
  1028. this.close();
  1029. });
  1030. },
  1031. doRetractWork: function(success, failure){
  1032. if (this.businessData.control["allowRetract"]){
  1033. this.workAction.retractWork(function(json){
  1034. if (success) success();
  1035. }.bind(this), function(xhr, text, error){
  1036. if (failure) failure(xhr, text, error);
  1037. }, this.businessData.work.id);
  1038. }else{
  1039. if (failure) failure(null, "Permission Denied", "");
  1040. }
  1041. },
  1042. addRetractMessage: function(data){
  1043. var users = [];
  1044. data.taskList.each(function(task){
  1045. users.push(MWF.name.cn(task.person)+"("+MWF.name.cn(task.unit)+")");
  1046. }.bind(this));
  1047. var content = "<div><b>"+MWF.xApplication.process.Xform.LP.currentActivity+"<font style=\"color: #ea621f\">"+data.work.activityName+"</font>, "+MWF.xApplication.process.Xform.LP.nextUser+"<font style=\"color: #ea621f\">"+users.join(", ")+"</font></b></div>";
  1048. var msg = {
  1049. "subject": MWF.xApplication.process.Xform.LP.workRetract,
  1050. "content": "<div>"+MWF.xApplication.process.Xform.LP.retractWorkInfor+"“"+this.businessData.work.title+"”</div>"+content
  1051. };
  1052. layout.desktop.message.addTooltip(msg);
  1053. return layout.desktop.message.addMessage(msg);
  1054. },
  1055. rerouteWork: function(e, ev){
  1056. if (!this.businessData.control["allowReroute"]){
  1057. MWF.xDesktop.notice("error", {x: "right", y:"top"}, "Permission Denied");
  1058. return false;
  1059. }
  1060. MWF.require("MWF.xDesktop.Dialog", function(){
  1061. var width = 480;
  1062. var height = 160;
  1063. var p = MWF.getCenterPosition(this.app.content, width, height);
  1064. var _self = this;
  1065. var dlg = new MWF.xDesktop.Dialog({
  1066. "title": this.app.lp.reroute,
  1067. "style": "work",
  1068. "top": p.y-100,
  1069. "left": p.x,
  1070. "fromTop": p.y-100,
  1071. "fromLeft": p.x,
  1072. "width": width,
  1073. "height": height,
  1074. "url": this.app.path+"reroute.html",
  1075. "container": this.app.content,
  1076. "isClose": true,
  1077. "onPostShow": function(){
  1078. $("rerouteWork_okButton").addEvent("click", function(){
  1079. _self.doRerouteWork(this);
  1080. }.bind(this));
  1081. $("rerouteWork_cancelButton").addEvent("click", function(){
  1082. this.close();
  1083. }.bind(this));
  1084. var select = $("rerouteWork_selectActivity");
  1085. _self.workAction.getRerouteTo(_self.businessData.work.process, function(json){
  1086. json.data.agentList.each(function(activity){
  1087. new Element("option", {
  1088. "value": activity.id+"#agent",
  1089. "text": activity.name
  1090. }).inject(select);
  1091. }.bind(_self));
  1092. json.data.cancelList.each(function(activity){
  1093. new Element("option", {
  1094. "value": activity.id+"#cancel",
  1095. "text": activity.name
  1096. }).inject(select);
  1097. }.bind(_self));
  1098. json.data.choiceList.each(function(activity){
  1099. new Element("option", {
  1100. "value": activity.id+"#choice",
  1101. "text": activity.name
  1102. }).inject(select);
  1103. }.bind(_self));
  1104. json.data.controllerList.each(function(activity){
  1105. new Element("option", {
  1106. "value": activity.id+"#condition",
  1107. "text": activity.name
  1108. }).inject(select);
  1109. }.bind(_self));
  1110. json.data.delayList.each(function(activity){
  1111. new Element("option", {
  1112. "value": activity.id+"#delay",
  1113. "text": activity.name
  1114. }).inject(select);
  1115. }.bind(_self));
  1116. json.data.embedList.each(function(activity){
  1117. new Element("option", {
  1118. "value": activity.id+"#embed",
  1119. "text": activity.name
  1120. }).inject(select);
  1121. }.bind(_self));
  1122. json.data.endList.each(function(activity){
  1123. new Element("option", {
  1124. "value": activity.id+"#end",
  1125. "text": activity.name
  1126. }).inject(select);
  1127. }.bind(_self));
  1128. json.data.invokeList.each(function(activity){
  1129. new Element("option", {
  1130. "value": activity.id+"#invoke",
  1131. "text": activity.name
  1132. }).inject(select);
  1133. }.bind(_self));
  1134. json.data.manualList.each(function(activity){
  1135. new Element("option", {
  1136. "value": activity.id+"#manual",
  1137. "text": activity.name
  1138. }).inject(select);
  1139. }.bind(_self));
  1140. json.data.mergeList.each(function(activity){
  1141. new Element("option", {
  1142. "value": activity.id+"#merge",
  1143. "text": activity.name
  1144. }).inject(select);
  1145. }.bind(_self));
  1146. json.data.messageList.each(function(activity){
  1147. new Element("option", {
  1148. "value": activity.id+"#message",
  1149. "text": activity.name
  1150. }).inject(select);
  1151. }.bind(_self));
  1152. json.data.parallelList.each(function(activity){
  1153. new Element("option", {
  1154. "value": activity.id+"#parallel",
  1155. "text": activity.name
  1156. }).inject(select);
  1157. }.bind(_self));
  1158. json.data.serviceList.each(function(activity){
  1159. new Element("option", {
  1160. "value": activity.id+"#service",
  1161. "text": activity.name
  1162. }).inject(select);
  1163. }.bind(_self));
  1164. json.data.splitList.each(function(activity){
  1165. new Element("option", {
  1166. "value": activity.id+"#split",
  1167. "text": activity.name
  1168. }).inject(select);
  1169. }.bind(_self));
  1170. }.bind(_self));
  1171. }
  1172. });
  1173. dlg.show();
  1174. }.bind(this));
  1175. },
  1176. doRerouteWork: function(dlg){
  1177. var opinion = $("rerouteWork_opinion").get("value");
  1178. var select = $("rerouteWork_selectActivity");
  1179. var activity = select.options[select.selectedIndex].get("value");
  1180. var activityName = select.options[select.selectedIndex].get("text");
  1181. var tmp = activity.split("#");
  1182. activity = tmp[0];
  1183. var type = tmp[1];
  1184. MWF.require("MWF.widget.Mask", function(){
  1185. this.mask = new MWF.widget.Mask({"style": "desktop", "zIndex": 50000});
  1186. this.mask.loadNode(this.app.content);
  1187. this.fireEvent("beforeReroute");
  1188. if (this.app && this.app.fireEvent) this.app.fireEvent("afterRetract");
  1189. this.rerouteWorkToActivity(activity, type, opinion, function(){
  1190. this.workAction.getJobByWork(function(workJson){
  1191. this.fireEvent("afterReroute");
  1192. if (this.app && this.app.fireEvent) this.app.fireEvent("afterReroute");
  1193. this.addRerouteMessage(workJson.data);
  1194. this.app.notice(MWF.xApplication.process.Xform.LP.rerouteOk+": "+activityName, "success");
  1195. this.app.close();
  1196. }.bind(this), null, this.businessData.work.id);
  1197. dlg.close();
  1198. if (this.mask) {this.mask.hide(); this.mask = null;}
  1199. }.bind(this), function(xhr, text, error){
  1200. var errorText = error+":"+text;
  1201. if (xhr) errorText = xhr.responseText;
  1202. this.app.notice("request json error: "+errorText, "error", dlg.node);
  1203. if (this.mask) {this.mask.hide(); this.mask = null;}
  1204. }.bind(this));
  1205. }.bind(this));
  1206. },
  1207. rerouteWorkToActivity: function(activity, type, opinion, success, failure){
  1208. if (this.businessData.task){
  1209. this.saveFormData(function(json){
  1210. this.workAction.rerouteWork(function(json){
  1211. if (success) success();
  1212. }.bind(this), function(xhr, text, error){
  1213. if (failure) failure(xhr, text, error);
  1214. }, this.businessData.work.id, activity, type);
  1215. }.bind(this), function(xhr, text, error){
  1216. if (failure) failure(xhr, text, error);
  1217. }, true, null, true);
  1218. }else{
  1219. this.workAction.rerouteWork(function(json){
  1220. if (success) success();
  1221. }.bind(this), function(xhr, text, error){
  1222. if (failure) failure(xhr, text, error);
  1223. }, this.businessData.work.id, activity, type);
  1224. }
  1225. },
  1226. addRerouteMessage: function(data){
  1227. var users = [];
  1228. data.taskList.each(function(task){
  1229. users.push(MWF.name.cn(task.person)+"("+MWF.name.cn(task.unit)+")");
  1230. }.bind(this));
  1231. var content = "<div><b>"+MWF.xApplication.process.Xform.LP.currentActivity+"<font style=\"color: #ea621f\">"+data.work.activityName+"</font>, "+MWF.xApplication.process.Xform.LP.nextUser+"<font style=\"color: #ea621f\">"+users.join(", ")+"</font></b></div>";
  1232. var msg = {
  1233. "subject": MWF.xApplication.process.Xform.LP.workReroute,
  1234. "content": "<div>"+MWF.xApplication.process.Xform.LP.rerouteWorkInfor+"“"+this.businessData.work.title+"”</div>"+content
  1235. };
  1236. layout.desktop.message.addTooltip(msg);
  1237. return layout.desktop.message.addMessage(msg);
  1238. },
  1239. deleteWork: function(){
  1240. var _self = this;
  1241. var p = MWF.getCenterPosition(this.app.content, 380, 150);
  1242. var event = {
  1243. "event":{
  1244. "x": p.x,
  1245. "y": p.y-200,
  1246. "clientX": p.x,
  1247. "clientY": p.y-200
  1248. }
  1249. };
  1250. this.app.confirm("infor", event, MWF.xApplication.process.Xform.LP.deleteWorkTitle, MWF.xApplication.process.Xform.LP.deleteWorkText, 380, 120, function(){
  1251. // _self.app.content.mask({
  1252. // "style": {
  1253. // "background-color": "#999",
  1254. // "opacity": 0.6
  1255. // }
  1256. // });
  1257. MWF.require("MWF.widget.Mask", function(){
  1258. _self.mask = new MWF.widget.Mask({"style": "desktop", "zIndex": 50000});
  1259. _self.mask.loadNode(_self.app.content);
  1260. debugger;
  1261. _self.fireEvent("beforeDelete");
  1262. if (_self.app && _self.app.fireEvent) _self.app.fireEvent("beforeDelete");
  1263. _self.doDeleteWork(function(){
  1264. _self.app.notice(MWF.xApplication.process.Xform.LP.workDelete+": “"+_self.businessData.work.title+"”", "success");
  1265. _self.app.close();
  1266. this.close();
  1267. if (_self.mask) {_self.mask.hide(); _self.mask = null;}
  1268. }.bind(this),function(xhr, text, error){
  1269. var errorText = error+":"+text;
  1270. if (xhr) errorText = xhr.responseText;
  1271. _self.app.notice("request json error: "+errorText, "error", dlg.node);
  1272. if (_self.mask) {_self.mask.hide(); _self.mask = null;}
  1273. }.bind(this));
  1274. }.bind(this));
  1275. //_self.workAction.deleteWork(function(json){
  1276. // _self.app.notice(MWF.xApplication.process.Xform.LP.workDelete+": “"+_self.businessData.work.title+"”", "success");
  1277. // _self.app.close();
  1278. // this.close();
  1279. //}.bind(this), null, _self.businessData.work.id);
  1280. //this.close();
  1281. }, function(){
  1282. this.close();
  1283. }, null, this.app.content);
  1284. },
  1285. doDeleteWork: function(success, failure){
  1286. if (this.businessData.control["allowDelete"]){
  1287. this.workAction.deleteWork(function(json){
  1288. if (success) success();
  1289. }.bind(this), function(xhr, text, error){
  1290. if (failure) failure(xhr, text, error);
  1291. }, this.businessData.work.id);
  1292. }else{
  1293. if (failure) failure(null, "Permission Denied", "");
  1294. }
  1295. },
  1296. //printWork: function(){
  1297. // var form = this.json.id;
  1298. // if (this.json.printForm){
  1299. // form = this.json.printForm;
  1300. // }
  1301. // window.open("/x_desktop/printWork.html?workid="+this.businessData.work.id+"&app="+this.businessData.work.application+"&form="+form);
  1302. //},
  1303. printWork: function(app, form){
  1304. var application = app || (this.businessData.work) ? this.businessData.work.application : this.businessData.workCompleted.application;
  1305. var form = form;
  1306. debugger;
  1307. if (!form){
  1308. form = this.json.id;
  1309. if (this.json.printForm) form = this.json.printForm;
  1310. }
  1311. if (this.businessData.workCompleted){
  1312. var application = app || this.businessData.workCompleted.application;
  1313. window.open("/x_desktop/printWork.html?workCompletedId="+this.businessData.workCompleted.id+"&app="+application+"&form="+form);
  1314. }else{
  1315. var application = app || this.businessData.work.application;
  1316. window.open("/x_desktop/printWork.html?workid="+this.businessData.work.id+"&app="+application+"&form="+form);
  1317. }
  1318. },
  1319. readedWork: function(e){
  1320. var _self = this;
  1321. var text = "您确定要将“"+this.businessData.work.title+"”标记为已阅吗?"
  1322. this.app.confirm("infor", e, "标记已阅确认", text, 350, 150, function(){
  1323. var read = null;
  1324. for (var i=0; i<_self.businessData.readList.length; i++){
  1325. if (_self.businessData.readList[i].person === layout.session.user.distinguishedName){
  1326. read = _self.businessData.readList[i];
  1327. break;
  1328. }
  1329. }
  1330. if (read){
  1331. _self.app.action.setReaded(function(){
  1332. _self.app.reload();
  1333. }.bind(_self), null, read.id, read);
  1334. }else{
  1335. _self.app.reload();
  1336. }
  1337. this.close();
  1338. }, function(){
  1339. this.close();
  1340. }, null, this.app.content);
  1341. },
  1342. openWindow: function(form, app){
  1343. //var application = app || (this.businessData.work) ? this.businessData.work.application : this.businessData.workCompleted.application;
  1344. var form = form;
  1345. if (!form){
  1346. form = this.json.id;
  1347. //if (this.json.printForm) form = this.json.printForm;
  1348. }
  1349. if (this.businessData.workCompleted){
  1350. var application = app || this.businessData.workCompleted.application;
  1351. window.open("/x_desktop/printWork.html?workCompletedId="+this.businessData.workCompleted.id+"&app="+application+"&form="+form);
  1352. }else{
  1353. var application = app || this.businessData.work.application;
  1354. window.open("/x_desktop/printWork.html?workid="+this.businessData.work.id+"&app="+application+"&form="+form);
  1355. }
  1356. //window.open("/x_desktop/printWork.html?workid="+this.businessData.work.id+"&app="+this.businessData.work.application+"&form="+form);
  1357. },
  1358. uploadedAttachment: function(site, id){
  1359. this.workAction.getAttachment(id, this.businessData.work.id, function(json){
  1360. var att = this.all[site];
  1361. if (att){
  1362. if (json.data) att.attachmentController.addAttachment(json.data);
  1363. att.attachmentController.checkActions();
  1364. att.fireEvent("upload", [json.data]);
  1365. }
  1366. }.bind(this));
  1367. },
  1368. replacedAttachment: function(site, id){
  1369. this.workAction.getAttachment(id, this.businessData.work.id, function(json){
  1370. var att = this.all[site];
  1371. if (att){
  1372. var attachmentController = att.attachmentController;
  1373. var attachment = null;
  1374. for (var i=0; i<attachmentController.attachments.length; i++){
  1375. if (attachmentController.attachments[i].data.id===id){
  1376. attachment = attachmentController.attachments[i];
  1377. break;
  1378. }
  1379. }
  1380. attachment.data = json.data;
  1381. attachment.reload();
  1382. attachmentController.checkActions();
  1383. }
  1384. }.bind(this))
  1385. }
  1386. });