Form.js 58 KB

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