Main.js 105 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548
  1. MWF.require("MWF.widget.Mask", null, false);
  2. MWF.xApplication.process.TaskCenter.options.multitask = false;
  3. MWF.xApplication.process.TaskCenter.Main = new Class({
  4. Extends: MWF.xApplication.Common.Main,
  5. Implements: [Options, Events],
  6. options: {
  7. "style": "default",
  8. "name": "process.TaskCenter",
  9. "icon": "icon.png",
  10. "width": "1280",
  11. "height": "700",
  12. "title": MWF.xApplication.process.TaskCenter.LP.title,
  13. "filterMap":{
  14. "applicationList": "applicationList",
  15. "processList": "processList",
  16. "creatorCompanyList": "creatorCompanyList",
  17. "creatorDepartmentList": "creatorDepartmentList",
  18. "activityNameList": "activityNameList",
  19. "completedTimeMonthList": "completedTimeMonthList",
  20. "key": "key"
  21. }
  22. },
  23. onQueryLoad: function(){
  24. this.lp = MWF.xApplication.process.TaskCenter.LP;
  25. },
  26. loadApplication: function(callback){
  27. this.appIcons = {};
  28. this.tabs = [];
  29. this.tabShadows = [];
  30. this.loadTitle();
  31. this.loadTab();
  32. this.loadContent();
  33. this.currentTab = "";
  34. this.openTab();
  35. },
  36. openTab: function(){
  37. var tab = "task";
  38. if (this.status) tab = this.status.navi;
  39. switch (tab){
  40. case "task":
  41. this.showTask();
  42. break;
  43. case "done":
  44. this.showDone();
  45. break;
  46. case "read":
  47. this.showRead();
  48. break;
  49. case "readed":
  50. this.showReaded();
  51. break;
  52. case "review":
  53. this.showReview();
  54. break;
  55. default:
  56. this.showTask();
  57. break;
  58. }
  59. },
  60. loadTitle: function(){
  61. this.loadTitleBar();
  62. this.loadTitleUserNode();
  63. this.loadStartProcessActionNode();
  64. this.loadTitleTextNode();
  65. this.loadSearchNode();
  66. },
  67. //createCreateAction: function(){
  68. // this.createApplicationNode = new Element("div", {
  69. // "styles": this.css.createApplicationNode,
  70. // "title": this.options.tooltip.create
  71. // }).inject(this.toolbarAreaNode);
  72. // this.createApplicationNode.addEvent("click", function(){
  73. // this.createApplication();
  74. // }.bind(this));
  75. //},
  76. loadTitleBar: function(){
  77. this.taskTitleBar = new Element("div", {
  78. "styles": this.css.taskTitleBar
  79. }).inject(this.content);
  80. },
  81. loadTitleUserNode: function(){
  82. this.taskTitleUserNode = new Element("div", {
  83. "styles": this.css.taskTitleUserNode
  84. }).inject(this.taskTitleBar);
  85. this.taskTitleUserIconNode = new Element("div", {
  86. "styles": this.css.taskTitleUserIconNode
  87. }).inject(this.taskTitleUserNode);
  88. this.taskTitleUserTextNode = new Element("div", {
  89. "styles": this.css.taskTitleUserTextNode,
  90. "text": this.desktop.session.user.name
  91. }).inject(this.taskTitleUserNode);
  92. },
  93. loadStartProcessActionNode: function() {
  94. this.startProcessAction = new Element("div", {
  95. "styles": this.css.startProcessAction
  96. }).inject(this.taskTitleBar);
  97. this.startProcessAction.addEvents({
  98. "click": function(e){
  99. this.showStartProcessArea();
  100. }.bind(this)
  101. });
  102. },
  103. showStartProcessArea: function(){
  104. if (!this.startProcessAreaNode){
  105. this.createStartProcessArea();
  106. }
  107. this.startProcessAreaNode.fade("0.9")
  108. //this.startProcessTween.start("left", "-400px", "0px");
  109. },
  110. closeStartProcessArea: function(){
  111. //if (this.startProcessAreaNode) this.startProcessTween.start("left", "0px", "-400px");
  112. if (this.startProcessAreaNode) this.startProcessAreaNode.fade("out");
  113. },
  114. createStartProcessArea: function(){
  115. this.createStartProcessAreaNode();
  116. this.createStartProcessCloseNode();
  117. this.createStartProcessScrollNode();
  118. this.listApplications();
  119. this.setResizeStartProcessAreaHeight();
  120. this.addEvent("resize", this.setResizeStartProcessAreaHeight.bind(this));
  121. //this.startProcessTween = new Fx.Tween(this.startProcessAreaNode, {
  122. // "duration": "200",
  123. // "transition": Fx.Transitions.Quad.easeOut
  124. //});
  125. },
  126. createStartProcessAreaNode: function(){
  127. this.startProcessAreaNode = new Element("div", {"styles": this.css.startProcessAreaNode}).inject(this.content);
  128. this.startProcessAreaNode.addEvent("click", function(e){
  129. this.closeStartProcessArea();
  130. }.bind(this));
  131. },
  132. createStartProcessCloseNode: function(){
  133. this.startProcessTopNode = new Element("div", {"styles": this.css.startProcessTopNode}).inject(this.startProcessAreaNode);
  134. this.startProcessCloseNode = new Element("div", {"styles": this.css.startProcessCloseNode}).inject(this.startProcessTopNode);
  135. this.startProcessCloseNode.addEvent("click", function(e){
  136. this.closeStartProcessArea();
  137. }.bind(this));
  138. },
  139. createStartProcessScrollNode: function(){
  140. this.startProcessScrollNode = new Element("div", {"styles": this.css.startProcessScrollNode}).inject(this.startProcessAreaNode);
  141. MWF.require("MWF.widget.ScrollBar", function(){
  142. new MWF.widget.ScrollBar(this.startProcessScrollNode, {
  143. "style":"xApp_taskcenter", "where": "after", "distance": 30, "friction": 4, "axis": {"x": false, "y": true}
  144. });
  145. }.bind(this));
  146. this.startProcessContentNode = new Element("div", {"styles": this.css.startProcessContentNode}).inject(this.startProcessScrollNode);
  147. },
  148. listApplications: function(){
  149. this.getAction(function(){
  150. this.action.listApplication(function(json){
  151. json.data.each(function(app){
  152. new MWF.xApplication.process.TaskCenter.Application(app, this, this.startProcessContentNode);
  153. }.bind(this));
  154. }.bind(this));
  155. }.bind(this));
  156. },
  157. getAction: function(callback){
  158. if (!this.action){
  159. MWF.xDesktop.requireApp("process.TaskCenter", "Actions.RestActions", function(){
  160. this.action = new MWF.xApplication.process.TaskCenter.Actions.RestActions();
  161. if (callback) callback();
  162. }.bind(this));
  163. }else{
  164. if (callback) callback();
  165. }
  166. },
  167. setResizeStartProcessAreaHeight: function(){
  168. var size = this.content.getSize();
  169. if (this.startProcessAreaNode){
  170. var topSize = this.startProcessCloseNode.getSize();
  171. var y = size.y-topSize.y-80;
  172. var x = size.x - 110;
  173. var areay = size.y-60;
  174. var areax = size.x-90;
  175. this.startProcessScrollNode.setStyle("height", ""+y+"px");
  176. this.startProcessScrollNode.setStyle("width", ""+x+"px");
  177. this.startProcessAreaNode.setStyle("height", ""+areay+"px");
  178. this.startProcessAreaNode.setStyle("width", ""+areax+"px");
  179. }
  180. },
  181. loadTitleTextNode: function(){
  182. this.taskTitleTextNode = new Element("div", {
  183. "styles": this.css.taskTitleTextNode,
  184. "text": this.lp.title
  185. }).inject(this.taskTitleBar);
  186. },
  187. loadSearchNode: function(){
  188. this.searchBarAreaNode = new Element("div", {
  189. "styles": this.css.searchBarAreaNode
  190. }).inject(this.taskTitleBar);
  191. this.searchBarNode = new Element("div", {
  192. "styles": this.css.searchBarNode
  193. }).inject(this.searchBarAreaNode);
  194. this.searchBarActionNode = new Element("div", {
  195. "styles": this.css.searchBarActionNode
  196. }).inject(this.searchBarNode);
  197. this.searchBarInputBoxNode = new Element("div", {
  198. "styles": this.css.searchBarInputBoxNode
  199. }).inject(this.searchBarNode);
  200. this.searchBarInputNode = new Element("input", {
  201. "type": "text",
  202. "value": this.lp.searchKey,
  203. "styles": this.css.searchBarInputNode
  204. }).inject(this.searchBarInputBoxNode);
  205. var _self = this;
  206. this.searchBarActionNode.addEvent("click", function(){
  207. this.searchTask();
  208. }.bind(this));
  209. this.searchBarInputNode.addEvents({
  210. "focus": function(){
  211. if (this.value==_self.lp.searchKey) this.set("value", "");
  212. },
  213. "blur": function(){if (!this.value) this.set("value", _self.lp.searchKey);},
  214. "keydown": function(e){
  215. if (e.code==13){
  216. this.searchTask();
  217. e.preventDefault();
  218. }
  219. }.bind(this),
  220. "selectstart": function(e){
  221. e.preventDefault();
  222. }
  223. });
  224. },
  225. loadTab: function(){
  226. this.tabAreaNode = new Element("div", {
  227. "styles": this.css.tabAreaNode
  228. }).inject(this.content);
  229. this.createTabLeft();
  230. this.createTabItem(this.lp.task, "task.png", "task", function(){this.showTask();}.bind(this));
  231. this.createTabItem(this.lp.done, "done.png", "taskCompleted", function(){this.showDone();}.bind(this));
  232. this.createTabItem(this.lp.read, "read.png", "read", function(){this.showRead();}.bind(this));
  233. this.createTabItem(this.lp.readed, "readed.png", "readCompleted", function(){this.showReaded();}.bind(this));
  234. this.createTabItem(this.lp.review, "review.png", "review", function(){this.showReview();}.bind(this));
  235. this.createTabRight();
  236. this.createShadowNode();
  237. this.getWorkCounts();
  238. },
  239. getWorkCounts: function(){
  240. this.getAction(function(){
  241. this.action.getCount(function(json){
  242. this.counts = json.data;
  243. this["taskCountNode"].set("text", "[ "+((this.counts.task>100) ? "99" : this.counts.task)+" ]");
  244. this["taskCompletedCountNode"].set("text", "[ "+((this.counts.taskCompleted>100) ? "99" : this.counts.taskCompleted)+" ]");
  245. this["readCountNode"].set("text", "[ "+((this.counts.read>100) ? "99" : this.counts.read)+" ]");
  246. this["readCompletedCountNode"].set("text", "[ "+((this.counts.readCompleted>100) ? "99" : this.counts.readCompleted)+" ]");
  247. this["reviewCountNode"].set("text", "[ "+((this.counts.review>100) ? "99" : this.counts.review)+" ]");
  248. }.bind(this), null, this.desktop.session.user.name);
  249. }.bind(this));
  250. },
  251. createTaskList: function(){
  252. if (!this.contentNode) this.loadContent();
  253. this.taskList = new MWF.xApplication.process.TaskCenter.TaskList(this.contentListAreaNode, this);
  254. },
  255. refreshAll: function(){
  256. this.getWorkCounts();
  257. if (this.taskList) if (this.currentTab == "task") this.taskList.refresh();
  258. //if (this.taskCompletedList) if (this.currentTab == "done") this.taskCompletedList.refresh();
  259. //if (this.readList) if (this.currentTab == "read") this.readList.refresh();
  260. //if (this.readedList) if (this.currentTab == "readed") this.readedList.refresh();
  261. //if (this.reviewList) if (this.currentTab == "review") this.reviewList.refresh();
  262. },
  263. showTask: function(){
  264. if (this.currentTab != "task"){
  265. this.showTab(0);
  266. this.currentTab = "task";
  267. if (!this.taskList){
  268. this.createTaskList();
  269. this.taskList.show();
  270. }else{
  271. this.taskList.show();
  272. if (this.taskList) this.taskList.refresh();
  273. }
  274. }else{
  275. if (this.taskList) this.taskList.refresh();
  276. }
  277. this.searchBarAreaNode.setStyle("display", "none");
  278. },
  279. createTaskCompletedList: function(filterData){
  280. if (!this.contentNode) this.loadContent();
  281. this.taskCompletedList = new MWF.xApplication.process.TaskCenter.TaskCompletedList(this.contentListAreaNode, this, filterData);
  282. //if (filterData) this.taskCompletedList.filterData = filterData;
  283. },
  284. showDone: function(){
  285. if (this.currentTab != "done"){
  286. this.showTab(1);
  287. this.currentTab = "done";
  288. if (!this.taskCompletedList){
  289. this.createTaskCompletedList((this.status) ? this.status.filter : null);
  290. this.taskCompletedList.show();
  291. }else{
  292. this.taskCompletedList.show();
  293. if (this.taskCompletedList) this.taskCompletedList.refresh();
  294. }
  295. }else{
  296. if (this.taskCompletedList) this.taskCompletedList.refresh();
  297. }
  298. this.searchBarAreaNode.setStyle("display", "block");
  299. this.searchBarInputNode.set("value", this.lp.searchKey);
  300. },
  301. createReadList: function(filterData){
  302. if (!this.contentNode) this.loadContent();
  303. this.readList = new MWF.xApplication.process.TaskCenter.ReadList(this.contentListAreaNode, this, filterData);
  304. //if (filterData) this.taskCompletedList.filterData = filterData;
  305. },
  306. showRead: function(){
  307. if (this.currentTab != "read"){
  308. this.showTab(2);
  309. this.currentTab = "read";
  310. if (!this.readList){
  311. this.createReadList((this.status) ? this.status.filter : null);
  312. this.readList.show();
  313. }else{
  314. this.readList.show();
  315. if (this.readList) this.readList.refresh();
  316. }
  317. }else{
  318. if (this.readList) this.readList.refresh();
  319. }
  320. this.searchBarAreaNode.setStyle("display", "block");
  321. this.searchBarInputNode.set("value", this.lp.searchKey);
  322. },
  323. createReadedList: function(filterData){
  324. if (!this.contentNode) this.loadContent();
  325. this.readedList = new MWF.xApplication.process.TaskCenter.ReadedList(this.contentListAreaNode, this, filterData);
  326. //if (filterData) this.taskCompletedList.filterData = filterData;
  327. },
  328. showReaded: function(){
  329. if (this.currentTab != "readed"){
  330. this.showTab(3);
  331. this.currentTab = "readed";
  332. if (!this.readedList){
  333. this.createReadedList((this.status) ? this.status.filter : null);
  334. this.readedList.show();
  335. }else{
  336. this.readedList.show();
  337. if (this.readedList) this.readedList.refresh();
  338. }
  339. }else{
  340. if (this.readedList) this.readedList.refresh();
  341. }
  342. this.searchBarAreaNode.setStyle("display", "block");
  343. this.searchBarInputNode.set("value", this.lp.searchKey);
  344. },
  345. createReviewList: function(filterData){
  346. if (!this.contentNode) this.loadContent();
  347. this.reviewList = new MWF.xApplication.process.TaskCenter.ReviewList(this.contentListAreaNode, this, filterData);
  348. //if (filterData) this.taskCompletedList.filterData = filterData;
  349. },
  350. showReview: function(){
  351. if (this.currentTab != "review"){
  352. this.showTab(4);
  353. this.currentTab = "review";
  354. if (!this.reviewList){
  355. this.createReviewList((this.status) ? this.status.filter : null)
  356. this.reviewList.show();
  357. }else{
  358. this.reviewList.show();
  359. if (this.reviewList) this.reviewList.refresh();
  360. }
  361. }else{
  362. if (this.reviewList) this.reviewList.refresh();
  363. }
  364. this.searchBarAreaNode.setStyle("display", "block");
  365. },
  366. showTab: function(idx){
  367. this.tabs.each(function(node, i){
  368. if (i==idx){
  369. node.setStyles(this.css.tabItemNode_current);
  370. }else{
  371. node.setStyles(this.css.tabItemNode);
  372. }
  373. }.bind(this));
  374. this.tabShadows.each(function(node, i){
  375. if (i==idx){
  376. node.setStyles(this.css.tabShadowItemNode_current);
  377. }else{
  378. node.setStyles(this.css.tabShadowItemNode);
  379. }
  380. }.bind(this));
  381. },
  382. createTabLeft: function(){
  383. var tab = new Element("div", {
  384. "styles": this.css.tabItemLeftNode,
  385. }).inject(this.tabAreaNode);
  386. },
  387. createTabRight: function(){
  388. var tab = new Element("div", {
  389. "styles": this.css.tabItemRightNode,
  390. }).inject(this.tabAreaNode);
  391. var box = new Element("div", {
  392. "styles": this.css.tabItemRightBoxNode,
  393. }).inject(tab);
  394. },
  395. createTabItem: function(text, icon, countKey, action){
  396. var tab = new Element("div", {
  397. "styles": this.css.tabItemNode,
  398. }).inject(this.tabAreaNode);
  399. var tabItem = new Element("div", {
  400. "styles": this.css.tabItemAreaNode,
  401. }).inject(tab);
  402. var tabContent = new Element("div", {
  403. "styles": this.css.tabItemContentNode,
  404. }).inject(tabItem);
  405. var tabIcon = new Element("div", {
  406. "styles": this.css.tabItemIconNode,
  407. }).inject(tabContent);
  408. tabIcon.setStyle("background-image", "url("+"/x_component_process_TaskCenter/$Main/default/tab/"+icon+")");
  409. var tabText = new Element("div", {
  410. "styles": this.css.tabItemTextNode,
  411. "text": text
  412. }).inject(tabContent);
  413. this[countKey+"CountNode"] = new Element("div", {
  414. "styles": this.css.tabItemCountNode
  415. }).inject(tabContent);
  416. tab.addEvent("click", function(){action();}.bind(this));
  417. this.tabs.push(tab);
  418. },
  419. createShadowNode: function(){
  420. this.tabShadowNode = new Element("div", {
  421. "styles": this.css.tabShadowNode,
  422. }).inject(this.content);
  423. this.createShadowLeftRightNode();
  424. this.createShadowItemNode();
  425. this.createShadowLeftRightNode();
  426. },
  427. createShadowLeftRightNode: function(){
  428. new Element("div", {
  429. "styles": this.css.tabShadowLeftRightNode,
  430. }).inject(this.tabShadowNode);
  431. },
  432. createShadowItemNode: function(){
  433. for (var i=0; i<5; i++){
  434. this.tabShadows.push(new Element("div", {
  435. "styles": this.css.tabShadowItemNode,
  436. }).inject(this.tabShadowNode));
  437. }
  438. },
  439. loadContent: function(){
  440. this.contentNode = new Element("div", {"styles": this.css.contentNode}).inject(this.content);
  441. this.contentListAreaNode = new Element("div", {"styles": this.css.contentListAreaNode}).inject(this.contentNode);
  442. this.setContentNodeHeight();
  443. this.addEvent("resize", this.setContentNodeHeight.bind(this));
  444. },
  445. setContentNodeHeight: function(){
  446. var size = this.content.getSize();
  447. var titleSize = this.taskTitleBar.getSize();
  448. var tabSize1 = this.tabAreaNode.getSize();
  449. var tabSize2 = this.tabShadowNode.getSize();
  450. var y = size.y-titleSize.y-tabSize1.y-tabSize2.y-1;
  451. this.contentNode.setStyle("height", ""+y+"px");
  452. var x = 10;
  453. if (this.taskList) x = x + size.x;
  454. if (this.taskCompletedList) x = x + size.x;
  455. if (this.readList) x = x + size.x;
  456. if (this.readCompletedList) x = x + size.x;
  457. this.contentListAreaNode.setStyle("width", ""+x+"px");
  458. },
  459. recordStatus: function(){
  460. var tab = this.currentTab || "task";
  461. var filter = null;
  462. if (tab=="done"){
  463. filter = this.taskCompletedList.filterData;
  464. }
  465. if (tab=="read"){
  466. filter = this.readList.filterData;
  467. }
  468. if (tab=="readed"){
  469. filter = this.readedList.filterData;
  470. }
  471. if (tab=="review"){
  472. filter = this.reviewList.filterData;
  473. }
  474. return {"navi": this.currentTab || "task", "filter": filter};
  475. },
  476. searchTask: function(){
  477. var keyWord = this.searchBarInputNode.get("value");
  478. if (keyWord && (keyWord!=this.lp.searchKey)){
  479. var tab = this.currentTab || "task";
  480. switch (tab){
  481. case "done":
  482. if (!this.taskCompletedList.filterData) this.taskCompletedList.filterData = {};
  483. this.taskCompletedList.filterData.key = keyWord;
  484. this.taskCompletedList.refilter();
  485. break;
  486. case "read":
  487. if (!this.readList.filterData) this.readList.filterData = {};
  488. this.readList.filterData.key = keyWord;
  489. this.readList.refilter();
  490. break;
  491. case "readed":
  492. if (!this.readedList.filterData) this.readedList.filterData = {};
  493. this.readedList.filterData.key = keyWord;
  494. this.readedList.refilter();
  495. break;
  496. case "review":
  497. if (!this.reviewList.filterData) this.reviewList.filterData = {};
  498. this.reviewList.filterData.key = keyWord;
  499. this.reviewList.refilter();
  500. break;
  501. }
  502. }
  503. }
  504. });
  505. MWF.xApplication.process.TaskCenter.Application = new Class({
  506. initialize: function(data, app, container){
  507. this.bgColors = ["#30afdc", "#e9573e", "#8dc153", "#9d4a9c", "#ab8465", "#959801", "#434343", "#ffb400", "#9e7698", "#00a489"];
  508. this.data = data;
  509. this.app = app;
  510. this.container = container;
  511. this.css = this.app.css;
  512. this.load();
  513. },
  514. load: function(){
  515. this.node = new Element("div", {"styles": this.css.applicationNode}).inject(this.container);
  516. this.topNode = new Element("div", {"styles": this.css.applicationTopNode}).inject(this.node);
  517. // this.topNode.setStyle("background-color", this.bgColors[(Math.random()*10).toInt()]);
  518. this.iconNode = new Element("div", {"styles": this.css.applicationIconNode}).inject(this.topNode);
  519. if (this.data.icon){
  520. this.iconNode.setStyle("background-image", "url(data:image/png;base64,"+this.data.icon+")");
  521. }else{
  522. this.iconNode.setStyle("background-image", "url("+"/x_component_process_ApplicationExplorer/$Main/default/icon/application.png)")
  523. }
  524. this.textNode = new Element("div", {"styles": this.css.applicationTextNode}).inject(this.topNode);
  525. this.textNode.set("text", this.data.name);
  526. this.childNode = new Element("div", {"styles": this.css.applicationChildNode}).inject(this.node);
  527. this.loadChild();
  528. },
  529. loadChild: function(){
  530. this.app.action.listProcess(function(json){
  531. if (json.data.length){
  532. json.data.each(function(process){
  533. new MWF.xApplication.process.TaskCenter.Process(process, this, this.childNode);
  534. }.bind(this));
  535. }else{
  536. this.node.setStyle("display", "none");
  537. }
  538. }.bind(this), null, this.data.id)
  539. }
  540. });
  541. MWF.xApplication.process.TaskCenter.Process = new Class({
  542. initialize: function(data, application, container){
  543. this.data = data;
  544. this.application = application;
  545. this.app = this.application.app;
  546. this.container = container;
  547. this.css = this.app.css;
  548. this.load();
  549. },
  550. load: function(){
  551. this.node = new Element("div.processItem", {"styles": this.css.startProcessNode}).inject(this.container);
  552. this.iconNode = new Element("div", {"styles": this.css.processIconNode}).inject(this.node);
  553. this.textNode = new Element("div", {"styles": this.css.processTextNode}).inject(this.node);
  554. this.textNode.set({
  555. "text": this.data.name,
  556. "title": this.data.name+"-"+this.data.description
  557. });
  558. var _self = this;
  559. this.node.addEvents({
  560. "mouseover": function(e){this.node.setStyles(this.css.startProcessNode_over);}.bind(this),
  561. "mouseout": function(e){this.node.setStyles(this.css.startProcessNode_out);}.bind(this),
  562. "click": function(e){
  563. this.startProcess(e);
  564. }.bind(this)
  565. });
  566. },
  567. startProcess: function(e){
  568. this.app.closeStartProcessArea();
  569. MWF.xDesktop.requireApp("process.TaskCenter", "ProcessStarter", function(){
  570. var starter = new MWF.xApplication.process.TaskCenter.ProcessStarter(this.data, this.app, {
  571. "onStarted": function(data, title, processName){
  572. this.afterStartProcess(data, title, processName);
  573. }.bind(this)
  574. });
  575. starter.load();
  576. }.bind(this));
  577. },
  578. afterStartProcess: function(data, title, processName){
  579. var workInfors = [];
  580. var currentTask = [];
  581. data.each(function(work){
  582. if (work.currentTaskIndex != -1) currentTask.push(work.taskList[work.currentTaskIndex].work);
  583. workInfors.push(this.getStartWorkInforObj(work));
  584. }.bind(this));
  585. if (currentTask.length==1){
  586. var options = {"workId": currentTask[0], "appId": currentTask[0]};
  587. this.app.desktop.openApplication(null, "process.Work", options);
  588. this.createStartWorkResault(workInfors, title, processName, false);
  589. }else{
  590. this.createStartWorkResault(workInfors, title, processName, true);
  591. }
  592. },
  593. getStartWorkInforObj: function(work){
  594. var users = [];
  595. var currentTask = "";
  596. work.taskList.each(function(task, idx){
  597. users.push(task.person+"("+task.department + ")");
  598. if (work.currentTaskIndex==idx) currentTask = task.id;
  599. }.bind(this));
  600. return {"activity": work.fromActivityName, "users": users, "currentTask": currentTask};
  601. },
  602. createStartWorkResault: function(workInfors, title, processName, isopen){
  603. var content = ""
  604. workInfors.each(function(infor){
  605. content += "<div><b>"+this.app.lp.nextActivity+"<font style=\"color: #ea621f\">"+infor.activity+"</font>, "+this.app.lp.nextUser+"<font style=\"color: #ea621f\">"+infor.users.join(", ")+"</font></b>"
  606. if (infor.currentTask && isopen){
  607. content += "&nbsp;&nbsp;&nbsp;&nbsp;<span value=\""+infor.currentTask+"\">"+this.app.lp.deal+"</span></div>";
  608. }else{
  609. content += "</div>";
  610. }
  611. }.bind(this));
  612. var msg = {
  613. "subject": this.app.lp.processStarted,
  614. "content": "<div>"+this.app.lp.processStartedMessage+"“["+processName+"]"+title+"”</div>"+content
  615. };
  616. var tooltip = layout.desktop.message.addTooltip(msg);
  617. var item = layout.desktop.message.addMessage(msg);
  618. this.setStartWorkResaultAction(tooltip);
  619. this.setStartWorkResaultAction(item);
  620. },
  621. setStartWorkResaultAction: function(item){
  622. var node = item.node.getElements("span");
  623. node.setStyles(this.app.css.dealStartedWorkAction);
  624. var _self = this;
  625. node.addEvent("click", function(e){
  626. var options = {"taskId": this.get("value"), "appId": this.get("value")};
  627. _self.app.desktop.openApplication(e, "process.Work", options);nbyc
  628. });
  629. }
  630. });
  631. MWF.xApplication.process.TaskCenter.List = new Class({
  632. initialize: function(container, app, filterData){
  633. this.container = $(container);
  634. this.app = app;
  635. this.css = this.app.css;
  636. this.currentPageData = [];
  637. this.nextPageData = [];
  638. this.prevPageData = [];
  639. this.initData();
  640. this.filterData = null;
  641. if (filterData) this.filterData = filterData;
  642. this.load();
  643. },
  644. initData: function(){
  645. this.count = 0;
  646. this.isCountShow = false;
  647. this.currentPage = 1;
  648. this.pageCount = 20;
  649. this.pages = 0;
  650. this.items = [];
  651. this.isItemsLoaded = false;
  652. this.isItemLoadding = false;
  653. this.loadItemQueue = 0;
  654. this.filterApplication = "";
  655. this.currentFilterNode = null;
  656. this.filterListNode = null;
  657. },
  658. load: function(){
  659. this.mask = new MWF.widget.Mask({"style": "desktop"});
  660. this.mask.loadNode(this.app.content);
  661. this.contentNode = new Element("div", {"styles": this.css.listContentNode}).inject(this.container);
  662. this.createActionBarNode();
  663. this.createListAreaNode();
  664. this.resetListAreaHeight();
  665. this.app.addEvent("resize", this.resetListAreaHeight.bind(this));
  666. this.setAppContentSize();
  667. // this.listItemNext();
  668. },
  669. refresh: function(){
  670. this.mask = new MWF.widget.Mask({"style": "desktop"});
  671. this.mask.loadNode(this.app.content);
  672. this.initData();
  673. this.filterData = null;
  674. this.applicationFilterAreaNode.empty();
  675. this.createAppFilterNodes();
  676. this.listAreaNode.empty();
  677. this.resetListAreaHeight();
  678. this.app.getWorkCounts();
  679. },
  680. refilter: function(){
  681. this.mask = new MWF.widget.Mask({"style": "desktop"});
  682. this.mask.loadNode(this.app.content);
  683. this.initData();
  684. this.applicationFilterAreaNode.empty();
  685. this.createAppFilterNodes();
  686. this.listAreaNode.empty();
  687. this.resetListAreaHeight();
  688. },
  689. listItemNext: function(count){
  690. debugger;
  691. if (!this.isItemsLoaded){
  692. if (!this.isItemLoadding){
  693. this.isItemLoadding = true;
  694. this._getCurrentPageData(function(json){
  695. debugger;
  696. this.count = json.count;
  697. if (!this.isCountShow){
  698. this.currentFilterNode.getFirst("span").set("text", "("+this.count+")");
  699. this.isCountShow = true;
  700. }
  701. if (json.count<=this.items.length){
  702. this.isItemsLoaded = true;
  703. }
  704. json.data.each(function(task){
  705. this.items.push(this._createItem(task));
  706. }.bind(this));
  707. this.isItemLoadding = false;
  708. if (this.loadItemQueue>0){
  709. this.loadItemQueue--;
  710. this.listItemNext();
  711. }
  712. this.mask.hide();
  713. }.bind(this), count);
  714. }else{
  715. this.loadItemQueue++;
  716. }
  717. }
  718. },
  719. createActionBarNode: function(){
  720. this.actionBarNode = new Element("div", {"styles": this.css.actionBarNode}).inject(this.contentNode);
  721. this.isFilterOpen = false;
  722. this.filterActionNode = new Element("div", {
  723. "styles": this.css.filterActionNode,
  724. "text": this.app.lp.filter
  725. }).inject(this.actionBarNode);
  726. this.filterActionNode.addEvents({
  727. "click": function (e){this.showOrHideFilter();e.stopPropagation();}.bind(this)
  728. });
  729. this.applicationFilterAreaNode = new Element("div", {"styles": this.css.applicationFilterAreaNode}).inject(this.actionBarNode);
  730. this.createAppFilterNodes();
  731. },
  732. showOrHideFilter: function(){
  733. if (!this.isFilterOpen){
  734. if (!this.filterAreaMorph || !this.filterAreaMorph.isRunning()) this.showFilter();
  735. }else{
  736. if (this.filterAreaMorph || !this.filterAreaMorph.isRunning()) this.hideFilter();
  737. }
  738. },
  739. showFilter: function(){
  740. this.filterActionNode.setStyles(this.css.filterActionNode_check);
  741. if (!this.filterAreaNode) this.createFilterAreaNode();
  742. this.filterAreaTipNode.setStyle("display", "block");
  743. this.filterAreaNode.setStyle("display", "block");
  744. this.resizeFilterAreaNode();
  745. var toStyle = {
  746. "width": "460px",
  747. "height": "500px"
  748. }
  749. this.isFilterOpen = true;
  750. this.filterAreaMorph.start(toStyle).chain(function(){
  751. this.createFilterAreaTitle();
  752. this.createFilterAreaContent();
  753. this.hideFilterFun = this.hideFilter.bind(this);
  754. $(document.body).addEvent("click", this.hideFilterFun);
  755. }.bind(this));
  756. },
  757. hideFilter: function(){
  758. if (this.filterAreaNode){
  759. var toStyle = {
  760. "width": "460px",
  761. "height": "0px"
  762. }
  763. this.filterAreaNode.empty();
  764. this.isFilterOpen = false;
  765. this.filterAreaMorph.start(toStyle).chain(function(){
  766. this.filterAreaNode.eliminate("input");
  767. this.filterAreaNode.setStyle("display", "none");
  768. this.filterAreaTipNode.setStyle("display", "none");
  769. this.filterActionNode.setStyles(this.css.filterActionNode);
  770. }.bind(this));
  771. $(document.body).removeEvent("click", this.hideFilterFun);
  772. }
  773. },
  774. createFilterAreaContent: function(){
  775. var contentScrollNode = new Element("div", {"styles": this.css.applicationFilterAreaContentScrollNode}).inject(this.filterAreaNode);
  776. var contentNode = new Element("div", {"styles": {"overflow": "hidden"}}).inject(contentScrollNode);
  777. MWF.require("MWF.widget.ScrollBar", function(){
  778. new MWF.widget.ScrollBar(contentScrollNode, {
  779. "style":"xApp_filter", "where": "after", "distance": 30, "friction": 4, "axis": {"x": false, "y": true}
  780. });
  781. }.bind(this));
  782. var _self = this;
  783. this.app.getAction(function(){
  784. this._getFilterCount(function(json){
  785. var obj = json.data;
  786. Object.each(obj, function(v, key){
  787. var categoryNode = new Element("div", {"styles": this.css.applicationFilterCategoryNode}).inject(contentNode);
  788. categoryNode.set("text", this.app.lp[key]);
  789. var itemAreaNode = new Element("div", {"styles": this.css.applicationFilterItemAreaNode}).inject(contentNode);
  790. // for (var x=0; x<10; x++){
  791. v.each(function(item){
  792. var itemNode = new Element("div", {"styles": this.css.applicationFilterItemNode}).inject(itemAreaNode);
  793. //itemNode.set("text", item.name+"("+item.count+")");
  794. itemNode.set("text", item.name);
  795. itemNode.store("value", item.value);
  796. itemNode.store("textname", item.name);
  797. itemNode.store("key", key);
  798. itemNode.addEvent("click", function(){
  799. if (this.hasClass("applicationFilterItemNode_over")){
  800. _self.unSelectedFilterItem(this);
  801. }else{
  802. _self.selectedFilterItem(this);
  803. }
  804. });
  805. if (this.filterData){
  806. if (this.filterData[key]){
  807. if (item.value == this.filterData[key].value){
  808. this.selectedFilterItem(itemNode);
  809. }
  810. }
  811. }
  812. }.bind(this));
  813. // }
  814. }.bind(this));
  815. }.bind(this));
  816. }.bind(this));
  817. },
  818. _getFilterCount: function(callback){
  819. this.app.action.listTaskCompletedFilterCount(function(json){
  820. if (callback) callback(json);
  821. });
  822. },
  823. unSelectedFilterItem: function(item){
  824. if (item.hasClass("applicationFilterItemNode_over")){
  825. var value = item.retrieve("value");
  826. var name = item.retrieve("textname");
  827. var key = item.retrieve("key");
  828. item.setStyles(this.css.applicationFilterItemNode);
  829. item.removeClass("applicationFilterItemNode_over");
  830. item.addClass("applicationFilterItemNode");
  831. if (!this.filterData) this.filterData = {};
  832. this.filterData[key] = null;
  833. delete this.filterData[key];
  834. item.getParent().eliminate("current");
  835. }
  836. },
  837. selectedFilterItem: function(item){
  838. if (!item.hasClass("applicationFilterItemNode_over")){
  839. var current = item.getParent().retrieve("current");
  840. if (current) this.unSelectedFilterItem(current);
  841. var value = item.retrieve("value");
  842. var key = item.retrieve("key");
  843. var name = item.retrieve("textname");
  844. item.setStyles(this.css.applicationFilterItemNode_over);
  845. item.removeClass("applicationFilterItemNode");
  846. item.addClass("applicationFilterItemNode_over");
  847. if (!this.filterData) this.filterData = {};
  848. this.filterData[key] = {"value": value, "name": name};
  849. item.getParent().store("current", item);
  850. }
  851. },
  852. createFilterAreaTitle: function(){
  853. var titleNode = new Element("div", {"styles": this.app.css.filterAreaTitleNode}).inject(this.filterAreaNode);
  854. var okNode = new Element("div", {"styles": this.app.css.filterAreaTitleActionOkNode, "text": this.app.lp.ok}).inject(titleNode);
  855. var clearNode = new Element("div", {"styles": this.app.css.filterAreaTitleActionClearNode, "text": this.app.lp.clear}).inject(titleNode);
  856. clearNode.addEvent("click", function(){
  857. this.filterAreaNode.getElements(".filterItem").each(function(el){
  858. this.unSelectedFilterItem(el);
  859. }.bind(this));
  860. var input = this.filterAreaNode.retrieve("input");
  861. input.set("value", "");
  862. this.filterData = null;
  863. this.hideFilter();
  864. this.refilter();
  865. }.bind(this));
  866. okNode.addEvent("click", function(){
  867. var input = this.filterAreaNode.retrieve("input");
  868. if (!this.filterData) this.filterData = {};
  869. var key = input.get("value");
  870. if (key && key!=this.app.lp.searchKey){
  871. this.filterData.key = key;
  872. }else{
  873. this.filterData.key = "";
  874. delete this.filterData.key
  875. }
  876. this.hideFilter();
  877. this.refilter();
  878. }.bind(this));
  879. var searchNode = new Element("div", {"styles": this.app.css.filterAreaTitleSearchNode}).inject(titleNode);
  880. var searchIconNode = new Element("div", {"styles": this.app.css.filterAreaTitleSearchIconNode}).inject(searchNode);
  881. var searchInputAreaNode = new Element("div", {"styles": this.app.css.filterAreaTitleSearchInputAreaNode}).inject(searchNode);
  882. var searchInputNode = new Element("input", {"styles": this.app.css.filterAreaTitleSearchInputNode, "value": this.app.lp.searchKey}).inject(searchInputAreaNode);
  883. if (this.filterData){
  884. if (this.filterData.key) searchInputNode.set("value", this.filterData.key);
  885. }
  886. this.filterAreaNode.store("input", searchInputNode);
  887. var key = this.app.lp.searchKey;
  888. searchInputNode.addEvents({
  889. "blur": function(){if (!this.get("value")) this.set("value", key)},
  890. "focus": function(){if (this.get("value")==key) this.set("value", "")}
  891. });
  892. },
  893. createFilterAreaNode: function(){
  894. this.filterAreaNode = new Element("div", {"styles": this.app.css.filterAreaNode}).inject(this.container);
  895. this.filterAreaNode.addEvent("click", function(e){e.stopPropagation();});
  896. this.filterAreaTipNode = new Element("div", {"styles": this.app.css.filterAreaTipNode}).inject(this.container);
  897. //var size = this.filterActionNode.getSize();
  898. this.filterAreaNode.setStyles({
  899. "width": "460px",
  900. "height": "0px"
  901. });
  902. this.filterAreaNode.position({
  903. relativeTo: this.actionBarNode,
  904. position: 'bottomRight',
  905. edge: 'upperRight',
  906. offset: {x:0, y: -2}
  907. });
  908. this.filterAreaTipNode.position({
  909. relativeTo: this.filterAreaNode,
  910. position: 'topRight',
  911. edge: 'bottomRight',
  912. offset: {x:-26, y: 1}
  913. });
  914. this.app.addEvent("resize", function(){
  915. this.resizeFilterAreaNode();
  916. }.bind(this));
  917. this.filterAreaMorph = new Fx.Morph(this.filterAreaNode, {
  918. duration: '100',
  919. transition: Fx.Transitions.Sine.easeInOut
  920. });
  921. },
  922. resizeFilterAreaNode: function(){
  923. if (this.filterAreaNode){
  924. this.filterAreaNode.position({
  925. relativeTo: this.actionBarNode,
  926. position: 'bottomRight',
  927. edge: 'upperRight',
  928. offset: {x:0, y: -2}
  929. });
  930. if (this.filterAreaTipNode){
  931. this.filterAreaTipNode.position({
  932. relativeTo: this.filterAreaNode,
  933. position: 'topRight',
  934. edge: 'bottomRight',
  935. offset: {x:-26, y: 1}
  936. });
  937. }
  938. }
  939. },
  940. createAppFilterNodes: function(){
  941. var allApp = {"name": this.app.lp.all, "application": "", "count": 0};
  942. this.allAppFilterNode = this.createAppFilterNode(allApp, "appFilterNode_current");
  943. this.currentFilterNode = this.allAppFilterNode;
  944. this._getApplicationCount(function(json){
  945. json.data.each(function(app){
  946. this.createAppFilterNode(app);
  947. }.bind(this));
  948. }.bind(this));
  949. },
  950. createAppFilterNode: function(app, style){
  951. style = style || "appFilterNode";
  952. var node = new Element("div", {"styles": this.app.css[style]}).inject(this.applicationFilterAreaNode);
  953. var text = (app.count) ? app.name+"<span>("+app.count+")</span>" : app.name+"<span></span>"
  954. node.set({"html": text, "id": app.value});
  955. var _self = this;
  956. node.addEvent("click", function(e){
  957. _self.filterByApplication(this);
  958. });
  959. return node;
  960. },
  961. filterByApplication: function(node){
  962. var id = node.get("id");
  963. if (!id){
  964. this.refresh();
  965. }else{
  966. if (this.currentFilterNode) this.currentFilterNode.setStyles(this.app.css.appFilterNode);
  967. this.initData();
  968. this.filterApplication = id;
  969. this.listAreaNode.empty();
  970. this.resetListAreaHeight();
  971. this.currentFilterNode = node;
  972. this.currentFilterNode.setStyles(this.app.css.appFilterNode_current);
  973. }
  974. },
  975. createListAreaNode: function(){
  976. this.listScrollAreaNode = new Element("div", {"styles": this.css.listScrollAreaNode}).inject(this.contentNode);
  977. this.listAreaNode = new Element("div", {"styles": this.css.listAreaNode}).inject(this.listScrollAreaNode);
  978. var _self = this;
  979. MWF.require("MWF.widget.ScrollBar", function(){
  980. new MWF.widget.ScrollBar(this.listScrollAreaNode, {
  981. "style":"xApp_TaskList", "where": "before", "distance": 30, "friction": 4, "axis": {"x": false, "y": true},
  982. "onScroll": function(y){
  983. var scrollSize = _self.listScrollAreaNode.getScrollSize();
  984. var clientSize = _self.listScrollAreaNode.getSize();
  985. var scrollHeight = scrollSize.y-clientSize.y;
  986. if (y+200>scrollHeight) {
  987. if (!_self.isElementLoaded) _self.listItemNext();
  988. }
  989. }
  990. });
  991. }.bind(this));
  992. },
  993. setAppContentSize: function(){
  994. var size = this.app.contentNode.getSize();
  995. var x = this.container.getSize().x+size.x;
  996. this.container.setStyle("width", ""+x+"px");
  997. },
  998. resetListAreaHeight: function(){
  999. var contentSize = this.app.contentNode.getSize();
  1000. this.contentNode.setStyle("width", ""+contentSize.x+"px");
  1001. var size = this.contentNode.getSize();
  1002. var barSize = this.actionBarNode.getSize();
  1003. var y = size.y - barSize.y;
  1004. this.listScrollAreaNode.setStyle("height", ""+y+"px");
  1005. if (this.listAreaNode){
  1006. var count = (size.x/402).toInt();
  1007. var x = 402 * count;
  1008. var m = (size.x-x)/2;
  1009. this.listAreaNode.setStyles({
  1010. "width": ""+x+"px",
  1011. "margin-left": ""+m+"px"
  1012. });
  1013. if (this.actionBarNode) this.actionBarNode.setStyles({
  1014. "width": ""+x+"px",
  1015. "margin-left": ""+m+"px"
  1016. });
  1017. var hCount = (y/102).toInt()+1;
  1018. this.pageCount = count*hCount;
  1019. if (this.items.length<this.pageCount){
  1020. this.listItemNext(this.pageCount-this.items.length);
  1021. }
  1022. //this.listAreaNode
  1023. }
  1024. },
  1025. show: function(){
  1026. debugger;
  1027. //if (!this.app.contentScroll){
  1028. // this.app.contentScroll = new Fx.Scroll(this.app.contentNode, {"wheelStops": false});
  1029. //}
  1030. //this.app.contentScroll.toElement(this.contentNode, "x");
  1031. if (this.app.currentList) this.app.currentList.hide();
  1032. this.app.currentList = this;
  1033. this.contentNode.setStyle("display", "block");
  1034. //this.refresh();
  1035. },
  1036. hide: function(){
  1037. this.contentNode.setStyle("display", "none");
  1038. },
  1039. _getCurrentPageData: function(callback, count){
  1040. this.app.getAction(function(){
  1041. if (this.filterApplication){
  1042. var id = (this.items.length) ? this.items[this.items.length-1].data.id : "(0)";
  1043. this.app.action.listTaskNextByApp(function(json){
  1044. if (callback) callback(json);
  1045. }, null, id, count || this.pageCount, this.filterApplication);
  1046. }else{
  1047. var id = (this.items.length) ? this.items[this.items.length-1].data.id : "(0)";
  1048. this.app.action.listTaskNext(function(json){
  1049. if (callback) callback(json);
  1050. }, null, id, count || this.pageCount);
  1051. }
  1052. }.bind(this));
  1053. },
  1054. _getApplicationCount: function(callback){
  1055. this.app.getAction(function(){
  1056. this.app.action.listTaskApplication(function(json){
  1057. if (callback) callback(json);
  1058. }.bind(this));
  1059. }.bind(this));
  1060. },
  1061. _createItem: function(task){
  1062. return new MWF.xApplication.process.TaskCenter.TaskList.Item(task, this)
  1063. }
  1064. });
  1065. MWF.xApplication.process.TaskCenter.TaskList = new Class({
  1066. Extends: MWF.xApplication.process.TaskCenter.List,
  1067. createAppFilterNodes: function(){
  1068. var allApp = {"name": this.app.lp.all, "application": "", "count": 0};
  1069. this.allAppFilterNode = this.createAppFilterNode(allApp, "appFilterNode_current");
  1070. this.currentFilterNode = this.allAppFilterNode;
  1071. this.filterListNode = new Element("div", {"styles": this.css.filterListNode}).inject(this.applicationFilterAreaNode);
  1072. },
  1073. createFilterItemNode: function(key, v){
  1074. var _self = this;
  1075. var node = new Element("div", {"styles": this.css.filterListItemNode}).inject(this.filterListNode);
  1076. var actionNode = new Element("div", {"styles": this.css.filterListItemActionNode}).inject(node);
  1077. var textNode = new Element("div", {"styles": this.css.filterListItemTextNode}).inject(node);
  1078. textNode.set("text", this.app.lp[key]+": "+ v.name);
  1079. actionNode.store("key", key);
  1080. node.addEvents({
  1081. "mouseover": function(){
  1082. this.setStyles(_self.css.filterListItemNode_over);
  1083. this.getLast().setStyles(_self.css.filterListItemTextNode_over);
  1084. this.getFirst().setStyles(_self.css.filterListItemActionNode_over);
  1085. },
  1086. "mouseout": function(){
  1087. this.setStyles(_self.css.filterListItemNode);
  1088. this.getLast().setStyles(_self.css.filterListItemTextNode);
  1089. this.getFirst().setStyles(_self.css.filterListItemActionNode);
  1090. }
  1091. });
  1092. actionNode.addEvent("click", function(){
  1093. var key = this.retrieve("key");
  1094. if (_self.filterData[key]) _self.filterData[key] = null;
  1095. delete _self.filterData[key];
  1096. this.destroy();
  1097. _self.refilter();
  1098. });
  1099. },
  1100. _getCurrentPageData: function(callback, count){
  1101. this.app.getAction(function(){
  1102. if (this.filterData){
  1103. this.filterListNode.empty();
  1104. var data = {};
  1105. Object.each(this.filterData, function(v, key){
  1106. if (key!="key"){
  1107. if (v) {
  1108. //data[this.app.options.filterMap[key]] = v.value;
  1109. if (!data[this.app.options.filterMap[key]]) data[this.app.options.filterMap[key]] = [];
  1110. data[this.app.options.filterMap[key]].push(v.value);
  1111. this.createFilterItemNode(key, v);
  1112. }
  1113. }else{
  1114. data.key = v;
  1115. }
  1116. }.bind(this));
  1117. if (this.filterData.key){
  1118. this.createFilterItemNode("key", {"name": this.filterData.key});
  1119. }
  1120. var id = (this.items.length) ? this.items[this.items.length-1].data.id : "(0)";
  1121. this.app.action.listTaskFilter(function(json){
  1122. if (callback) callback(json);
  1123. }, null, id, count || this.pageCount, data);
  1124. }else{
  1125. var id = (this.items.length) ? this.items[this.items.length-1].data.id : "(0)";
  1126. this.app.action.listTaskNext(function(json){
  1127. if (callback) callback(json);
  1128. }, null, id, count || this.pageCount);
  1129. }
  1130. }.bind(this));
  1131. }
  1132. //createActionBarNode: function(){
  1133. // this.actionBarNode = new Element("div", {"styles": this.css.actionBarNode}).inject(this.contentNode);
  1134. //
  1135. // //this.isFilterOpen = false;
  1136. // //this.filterActionNode = new Element("div", {
  1137. // // "styles": this.css.filterActionNode,
  1138. // // "text": this.app.lp.filter
  1139. // //}).inject(this.actionBarNode);
  1140. // //this.filterActionNode.addEvents({
  1141. // // "click": function (e){this.showOrHideFilter();e.stopPropagation();}.bind(this)
  1142. // //});
  1143. //
  1144. // this.applicationFilterAreaNode = new Element("div", {"styles": this.css.applicationFilterAreaNode}).inject(this.actionBarNode);
  1145. //
  1146. // this.createAppFilterNodes();
  1147. //}
  1148. });
  1149. MWF.xApplication.process.TaskCenter.TaskCompletedList = new Class({
  1150. Extends: MWF.xApplication.process.TaskCenter.List,
  1151. createAppFilterNodes: function(){
  1152. var allApp = {"name": this.app.lp.all, "application": "", "count": 0};
  1153. this.allAppFilterNode = this.createAppFilterNode(allApp, "appFilterNode_current");
  1154. this.currentFilterNode = this.allAppFilterNode;
  1155. this.filterListNode = new Element("div", {"styles": this.css.filterListNode}).inject(this.applicationFilterAreaNode);
  1156. },
  1157. createFilterItemNode: function(key, v){
  1158. var _self = this;
  1159. var node = new Element("div", {"styles": this.css.filterListItemNode}).inject(this.filterListNode);
  1160. var actionNode = new Element("div", {"styles": this.css.filterListItemActionNode}).inject(node);
  1161. var textNode = new Element("div", {"styles": this.css.filterListItemTextNode}).inject(node);
  1162. textNode.set("text", this.app.lp[key]+": "+ v.name);
  1163. actionNode.store("key", key);
  1164. node.addEvents({
  1165. "mouseover": function(){
  1166. this.setStyles(_self.css.filterListItemNode_over);
  1167. this.getLast().setStyles(_self.css.filterListItemTextNode_over);
  1168. this.getFirst().setStyles(_self.css.filterListItemActionNode_over);
  1169. },
  1170. "mouseout": function(){
  1171. this.setStyles(_self.css.filterListItemNode);
  1172. this.getLast().setStyles(_self.css.filterListItemTextNode);
  1173. this.getFirst().setStyles(_self.css.filterListItemActionNode);
  1174. }
  1175. });
  1176. actionNode.addEvent("click", function(){
  1177. var key = this.retrieve("key");
  1178. if (_self.filterData[key]) _self.filterData[key] = null;
  1179. delete _self.filterData[key];
  1180. this.destroy();
  1181. _self.refilter();
  1182. });
  1183. },
  1184. _getCurrentPageData: function(callback, count){
  1185. this.app.getAction(function(){
  1186. if (this.filterData){
  1187. this.filterListNode.empty();
  1188. var data = {};
  1189. Object.each(this.filterData, function(v, key){
  1190. if (key!="key"){
  1191. if (v) {
  1192. //data[this.app.options.filterMap[key]] = v.value;
  1193. if (!data[this.app.options.filterMap[key]]) data[this.app.options.filterMap[key]] = [];
  1194. data[this.app.options.filterMap[key]].push(v.value);
  1195. this.createFilterItemNode(key, v);
  1196. }
  1197. }else{
  1198. data.key = v;
  1199. }
  1200. }.bind(this));
  1201. if (this.filterData.key){
  1202. this.createFilterItemNode("key", {"name": this.filterData.key});
  1203. }
  1204. var id = (this.items.length) ? this.items[this.items.length-1].data.id : "(0)";
  1205. this.app.action.listTaskCompletedFilter(function(json){
  1206. if (callback) callback(json);
  1207. }, null, id, count || this.pageCount, data);
  1208. }else{
  1209. var id = (this.items.length) ? this.items[this.items.length-1].data.id : "(0)";
  1210. this.app.action.listTaskCompletedNext(function(json){
  1211. if (callback) callback(json);
  1212. }, null, id, count || this.pageCount);
  1213. }
  1214. }.bind(this));
  1215. },
  1216. _getApplicationCount: function(callback){
  1217. this.app.getAction(function(){
  1218. this.app.action.listTaskCompletedApplication(function(json){
  1219. if (callback) callback(json);
  1220. }.bind(this));
  1221. }.bind(this));
  1222. },
  1223. _createItem: function(task){
  1224. return new MWF.xApplication.process.TaskCenter.TaskCompletedList.Item(task, this)
  1225. }
  1226. });
  1227. MWF.xApplication.process.TaskCenter.ReadList = new Class({
  1228. Extends: MWF.xApplication.process.TaskCenter.TaskCompletedList,
  1229. _getCurrentPageData: function(callback, count){
  1230. this.app.getAction(function(){
  1231. if (this.filterData){
  1232. this.filterListNode.empty();
  1233. var data = {};
  1234. Object.each(this.filterData, function(v, key){
  1235. if (key!="key"){
  1236. if (v) {
  1237. //data[this.app.options.filterMap[key]] = v.value;
  1238. if (!data[this.app.options.filterMap[key]]) data[this.app.options.filterMap[key]] = [];
  1239. data[this.app.options.filterMap[key]].push(v.value);
  1240. this.createFilterItemNode(key, v);
  1241. }
  1242. }else{
  1243. data.key = v;
  1244. }
  1245. }.bind(this));
  1246. if (this.filterData.key){
  1247. this.createFilterItemNode("key", {"name": this.filterData.key});
  1248. }
  1249. var id = (this.items.length) ? this.items[this.items.length-1].data.id : "(0)";
  1250. this.app.action.listReadFilter(function(json){
  1251. if (callback) callback(json);
  1252. }, null, id, count || this.pageCount, data);
  1253. }else{
  1254. var id = (this.items.length) ? this.items[this.items.length-1].data.id : "(0)";
  1255. this.app.action.listReadNext(function(json){
  1256. if (callback) callback(json);
  1257. }, null, id, count || this.pageCount);
  1258. }
  1259. }.bind(this));
  1260. },
  1261. _getApplicationCount: function(callback){
  1262. this.app.getAction(function(){
  1263. this.app.action.listReadApplication(function(json){
  1264. if (callback) callback(json);
  1265. }.bind(this));
  1266. }.bind(this));
  1267. },
  1268. _createItem: function(task){
  1269. return new MWF.xApplication.process.TaskCenter.ReadList.Item(task, this)
  1270. },
  1271. _getFilterCount: function(callback){
  1272. this.app.action.listReadFilterCount(function(json){
  1273. if (callback) callback(json);
  1274. });
  1275. }
  1276. });
  1277. MWF.xApplication.process.TaskCenter.ReadedList = new Class({
  1278. Extends: MWF.xApplication.process.TaskCenter.TaskCompletedList,
  1279. _getCurrentPageData: function(callback, count){
  1280. this.app.getAction(function(){
  1281. if (this.filterData){
  1282. this.filterListNode.empty();
  1283. var data = {};
  1284. Object.each(this.filterData, function(v, key){
  1285. if (key!="key"){
  1286. if (v) {
  1287. //data[this.app.options.filterMap[key]] = v.value;
  1288. if (!data[this.app.options.filterMap[key]]) data[this.app.options.filterMap[key]] = [];
  1289. data[this.app.options.filterMap[key]].push(v.value);
  1290. this.createFilterItemNode(key, v);
  1291. }
  1292. }else{
  1293. data.key = v;
  1294. }
  1295. }.bind(this));
  1296. if (this.filterData.key){
  1297. this.createFilterItemNode("key", {"name": this.filterData.key});
  1298. }
  1299. var id = (this.items.length) ? this.items[this.items.length-1].data.id : "(0)";
  1300. this.app.action.listReadedFilter(function(json){
  1301. if (callback) callback(json);
  1302. }, null, id, count || this.pageCount, data);
  1303. }else{
  1304. var id = (this.items.length) ? this.items[this.items.length-1].data.id : "(0)";
  1305. this.app.action.listReadedNext(function(json){
  1306. if (callback) callback(json);
  1307. }, null, id, count || this.pageCount);
  1308. }
  1309. }.bind(this));
  1310. },
  1311. _getApplicationCount: function(callback){
  1312. this.app.getAction(function(){
  1313. this.app.action.listReadedApplication(function(json){
  1314. if (callback) callback(json);
  1315. }.bind(this));
  1316. }.bind(this));
  1317. },
  1318. _createItem: function(task){
  1319. return new MWF.xApplication.process.TaskCenter.ReadedList.Item(task, this)
  1320. },
  1321. _getFilterCount: function(callback){
  1322. this.app.action.listReadedFilterCount(function(json){
  1323. if (callback) callback(json);
  1324. });
  1325. }
  1326. });
  1327. MWF.xApplication.process.TaskCenter.ReviewList = new Class({
  1328. Extends: MWF.xApplication.process.TaskCenter.TaskCompletedList,
  1329. _getCurrentPageData: function(callback, count){
  1330. this.app.getAction(function(){
  1331. if (this.filterData){
  1332. this.filterListNode.empty();
  1333. var data = {};
  1334. Object.each(this.filterData, function(v, key){
  1335. if (key!="key"){
  1336. if (v) {
  1337. //data[this.app.options.filterMap[key]] = v.value;
  1338. if (!data[this.app.options.filterMap[key]]) data[this.app.options.filterMap[key]] = [];
  1339. data[this.app.options.filterMap[key]].push(v.value);
  1340. this.createFilterItemNode(key, v);
  1341. }
  1342. }else{
  1343. data.key = v;
  1344. }
  1345. }.bind(this));
  1346. if (this.filterData.key){
  1347. this.createFilterItemNode("key", {"name": this.filterData.key});
  1348. }
  1349. var id = (this.items.length) ? this.items[this.items.length-1].data.id : "(0)";
  1350. this.app.action.listReviewFilter(function(json){
  1351. if (callback) callback(json);
  1352. }, null, id, count || this.pageCount, data);
  1353. }else{
  1354. var id = (this.items.length) ? this.items[this.items.length-1].data.id : "(0)";
  1355. this.app.action.listReviewNext(function(json){
  1356. if (callback) callback(json);
  1357. }, null, id, count || this.pageCount);
  1358. }
  1359. }.bind(this));
  1360. },
  1361. _getApplicationCount: function(callback){
  1362. this.app.getAction(function(){
  1363. this.app.action.listReviewApplication(function(json){
  1364. if (callback) callback(json);
  1365. }.bind(this));
  1366. }.bind(this));
  1367. },
  1368. _createItem: function(task){
  1369. return new MWF.xApplication.process.TaskCenter.ReviewList.Item(task, this)
  1370. },
  1371. _getFilterCount: function(callback){
  1372. this.app.action.listReviewFilterCount(function(json){
  1373. if (callback) callback(json);
  1374. });
  1375. }
  1376. });
  1377. MWF.xApplication.process.TaskCenter.List.Item = new Class({
  1378. initialize: function(data, list){
  1379. this.data = data;
  1380. this.list = list;
  1381. this.container = this.list.listAreaNode;
  1382. this.load();
  1383. },
  1384. load: function(){
  1385. this.node = new Element("div", {"styles": this.list.css.itemNode}).inject(this.container);
  1386. this.applicationIconAreaNode = new Element("div", {"styles": this.list.css.itemApplicationIconAreaNode, "title": this.data.applicationName}).inject(this.node);
  1387. this.applicationIconNode = new Element("div", {"styles": this.list.css.itemApplicationIconNode}).inject(this.applicationIconAreaNode);
  1388. this.timeIconNode = new Element("div", {"styles": this.list.css.itemTimeIconNode}).inject(this.node);
  1389. this.contentNode = new Element("div", {"styles": this.list.css.itemContentNode}).inject(this.node);
  1390. this.titleNode = new Element("div", {"styles": this.list.css.itemTitleNode}).inject(this.contentNode);
  1391. this.inforNode = new Element("div", {"styles": this.list.css.itemInforNode}).inject(this.contentNode);
  1392. this.newIconNode = new Element("div", {"styles": this.list.css.itemNewIconNode}).inject(this.applicationIconAreaNode);
  1393. this.setContent();
  1394. this.setNewIcon();
  1395. this.setEvent();
  1396. this.setTimeIcon();
  1397. this.node.fade("in");
  1398. },
  1399. setTimeIcon: function(){
  1400. //this.data.expireTime = "2016-08-05 19:00";
  1401. this.timeIconNode.empty();
  1402. if (this.data.expireTime){
  1403. var d1 = Date.parse(this.data.expireTime);
  1404. var d2 = Date.parse(this.data.createTime);
  1405. var now = new Date();
  1406. var time1 = d2.diff(now, "second");
  1407. var time2 = now.diff(d1, "second");
  1408. var time3 = d2.diff(d1, "second");
  1409. var size = this.timeIconNode.getSize();
  1410. var n = time1/time3;
  1411. var height = size.y*((n>1) ? 1 : n);
  1412. if (height<5) height = 5;
  1413. var mTop = size.y - height;
  1414. this.expireIconNode = new Element("div", {
  1415. "styles": {"height": ""+height+"px", "margin-top": ""+mTop+"px"}
  1416. }).inject(this.timeIconNode);
  1417. var color = "#00FF00";
  1418. var text = this.list.app.lp.expire1;
  1419. text = text.replace(/{time}/g, this.data.expireTime);
  1420. if (n<0.6){
  1421. }else if(n<0.8){
  1422. color = "yellow";
  1423. }else if (n<1){
  1424. text = this.list.app.lp.expire2;
  1425. text = text.replace(/{time}/g, this.data.expireTime);
  1426. color = "orange";
  1427. }else if (n<2){
  1428. color = "red";
  1429. text = this.list.app.lp.expire3;
  1430. text = text.replace(/{time}/g, this.data.expireTime);
  1431. }else{
  1432. color = "red";
  1433. text = this.list.app.lp.expire3;
  1434. text = text.replace(/{time}/g, this.data.expireTime);
  1435. }
  1436. this.expireIconNode.setStyle("background", color);
  1437. this.expireIconNode.set("title", text);
  1438. //this.expireIconNode.setStyle("background", "linear-gradient(to top, "+beginColor+", "+middleColor+" "+middlePercent+", "+endColor+")");
  1439. }
  1440. //this.data.expireTime
  1441. },
  1442. setEvent: function(){
  1443. this.node.addEvents({
  1444. "mouseover": function(){this.showAction();}.bind(this),
  1445. "mouseout": function(){this.hideAction();}.bind(this)
  1446. });
  1447. if (this.editNode){
  1448. this.editNode.addEvent("click", function(e){
  1449. this.editTask();
  1450. }.bind(this));
  1451. }
  1452. if (this.closeNode){
  1453. this.closeNode.addEvent("click", function(e){
  1454. this.closeEditTask();
  1455. }.bind(this));
  1456. }
  1457. if (this.titleTextNode){
  1458. this.titleTextNode.addEvent("click", function(e){
  1459. this.openTask(e);
  1460. }.bind(this));
  1461. }
  1462. },
  1463. showAction: function(){
  1464. // if (this.editNode) this.editNode.fade("in");
  1465. // if (this.closeNode) this.closeNode.fade("in");
  1466. },
  1467. hideAction: function(){
  1468. // if (this.editNode) this.editNode.fade("out");
  1469. // if (this.closeNode) this.closeNode.fade("out");
  1470. },
  1471. openTask: function(e){
  1472. // this._getJobByTask(function(data){
  1473. var options = {"workId": this.data.work, "appId": this.data.work};
  1474. this.list.app.desktop.openApplication(e, "process.Work", options);
  1475. // }.bind(this));
  1476. },
  1477. closeEditTask: function(callback){
  1478. this.closeNode.setStyle("display", "none");
  1479. this.flowInforLeftNode.destroy();
  1480. this.flowInforRightNode.destroy();
  1481. this.flowInforContentNode.destroy();
  1482. this.flowInforScrollNode.destroy();
  1483. this.flowInforNode.destroy();
  1484. this.processNode.destroy();
  1485. this.flowInforScrollFx = null;
  1486. this.flowInforLeftNode = null;
  1487. this.flowInforRightNode = null;
  1488. this.flowInforScrollNode = null;
  1489. this.flowInforContentNode = null;
  1490. delete this.flowInforScrollFx;
  1491. delete this.flowInforLeftNode;
  1492. delete this.flowInforRightNode;
  1493. delete this.flowInforScrollNode;
  1494. delete this.flowInforContentNode;
  1495. delete this.flowInforNode;
  1496. delete this.processNode;
  1497. var p = this.nodeClone.getPosition(this.nodeClone.getOffsetParent());
  1498. this.list.css.itemNode_edit_from.top = ""+ p.y+"px";
  1499. this.list.css.itemNode_edit_from.left = ""+ p.x+"px";
  1500. var morph = new Fx.Morph(this.node, {
  1501. "duration": 200,
  1502. "transition": Fx.Transitions.Expo.easeIn,
  1503. "onComplete": function(){
  1504. this.nodeClone.destroy();
  1505. this.list.app.content.unmask();
  1506. this.node.setStyles(this.list.css.itemNode);
  1507. this.node.setStyle("opacity", 1);
  1508. this.list.app.removeEvent("resize", this.resizeEditNodeFun);
  1509. this.editNode.setStyle("display", "block");
  1510. if (callback) callback();
  1511. }.bind(this)
  1512. });
  1513. morph.start(this.list.css.itemNode_edit_from);
  1514. },
  1515. editTask: function(){
  1516. this.list.app.content.mask({
  1517. "destroyOnHide": true,
  1518. "id": "mask_"+this.data.id,
  1519. "style": this.list.css.maskNode
  1520. });
  1521. this._getJobByTask(function(data){
  1522. this.nodeClone = this.node.clone(false);
  1523. this.nodeClone.inject(this.node, "after");
  1524. this.node.setStyles(this.list.css.itemNode_edit_from);
  1525. this.node.position({
  1526. relativeTo: this.nodeClone,
  1527. position: "topleft",
  1528. edge: "topleft"
  1529. });
  1530. this.showEditNode(data);
  1531. }.bind(this));
  1532. },
  1533. setEditTaskNodes: function(data){
  1534. this.flowInforNode = new Element("div", {"styles": this.list.css.flowInforNode}).inject(this.node);
  1535. this.processNode = new Element("div", {"styles": this.list.css.processNode}).inject(this.node);
  1536. this.setFlowInfor(data);
  1537. this.setProcessor();
  1538. },
  1539. setFlowChart: function(data){
  1540. var idx = 0;
  1541. data.workLogList.each(function(worklog){
  1542. if (!worklog.taskCompletedList) worklog.taskCompletedList = [];
  1543. if (!worklog.taskList) worklog.taskList = [];
  1544. if (worklog.taskCompletedList.length || worklog.taskList.length){
  1545. this.createFlowInforWorklogNode(worklog.fromActivityName, worklog.taskCompletedList, worklog.taskList || [], idx, worklog.fromActivityToken == data.task.activityToken);
  1546. idx++;
  1547. }
  1548. }.bind(this));
  1549. return idx;
  1550. },
  1551. setFlowInfor: function(data){
  1552. this.flowInforLeftNode = new Element("div", {"styles": this.list.css.flowInforLeftNode}).inject(this.flowInforNode);
  1553. this.flowInforRightNode = new Element("div", {"styles": this.list.css.flowInforRightNode}).inject(this.flowInforNode);
  1554. this.flowInforScrollNode = new Element("div", {"styles": this.list.css.flowInforScrollNode}).inject(this.flowInforNode);
  1555. this.flowInforContentNode = new Element("div", {"styles": this.list.css.flowInforContentNode}).inject(this.flowInforScrollNode);
  1556. var idx = this.setFlowChart(data);
  1557. var x = (idx*40)+((idx-1)*16);
  1558. this.flowInforContentNode.setStyle("width", ""+x+"px");
  1559. this.setFlowInforScroll();
  1560. },
  1561. toFlowInforLeft: function(){
  1562. var size = this.flowInforScrollNode.getSize();
  1563. var scrollSize = this.flowInforScrollNode.getScrollSize();
  1564. var scroll = this.flowInforScrollNode.getScroll();
  1565. if (scroll.x>0){
  1566. var scrollX = scroll.x-size.x;
  1567. if (scrollX<0) scrollX = 0;
  1568. if (scrollX>0){
  1569. // this.flowInforLeftNode.setStyle("background-image", "url("+"/x_component_process_TaskCenter/$Main/default/processor/left.png)");
  1570. }else{
  1571. this.flowInforLeftNode.setStyle("background-image", "");
  1572. }
  1573. if (scrollX+size.x<scrollSize.x){
  1574. this.flowInforRightNode.setStyle("background-image", "url("+"/x_component_process_TaskCenter/$Main/default/processor/right.png)");
  1575. }else{
  1576. // this.flowInforRightNode.setStyle("background-image", "");
  1577. }
  1578. this.flowInforScrollFx.start(scrollX);
  1579. }
  1580. },
  1581. toFlowInforRight: function(){
  1582. var size = this.flowInforScrollNode.getSize();
  1583. var scrollSize = this.flowInforScrollNode.getScrollSize();
  1584. var scroll = this.flowInforScrollNode.getScroll();
  1585. if (scroll.x+size.x<scrollSize.x){
  1586. var scrollX = scroll.x+size.x;
  1587. if (scrollX>scrollSize.x) scrollX = scrollSize.x;
  1588. if (scrollX>0){
  1589. this.flowInforLeftNode.setStyle("background-image", "url("+"/x_component_process_TaskCenter/$Main/default/processor/left.png)");
  1590. }else{
  1591. //this.flowInforLeftNode.setStyle("background-image", "");
  1592. }
  1593. if (scrollX+size.x<scrollSize.x){
  1594. //this.flowInforRightNode.setStyle("background-image", "url("+"/x_component_process_TaskCenter/$Main/default/processor/right.png)");
  1595. }else{
  1596. this.flowInforRightNode.setStyle("background-image", "");
  1597. }
  1598. this.flowInforScrollFx.start(scrollX);
  1599. }
  1600. },
  1601. setFlowInforScroll: function(){
  1602. var size = this.flowInforScrollNode.getSize();
  1603. var scrollSize = this.flowInforScrollNode.getScrollSize();
  1604. var scroll = this.flowInforScrollNode.getScroll();
  1605. if (scrollSize.x>size.x){
  1606. if (!this.flowInforScrollFx) this.flowInforScrollFx = new Fx.Scroll(this.flowInforScrollNode, {"wheelStops": false});
  1607. this.flowInforScrollFx.toRight();
  1608. this.flowInforLeftNode.setStyle("background-image", "url("+"/x_component_process_TaskCenter/$Main/default/processor/left.png)");
  1609. this.flowInforLeftNode.addEvent("click", function(){this.toFlowInforLeft();}.bind(this));
  1610. this.flowInforRightNode.addEvent("click", function(){this.toFlowInforRight();}.bind(this));
  1611. }
  1612. },
  1613. createFlowInforWorklogNode: function(activityName, taskCompleteList, taskList, idx, isCurrent){
  1614. if (idx!=0) var logLineNode = new Element("div", {"styles": this.list.css.logLineNode}).inject(this.flowInforContentNode);
  1615. var logActivityNode = new Element("div", {"styles": this.list.css.logActivityNode}).inject(this.flowInforContentNode);
  1616. var logActivityIconNode = new Element("div", {"styles": this.list.css.logActivityIconNode}).inject(logActivityNode);
  1617. var logActivityTextNode = new Element("div", {"styles": this.list.css.logActivityTextNode, "text": activityName}).inject(logActivityNode);
  1618. var iconName = "user";
  1619. var iconSuffix = "";
  1620. if ((taskCompleteList.length+taskList.length)>1) iconName = "users";
  1621. if (isCurrent) iconSuffix = "_red";
  1622. var inforNode = new Element("div", {"styles": this.list.css.logInforNode});
  1623. taskCompleteList.each(function(route){
  1624. var routeNode = new Element("div", {"styles": this.list.css.logRouteNode}).inject(inforNode);
  1625. routeNode.set("text", route.person+": ");
  1626. var opinionNode = new Element("div", {"styles": this.list.css.logOpinionNode}).inject(inforNode);
  1627. if (!route.opinion) route.opinion = "";
  1628. opinionNode.set("text", "["+route.routeName+"] "+route.opinion);
  1629. var timeNode = new Element("div", {"styles": this.list.css.logTimeNode}).inject(inforNode);
  1630. timeNode.set("text", route.completedTime);
  1631. if (this.list.app.desktop.session.user.name == route.person) if (!iconSuffix) iconSuffix = "_yellow";
  1632. }.bind(this));
  1633. taskList.each(function(task){
  1634. var taskTextNode = new Element("div", {"styles": this.list.css.taskTextNode}).inject(inforNode);
  1635. taskTextNode.set("text", task.person+" "+this.list.app.lp.processing);
  1636. }.bind(this));
  1637. var icon = "url("+"/x_component_process_TaskCenter/$Main/default/processor/"+iconName+iconSuffix+".png)";
  1638. logActivityIconNode.setStyle("background-image", icon);
  1639. if (taskList.length){
  1640. var countNode = new Element("div", {"styles": this.list.css.logTaskCountNode}).inject(logActivityNode);
  1641. var text = (taskList.length>99) ? "99+" : taskList.length;
  1642. countNode.set("text", text);
  1643. }
  1644. new mBox.Tooltip({
  1645. content: inforNode,
  1646. setStyles: {content: {padding: 10, lineHeight: 20}},
  1647. attach: logActivityNode,
  1648. transition: 'flyin',
  1649. offset: {
  1650. x: this.list.app.contentNode.getScroll().x,
  1651. y: this.list.listScrollAreaNode.getScroll().y
  1652. }
  1653. });
  1654. },
  1655. setProcessor: function(){
  1656. var _self = this;
  1657. MWF.xDesktop.requireApp("process.Work", "Processor", function(){
  1658. new MWF.xApplication.process.Work.Processor(this.processNode, this.data, {
  1659. "style": "task",
  1660. "onCancel": function(){
  1661. _self.closeEditTask();
  1662. delete this;
  1663. },
  1664. "onSubmit": function(routeName, opinion){
  1665. _self.submitTask(routeName, opinion, this);
  1666. delete this;
  1667. }
  1668. })
  1669. }.bind(this));
  1670. },
  1671. addMessage: function(data){
  1672. var content = "";
  1673. if (data.length){
  1674. data.each(function(work){
  1675. var users = [];
  1676. work.taskList.each(function(task){
  1677. users.push(task.person+"("+task.department+")");
  1678. }.bind(this));
  1679. content += "<div><b>"+this.list.app.lp.nextActivity+"<font style=\"color: #ea621f\">"+work.fromActivityName+"</font>, "+this.list.app.lp.nextUser+"<font style=\"color: #ea621f\">"+users.join(", ")+"</font></b></div>"
  1680. }.bind(this));
  1681. }else{
  1682. content += this.list.app.lp.workCompleted;
  1683. }
  1684. //
  1685. //
  1686. //data.taskList.each(function(list){
  1687. // content += "<div><b>"+this.list.app.lp.nextActivity+"<font style=\"color: #ea621f\">"+list.activityName+"</font>, "+this.list.app.lp.nextUser+"<font style=\"color: #ea621f\">"+list.personList.join(", ")+"</font></b></div>"
  1688. //}.bind(this));
  1689. var msg = {
  1690. "subject": this.list.app.lp.taskProcessed,
  1691. "content": "<div>"+this.list.app.lp.taskProcessedMessage+"“"+this.data.title+"”</div>"+content
  1692. };
  1693. layout.desktop.message.addTooltip(msg);
  1694. layout.desktop.message.addMessage(msg);
  1695. },
  1696. submitTask: function(routeName, opinion, processor){
  1697. if (!opinion) opinion = routeName;
  1698. this.data.routeName = routeName;
  1699. this.data.opinion = opinion;
  1700. this.list.app.action.processTask(function(json){
  1701. // this.list.app.notice(this.list.app.lp.taskProcessed, "success");
  1702. processor.destroy();
  1703. this.closeEditTask(function(){
  1704. this.node.destroy();
  1705. this.list.refresh();
  1706. this.addMessage(json.data);
  1707. delete this;
  1708. }.bind(this));
  1709. }.bind(this), null, this.data.id, this.data);
  1710. },
  1711. resizeEditNode: function(){
  1712. var p = this.getEditNodePosition();
  1713. var size = this.list.app.content.getSize();
  1714. var maskNode = this.list.app.window.node.getElement("#mask_"+this.data.id);
  1715. if (maskNode) maskNode.setStyles({"width": ""+size.x+"px", "height": ""+size.y+"px"});
  1716. this.node.setStyles({"top": ""+ p.y+"px", "left": ""+ p.x +"px"});
  1717. },
  1718. getEditNodePosition: function(){
  1719. var size = this.list.app.content.getSize();
  1720. var top = size.y/2-160;
  1721. var left = size.x/2-300;
  1722. if (top<0) top = 0;
  1723. return {"x": left, "y": top};
  1724. },
  1725. showEditNode: function(data, callback){
  1726. var p = this.getEditNodePosition();
  1727. this.list.css.itemNode_edit.top = ""+ p.y+"px";
  1728. this.list.css.itemNode_edit.left = ""+ p.x+"px";
  1729. this.editNode.setStyle("display", "none");
  1730. var morph = new Fx.Morph(this.node, {
  1731. "duration": 200,
  1732. "transition": Fx.Transitions.Expo.easeOut,
  1733. "onComplete": function(){
  1734. this.resizeEditNodeFun = this.resizeEditNode.bind(this);
  1735. this.list.app.addEvent("resize", this.resizeEditNodeFun);
  1736. this.setEditTaskNodes(data);
  1737. this.closeNode.setStyle("display", "block");
  1738. if (callback) callback();
  1739. }.bind(this)
  1740. });
  1741. morph.start(this.list.css.itemNode_edit);
  1742. },
  1743. _getJobByTask: function(callback){
  1744. this.list.app.action.getSimpleJobByTask(function(json){
  1745. if (callback) callback(json.data);
  1746. }.bind(this), null, this.data.id);
  1747. },
  1748. setContent: function(){
  1749. this.titleActionNode = new Element("div", {"styles": this.list.css.titleActionNode}).inject(this.titleNode);
  1750. this.titleTextNode = new Element("div", {"styles": this.list.css.titleTextNode, "title": this.data.title}).inject(this.titleNode);
  1751. this.titleTextNode.set("html", "<font style=\"color: #333;\">["+this.data.processName+"]</font>"+this.data.title);
  1752. //var processNode = new Element("div", {"styles": this.list.css.itemInforProcessNode,"text": this.data.processName}).inject(this.inforNode);
  1753. var timeNode = new Element("div", {"styles": this.list.css.itemInforTimeNode, "text": this.data.startTime}).inject(this.inforNode);
  1754. var activityNode = new Element("div", {"styles": this.list.css.itemInforActivityNode, "text": this.data.activityName, "title": this.data.activityName}).inject(this.inforNode);
  1755. this.loadActions();
  1756. this.loadApplicationIcon();
  1757. // this.setTimeIconNode();
  1758. },
  1759. loadActions: function(){
  1760. if (this.data.allowRapid){
  1761. this.editNode = new Element("div", {"styles": this.list.css.titleActionEditNode}).inject(this.titleActionNode);
  1762. this.closeNode = new Element("div", {"styles": this.list.css.titleActionCloseNode}).inject(this.titleActionNode);
  1763. }
  1764. },
  1765. loadApplicationIcon: function(){
  1766. this.getApplicationIcon(function(icon){
  1767. if (icon){
  1768. this.applicationIconNode.setStyle("background-image", "url(data:image/png;base64,"+icon+")");
  1769. }else{
  1770. this.applicationIconNode.setStyle("background-image", "url("+"/x_component_process_ApplicationExplorer/$Main/default/icon/application.png)")
  1771. }
  1772. }.bind(this));
  1773. },
  1774. getApplicationIcon: function(callback){
  1775. var icon = this.list.app.appIcons[this.data.application];
  1776. if (!icon) {
  1777. this.list.app.action.getApplicationIcon(function (json) {
  1778. if (json.data){
  1779. this.list.app.appIcons[this.data.application] = json.data.icon;
  1780. if (callback) callback(json.data.icon);
  1781. }else{
  1782. this.invalidItem = true;
  1783. if (callback) callback("iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAEgElEQVR4Xu1aPXMTSRB9vUaGQqs6iCgi4Bfgq7I2lqWrSwgQMQHyPzAJIeguvOT4BxbBxYjgkquTrFiiCvkXYCKKCFMSFEjs9tWsrEKWvTtfuyvXrTbd6ZnuN69fz842IecP5Tx+rAFYMyDnCKxTYBUE4MrWta9UuLu49hWeHlJveJy1P6kzQAT7eWPzPgN1MFeI6FpckMx8DKIeAe2iP3mVNiipADALuvAIQAOgLbtd5SGAVtGfvkgDjMQB+Fz1ngXgPdlO64IimOGAnhe7/d90bePGJwbAuOY9AqMJwu0kHTwzF+MIhKbb6b9IYh1rAATdxxub+yRyPMOHgbbrT3Zt08IKgHGlvIUN7NvnuSlyPISPXbc3EDph9BgDMPplu4KAXiad67pRhFXD4Qelf1/3dG3FeCMARPDEzoHJgmnZMAU7JiBoAyBozw4OVr3zy0AKJlCAHd100ALgpL4frC7nZfzhYdGf7ugIoxYAo5r3Mmu1l4V8hglAu9TpP1C1UwZgXC03QLSvOvFKxzHvut1BS8UHDQC8t6kfclQ8VhnDOHK7/TsqQ5UAGFW9JhGeqUy4PIZu3AR/eG9iChtbcPDY7b5+LltYCkB40nMKb01U/9Kv93D5yVN8++N3fP/nb5kvp97b2IqJRFVwg+kdmSBKARhXt/dAzp9a3gOYBzC30wHBxvaUnwoskANQK7/RLXvLAeiAYGN7dpN46HYGP8dtXiwAJ5cZH3V2X+Tt1b/akSZxTIgKfj7Zl4d1bT0p+pPrcWkQC4Bp6ZMFch4IJjZKGyMpibEAjGpem4D7SgstDdIJSGesri8MvCp1+pGf6vEAVMsfTdR/7qRKYGKsqBRRj454njeHqAal7uB61PzxKVDzWBfx5fEyEOLmtw1+Prfb6UfGGfnCRACjgjEBIanghU9GACT9za8DQpLBh4eimLuCSAYkDYBwRAWEpINfA3BRGKCy+zonRh1xNkqB3IugQHic5zIoABjVyscE+kmHbotjZbQXgpf6QQj8qdQZRP6QXR+F43Y39x9DJkL4v/ocDoWw6g1BONXNIdMEm0sNG9szfjEO3W4/tj9BfiOU9yux2e/vwpFJNbC52LSxDY+/4E+uP71tfSkalsM8X4vP82pc9URnxi1Z/l+I94x3brev1Kki1YAfAOT819jsZGh+R5gVM2R3gMt+KDMgFBbR/uZs9nTLYlbBg3FYDCYVmfAt+qMFQHguEA0SG+iZVIU0gRCqTz4qqTZIzANI47bIFpzMWmQWQQBTe9VMEDsP4rpJf5CIRTsFFncqbJNzqLUyTWAcIuCGLu2tNGCZqieNki3TP0im1Bdq7/qTho7gnbeWFQNOsUG00IBEq2y6hyXGO4Cbqi0wMoATA+DHgWl7j4maSWtDqPIsApd3fciCTjQFzltsdl641ACchrU+iDxH0CoG31u2dE81BaJQn4FRqDNRXRylZMwIVR3UI+Z2MZi20wg6dQaoUDDsNV54TMuYylpxYxLXAFuHsrZfA5A14hdtvTUDLtqOZO1P7hnwH8CljF98DV13AAAAAElFTkSuQmCC");
  1784. }
  1785. }.bind(this), function(){
  1786. this.invalidItem = true;
  1787. if (callback) callback("iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAEgElEQVR4Xu1aPXMTSRB9vUaGQqs6iCgi4Bfgq7I2lqWrSwgQMQHyPzAJIeguvOT4BxbBxYjgkquTrFiiCvkXYCKKCFMSFEjs9tWsrEKWvTtfuyvXrTbd6ZnuN69fz842IecP5Tx+rAFYMyDnCKxTYBUE4MrWta9UuLu49hWeHlJveJy1P6kzQAT7eWPzPgN1MFeI6FpckMx8DKIeAe2iP3mVNiipADALuvAIQAOgLbtd5SGAVtGfvkgDjMQB+Fz1ngXgPdlO64IimOGAnhe7/d90bePGJwbAuOY9AqMJwu0kHTwzF+MIhKbb6b9IYh1rAATdxxub+yRyPMOHgbbrT3Zt08IKgHGlvIUN7NvnuSlyPISPXbc3EDph9BgDMPplu4KAXiad67pRhFXD4Qelf1/3dG3FeCMARPDEzoHJgmnZMAU7JiBoAyBozw4OVr3zy0AKJlCAHd100ALgpL4frC7nZfzhYdGf7ugIoxYAo5r3Mmu1l4V8hglAu9TpP1C1UwZgXC03QLSvOvFKxzHvut1BS8UHDQC8t6kfclQ8VhnDOHK7/TsqQ5UAGFW9JhGeqUy4PIZu3AR/eG9iChtbcPDY7b5+LltYCkB40nMKb01U/9Kv93D5yVN8++N3fP/nb5kvp97b2IqJRFVwg+kdmSBKARhXt/dAzp9a3gOYBzC30wHBxvaUnwoskANQK7/RLXvLAeiAYGN7dpN46HYGP8dtXiwAJ5cZH3V2X+Tt1b/akSZxTIgKfj7Zl4d1bT0p+pPrcWkQC4Bp6ZMFch4IJjZKGyMpibEAjGpem4D7SgstDdIJSGesri8MvCp1+pGf6vEAVMsfTdR/7qRKYGKsqBRRj454njeHqAal7uB61PzxKVDzWBfx5fEyEOLmtw1+Prfb6UfGGfnCRACjgjEBIanghU9GACT9za8DQpLBh4eimLuCSAYkDYBwRAWEpINfA3BRGKCy+zonRh1xNkqB3IugQHic5zIoABjVyscE+kmHbotjZbQXgpf6QQj8qdQZRP6QXR+F43Y39x9DJkL4v/ocDoWw6g1BONXNIdMEm0sNG9szfjEO3W4/tj9BfiOU9yux2e/vwpFJNbC52LSxDY+/4E+uP71tfSkalsM8X4vP82pc9URnxi1Z/l+I94x3brev1Kki1YAfAOT819jsZGh+R5gVM2R3gMt+KDMgFBbR/uZs9nTLYlbBg3FYDCYVmfAt+qMFQHguEA0SG+iZVIU0gRCqTz4qqTZIzANI47bIFpzMWmQWQQBTe9VMEDsP4rpJf5CIRTsFFncqbJNzqLUyTWAcIuCGLu2tNGCZqieNki3TP0im1Bdq7/qTho7gnbeWFQNOsUG00IBEq2y6hyXGO4Cbqi0wMoATA+DHgWl7j4maSWtDqPIsApd3fciCTjQFzltsdl641ACchrU+iDxH0CoG31u2dE81BaJQn4FRqDNRXRylZMwIVR3UI+Z2MZi20wg6dQaoUDDsNV54TMuYylpxYxLXAFuHsrZfA5A14hdtvTUDLtqOZO1P7hnwH8CljF98DV13AAAAAElFTkSuQmCC");
  1788. }.bind(this), this.data.application);
  1789. }else{
  1790. if (callback) callback(icon);
  1791. }
  1792. },
  1793. setNewIcon: function(){
  1794. var start = new Date().parse(this.data.startTime);
  1795. var now = new Date();
  1796. if (now.getTime()-start.getTime()<86400000){
  1797. this.newIconNode.setStyle("background-image", "url("+"/x_component_process_TaskCenter/$Main/default/new.png)");
  1798. }
  1799. },
  1800. setTimeIconNode: function(){
  1801. var colors = ["#FF0000", "#00d400", "#f6ff0c"];
  1802. var idx = (Math.random()*3).toInt();
  1803. var color = colors[idx];
  1804. this.timeIconNode.setStyle("background-color", color);
  1805. },
  1806. //load: function(){
  1807. // this.node = this.table.insertRow(this.table.rows.length || 0);
  1808. // this.node.setStyles(this.list.css.itemLine);
  1809. //
  1810. // this.appNode = new Element("td", {"styles": this.list.css.itemCell, "text": this.data.applicationName}).inject(this.node);
  1811. // this.titleNode = new Element("td", {"styles": this.list.css.itemCell, "text": this.data.title}).inject(this.node);
  1812. // this.processNode = new Element("td", {"styles": this.list.css.itemCell, "text": this.data.processName}).inject(this.node);
  1813. // this.activityNode = new Element("td", {"styles": this.list.css.itemCell, "text": this.data.activityName}).inject(this.node);
  1814. // this.dateNode = new Element("td", {"styles": this.list.css.itemCell, "text": this.data.updateTime}).inject(this.node);
  1815. //
  1816. //
  1817. // //this.titleNode = this.node.insertCell(this.node.cells.length || 0);
  1818. // //this.titleNode.setStyles(this.list.css.itemCell);
  1819. // //this.titleNode.set("text", this.data.title);
  1820. //}
  1821. });
  1822. MWF.xApplication.process.TaskCenter.TaskList.Item = new Class({
  1823. Extends: MWF.xApplication.process.TaskCenter.List.Item
  1824. });
  1825. MWF.xApplication.process.TaskCenter.TaskCompletedList.Item = new Class({
  1826. Extends: MWF.xApplication.process.TaskCenter.List.Item,
  1827. loadActions: function(){
  1828. this.showTaskCompletedNode = new Element("div", {"styles": this.list.css.titleActionShowNode}).inject(this.titleActionNode);
  1829. this.closeTaskCompletedNode = new Element("div", {"styles": this.list.css.titleActionCloseNode}).inject(this.titleActionNode);
  1830. },
  1831. setEvent: function(){
  1832. this.node.addEvents({
  1833. "mouseover": function(){this.showAction();}.bind(this),
  1834. "mouseout": function(){this.hideAction();}.bind(this)
  1835. });
  1836. if (this.showTaskCompletedNode){
  1837. this.showTaskCompletedNode.addEvent("click", function(e){
  1838. this.showTaskCompleted();
  1839. }.bind(this));
  1840. }
  1841. if (this.closeTaskCompletedNode){
  1842. this.closeTaskCompletedNode.addEvent("click", function(e){
  1843. this.closeTaskCompleted();
  1844. }.bind(this));
  1845. }
  1846. if (this.titleTextNode){
  1847. this.titleTextNode.addEvent("click", function(e){
  1848. this.showTaskCompleted(e);
  1849. }.bind(this));
  1850. }
  1851. },
  1852. setFlowChart: function(data){
  1853. var idx = 0;
  1854. debugger;
  1855. data.workLogTokenList = {};
  1856. data.workLogList.each(function(worklog){
  1857. data.workLogTokenList[worklog.fromActivityToken] = worklog;
  1858. if (!worklog.taskCompletedList) worklog.taskCompletedList = [];
  1859. if (!worklog.taskList) worklog.taskList = [];
  1860. if (worklog.taskCompletedList.length || worklog.taskList.length){
  1861. this.createFlowInforWorklogNode(worklog.fromActivityName, worklog.taskCompletedList, worklog.taskList || [], idx, worklog.fromActivityToken == data.taskCompleted.activityToken);
  1862. idx++;
  1863. }
  1864. }.bind(this));
  1865. return idx;
  1866. },
  1867. showAction: function(){
  1868. if (this.showTaskCompletedNode) this.showTaskCompletedNode.fade("in");
  1869. },
  1870. hideAction: function(){
  1871. if (this.showTaskCompletedNode) this.showTaskCompletedNode.fade("out");
  1872. },
  1873. _getJobByTaskComplete: function(){
  1874. this.list.app.action.getSimpleJobByTaskCompleted(function(json){
  1875. if (callback) callback(json.data);
  1876. }.bind(this), null, this.data.id);
  1877. },
  1878. showTaskCompleted: function(){
  1879. if (!this.nodeClone){
  1880. this.list.app.content.mask({
  1881. "destroyOnHide": true,
  1882. "id": "mask_"+this.data.id,
  1883. "style": this.list.css.maskNode
  1884. });
  1885. this._getSimpleJobByTaskComplete(function(data){
  1886. this.nodeClone = this.node.clone(false);
  1887. this.nodeClone.inject(this.node, "after");
  1888. this.node.setStyles(this.list.css.itemNode_edit_from);
  1889. this.node.position({
  1890. relativeTo: this.nodeClone,
  1891. position: "topleft",
  1892. edge: "topleft"
  1893. });
  1894. this.showEditTaskCompletedNode(data);
  1895. }.bind(this));
  1896. }
  1897. },
  1898. _getSimpleJobByTaskComplete: function(callback){
  1899. this.list.app.action.getSimpleJobByTaskCompleted(function(json){
  1900. if (callback) callback(json.data);
  1901. }.bind(this), null, this.data.id);
  1902. },
  1903. showEditTaskCompletedNode: function(data, callback){
  1904. var p = this.getEditNodePosition();
  1905. this.list.css.itemNode_edit.top = ""+ p.y+"px";
  1906. this.list.css.itemNode_edit.left = ""+ p.x+"px";
  1907. this.showTaskCompletedNode.setStyle("display", "none");
  1908. var morph = new Fx.Morph(this.node, {
  1909. "duration": 200,
  1910. "transition": Fx.Transitions.Expo.easeOut,
  1911. "onComplete": function(){
  1912. this.resizeEditNodeFun = this.resizeEditNode.bind(this);
  1913. this.list.app.addEvent("resize", this.resizeEditNodeFun);
  1914. this.setEditTaskCompleledNodes(data);
  1915. this.closeTaskCompletedNode.setStyle("display", "block");
  1916. if (callback) callback();
  1917. }.bind(this)
  1918. });
  1919. morph.start(this.list.css.itemNode_edit);
  1920. },
  1921. setEditTaskCompleledNodes: function(data){
  1922. this.flowInforNode = new Element("div", {"styles": this.list.css.flowInforNode}).inject(this.node);
  1923. // this.processNode = new Element("div", {"styles": this.list.css.processNode}).inject(this.node);
  1924. this.workInforNode = new Element("div", {"styles": this.list.css.workInforNode}).inject(this.node);
  1925. // this.myDoneInforNode = new Element("div", {"styles": this.list.css.myDoneInforNode}).inject(this.node);
  1926. MWF.require("MWF.widget.ScrollBar", function(){
  1927. new MWF.widget.ScrollBar(this.workInforNode, {
  1928. "style":"xApp_Task_infor", "where": "before", "distance": 30, "friction": 4, "axis": {"x": false, "y": true}
  1929. });
  1930. }.bind(this));
  1931. this.setFlowInfor(data);
  1932. this.setWorkInfor(data);
  1933. // this.setProcessor();
  1934. },
  1935. setWorkInfor: function(data){
  1936. var lp = this.list.app.lp;
  1937. var taskCompletedWorkInforTitleNode = new Element("div", {
  1938. "styles": this.list.css.taskCompletedWorkInforTitleNode,
  1939. "text": lp.currentFileStatus
  1940. }).inject(this.workInforNode);
  1941. data.workList.each(function(work){
  1942. var log = data.workLogTokenList[work.activityToken];
  1943. if (log){
  1944. var users = [];
  1945. log.taskList.each(function(task){
  1946. users.push(task.person+"("+task.department+")");
  1947. }.bind(this));
  1948. var html = "<table border=\"0\" width=\"96%\" align=\"center\"><tr>" +
  1949. "<td style=\"white-space: normal;word-break: break-all;word-wrap:break-word;\">"+
  1950. ""+lp.fileat+"<font style=\"color: #00F\"> "+log.fromTime+" </font>"+lp.flowto+"<font style=\"color: #00F\"> ["+log.fromActivityName+"] </font>" +
  1951. "<br/><font style=\"font-weight:bold\">"+lp.list_owner+": </font>"+users.join(", ")+"</td>" +
  1952. "<td style=\"width:60px; text-align:right\"><div id=\""+work.id+"\">打开</div></td>" +
  1953. "</tr></table>";
  1954. var taskCompletedWorkInforNode = new Element("div", {
  1955. "styles": this.list.css.taskCompletedWorkInforNode,
  1956. "html": html
  1957. }).inject(this.workInforNode);
  1958. var table = taskCompletedWorkInforNode.getElement("table");
  1959. //table
  1960. var openNode = taskCompletedWorkInforNode.getElement("div");
  1961. if (openNode) {
  1962. openNode.setStyles(this.list.css.taskCompletedOpenNode);
  1963. var _self = this;
  1964. openNode.addEvent("click", function(e){
  1965. var id = this.get("id");
  1966. _self.openWorkByTaskCompleted(e, id);
  1967. });
  1968. }
  1969. }
  1970. }.bind(this));
  1971. data.workCompletedList.each(function(work){
  1972. // var log = data.workLogTokenList[work.activityToken];
  1973. // if (log){
  1974. var html = "<table border=\"0\" width=\"90%\" align=\"center\"><tr>" +
  1975. "<td>“"+work.title+"”"+lp.fileat+""+work.completedTime+""+lp.completed+"</td>" +
  1976. "<td><div id=\""+work.id+"\">打开</div></td>" +
  1977. "</tr></table>";
  1978. var taskCompletedWorkInforNode = new Element("div", {
  1979. "styles": this.list.css.taskCompletedWorkInforNode,
  1980. "html": html
  1981. }).inject(this.workInforNode);
  1982. var openNode = taskCompletedWorkInforNode.getElement("div");
  1983. if (openNode) {
  1984. openNode.setStyles(this.list.css.taskCompletedOpenNode);
  1985. var _self = this;
  1986. openNode.addEvent("click", function(e){
  1987. var id = this.get("id");
  1988. _self.openWorkCompleteedByTaskCompleted(e, id);
  1989. });
  1990. }
  1991. // }
  1992. }.bind(this));
  1993. },
  1994. openWorkByTaskCompleted: function(e, id){
  1995. var options = {"workId": id, "readonly": true, "appId": id};
  1996. this.list.app.desktop.openApplication(e, "process.Work", options);
  1997. },
  1998. openWorkCompleteedByTaskCompleted: function(e, id){
  1999. var options = {"workCompletedId": id, "readonly": true, "appId": id};
  2000. this.list.app.desktop.openApplication(e, "process.Work", options);
  2001. },
  2002. closeTaskCompleted: function(callback){
  2003. this.closeTaskCompletedNode.setStyle("display", "none");
  2004. this.flowInforLeftNode.destroy();
  2005. this.flowInforRightNode.destroy();
  2006. this.flowInforContentNode.destroy();
  2007. this.flowInforScrollNode.destroy();
  2008. this.flowInforNode.destroy();
  2009. this.workInforNode.destroy();
  2010. // this.processNode.destroy();
  2011. this.flowInforScrollFx = null;
  2012. this.flowInforLeftNode = null;
  2013. this.flowInforRightNode = null;
  2014. this.flowInforScrollNode = null;
  2015. this.flowInforContentNode = null;
  2016. this.flowInforNode = null;
  2017. this.workInforNode = null;
  2018. delete this.flowInforScrollFx;
  2019. delete this.flowInforLeftNode;
  2020. delete this.flowInforRightNode;
  2021. delete this.flowInforScrollNode;
  2022. delete this.flowInforContentNode;
  2023. delete this.flowInforNode;
  2024. delete this.workInforNode;
  2025. var p = this.nodeClone.getPosition(this.nodeClone.getOffsetParent());
  2026. this.list.css.itemNode_edit_from.top = ""+ p.y+"px";
  2027. this.list.css.itemNode_edit_from.left = ""+ p.x+"px";
  2028. var morph = new Fx.Morph(this.node, {
  2029. "duration": 200,
  2030. "transition": Fx.Transitions.Expo.easeIn,
  2031. "onComplete": function(){
  2032. this.nodeClone.destroy();
  2033. this.nodeClone = null;
  2034. this.list.app.content.unmask();
  2035. this.node.setStyles(this.list.css.itemNode);
  2036. this.node.setStyle("opacity", 1);
  2037. this.list.app.removeEvent("resize", this.resizeEditNodeFun);
  2038. this.showTaskCompletedNode.setStyle("display", "block");
  2039. if (callback) callback();
  2040. }.bind(this)
  2041. });
  2042. morph.start(this.list.css.itemNode_edit_from);
  2043. }
  2044. });
  2045. MWF.xApplication.process.TaskCenter.ReadList.Item = new Class({
  2046. Extends: MWF.xApplication.process.TaskCenter.TaskCompletedList.Item,
  2047. setFlowChart: function(data){
  2048. var idx = 0;
  2049. data.workLogTokenList = {};
  2050. data.workLogList.each(function(worklog){
  2051. data.workLogTokenList[worklog.fromActivityToken] = worklog;
  2052. if (!worklog.taskCompletedList) worklog.taskCompletedList = [];
  2053. if (!worklog.taskList) worklog.taskList = [];
  2054. if (worklog.taskCompletedList.length || worklog.taskList.length){
  2055. this.createFlowInforWorklogNode(worklog.fromActivityName, worklog.taskCompletedList, worklog.taskList || [], idx, worklog.fromActivityToken == data.read.activityToken);
  2056. idx++;
  2057. }
  2058. }.bind(this));
  2059. return idx;
  2060. },
  2061. _getSimpleJobByTaskComplete: function(callback){
  2062. this.list.app.action.getSimpleJobByRead(function(json){
  2063. if (callback) callback(json.data);
  2064. }.bind(this), null, this.data.id);
  2065. },
  2066. //loadActions: function(){
  2067. // this.editNode = new Element("div", {"styles": this.list.css.titleActionReadedNode, "title": "设置为已阅"}).inject(this.titleActionNode);
  2068. // this.closeNode = new Element("div", {"styles": this.list.css.titleActionCloseNode}).inject(this.titleActionNode);
  2069. //},
  2070. loadActions: function(){
  2071. this.showTaskCompletedNode = new Element("div", {"styles": this.list.css.titleActionReadedNode, "title": "设置为已阅"}).inject(this.titleActionNode);
  2072. this.closeTaskCompletedNode = new Element("div", {"styles": this.list.css.titleActionCloseNode}).inject(this.titleActionNode);
  2073. },
  2074. setEvent: function(){
  2075. this.node.addEvents({
  2076. "mouseover": function(){this.showAction();}.bind(this),
  2077. "mouseout": function(){this.hideAction();}.bind(this)
  2078. });
  2079. if (this.showTaskCompletedNode){
  2080. this.showTaskCompletedNode.addEvent("click", function(e){
  2081. this.setReadedClose(e);
  2082. }.bind(this));
  2083. }
  2084. if (this.closeTaskCompletedNode){
  2085. this.closeTaskCompletedNode.addEvent("click", function(e){
  2086. this.closeTaskCompleted();
  2087. }.bind(this));
  2088. }
  2089. if (this.titleTextNode){
  2090. this.titleTextNode.addEvent("click", function(e){
  2091. this.showTaskCompleted(e);
  2092. }.bind(this));
  2093. }
  2094. },
  2095. setEditTaskCompleledNodes: function(data) {
  2096. this.flowInforNode = new Element("div", {"styles": this.list.css.flowInforNode}).inject(this.node);
  2097. // this.processNode = new Element("div", {"styles": this.list.css.processNode}).inject(this.node);
  2098. this.workInforNode = new Element("div", {"styles": this.list.css.workInforNode}).inject(this.node);
  2099. // this.myDoneInforNode = new Element("div", {"styles": this.list.css.myDoneInforNode}).inject(this.node);
  2100. MWF.require("MWF.widget.ScrollBar", function () {
  2101. new MWF.widget.ScrollBar(this.workInforNode, {
  2102. "style": "xApp_Task_infor",
  2103. "where": "before",
  2104. "distance": 30,
  2105. "friction": 4,
  2106. "axis": {"x": false, "y": true}
  2107. });
  2108. }.bind(this));
  2109. this.setFlowInfor(data);
  2110. this.setWorkInfor(data);
  2111. this.setReadedButton();
  2112. },
  2113. setReadedButton: function(){
  2114. this.setReadedAction = Element("div", {"styles": this.list.css.setReadedAction, "text": "设置为已阅"}).inject(this.node);
  2115. this.setReadedAction.addEvent("click", function(e){
  2116. this.setReaded(e);
  2117. }.bind(this));
  2118. },
  2119. setReadedClose: function(e){
  2120. var _self = this;
  2121. var text = "您确定要将“"+this.data.title+"”标记为已阅吗?"
  2122. this.list.app.confirm("infor", e, "标记已阅确认", text, 350, 130, function(){
  2123. debugger;
  2124. _self.list.app.action.setReaded(function(){
  2125. this.node.destroy();
  2126. this.list.refresh();
  2127. }.bind(_self), null, _self.data.id, _self.data);
  2128. this.close();
  2129. }, function(){
  2130. this.close();
  2131. }, null, this.list.app.content);
  2132. },
  2133. setReaded: function(e){
  2134. var _self = this;
  2135. var text = "您确定要将“"+this.data.title+"”标记为已阅吗?"
  2136. this.list.app.confirm("infor", e, "标记已阅确认", text, 350, 130, function(){
  2137. debugger;
  2138. _self.list.app.action.setReaded(function(){
  2139. this.closeTaskCompleted(function(){
  2140. this.node.destroy();
  2141. this.list.refresh();
  2142. }.bind(this));
  2143. }.bind(_self), null, _self.data.id, _self.data);
  2144. this.close();
  2145. }, function(){
  2146. this.close();
  2147. }, null, this.list.app.content);
  2148. },
  2149. closeTaskCompleted: function(callback){
  2150. this.closeTaskCompletedNode.setStyle("display", "none");
  2151. this.flowInforLeftNode.destroy();
  2152. this.flowInforRightNode.destroy();
  2153. this.flowInforContentNode.destroy();
  2154. this.flowInforScrollNode.destroy();
  2155. this.flowInforNode.destroy();
  2156. this.workInforNode.destroy();
  2157. this.setReadedAction.destroy();
  2158. // this.processNode.destroy();
  2159. this.flowInforScrollFx = null;
  2160. this.flowInforLeftNode = null;
  2161. this.flowInforRightNode = null;
  2162. this.flowInforScrollNode = null;
  2163. this.flowInforContentNode = null;
  2164. this.flowInforNode = null;
  2165. this.workInforNode = null;
  2166. this.setReadedAction = null;
  2167. delete this.flowInforScrollFx;
  2168. delete this.flowInforLeftNode;
  2169. delete this.flowInforRightNode;
  2170. delete this.flowInforScrollNode;
  2171. delete this.flowInforContentNode;
  2172. delete this.flowInforNode;
  2173. delete this.workInforNode;
  2174. delete this.setReadedAction;
  2175. var p = this.nodeClone.getPosition(this.nodeClone.getOffsetParent());
  2176. this.list.css.itemNode_edit_from.top = ""+ p.y+"px";
  2177. this.list.css.itemNode_edit_from.left = ""+ p.x+"px";
  2178. var morph = new Fx.Morph(this.node, {
  2179. "duration": 200,
  2180. "transition": Fx.Transitions.Expo.easeIn,
  2181. "onComplete": function(){
  2182. this.nodeClone.destroy();
  2183. this.nodeClone = null;
  2184. this.list.app.content.unmask();
  2185. this.node.setStyles(this.list.css.itemNode);
  2186. this.node.setStyle("opacity", 1);
  2187. this.list.app.removeEvent("resize", this.resizeEditNodeFun);
  2188. this.showTaskCompletedNode.setStyle("display", "block");
  2189. if (callback) callback();
  2190. }.bind(this)
  2191. });
  2192. morph.start(this.list.css.itemNode_edit_from);
  2193. }
  2194. });
  2195. MWF.xApplication.process.TaskCenter.ReadedList.Item = new Class({
  2196. Extends: MWF.xApplication.process.TaskCenter.TaskCompletedList.Item,
  2197. setFlowChart: function(data){
  2198. var idx = 0;
  2199. data.workLogTokenList = {};
  2200. data.workLogList.each(function(worklog){
  2201. data.workLogTokenList[worklog.fromActivityToken] = worklog;
  2202. if (!worklog.taskCompletedList) worklog.taskCompletedList = [];
  2203. if (!worklog.taskList) worklog.taskList = [];
  2204. if (worklog.taskCompletedList.length || worklog.taskList.length){
  2205. this.createFlowInforWorklogNode(worklog.fromActivityName, worklog.taskCompletedList, worklog.taskList || [], idx, false);
  2206. idx++;
  2207. }
  2208. }.bind(this));
  2209. return idx;
  2210. },
  2211. _getSimpleJobByTaskComplete: function(callback){
  2212. this.list.app.action.getSimpleJobByReaded(function(json){
  2213. if (callback) callback(json.data);
  2214. }.bind(this), null, this.data.id);
  2215. }
  2216. });
  2217. MWF.xApplication.process.TaskCenter.ReviewList.Item = new Class({
  2218. Extends: MWF.xApplication.process.TaskCenter.TaskCompletedList.Item,
  2219. setFlowChart: function(data){
  2220. var idx = 0;
  2221. data.workLogTokenList = {};
  2222. data.workLogList.each(function(worklog){
  2223. data.workLogTokenList[worklog.fromActivityToken] = worklog;
  2224. if (!worklog.taskCompletedList) worklog.taskCompletedList = [];
  2225. if (!worklog.taskList) worklog.taskList = [];
  2226. if (worklog.taskCompletedList.length || worklog.taskList.length){
  2227. this.createFlowInforWorklogNode(worklog.fromActivityName, worklog.taskCompletedList, worklog.taskList || [], idx, false);
  2228. idx++;
  2229. }
  2230. }.bind(this));
  2231. return idx;
  2232. },
  2233. _getSimpleJobByTaskComplete: function(callback){
  2234. this.list.app.action.getSimpleJobByReview(function(json){
  2235. if (callback) callback(json.data);
  2236. }.bind(this), null, this.data.id);
  2237. },
  2238. setContent: function(){
  2239. this.titleActionNode = new Element("div", {"styles": this.list.css.titleActionNode}).inject(this.titleNode);
  2240. this.titleTextNode = new Element("div", {"styles": this.list.css.titleTextNode, "title": this.data.title}).inject(this.titleNode);
  2241. this.titleTextNode.set("html", "<font style=\"color: #333;\">["+this.data.processName+"]</font>"+this.data.title);
  2242. //var processNode = new Element("div", {"styles": this.list.css.itemInforProcessNode,"text": this.data.processName}).inject(this.inforNode);
  2243. var timeNode = new Element("div", {"styles": this.list.css.itemInforTimeNode, "text": this.data.startTime}).inject(this.inforNode);
  2244. var activityNode = new Element("div", {"styles": this.list.css.itemInforActivityNode, "text": this.data.applicationName, "title": this.data.applicationName}).inject(this.inforNode);
  2245. this.loadActions();
  2246. this.loadApplicationIcon();
  2247. // this.setTimeIconNode();
  2248. }
  2249. });