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. debugger;
  85. this.count = json.count;
  86. if (!this.isCountShow){
  87. this.filterAllProcessNode.getFirst("span").set("text", "("+this.count+")");
  88. this.isCountShow = true;
  89. }
  90. if (json.count<=this.items.length){
  91. this.isItemsLoaded = true;
  92. }
  93. json.data.each(function(data){
  94. var item = this._createItem(data);
  95. this.items.push(item);
  96. this.works[data.id] = item;
  97. }.bind(this));
  98. this.isItemLoadding = false;
  99. if (this.loadItemQueue>0){
  100. this.loadItemQueue--;
  101. this.loadElementList();
  102. }
  103. this.mask.hide();
  104. }.bind(this), count);
  105. }else{
  106. this.loadItemQueue++;
  107. }
  108. }
  109. },
  110. _createItem: function(data){
  111. return new MWF.xApplication.process.Application.WorkCompletedExplorer.Work(data, this);
  112. },
  113. removeWorkCompleted: function(work){
  114. this.actions.removeWorkCompleted(work.data.id, function(json){
  115. json.data.each(function(item){
  116. this.items.erase(this.works[item.id]);
  117. this.works[item.id].destroy();
  118. MWF.release(this.works[item.id]);
  119. delete this.works[item.id];
  120. }.bind(this));
  121. }.bind(this));
  122. }
  123. });
  124. MWF.xApplication.process.Application.WorkCompletedExplorer.Work = new Class({
  125. Extends: MWF.xApplication.process.Application.WorkExplorer.Work,
  126. load: function(){
  127. this.node = new Element("div", {"styles": this.css.workItemNode});
  128. if (this.relative){
  129. this.node.inject(this.relative.node, "after");
  130. }else{
  131. this.node.inject(this.container);
  132. }
  133. this.workAreaNode = new Element("div", {"styles": this.css.workItemWorkNode}).inject(this.node);
  134. //this.otherWorkAreaNode = new Element("div", {"styles": this.css.workItemWorkNode}).inject(this.node);
  135. 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>" +
  136. "<div class='area2Node'><div class='timeAreaNode'></div><div class='processAreaNode'><div class='processAreaTextNode'>"+this.data.processName+"</div></div></div>" +
  137. "<div class='area3Node'><div class='actionAreaNode'></div><div class='expireAreaNode'></div><div class='personAreaNode'></div></div>";
  138. this.workAreaNode.set("html", html);
  139. this.workAreaNode.getElement(".area1Node").setStyles(this.css.headArea1Node);
  140. this.workAreaNode.getElement(".area2Node").setStyles(this.css.headArea2Node);
  141. this.workAreaNode.getElement(".area3Node").setStyles(this.css.headArea3Node);
  142. this.checkAreaNode = this.workAreaNode.getElement(".checkAreaNode").setStyles(this.css.checkAreaHeadNode);
  143. this.iconAreaNode = this.workAreaNode.getElement(".iconAreaNode").setStyles(this.css.iconAreaHeadNode);
  144. this.titleAreaNode = this.workAreaNode.getElement(".titleAreaNode").setStyles(this.css.titleAreaHeadNode);
  145. this.timeAreaNode = this.workAreaNode.getElement(".timeAreaNode").setStyles(this.css.timeAreaHeadNode);
  146. this.processAreaNode = this.workAreaNode.getElement(".processAreaNode").setStyles(this.css.processAreaHeadNode);
  147. this.personAreaNode = this.workAreaNode.getElement(".personAreaNode").setStyles(this.css.personAreaHeadNode);
  148. this.actionAreaNode = this.workAreaNode.getElement(".actionAreaNode").setStyles(this.css.actionAreaHeadNode);
  149. this.expireAreaNode = this.workAreaNode.getElement(".expireAreaNode").setStyles(this.css.expireAreaHeadNode);
  150. this.processAreaTextNode = this.workAreaNode.getElement(".processAreaTextNode").setStyles(this.css.processAreaTextNode);
  151. this.titleAreaTextNode = this.workAreaNode.getElement(".titleAreaTextNode").setStyles(this.css.titleAreaTextNode);
  152. if (this.data.expired){
  153. this.expireAreaNode.setStyle("color", "#FF0000");
  154. this.expireAreaNode.set("text", this.explorer.app.lp.expired);
  155. }else{
  156. this.expireAreaNode.set("text", this.explorer.app.lp.notExpired);
  157. }
  158. this.expireAreaNode.setStyles(this.css.expireAreaNode);
  159. if (!this.data.control.allowVisit){
  160. this.node.setStyles(this.css.workItemNode_noread)
  161. this.checkAreaNode.setStyles(this.css.actionStopWorkNode);
  162. this.actionAreaNode.setStyles(this.css.actionStopWorkActionNode);
  163. }
  164. this.iconAreaNode.setStyles(this.css.iconWorkNode);
  165. this.titleAreaNode.setStyles(this.css.titleWorkNode);
  166. this.setPersonData();
  167. this.setTimeData();
  168. this.setActions();
  169. this.setEvents();
  170. },
  171. reload: function(callback){
  172. this.explorer.actions.getWorkCompleted(this.data.id, function(json){
  173. this.data = json.data;
  174. this.titleAreaTextNode.set("text", this.data.title);
  175. this.activityAreaTextNode.set("text", this.data.activityName);
  176. this.statusAreaNode.empty();
  177. this.setStatusData();
  178. if (this.relativeWorks.length){
  179. this.relativeWorks.each(function(work){
  180. work.destroy();
  181. });
  182. }
  183. this.relativeWorks = [];
  184. this.listRelatives();
  185. if (callback) callback();
  186. }.bind(this));
  187. },
  188. openWork: function(e){
  189. var options = {"workCompletedId": this.data.id, "isControl": this.explorer.app.options.application.allowControl};
  190. this.explorer.app.desktop.openApplication(e, "process.Work", options);
  191. },
  192. remove: function(e){
  193. var lp = this.explorer.app.lp;
  194. var text = lp.deleteWork.replace(/{title}/g, this.data.title);
  195. var _self = this;
  196. this.workAreaNode.setStyles(this.css.workItemWorkNode_remove);
  197. this.readyRemove = true;
  198. this.explorer.app.confirm("warn", e, lp.deleteWorkTitle, text, 350, 120, function(){
  199. _self.explorer.removeWorkCompleted(_self);
  200. this.close();
  201. }, function(){
  202. _self.workAreaNode.setStyles(_self.css.workItemWorkNode);
  203. _self.readyRemove = false;
  204. this.close();
  205. });
  206. },
  207. createChildNode: function(){
  208. this.childNode = new Element("div", {"styles": this.css.workItemChildNode}).inject(this.node);
  209. // this.taskAreaNode = new Element("div", {"styles": this.css.workItemTaskNode}).inject(this.childNode);
  210. this.doneAreaNode = new Element("div", {"styles": this.css.workItemDonwNode}).inject(this.childNode);
  211. this.readAreaNode = new Element("div", {"styles": this.css.workItemReadNode}).inject(this.childNode);
  212. this.readedAreaNode = new Element("div", {"styles": this.css.workItemReadedNode}).inject(this.childNode);
  213. // this.taskAreaTitleAreaNode = new Element("div", {"styles": this.css.workItemListTitleNode}).inject(this.taskAreaNode);
  214. this.doneAreaTitleAreaNode = new Element("div", {"styles": this.css.workItemListTitleNode}).inject(this.doneAreaNode);
  215. this.readAreaTitleAreaNode = new Element("div", {"styles": this.css.workItemListTitleNode}).inject(this.readAreaNode);
  216. this.readedAreaTitleAreaNode = new Element("div", {"styles": this.css.workItemListTitleNode}).inject(this.readedAreaNode);
  217. // var taskAreaTitleNode = new Element("div", {"styles": this.css.workItemTaskTitleNode, "text": this.explorer.app.lp.task}).inject(this.taskAreaTitleAreaNode);
  218. var doneAreaTitleNode = new Element("div", {"styles": this.css.workItemDoneTitleNode, "text": this.explorer.app.lp.done}).inject(this.doneAreaTitleAreaNode);
  219. var readAreaTitleNode = new Element("div", {"styles": this.css.workItemReadTitleNode, "text": this.explorer.app.lp.read}).inject(this.readAreaTitleAreaNode);
  220. var readedAreaTitleNode = new Element("div", {"styles": this.css.workItemReadedTitleNode, "text": this.explorer.app.lp.readed}).inject(this.readedAreaTitleAreaNode);
  221. // this.taskAreaContentNode = new Element("div", {"styles": this.css.taskAreaContentNode}).inject(this.taskAreaNode);
  222. this.doneAreaContentNode = new Element("div", {"styles": this.css.doneAreaContentNode}).inject(this.doneAreaNode);
  223. this.readAreaContentNode = new Element("div", {"styles": this.css.readAreaContentNode}).inject(this.readAreaNode);
  224. this.readedAreaContentNode = new Element("div", {"styles": this.css.readedAreaContentNode}).inject(this.readedAreaNode);
  225. },
  226. listAssignments: function(){
  227. this.explorer.actions.listWorkCompletedAssignments(this.data.id, function(json){
  228. // this.listTasks(json.data.taskList);
  229. this.listDones(json.data.taskCompletedList);
  230. this.listReads(json.data.readList);
  231. this.listReadeds(json.data.readCompletedList);
  232. }.bind(this));
  233. },
  234. listDones: function(list){
  235. if (list.length){
  236. list.each(function(data){
  237. var item = new MWF.xApplication.process.Application.WorkCompletedExplorer.Done(data, this.doneAreaContentNode, this.explorer, this);
  238. this.dones.push(item);
  239. this.doneChildren[data.id] = item;
  240. }.bind(this));
  241. }else{
  242. new Element("div", {"styles": this.css.noListText, "text": "["+this.explorer.app.lp.noDone+"]"}).inject(this.doneAreaTitleAreaNode);
  243. }
  244. },
  245. listReads: function(list){
  246. if (list.length){
  247. list.each(function(data){
  248. var item = new MWF.xApplication.process.Application.WorkCompletedExplorer.Read(data, this.readAreaContentNode, this.explorer, this);
  249. this.reads.push(item);
  250. this.readChildren[data.id] = item;
  251. }.bind(this));
  252. }else{
  253. new Element("div", {"styles": this.css.noListText, "text": "["+this.explorer.app.lp.noRead+"]"}).inject(this.readAreaTitleAreaNode);
  254. }
  255. },
  256. listReadeds: function(list){
  257. if (list.length){
  258. list.each(function(data){
  259. var item = new MWF.xApplication.process.Application.WorkCompletedExplorer.Readed(data, this.readedAreaContentNode, this.explorer, this);
  260. this.readeds.push(item);
  261. this.readedChildren[data.id] = item;
  262. }.bind(this));
  263. }else{
  264. new Element("div", {"styles": this.css.noListText, "text": "["+this.explorer.app.lp.noReaded+"]"}).inject(this.readedAreaTitleAreaNode);
  265. }
  266. },
  267. setTimeData: function(){
  268. var d = new Date().parse(this.data.completedTime).format("%Y-%m-%d");
  269. var t = new Date().parse(this.data.completedTime).format("%Y-%m-%d %H:%M");
  270. this.timeAreaNode.set("text", d);
  271. this.timeAreaNode.set("title", t);
  272. }
  273. });
  274. MWF.xApplication.process.Application.WorkCompletedExplorer.Done = new Class({
  275. Extends: MWF.xApplication.process.Application.WorkExplorer.Done
  276. });
  277. MWF.xApplication.process.Application.WorkCompletedExplorer.Read = new Class({
  278. Extends: MWF.xApplication.process.Application.WorkExplorer.Read
  279. });
  280. MWF.xApplication.process.Application.WorkCompletedExplorer.Readed = new Class({
  281. Extends: MWF.xApplication.process.Application.WorkExplorer.Readed
  282. });