WorkCompletedExplorer.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. //MWF.require("MWF.xAction.org.express.RestActions", null,false);
  2. MWF.require("MWF.widget.Mask", null, false);
  3. MWF.require("MWF.widget.Identity", null,false);
  4. //MWF.xDesktop.requireApp("Organization", "Selector.package", null, false);
  5. MWF.xDesktop.requireApp("process.Application", "WorkExplorer", null, false);
  6. MWF.xApplication.process.Application.WorkCompletedExplorer = new Class({
  7. Extends: MWF.xApplication.process.Application.WorkExplorer,
  8. Implements: [Options, Events],
  9. createSearchElementNode: function(){
  10. this.toCompletedNode = new Element("div", {
  11. "styles": this.css.toCompletedNode,
  12. "text": this.app.lp.toWork
  13. }).inject(this.toolbarNode);
  14. this.toCompletedNode.addEvents({
  15. "mouseover": function(){
  16. this.toCompletedNode.setStyles(this.css.toCompletedNode_over);
  17. }.bind(this),
  18. "mouseout": function(){
  19. this.toCompletedNode.setStyles(this.css.toCompletedNode);
  20. }.bind(this),
  21. "click": function(){
  22. this.app.workConfig();
  23. }.bind(this)
  24. });
  25. },
  26. _getFilterCount: function(callback){
  27. this.actions.listWorkCompletedFilterAttributeManage(this.app.options.id, function(json){
  28. if (callback) callback(json);
  29. });
  30. },
  31. loadProcess: function(){
  32. this.actions.listWorkCompletedProcessManage(this.app.options.id, function(json){
  33. json.data.each(function(process){
  34. this.loadProcessNode(process);
  35. }.bind(this));
  36. }.bind(this));
  37. },
  38. createWorkListHead: function(){
  39. var headNode = new Element("div", {"styles": this.css.workItemHeadNode}).inject(this.elementContentListNode);
  40. var html = "<div class='headArea1Node'><div class='checkAreaHeadNode'></div><div class='iconAreaHeadNode'></div><div class='titleAreaHeadNode'>"+this.app.lp.workTitle+"</div></div>" +
  41. "<div class='headArea2Node'><div class='timeAreaHeadNode'>"+this.app.lp.completedTime+"</div><div class='processAreaHeadNode'>"+this.app.lp.process+"</div></div>" +
  42. "<div class='headArea3Node'><div class='actionAreaHeadNode'>"+this.app.lp.action+"</div><div class='expireAreaHeadNode'>"+this.app.lp.expire+"</div><div class='personAreaHeadNode'>"+this.app.lp.person+"</div></div>";
  43. headNode.set("html", html);
  44. headNode.getElement(".headArea1Node").setStyles(this.css.headArea1Node);
  45. headNode.getElement(".headArea2Node").setStyles(this.css.headArea2Node);
  46. headNode.getElement(".headArea3Node").setStyles(this.css.headArea3Node);
  47. headNode.getElement(".checkAreaHeadNode").setStyles(this.css.checkAreaHeadNode);
  48. headNode.getElement(".iconAreaHeadNode").setStyles(this.css.iconAreaHeadNode);
  49. headNode.getElement(".titleAreaHeadNode").setStyles(this.css.titleAreaHeadNode);
  50. headNode.getElement(".timeAreaHeadNode").setStyles(this.css.timeAreaHeadNode);
  51. headNode.getElement(".processAreaHeadNode").setStyles(this.css.processAreaHeadNode);
  52. headNode.getElement(".personAreaHeadNode").setStyles(this.css.personAreaHeadNode);
  53. headNode.getElement(".actionAreaHeadNode").setStyles(this.css.actionAreaHeadNode);
  54. headNode.getElement(".expireAreaHeadNode").setStyles(this.css.expireAreaHeadNode);
  55. },
  56. _getCurrentPageData: function(callback, count){
  57. var id = (this.items.length) ? this.items[this.items.length-1].data.id : "(0)";
  58. if (this.filter){
  59. var filterData = {};
  60. Object.each(this.filter, function(v, k){
  61. if (k!="key"){
  62. if (!filterData[k]) filterData[k] = [];
  63. v.each(function(o){
  64. filterData[k].push(o.value);
  65. });
  66. }else{
  67. filterData[k] = v;
  68. }
  69. });
  70. this.actions.listWorkCompletedFilterManage(id, count || this.pageCount, this.app.options.id, filterData, function(json){
  71. if (callback) callback(json);
  72. });
  73. }else{
  74. this.actions.listWorkCompletedNextManage(id, count || this.pageCount, this.app.options.id, function(json){
  75. if (callback) callback(json);
  76. });
  77. }
  78. },
  79. loadElementList: function(count){
  80. if (!this.isItemsLoaded){
  81. if (!this.isItemLoadding){
  82. this.isItemLoadding = true;
  83. this._getCurrentPageData(function(json){
  84. this.count = json.count;
  85. if (!this.isCountShow){
  86. this.filterAllProcessNode.getFirst("span").set("text", "("+this.count+")");
  87. this.isCountShow = true;
  88. }
  89. if (json.count<=this.items.length){
  90. this.isItemsLoaded = true;
  91. }
  92. json.data.each(function(data){
  93. var item = this._createItem(data);
  94. this.items.push(item);
  95. this.works[data.id] = item;
  96. }.bind(this));
  97. this.isItemLoadding = false;
  98. if (this.loadItemQueue>0){
  99. this.loadItemQueue--;
  100. this.loadElementList();
  101. }
  102. this.mask.hide();
  103. }.bind(this), count);
  104. }else{
  105. this.loadItemQueue++;
  106. }
  107. }
  108. },
  109. _createItem: function(data){
  110. return new MWF.xApplication.process.Application.WorkCompletedExplorer.Work(data, this);
  111. },
  112. removeWorkCompleted: function(work){
  113. this.actions.removeWorkCompleted(work.data.id, function(json){
  114. json.data.each(function(item){
  115. this.items.erase(this.works[item.id]);
  116. this.works[item.id].destroy();
  117. MWF.release(this.works[item.id]);
  118. delete this.works[item.id];
  119. }.bind(this));
  120. }.bind(this));
  121. }
  122. });
  123. MWF.xApplication.process.Application.WorkCompletedExplorer.Work = new Class({
  124. Extends: MWF.xApplication.process.Application.WorkExplorer.Work,
  125. load: function(){
  126. this.node = new Element("div", {"styles": this.css.workItemNode});
  127. if (this.relative){
  128. this.node.inject(this.relative.node, "after");
  129. }else{
  130. this.node.inject(this.container);
  131. }
  132. this.workAreaNode = new Element("div", {"styles": this.css.workItemWorkNode}).inject(this.node);
  133. //this.otherWorkAreaNode = new Element("div", {"styles": this.css.workItemWorkNode}).inject(this.node);
  134. var html = "<div class='area1Node'><div class='checkAreaNode'></div><div class='iconAreaNode'></div><div class='titleAreaNode'><div class='titleAreaTextNode'>"+this.data.title+"</div></div></div>" +
  135. "<div class='area2Node'><div class='timeAreaNode'></div><div class='processAreaNode'><div class='processAreaTextNode'>"+this.data.processName+"</div></div></div>" +
  136. "<div class='area3Node'><div class='actionAreaNode'></div><div class='expireAreaNode'></div><div class='personAreaNode'></div></div>";
  137. this.workAreaNode.set("html", html);
  138. this.workAreaNode.getElement(".area1Node").setStyles(this.css.headArea1Node);
  139. this.workAreaNode.getElement(".area2Node").setStyles(this.css.headArea2Node);
  140. this.workAreaNode.getElement(".area3Node").setStyles(this.css.headArea3Node);
  141. this.checkAreaNode = this.workAreaNode.getElement(".checkAreaNode").setStyles(this.css.checkAreaHeadNode);
  142. this.iconAreaNode = this.workAreaNode.getElement(".iconAreaNode").setStyles(this.css.iconAreaHeadNode);
  143. this.titleAreaNode = this.workAreaNode.getElement(".titleAreaNode").setStyles(this.css.titleAreaHeadNode);
  144. this.timeAreaNode = this.workAreaNode.getElement(".timeAreaNode").setStyles(this.css.timeAreaHeadNode);
  145. this.processAreaNode = this.workAreaNode.getElement(".processAreaNode").setStyles(this.css.processAreaHeadNode);
  146. this.personAreaNode = this.workAreaNode.getElement(".personAreaNode").setStyles(this.css.personAreaHeadNode);
  147. this.actionAreaNode = this.workAreaNode.getElement(".actionAreaNode").setStyles(this.css.actionAreaHeadNode);
  148. this.expireAreaNode = this.workAreaNode.getElement(".expireAreaNode").setStyles(this.css.expireAreaHeadNode);
  149. this.processAreaTextNode = this.workAreaNode.getElement(".processAreaTextNode").setStyles(this.css.processAreaTextNode);
  150. this.titleAreaTextNode = this.workAreaNode.getElement(".titleAreaTextNode").setStyles(this.css.titleAreaTextNode);
  151. if (this.data.expired){
  152. this.expireAreaNode.setStyle("color", "#FF0000");
  153. this.expireAreaNode.set("text", this.explorer.app.lp.expired);
  154. }else{
  155. this.expireAreaNode.set("text", this.explorer.app.lp.notExpired);
  156. }
  157. this.expireAreaNode.setStyles(this.css.expireAreaNode);
  158. if (!this.data.control.allowVisit){
  159. this.node.setStyles(this.css.workItemNode_noread)
  160. this.checkAreaNode.setStyles(this.css.actionStopWorkNode);
  161. this.actionAreaNode.setStyles(this.css.actionStopWorkActionNode);
  162. }
  163. this.iconAreaNode.setStyles(this.css.iconWorkNode);
  164. this.titleAreaNode.setStyles(this.css.titleWorkNode);
  165. this.setPersonData();
  166. this.setTimeData();
  167. this.setActions();
  168. this.setEvents();
  169. },
  170. reload: function(callback){
  171. this.explorer.actions.getWorkCompleted(this.data.id, function(json){
  172. this.data = json.data;
  173. this.titleAreaTextNode.set("text", this.data.title);
  174. this.activityAreaTextNode.set("text", this.data.activityName);
  175. this.statusAreaNode.empty();
  176. this.setStatusData();
  177. if (this.relativeWorks.length){
  178. this.relativeWorks.each(function(work){
  179. work.destroy();
  180. });
  181. }
  182. this.relativeWorks = [];
  183. this.listRelatives();
  184. if (callback) callback();
  185. }.bind(this));
  186. },
  187. openWork: function(e){
  188. var options = {"workCompletedId": this.data.id, "isControl": this.explorer.app.options.application.allowControl};
  189. this.explorer.app.desktop.openApplication(e, "process.Work", options);
  190. },
  191. remove: function(e){
  192. var lp = this.explorer.app.lp;
  193. var text = lp.deleteWork.replace(/{title}/g, this.data.title);
  194. var _self = this;
  195. this.workAreaNode.setStyles(this.css.workItemWorkNode_remove);
  196. this.readyRemove = true;
  197. this.explorer.app.confirm("warn", e, lp.deleteWorkTitle, text, 350, 120, function(){
  198. _self.explorer.removeWorkCompleted(_self);
  199. this.close();
  200. }, function(){
  201. _self.workAreaNode.setStyles(_self.css.workItemWorkNode);
  202. _self.readyRemove = false;
  203. this.close();
  204. });
  205. },
  206. createChildNode: function(){
  207. this.childNode = new Element("div", {"styles": this.css.workItemChildNode}).inject(this.node);
  208. // this.taskAreaNode = new Element("div", {"styles": this.css.workItemTaskNode}).inject(this.childNode);
  209. this.doneAreaNode = new Element("div", {"styles": this.css.workItemDonwNode}).inject(this.childNode);
  210. this.readAreaNode = new Element("div", {"styles": this.css.workItemReadNode}).inject(this.childNode);
  211. this.readedAreaNode = new Element("div", {"styles": this.css.workItemReadedNode}).inject(this.childNode);
  212. // this.taskAreaTitleAreaNode = new Element("div", {"styles": this.css.workItemListTitleNode}).inject(this.taskAreaNode);
  213. this.doneAreaTitleAreaNode = new Element("div", {"styles": this.css.workItemListTitleNode}).inject(this.doneAreaNode);
  214. this.readAreaTitleAreaNode = new Element("div", {"styles": this.css.workItemListTitleNode}).inject(this.readAreaNode);
  215. this.readedAreaTitleAreaNode = new Element("div", {"styles": this.css.workItemListTitleNode}).inject(this.readedAreaNode);
  216. // var taskAreaTitleNode = new Element("div", {"styles": this.css.workItemTaskTitleNode, "text": this.explorer.app.lp.task}).inject(this.taskAreaTitleAreaNode);
  217. var doneAreaTitleNode = new Element("div", {"styles": this.css.workItemDoneTitleNode, "text": this.explorer.app.lp.done}).inject(this.doneAreaTitleAreaNode);
  218. var readAreaTitleNode = new Element("div", {"styles": this.css.workItemReadTitleNode, "text": this.explorer.app.lp.read}).inject(this.readAreaTitleAreaNode);
  219. var readedAreaTitleNode = new Element("div", {"styles": this.css.workItemReadedTitleNode, "text": this.explorer.app.lp.readed}).inject(this.readedAreaTitleAreaNode);
  220. // this.taskAreaContentNode = new Element("div", {"styles": this.css.taskAreaContentNode}).inject(this.taskAreaNode);
  221. this.doneAreaContentNode = new Element("div", {"styles": this.css.doneAreaContentNode}).inject(this.doneAreaNode);
  222. this.readAreaContentNode = new Element("div", {"styles": this.css.readAreaContentNode}).inject(this.readAreaNode);
  223. this.readedAreaContentNode = new Element("div", {"styles": this.css.readedAreaContentNode}).inject(this.readedAreaNode);
  224. },
  225. listAssignments: function(){
  226. this.explorer.actions.listWorkCompletedAssignments(this.data.id, function(json){
  227. // this.listTasks(json.data.taskList);
  228. this.listDones(json.data.taskCompletedList);
  229. this.listReads(json.data.readList);
  230. this.listReadeds(json.data.readCompletedList);
  231. }.bind(this));
  232. },
  233. listDones: function(list){
  234. if (list.length){
  235. list.each(function(data){
  236. var item = new MWF.xApplication.process.Application.WorkCompletedExplorer.Done(data, this.doneAreaContentNode, this.explorer, this);
  237. this.dones.push(item);
  238. this.doneChildren[data.id] = item;
  239. }.bind(this));
  240. }else{
  241. new Element("div", {"styles": this.css.noListText, "text": "["+this.explorer.app.lp.noDone+"]"}).inject(this.doneAreaTitleAreaNode);
  242. }
  243. },
  244. listReads: function(list){
  245. if (list.length){
  246. list.each(function(data){
  247. var item = new MWF.xApplication.process.Application.WorkCompletedExplorer.Read(data, this.readAreaContentNode, this.explorer, this);
  248. this.reads.push(item);
  249. this.readChildren[data.id] = item;
  250. }.bind(this));
  251. }else{
  252. new Element("div", {"styles": this.css.noListText, "text": "["+this.explorer.app.lp.noRead+"]"}).inject(this.readAreaTitleAreaNode);
  253. }
  254. },
  255. listReadeds: function(list){
  256. if (list.length){
  257. list.each(function(data){
  258. var item = new MWF.xApplication.process.Application.WorkCompletedExplorer.Readed(data, this.readedAreaContentNode, this.explorer, this);
  259. this.readeds.push(item);
  260. this.readedChildren[data.id] = item;
  261. }.bind(this));
  262. }else{
  263. new Element("div", {"styles": this.css.noListText, "text": "["+this.explorer.app.lp.noReaded+"]"}).inject(this.readedAreaTitleAreaNode);
  264. }
  265. },
  266. setTimeData: function(){
  267. var d = new Date().parse(this.data.completedTime).format("%Y-%m-%d");
  268. var t = new Date().parse(this.data.completedTime).format("%Y-%m-%d %H:%M");
  269. this.timeAreaNode.set("text", d);
  270. this.timeAreaNode.set("title", t);
  271. }
  272. });
  273. MWF.xApplication.process.Application.WorkCompletedExplorer.Done = new Class({
  274. Extends: MWF.xApplication.process.Application.WorkExplorer.Done
  275. });
  276. MWF.xApplication.process.Application.WorkCompletedExplorer.Read = new Class({
  277. Extends: MWF.xApplication.process.Application.WorkExplorer.Read
  278. });
  279. MWF.xApplication.process.Application.WorkCompletedExplorer.Readed = new Class({
  280. Extends: MWF.xApplication.process.Application.WorkExplorer.Readed
  281. });