Project.js 81 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604
  1. /*
  2. this.data //project的数据
  3. this.currentProjectGroupData //当前taskgroup的数据
  4. */
  5. MWF.xApplication.TeamWork = MWF.xApplication.TeamWork || {};
  6. MWF.xDesktop.requireApp("TeamWork", "Common", null, false);
  7. MWF.xApplication.TeamWork.Project = new Class({
  8. Extends: MWF.widget.Common,
  9. Implements: [Options, Events],
  10. options: {
  11. "style": "default"
  12. },
  13. initialize: function (container, app, data, options) {
  14. this.setOptions(options);
  15. this.container = container;
  16. this.app = app;
  17. this.lp = this.app.lp.project;
  18. //this.actions = this.app.restActions;
  19. this.rootActions = this.app.rootActions;
  20. this.actions = this.rootActions.ProjectAction;
  21. //this.taskActions = this.rootActions.TaskAction;
  22. this.path = "../x_component_TeamWork/$Project/";
  23. this.cssPath = this.path+this.options.style+"/css.wcss";
  24. this._loadCss();
  25. this.data = data;
  26. },
  27. load: function () {
  28. this.container.setStyles({display:"flex"});
  29. this.container.empty();
  30. this.createTopBarLayout();
  31. this.createContentLayout();
  32. this.actions.get(this.data.id,function(json){
  33. //debugger;
  34. this.data = json.data;
  35. this.topBarTabItemTask.click();
  36. }.bind(this))
  37. // this.topBarTabItemTask.click();
  38. },
  39. createTopBarLayout:function(){
  40. var _self = this;
  41. this.topBarLayout = new Element("div.topBarLayout",{styles:this.css.topBarLayout}).inject(this.container);
  42. this.topBarBackContainer = new Element("div.topBarBackContainer",{styles:this.css.topBarBackContainer}).inject(this.topBarLayout);
  43. this.topBarBackHomeIcon = new Element("div.topBarBackHomeIcon",{styles:this.css.topBarBackHomeIcon}).inject(this.topBarBackContainer);
  44. this.topBarBackHomeIcon.addEvents({
  45. click:function(){
  46. var pl = new MWF.xApplication.TeamWork.ProjectList(this.container,this.app,this.actions,{});
  47. pl.load();
  48. }.bind(this),
  49. mouseover:function(){
  50. var opt={
  51. axis: "y" //箭头在x轴还是y轴上展现
  52. };
  53. this.app.showTips(this.topBarBackHomeIcon,{_html:"<div style='margin:2px 5px;'>"+this.lp.backProject+"</div>"},opt);
  54. //this.app.tips(this.topBarBackHomeIcon,this.lp.backProject);
  55. }.bind(this)
  56. });
  57. this.topBarBackHomeNext = new Element("div.topBarBackHomeNext",{styles:this.css.topBarBackHomeNext}).inject(this.topBarBackContainer);
  58. this.topBarBackHomeTextContainer = new Element("div.topBarBackHomeTextContainer",{styles:this.css.topBarBackHomeTextContainer}).inject(this.topBarBackContainer);
  59. this.topBarBackHomeText = new Element("div.topBarBackHomeText",{styles:this.css.topBarBackHomeText,text:this.data.title}).inject(this.topBarBackHomeTextContainer);
  60. this.topBarBackHomeArrow = new Element("div.topBarBackHomeArrow",{styles:this.css.topBarBackHomeArrow}).inject(this.topBarBackHomeTextContainer);
  61. this.topBarBackHomeTextContainer.addEvents({
  62. click:function(){
  63. var plist = new MWF.xApplication.TeamWork.Project.ProjectList(this.container, this.topBarBackHomeTextContainer, this.app, this.data, {
  64. css:this.css,
  65. lp:this.lp,
  66. axis : "y",
  67. position : { //node 固定的位置
  68. x : "right", //x轴上left center right, auto 系统自动计算
  69. y : "auto" //y 轴上top middle bottom, auto 系统自动计算
  70. },
  71. priorityOfAuto :{
  72. x : [ "center", "right", "left" ], //当position x 为 auto 时候的优先级
  73. y : [ "middle", "bottom", "top" ] //当position y 为 auto 时候的优先级
  74. },
  75. nodeStyles : {
  76. "min-width":"300px",
  77. "padding":"2px",
  78. "border-radius":"5px",
  79. "z-index" : "101"
  80. }
  81. });
  82. plist.load();
  83. }.bind(this),
  84. mouseover:function(){this.getElements("div").setStyles({"color":"#4a90e2"})},
  85. mouseout:function () { this.getElements("div").setStyles({"color":"#333333"}) }
  86. });
  87. this.topBarTabsContainer = new Element("div.topBarTabsContainer",{styles:this.css.topBarTabsContainer}).inject(this.topBarLayout);
  88. this.topBarTabItemTask = new Element("div.topBarTabItemTask",{styles:this.css.topBarTabItemTask,text:this.lp.task}).inject(this.topBarTabsContainer);
  89. this.topBarTabItemTask.addEvents({
  90. click:function(){
  91. this.topBarTabItemTask.setStyles({"color":"#4A90E2","border-bottom":"2px solid #4A90E2"});
  92. //this.topBarTabItemStat.setStyles({"color":"","border-bottom":"0px"});
  93. this.createTaskLayout();
  94. }.bind(this)
  95. });
  96. // this.topBarTabItemStat = new Element("div.topBarTabItemStat",{styles:this.css.topBarTabItemStat,text:this.lp.stat}).inject(this.topBarTabsContainer);
  97. // this.topBarTabItemStat.addEvents({
  98. // click:function(){
  99. // this.topBarTabItemTask.setStyles({"color":"","border-bottom":"0px"});
  100. // this.topBarTabItemStat.setStyles({"color":"#4A90E2","border-bottom":"2px solid #4A90E2"});
  101. // this.createStatLayout();
  102. // }.bind(this)
  103. // });
  104. //********************************
  105. //************************************
  106. if(this.data.control && this.data.control.founder){
  107. this.topBarSettingContainer = new Element("div.topBarSettingContainer",{styles:this.css.topBarSettingContainer}).inject(this.topBarLayout);
  108. this.topBarSettingMenuContainer = new Element("div.topBarSettingMenuContainer",{styles:this.css.topBarSettingMenuContainer}).inject(this.topBarSettingContainer);
  109. this.topBarSettingMenuContainer.addEvents({
  110. click:function(){
  111. MWF.xDesktop.requireApp("TeamWork", "ProjectSetting", function(){
  112. var ps = new MWF.xApplication.TeamWork.ProjectSetting(this,this.data,
  113. {"width": "800","height": "80%",
  114. onPostOpen:function(){
  115. ps.formAreaNode.setStyles({"top":"10px"});
  116. var fx = new Fx.Tween(ps.formAreaNode,{duration:200});
  117. fx.start(["top"] ,"10px", "100px");
  118. },
  119. onPostClose:function(json){
  120. }
  121. },{
  122. container : this.container,
  123. lp : this.app.lp.projectSetting,
  124. css:_self.css
  125. }
  126. );
  127. ps.open();
  128. }.bind(this));
  129. }.bind(this),
  130. mouseover:function(){
  131. this.topBarSettingMenuContainer.getElements(".topBarSettingMenuIcon").setStyles({
  132. "background-image":"url(../x_component_TeamWork/$Project/default/icon/icon_caidan_click.png)"
  133. });
  134. this.topBarSettingMenuContainer.getElements(".topBarSettingMenuText").setStyles({
  135. "color":"#4A90E2"
  136. });
  137. }.bind(this),
  138. mouseout:function(){
  139. this.topBarSettingMenuContainer.getElements(".topBarSettingMenuIcon").setStyles({
  140. "background-image":"url(../x_component_TeamWork/$Project/default/icon/icon_caidan.png)"
  141. });
  142. this.topBarSettingMenuContainer.getElements(".topBarSettingMenuText").setStyles({
  143. "color":"#666666"
  144. });
  145. }.bind(this)
  146. });
  147. this.topBarSettingMenuIcon = new Element("div.topBarSettingMenuIcon",{styles:this.css.topBarSettingMenuIcon}).inject(this.topBarSettingMenuContainer);
  148. this.topBarSettingMenuText = new Element("div.topBarSettingMenuText",{styles:this.css.topBarSettingMenuText,text:this.lp.setting}).inject(this.topBarSettingMenuContainer);
  149. }
  150. },
  151. createContentLayout:function(){
  152. this.contentLayout = new Element("div.contentLayout",{styles:this.css.contentLayout}).inject(this.container);
  153. },
  154. createTaskLayout:function(){
  155. if(this.contentLayout) this.contentLayout.empty();
  156. this.createNaviContent();
  157. this.createFoldContainer();
  158. this.createTaskContent();
  159. },
  160. createFoldContainer:function(){
  161. if(this.foldContainer) this.foldContainer.destroy();
  162. this.foldContainer = new Element("div.foldContainer",{styles:this.css.foldContainer}).inject(this.contentLayout);
  163. this.foldIcon = new Element("div.foldIcon",{styles:this.css.foldIcon,text:"<"}).inject(this.foldContainer);
  164. this.foldIcon.addEvents({
  165. mouseover:function(){
  166. this.naviLayout.setStyles({"border-right": "1px solid #1b9aee"});
  167. //this.foldContainer.setStyles({"border-left":"1px solid #1b9aee"});
  168. this.foldIcon.setStyles({"background-color":"#1b9aee","color":"#ffffff"});
  169. }.bind(this),
  170. mouseout:function(){
  171. this.naviLayout.setStyles({"border-right": "1px solid #cccccc"});
  172. this.foldIcon.setStyles({"background-color":"#ffffff","color":""});
  173. }.bind(this),
  174. click:function(){
  175. if(this.naviFold){
  176. var fx = new Fx.Tween(this.naviLayout,{duration:100});
  177. //this.naviLayout.show();
  178. fx.start(["width"] ,"0", "300")
  179. .chain(function(){
  180. this.foldIcon.set("text","<");
  181. this.naviFold = false;
  182. }.bind(this));
  183. }else{ //aaaaa
  184. var fx1 = new Fx.Tween(this.naviLayout,{duration:100});
  185. fx1.start(["width"] ,"300", "0")
  186. .chain(function(){
  187. //this.naviLayout.hide();
  188. this.foldIcon.set("text",">");
  189. this.naviFold = true;
  190. }.bind(this));
  191. }
  192. }.bind(this)
  193. })
  194. var _margin_height = (this.foldContainer.getHeight())/2 - (this.foldIcon.getHeight())/2;
  195. this.foldIcon.setStyles({"margin-top":_margin_height+"px"});
  196. },
  197. createNaviContent:function(){
  198. if(this.naviLayout) this.naviLayout.destroy();
  199. this.naviLayout = new Element("div.naviLayout",{styles:this.css.naviLayout}).inject(this.contentLayout);
  200. this.app.setLoading(this.naviLayout);
  201. this.rootActions.TaskAction.statiticMyProject(this.data.id,function(json){
  202. this.projectGroupData = json.data;
  203. if(this.projectGroupData.groups && this.projectGroupData.groups.length>0){
  204. this.currentProjectGroupData = this.projectGroupData.groups[0]; //默认只有一个分组
  205. }
  206. this.naviLayout.empty();
  207. this.createNaviTask();
  208. this.createNaviView();
  209. this.naviTopMyTaskLayout.click();
  210. }.bind(this));
  211. },
  212. createNaviTask:function(){
  213. var _self = this;
  214. if(!this.currentProjectGroupData) return;
  215. if(this.naviTop) this.naviTop.destroy();
  216. this.naviTop = new Element("div.naviTop",{styles:this.css.naviTop}).inject(this.naviLayout);
  217. this.naviTopSearchContainer = new Element("div.naviTopSearchContainer",{styles:this.css.naviTopSearchContainer}).inject(this.naviTop);
  218. this.naviTopSearchIn = new Element("input.naviTopSearchIn",{styles:this.css.naviTopSearchIn,placeholder:this.lp.searchTask}).inject(this.naviTopSearchContainer);
  219. this.naviTopSearchIn.addEvents({
  220. keypress:function(e){
  221. this.searchLoading = true;
  222. var keycode = (e.event.keyCode ? e.event.keyCode : e.event.which);
  223. if (keycode == 13 || keycode == 10) {
  224. var key = this.naviTopSearchIn.get("value").trim();
  225. if(key=="") return;
  226. if(this.searchLoading) this.openSearch(key)
  227. }
  228. }.bind(this),
  229. focus:function(){
  230. this.naviTopSearchContainer.setStyles({"border":"1px solid #4A90E2"})
  231. }.bind(this),
  232. blur:function(){
  233. this.naviTopSearchContainer.setStyles({"border":"1px solid #DEDEDE"})
  234. }.bind(this)
  235. });
  236. this.naviTopTaskContainer = new Element("div.naviTopTaskContainer",{styles:this.css.naviTopTaskContainer}).inject(this.naviTop);
  237. this.naviTopTaskText = new Element("div.naviTopTaskText",{styles:this.css.naviTopTaskText,text:this.lp.task}).inject(this.naviTopTaskContainer);
  238. this.naviTopTaskAdd = new Element("div.naviTopTaskAdd",{styles:this.css.naviTopTaskAdd}).inject(this.naviTopTaskContainer);
  239. this.naviTopTaskAdd.addEvents({
  240. click:function(){
  241. var data = {
  242. projectObj:this,
  243. taskGroupId:this.currentProjectGroupData.id,
  244. //projectId:this.data.id,
  245. taskListIds:[]
  246. };
  247. var opt = {
  248. onCreateTask:function(){
  249. this.createTaskGroup();
  250. }.bind(this)
  251. };
  252. var newTask = new MWF.xApplication.TeamWork.Project.NewTask(this,data,opt,{});
  253. newTask.open();
  254. }.bind(this),
  255. mouseover:function(){
  256. this.naviTopTaskAdd.setStyles({
  257. "background-image":"url(../x_component_TeamWork/$Project/default/icon/icon_zengjia_blue2_click.png)"
  258. });
  259. //this.app.showTips(this.naviTopTaskAdd,{_html:"<div style='margin:2px 5px;'>"+this.lp.taskAdd+"</div>"});
  260. this.app.tips(this.naviTopTaskAdd,this.lp.taskAdd)
  261. }.bind(this),
  262. mouseout:function(){
  263. this.naviTopTaskAdd.setStyles({
  264. "background-image":"url(../x_component_TeamWork/$Project/default/icon/icon_jia.png)"
  265. });
  266. }.bind(this)
  267. });
  268. if(this.data.control && this.data.control.taskCreate == false){
  269. this.naviTopTaskAdd.destroy();
  270. delete this.naviTopTaskAdd;
  271. }
  272. this.naviTopMyTaskLayout = new Element("div.naviTopMyTaskLayout",{styles:this.css.naviTopMyTaskLayout}).inject(this.naviTop);
  273. this.naviTopMyTaskLayout.addEvents({
  274. click:function(){
  275. this.curNaviItem = "group";
  276. this.naviTopMyTaskLayout.setStyles({"background-color":"#F2F5F7"});
  277. this.naviViewContainer.getElements(".naviItemContainer").each(function(d){
  278. this.naviItemChange(d,"leave")
  279. }.bind(this));
  280. this.createTaskGroup();
  281. }.bind(this),
  282. mouseover:function(){ if(_self.curNaviItem!="group") this.setStyles({"background-color":"#F2F5F7"}) },
  283. mouseout:function(){ if(_self.curNaviItem!="group") this.setStyles({"background-color":""}) }
  284. });
  285. this.naviTopMyTaskContainer = new Element("div.naviTopMyTaskContainer",{styles:this.css.naviTopMyTaskContainer}).inject(this.naviTopMyTaskLayout);
  286. this.naviTopMyTaskText = new Element("div.naviTopMyTaskText",{styles:this.css.naviTopMyTaskText,text:this.lp.myTask}).inject(this.naviTopMyTaskContainer);
  287. this.naviTopMyTaskCount = new Element("div.naviTopMyTaskCount",{styles:this.css.naviTopMyTaskCount,text:"("+this.currentProjectGroupData.completedTotal+"/"+this.currentProjectGroupData.taskTotal+")"}).inject(this.naviTopMyTaskContainer);
  288. this.naviTopTaskLineContainer = new Element("div.naviTopTaskLineContainer",{styles:this.css.naviTopTaskLineContainer}).inject(this.naviTopMyTaskLayout);
  289. this.naviTopTaskLine = new Element("div.naviTopTaskLine",{styles:this.css.naviTopTaskLine}).inject(this.naviTopTaskLineContainer);
  290. this.loadTaskLine();
  291. //this.naviTopMyTaskLayout.click();
  292. },
  293. loadTaskLine:function(){
  294. this.completeLine = new Element("div.completeLine",{styles:this.css.completeLine}).inject(this.naviTopTaskLine);
  295. this.completeLine.addEvents({
  296. mouseover:function(){
  297. this.app.showTips(this.completeLine,{_html:"<div style='margin:2px 5px;'>"+this.lp.taskCompleteText+":"+this.currentProjectGroupData.completedTotal+"</div>"});
  298. //this.app.tips(this.completeLine,this.lp.taskCompleteText + ": " + this.currentProjectGroupData.completedTotal);
  299. }.bind(this)
  300. });
  301. this.overLine = new Element("div.overLine",{styles:this.css.overLine}).inject(this.naviTopTaskLine);
  302. this.overLine.addEvents({
  303. mouseover:function(){
  304. this.app.showTips(this.overLine,{_html:"<div style='margin:2px 5px;'>"+this.lp.taskovertimeText+":"+this.currentProjectGroupData.overtimeTotal+"</div>"});
  305. ////alert(this.currentProjectGroupData.overtimeTotal)
  306. //this.app.tips(this.overLine,this.lp.taskovertimeText + ": " + this.currentProjectGroupData.overtimeTotal)
  307. }.bind(this)
  308. });
  309. if(this.currentProjectGroupData){
  310. var taskTotal = this.currentProjectGroupData.taskTotal;
  311. var completedTotal = this.currentProjectGroupData.completedTotal;
  312. var overtimeTotal = this.currentProjectGroupData.overtimeTotal;
  313. //alert(taskTotal);alert(completedTotal);alert(overtimeTotal);
  314. if(taskTotal){
  315. var _width = this.naviTopTaskLine.getWidth();
  316. var completePixel =_width * (completedTotal / taskTotal);
  317. var overPixel =_width * (overtimeTotal / taskTotal);
  318. this.completeLine.setStyles({"width":completePixel+"px"});
  319. this.overLine.setStyles({"width":overPixel+"px"});
  320. }
  321. }
  322. },
  323. createNaviView:function(){
  324. if(this.naviView) this.naviView.destroy();
  325. this.naviView = new Element("div.naviView",{styles:this.css.naviView}).inject(this.naviLayout);
  326. this.naviViewTitleContainer = new Element("div.naviViewTitleContainer",{styles:this.css.naviViewTitleContainer}).inject(this.naviView);
  327. this.naviViewTitle = new Element("div.naviViewTitle",{styles:this.css.naviViewTitle,text:this.lp.viewTitle}).inject(this.naviViewTitleContainer);
  328. /* 新增按钮
  329. this.naviViewAdd = new Element("div.naviViewAdd",{styles:this.css.naviViewAdd}).inject(this.naviViewTitleContainer);
  330. this.naviViewAdd.addEvents({
  331. click:function(){
  332. }.bind(this),
  333. mouseover:function(){
  334. this.naviViewAdd.setStyles({
  335. "background-image":"url(../x_component_TeamWork/$Project/default/icon/icon_zengjia_blue2_click.png)"
  336. });
  337. this.app.showTips(this.naviViewAdd,{_html:"<div style='margin:2px 5px;'>"+this.lp.viewAdd+"</div>"});
  338. }.bind(this),
  339. mouseout:function(){
  340. this.naviViewAdd.setStyles({
  341. "background-image":"url(../x_component_TeamWork/$Project/default/icon/icon_jia.png)"
  342. });
  343. }.bind(this)
  344. });
  345. */
  346. this.createNaviViewItem();
  347. },
  348. createNaviViewItem:function(){
  349. var _self = this;
  350. if(this.naviViewContainer) this.naviViewContainer.destroy();
  351. this.naviViewContainer = new Element("div.naviViewContainer",{styles:this.css.naviViewContainer}).inject(this.naviView);
  352. this.viewData = this.viewData || this.projectGroupData.views;
  353. this.viewData.each(function(json){
  354. if(json.name==this.lp.viewItemAll){//所有任务
  355. this.naviItemAllContainer = new Element("div.naviItemContainer",{styles:this.css.naviItemContainer}).inject(this.naviViewContainer);
  356. this.naviItemAllIcon = new Element("div.naviItemAllIconcompleteLine",{styles:this.css.naviItemAllIcon}).inject(this.naviItemAllContainer);
  357. this.naviItemAllText = new Element("div.naviItemText",{styles:this.css.naviItemText,text:this.lp.viewItemAll}).inject(this.naviItemAllContainer);
  358. this.naviItemAllContainer.addEvents({
  359. click:function(){
  360. this.curNaviItem = json.name;
  361. this.openView(this.naviItemAllContainer);
  362. }.bind(this),
  363. mouseenter:function(){ if(_self.curNaviItem != json.name) _self.naviItemChange(this,"enter") },
  364. mouseleave:function(){ if(_self.curNaviItem != json.name) _self.naviItemChange(this,"leave") }
  365. });
  366. }else if(json.name==this.lp.viewItemMy){
  367. //我的任务
  368. this.naviItemMyContainer = new Element("div.naviItemContainer",{styles:this.css.naviItemContainer}).inject(this.naviViewContainer);
  369. this.naviItemMyIcon = new Element("div.naviItemMyIcon",{styles:this.css.naviItemMyIcon}).inject(this.naviItemMyContainer);
  370. this.naviItemMyText = new Element("div.naviItemText",{styles:this.css.naviItemText,text:this.lp.viewItemMy}).inject(this.naviItemMyContainer);
  371. // this.naviItemMyMore = new Element("div.naviItemMore",{styles:this.css.naviItemMore}).inject(this.naviItemMyContainer);
  372. // this.naviItemMyMore.addEvent(
  373. // "click",function(e){
  374. // this.openNaviViewMore(this.naviItemMyMore);
  375. // e.stopPropagation();
  376. // }.bind(this)
  377. // );
  378. this.naviItemMyContainer.addEvents({
  379. click:function(){
  380. this.curNaviItem = json.name;
  381. this.openView(this.naviItemMyContainer);
  382. }.bind(this),
  383. mouseenter:function(){ if(_self.curNaviItem != json.name) _self.naviItemChange(this,"enter")},
  384. mouseleave:function(){ if(_self.curNaviItem != json.name) _self.naviItemChange(this,"leave")}
  385. });
  386. }else if(json.name==this.lp.viewItemFlow){
  387. //未完成的任务
  388. this.naviItemFlowContainer = new Element("div.naviItemContainer",{styles:this.css.naviItemContainer}).inject(this.naviViewContainer);
  389. this.naviItemFlowIcon = new Element("div.naviItemFlowIcon",{styles:this.css.naviItemFlowIcon}).inject(this.naviItemFlowContainer);
  390. this.naviItemFlowText = new Element("div.naviItemText",{styles:this.css.naviItemText,text:this.lp.viewItemFlow}).inject(this.naviItemFlowContainer);
  391. //this.naviItemFlowMore = new Element("div.naviItemMore",{styles:this.css.naviItemMore}).inject(this.naviItemFlowContainer);
  392. // this.naviItemFlowMore.addEvent(
  393. // "click",function(e){
  394. // this.openNaviViewMore(this.naviItemFlowMore);
  395. // e.stopPropagation();
  396. // }.bind(this)
  397. // );
  398. this.naviItemFlowContainer.addEvents({
  399. click:function(){
  400. this.curNaviItem = json.name;
  401. this.openView(this.naviItemFlowContainer);
  402. }.bind(this),
  403. mouseenter:function(){ if(_self.curNaviItem != json.name) _self.naviItemChange(this,"enter")},
  404. mouseleave:function(){ if(_self.curNaviItem != json.name) _self.naviItemChange(this,"leave")}
  405. });
  406. }else if(json.name==this.lp.viewItemComplete){
  407. //已完成任务
  408. this.naviItemCompleteContainer = new Element("div.naviItemContainer",{styles:this.css.naviItemContainer}).inject(this.naviViewContainer);
  409. this.naviItemCompleteIcon = new Element("div.naviItemCompleteIcon",{styles:this.css.naviItemCompleteIcon}).inject(this.naviItemCompleteContainer);
  410. this.naviItemCompleteText = new Element("div.naviItemText",{styles:this.css.naviItemText,text:this.lp.viewItemComplete}).inject(this.naviItemCompleteContainer);
  411. //this.naviItemCompleteMore = new Element("div.naviItemMore",{styles:this.css.naviItemMore}).inject(this.naviItemCompleteContainer);
  412. // this.naviItemCompleteMore.addEvent(
  413. // "click",function(e){
  414. // this.openNaviViewMore(this.naviItemCompleteMore);
  415. // e.stopPropagation();
  416. // }.bind(this)
  417. // );
  418. this.naviItemCompleteContainer.addEvents({
  419. click:function(){
  420. this.curNaviItem = json.name;
  421. this.openView(this.naviItemCompleteContainer);
  422. }.bind(this),
  423. mouseenter:function(){ if(_self.curNaviItem != json.name) _self.naviItemChange(this,"enter")},
  424. mouseleave:function(){ if(_self.curNaviItem != json.name) _self.naviItemChange(this,"leave")}
  425. });
  426. }else if(json.name==this.lp.viewItemOver){
  427. //已逾期任务
  428. this.naviItemOverContainer = new Element("div.naviItemContainer",{styles:this.css.naviItemContainer}).inject(this.naviViewContainer);
  429. this.naviItemOverIcon = new Element("div.naviItemOverIcon",{styles:this.css.naviItemOverIcon}).inject(this.naviItemOverContainer);
  430. this.naviItemOverText = new Element("div.naviItemText",{styles:this.css.naviItemText,text:this.lp.viewItemOver}).inject(this.naviItemOverContainer);
  431. // this.naviItemOverMore = new Element("div.naviItemMore",{styles:this.css.naviItemMore}).inject(this.naviItemOverContainer);
  432. // this.naviItemOverMore.addEvent(
  433. // "click",function(e){
  434. // this.openNaviViewMore(this.naviItemOverMore);
  435. // e.stopPropagation();
  436. // }.bind(this)
  437. // );
  438. this.naviItemOverContainer.addEvents({
  439. click:function(){
  440. this.curNaviItem = json.name;
  441. this.openView(this.naviItemOverContainer);
  442. }.bind(this),
  443. mouseenter:function(){ if(_self.curNaviItem != json.name) _self.naviItemChange(this,"enter")},
  444. mouseleave:function(){ if(_self.curNaviItem != json.name) _self.naviItemChange(this,"leave")}
  445. });
  446. }else{
  447. //自定义视图
  448. }
  449. }.bind(this));
  450. },
  451. naviItemChange:function(node,action){
  452. if(action == "enter"){
  453. node.setStyles({"background-color":"#F2F5F7"});
  454. divs = node.getElements("div");
  455. divs[0].setStyles({"background-image":divs[0].getStyle("background-image").replace(".png","_click.png")});
  456. divs[1].setStyles({"color":"#4A90E2"});
  457. if(divs[2]){
  458. divs[2].setStyles({"background-image":divs[2].getStyle("background-image").replace(".png","_click.png")});
  459. }
  460. }else if(action == "leave"){
  461. node.setStyles({"background-color":""});
  462. divs = node.getElements("div");
  463. divs[0].setStyles({"background-image":divs[0].getStyle("background-image").replace("_click.png",".png")});
  464. divs[1].setStyles({"color":"#2A2A2A"});
  465. if(divs[2]){
  466. divs[2].setStyles({"background-image":divs[2].getStyle("background-image").replace("_click.png",".png")});
  467. }
  468. }
  469. },
  470. openNaviViewMore:function(node){
  471. var tooltip = new MWF.xApplication.TeamWork.Project.NaviViewTip(this.container, node, this.app, {}, {
  472. css:this.css,
  473. lp:this.lp,
  474. axis : "y",
  475. nodeStyles : {
  476. "min-width":"100px",
  477. "padding":"2px",
  478. "border-radius":"5px",
  479. "z-index" : "101"
  480. },
  481. onPostLoad:function(){
  482. tooltip.node.setStyles({"opacity":"0"});
  483. var fx = new Fx.Tween(tooltip.node,{duration:200});
  484. fx.start(["opacity"] ,"0", "1");
  485. },
  486. onClose:function(rd){
  487. // customGroupItemContainer.set("atIn","no");
  488. // if(rd)_self.reloadProjectGroup();
  489. }
  490. });
  491. tooltip.load();
  492. },
  493. createTaskContent:function(){
  494. this.taskContentLayout = new Element("div.taskContentLayout",{styles:this.css.taskContentLayout}).inject(this.contentLayout);
  495. },
  496. createTaskGroup:function(){ //右侧内容
  497. if(this.currentProjectGroupData && this.currentProjectGroupData.id){
  498. this.app.setLoading(this.taskContentLayout);
  499. //this.actions.taskGroupList(this.currentProjectGroupData.id,function(json){
  500. this.rootActions.TaskListAction.listWithTaskGroup(this.currentProjectGroupData.id,function(json){
  501. this.taskContentLayout.empty();
  502. json.data.each(function(data,i){
  503. //if(i>0) return;
  504. var taskGroupLayout = new Element("div.taskGroupLayout",{styles:this.css.taskGroupLayout,id:data.id}).inject(this.taskContentLayout);
  505. taskGroupLayout.set("sortable",data.control.sortable); //控制是否能排序
  506. // if(!data.control.sortable){
  507. // taskGroupLayout.set()
  508. // }
  509. this.createTaskGroupItemLayout(taskGroupLayout,data);
  510. }.bind(this));
  511. //新建任务列表按钮
  512. if(!this.data.deleted && !this.data.completed){
  513. //权限 已完成已删除不能新建
  514. this.newTaskGroupContainer = new Element("div.newTaskGroupContainer",{styles:this.css.newTaskGroupContainer}).inject(this.taskContentLayout);
  515. this.newTaskGroupContainer.addEvents({
  516. click:function(){
  517. var data = {
  518. isNew:true,
  519. taskGroupId:this.currentProjectGroupData.id,
  520. projectId:this.data.id
  521. };
  522. var opt = {
  523. onCreateTask:function(){
  524. this.createTaskGroup();
  525. }.bind(this)
  526. };
  527. var newTaskGroup = new MWF.xApplication.TeamWork.Project.NewTaskGroup(this,data,opt,{});
  528. newTaskGroup.open();
  529. }.bind(this),
  530. mouseover:function(){
  531. this.newTaskGroupIcon.setStyles({"background-image":"url(../x_component_TeamWork/$Project/default/icon/icon_jia_20_click.png)"});
  532. this.newTaskGroupText.setStyles({"color":"#4A90E2","font-size":"16px"});
  533. }.bind(this),
  534. mouseout:function(){
  535. this.newTaskGroupIcon.setStyles({"background-image":"url(../x_component_TeamWork/$Project/default/icon/icon_jia.png)"});
  536. this.newTaskGroupText.setStyles({"color":"#999999","font-size":"12px"});
  537. }.bind(this)
  538. });
  539. this.newTaskGroupIcon = new Element("div.newTaskGroupIcon",{styles:this.css.newTaskGroupIcon}).inject(this.newTaskGroupContainer);
  540. this.newTaskGroupText = new Element("div.newTaskGroupText",{styles:this.css.newTaskGroupText,text:this.lp.taskGroupAdd}).inject(this.newTaskGroupContainer);
  541. }
  542. }.bind(this))
  543. }
  544. },
  545. createTaskGroupItemLayout:function(node,data){
  546. var _self = this;
  547. node.empty();
  548. var taskGroupItemTitleContainer = new Element("div.taskGroupItemTitleContainer",{styles:this.css.taskGroupItemTitleContainer}).inject(node);
  549. new Element("div.taskGroupItemTitleText",{styles:this.css.taskGroupItemTitleText,text:data.name}).inject(taskGroupItemTitleContainer);
  550. var titleCount = new Element("div.taskGroupItemTitleCount",{styles:this.css.taskGroupItemTitleCount,text:"(-)"}).inject(taskGroupItemTitleContainer);
  551. if(data.control.sortable){
  552. var taskGroupItemTitleMore = new Element("div.taskGroupItemTitleMore",{styles:this.css.taskGroupItemTitleMore}).inject(taskGroupItemTitleContainer);
  553. taskGroupItemTitleMore.addEvents({
  554. click:function(){
  555. data.projectObj = this;
  556. data.node = node;
  557. var menu = new MWF.xApplication.TeamWork.Project.TaskGroupMenu(this.container, taskGroupItemTitleMore, this.app, data, {
  558. css:this.css,
  559. lp:this.lp,
  560. axis : "y",
  561. nodeStyles : {
  562. "min-width":"100px",
  563. "padding":"2px",
  564. "border-radius":"5px",
  565. "z-index" : "101"
  566. },
  567. onPostLoad:function(){
  568. menu.node.setStyles({"opacity":"0","top":(menu.node.getStyle("top").toInt()-10)+"px"});
  569. var fx = new Fx.Tween(menu.node,{duration:200});
  570. fx.start(["opacity"] ,"0", "1");
  571. },
  572. onClose:function(rd){
  573. if(!rd)return;
  574. _self.createTaskGroup()
  575. }
  576. });
  577. menu.load();
  578. }.bind(this),
  579. mouseover:function(){this.setStyles({"background-image":"url(../x_component_TeamWork/$Project/default/icon/icon_more_click.png)"})},
  580. mouseout:function(){this.setStyles({"background-image":"url(../x_component_TeamWork/$Project/default/icon/icon_more.png)"})}
  581. });
  582. }
  583. var taskGroupItemTitleAdd = new Element("div.taskGroupItemTitleAdd",{styles:this.css.taskGroupItemTitleAdd}).inject(taskGroupItemTitleContainer);
  584. if(!data.control.sortable) taskGroupItemTitleAdd.setStyle("margin-right","20px");
  585. taskGroupItemTitleAdd.addEvents({
  586. click:function(){
  587. var pdata = {
  588. projectObj:this,
  589. taskGroupId:this.currentProjectGroupData.id,
  590. //projectId:this.data.id,
  591. taskListIds:[data.id]
  592. };
  593. var opt = {
  594. onCreateTask:function(){
  595. this.createTaskGroup();
  596. }.bind(this)
  597. };
  598. var newTask = new MWF.xApplication.TeamWork.Project.NewTask(this,pdata,opt,{});
  599. newTask.open();
  600. }.bind(this),
  601. mouseover:function(){this.setStyles({"background-image":"url(../x_component_TeamWork/$Project/default/icon/icon_zengjia_blue2_click.png)"})},
  602. mouseout:function(){this.setStyles({"background-image":"url(../x_component_TeamWork/$Project/default/icon/icon_jia.png)"})}
  603. });
  604. if(this.data.control && this.data.control.taskCreate == false){
  605. taskGroupItemTitleAdd.destroy();
  606. delete taskGroupItemTitleAdd
  607. }
  608. var taskGroupItemTitleReload = new Element("div.taskGroupItemTitleReload",{styles:this.css.taskGroupItemTitleReload, title:this.lp.reload}).inject(taskGroupItemTitleContainer);
  609. //if(!data.control.sortable) taskGroupItemTitleAdd.setStyle("margin-right","20px");
  610. taskGroupItemTitleReload.addEvents({
  611. click:function(){
  612. this.createTaskGroupItemLayout(node,data)
  613. }.bind(this)
  614. });
  615. var taskGroupItemContainer = new Element("div.taskGroupItemContainer",{styles:this.css.taskGroupItemContainer}).inject(node);
  616. var _h = node.getHeight().toInt()-taskGroupItemTitleContainer.getHeight().toInt() - 10 - 10;
  617. taskGroupItemContainer.setStyles({"height":_h+"px"});
  618. this.app.setScrollBar(taskGroupItemContainer);
  619. this.app.setLoading(taskGroupItemContainer);
  620. //this.actions.taskListByListId(this.data.id,data.id,function(json){
  621. this.rootActions.TaskAction.listAllTaskWithTaskListId(this.data.id,data.id,function(json){
  622. titleCount.set("text","("+json.count+")")
  623. taskGroupItemContainer.empty();
  624. var taskListData = json.data;
  625. //alert(JSON.stringify(taskListData));
  626. taskListData.each(function(d){
  627. //var taskItemContainerDrag = new Element("div.taskItemContainerDrag.dragin",{styles:this.css.taskItemContainerDrag}).inject(taskGroupItemContainer);
  628. var taskItemContainer = new Element("div.taskItemContainer.dragin",{styles:this.css.taskItemContainer}).inject(taskGroupItemContainer);
  629. taskItemContainer.set("id",d.id);
  630. this.loadTaskNode(taskItemContainer,d);
  631. var int;
  632. var upTime = 0;
  633. var time = 200;
  634. taskItemContainer.addEvents({
  635. click:function(e){
  636. this.openTask(d.id,function(){ taskItemContainer.destroy() }.bind(this));
  637. }.bind(this),
  638. mouseenter:function(){
  639. int = window.setInterval(function(){
  640. if(taskItemContainer.getElement(".taskItemHover").getWidth() == 10) return;
  641. taskItemContainer.getElement(".taskItemHover").setStyles({
  642. "width":(taskItemContainer.getElement(".taskItemHover").getWidth()+1)+"px"
  643. });
  644. }.bind(this),30)
  645. },
  646. mouseleave:function(){
  647. window.clearInterval(int);
  648. taskItemContainer.getElement(".taskItemHover").setStyles({"width":"5px"});
  649. }.bind(this),
  650. });
  651. var drag = new Drag(taskItemContainer, {
  652. "compensateScroll": true,
  653. //preventDefault:true,
  654. //stopPropagation:true,
  655. //container:this.contentLayout,
  656. //container: this.taskContentLayout,
  657. "onStart": function(el, e){
  658. this.dragMove(el,e);
  659. drag.stop();
  660. }.bind(this)
  661. });
  662. }.bind(this));
  663. //最后加一行占位
  664. var emptyDrag = new Element("div.empty.dragin",{name:"item",styles:{
  665. "width":"100%", "height":"50px"
  666. }}).inject(taskGroupItemContainer);
  667. }.bind(this));
  668. },
  669. dragMove:function(el,e){
  670. var _self = this;
  671. var taskItemContainer = el;
  672. var time = 200;
  673. //this.cloneTaskItem = new Element("").inject()
  674. var position = el.getPosition(this.taskContentLayout);
  675. //alert(JSON.stringify(position))
  676. //var clone = this.cloneTaskItem = el.clone(true,true).inject($(document.body));
  677. var clone = this.cloneTaskItem = el.clone(true,true).inject(this.taskContentLayout);
  678. this.cloneTaskItem.removeClass("dragin");
  679. this.cloneTaskItem.setStyles({
  680. "top":position.y+"px",
  681. "left":(position.x + this.taskContentLayout.getScrollLeft())+"px",
  682. "z-index":"9999",
  683. "margin":"0px",
  684. "position":"absolute",
  685. "cursor":"move"
  686. });
  687. el.setStyles({"border":"1px dotted #000000","opacity":"0.3"});
  688. var _height = this.cloneTaskItem.getHeight().toInt() - 2;
  689. this.ccc = 0;
  690. var drag = new Drag.Move(this.cloneTaskItem, {
  691. container: this.taskContentLayout,
  692. //container: this.contentLayout,
  693. //"stopPropagation": true,
  694. "compensateScroll": true,
  695. "droppables": $$(".dragin"),
  696. "onStart": function(){
  697. // this.topBarTabItemStat.set("text",JSON.stringify(el.getPosition()));
  698. }.bind(this),
  699. "onDrag": function(el,e){
  700. // this.topBarTabItemStat.set("text",JSON.stringify(el.getPosition()));
  701. //if(el.getPosition().x + el.getWidth() >1900){
  702. //this.topBarTabItemStat.set("text",JSON.stringify("treeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"));
  703. //drag.cancel();
  704. //e.stopPropagation();return;
  705. //this.taskContentLayout.scrollTo( this.taskContentLayout.getScrollLeft() +500,0);
  706. //el.setStyles({"margin-right":"-500px"})
  707. //this.topBarTabItemStat.set("text","000000000000000000");
  708. //}
  709. // var _width = el.getWidth().toInt();
  710. //
  711. // var _l= el.getPosition().x;
  712. // var _sl = this.taskContentLayout.getScrollLeft();
  713. // var _w = this.container.getWidth().toInt() + _sl;
  714. //
  715. //
  716. // //this.topBarTabItemStat.set("text",_width+p.x-_w_w);
  717. //
  718. // //this.taskContentLayout.scrollTo(this.taskContentLayout.getScrollLeft()+2,0);
  719. //
  720. // this.topBarTabItemStat.set("text",_l);
  721. // var p1 = this.taskContentLayout.getPosition();
  722. //
  723. // this.ccc ++;
  724. // //this.topBarTabItemStat.set("text",this.ccc);
  725. //
  726. // if(_l + _width == _w){ this.topBarTabItemStat.set("text","AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
  727. // //this.taskContentLayout.scrollTo(this.taskContentLayout.getScrollLeft()+100,0);
  728. // // scrInt = window.setInterval(function(){
  729. // // this.taskContentLayout.scrollTo(this.taskContentLayout.getScrollLeft()+500,0);
  730. // //
  731. // // this.ccc ++;
  732. // // this.topBarTabItemStat.set("text",this.ccc);
  733. // // }.bind(this),20)
  734. // }
  735. }.bind(this),
  736. "onEnter": function(el,dr){
  737. var pre = dr.getPrevious();
  738. if(!pre || (pre && pre.get("class")!="taskItemInsertLine")){
  739. if(el.get("id")!=dr.get("id")){
  740. new Element("div.taskItemInsertLine",{styles:_self.css.taskItemInsertLine}).inject(dr,"before");
  741. }
  742. }
  743. }.bind(this),
  744. "onLeave": function(el,dr){
  745. var pre = dr.getPrevious();
  746. if(pre && pre.get("class")=="taskItemInsertLine") {
  747. pre.destroy();
  748. }
  749. }.bind(this),
  750. "onDrop": function(el, dr, e){
  751. var taskId = el.get("id");
  752. var taskInId = null;
  753. var taskGroupInId = null;
  754. var taskGroupFromId = null;
  755. var taskGroupFromSortable = null;
  756. var taskGroupInSortable = null;
  757. el.setStyles({"cursor":""});
  758. if(!dr){
  759. //没有移入,还原
  760. var fx = new Fx.Tween(el,{duration:time});
  761. fx.start(["top"] ,(el.getPosition(this.taskContentLayout).y)+"px", taskItemContainer.getPosition(this.taskContentLayout).y+"px");
  762. var fx2 = new Fx.Tween(el,{duration:time});
  763. fx2.start(["left"] ,(el.getPosition(this.taskContentLayout).x + this.taskContentLayout.getScrollLeft())+"px", (taskItemContainer.getPosition(this.taskContentLayout).x + this.taskContentLayout.getScrollLeft())+"px");
  764. window.setTimeout(function(){
  765. taskItemContainer.setStyles({"border":"1px solid #e6e6e6","opacity":"1"});
  766. el.destroy()
  767. },time)
  768. }else{
  769. if(el.get("id")==dr.get("id")){ //如果移动的是本身的拷贝,恢复
  770. taskItemContainer.setStyles({"border":"1px solid #e6e6e6","opacity":"1"});
  771. el.destroy();
  772. }else{
  773. taskInId = dr.get("id");
  774. taskGroupFromId = taskItemContainer.getParent().getParent().get("id");
  775. taskGroupInId = dr.getParent().getParent().get("id");
  776. taskGroupFromSortable = taskItemContainer.getParent().getParent().get("sortable");
  777. taskGroupInSortable = dr.getParent().getParent().get("sortable");
  778. var pre = dr.getPrevious();
  779. if(pre && pre.get("class")=="taskItemInsertLine") { //this.topBarTabItemStat.set("text","change");
  780. //alert("taskid="+taskId+",taskInId="+taskInId+",taskgroupFromid="+taskGroupFromId+",taskGroupInId="+taskGroupInId);
  781. if(taskGroupInSortable == "false"){
  782. //未分类视图不允许移入,还原并删除el对象
  783. //_self.app.notice("未分类列表不允许移入","error");
  784. taskItemContainer.setStyles({"border":"1px solid #e6e6e6","opacity":"1"});
  785. if(pre && pre.get("class")=="taskItemInsertLine"){
  786. pre.destroy();
  787. el.destroy();
  788. }
  789. return ;
  790. }
  791. var data = {
  792. taskId:taskId,
  793. behindTaskId:taskInId
  794. };
  795. _self.rootActions.TaskListAction.addTask2ListWithBehindTask(taskGroupInId,data,function(json){
  796. if(json.type == "success"){ //返回成功后再换位置
  797. //fx fx2 动画clone到移入位置
  798. var fx = new Fx.Tween(el,{duration:time});
  799. fx.start(["top"] ,el.getPosition(_self.taskContentLayout).y+"px", pre.getPosition(_self.taskContentLayout).y+"px");
  800. var fx2 = new Fx.Tween(el,{duration:time});
  801. fx2.start(["left"] ,(el.getPosition(_self.taskContentLayout).x + _self.taskContentLayout.getScrollLeft())+"px", (pre.getPosition(_self.taskContentLayout).x + _self.taskContentLayout.getScrollLeft())+"px");
  802. //利用pre撑大高度
  803. pre.setStyles({"border":"0px","background-color":"#ffffff"});
  804. //var fx3 = new Fx.Tween(pre,{duration:time});
  805. //fx3.start(["height"] ,"0px", _height+"px");
  806. //新建一个占用原来位置
  807. var tmpdiv = taskItemContainer.clone();
  808. tmpdiv.setStyles({"border":"0px","margin":"0px","height":(el.getHeight())+"px"});
  809. tmpdiv.empty();
  810. tmpdiv.inject(taskItemContainer,"before");
  811. //设置原有位置none
  812. taskItemContainer.setStyles({"display":"none"});
  813. var __height = tmpdiv.getHeight().toInt() - 2;
  814. //动画完成后插入真正的对象,恢复原位,并删除pre和clone
  815. window.setTimeout(function(){
  816. pre.destroy();
  817. taskItemContainer.setStyles({"border":"1px solid #e6e6e6","display":"block","opacity":"1"});
  818. taskItemContainer.inject(dr,"before");
  819. //fx4把临时占用的位置删除
  820. var fx4 = new Fx.Tween(tmpdiv,{duration:time});
  821. fx4.start(["height"] ,__height+"px", "0px");
  822. window.setTimeout(function(){
  823. if(tmpdiv) tmpdiv.destroy()
  824. },time);
  825. //删除clone即el对象
  826. el.destroy();
  827. },time);
  828. //刷新其他需要加载的位置,比如数量
  829. var taskGroupFrom = taskItemContainer.getParent().getParent();
  830. var taskGroupIn = dr.getParent().getParent();
  831. //_self.actions.taskGroupGet(_self.currentProjectGroupData.id,taskGroupFromId,function(json){
  832. _self.rootActions.TaskListAction.get(_self.currentProjectGroupData.id,taskGroupFromId,function(json){
  833. taskGroupFrom.getElement(".taskGroupItemTitleCount").set("text","("+json.data.taskCount +")")
  834. });
  835. _self.rootActions.TaskListAction.get(_self.currentProjectGroupData.id,taskGroupInId,function(json){
  836. taskGroupIn.getElement(".taskGroupItemTitleCount").set("text","("+json.data.taskCount +")")
  837. })
  838. }else{
  839. //返回失败,还原并删除el对象
  840. taskItemContainer.setStyles({"border":"1px solid #e6e6e6","opacity":"1"});
  841. if(pre && pre.get("class")=="taskItemInsertLine"){
  842. pre.destroy();
  843. el.destroy();
  844. }
  845. }
  846. },function(xhr,text,error){
  847. _self.app.showErrorMessage(xhr,text,error);
  848. taskItemContainer.setStyles({"border":"1px solid #e6e6e6","opacity":"1"});
  849. if(pre && pre.get("class")=="taskItemInsertLine"){
  850. pre.destroy();
  851. el.destroy();
  852. }
  853. });
  854. }
  855. }
  856. }
  857. }.bind(this),
  858. // "onCancel": function(el, e){ this._drag_cancel(dragging); }.bind(this),
  859. //"onComplete": function(el, e){ if(scrInt) window.clearInterval(scrInt);}.bind(this),
  860. });
  861. drag.start(e);
  862. },
  863. loadTaskNode:function(taskItemContainer,d){
  864. taskItemContainer.empty();
  865. var color = d.priority ? d.priority.split("||")[1] || "#DEDEDE" : "#DEDEDE";
  866. //var color = d.priority.split("||")[1] || "#DEDEDE";
  867. var taskItemHover = new Element("div.taskItemHover",{styles:this.css.taskItemHover}).inject(taskItemContainer);
  868. taskItemHover.setStyles({"background-color":color});
  869. // if(d.priority == this.lp.urgency)taskItemHover.setStyle("background-color","#ffaf38");
  870. // else if(d.priority == this.lp.emergency)taskItemHover.setStyle("background-color","#ff0000");
  871. var taskItemContent = new Element("div.taskItemContent",{styles:this.css.taskItemContent}).inject(taskItemContainer);
  872. var taskItemTitle = new Element("div.taskItemTitle",{styles:this.css.taskItemTitle}).inject(taskItemContent);
  873. var taskItemName = new Element("div.taskItemName",{styles:this.css.taskItemName,text:d.name}).inject(taskItemTitle);
  874. var executor = d.executor.split("@")[0];
  875. var shortE = executor.substring(0,1);
  876. var taskItemExecutor = new Element("div",{styles:this.css.taskItemExecutor,text:shortE,title:executor}).inject(taskItemTitle);
  877. var taskItemDetail = new Element("div.taskItemDetail",{styles:this.css.taskItemDetail}).inject(taskItemContent);
  878. //时限
  879. var taskItemLimit = new Element("div.taskItemLimit",{styles:this.css.taskItemLimit}).inject(taskItemDetail);
  880. taskItemLimit.set("text",this.app.formatDate(d.startTime) + " - " + this.app.formatDate(d.endTime));
  881. var intd = (this.app.compareWithNow(d.endTime)).intervalDay;
  882. //alert(d.endTime + "**************" + intd);
  883. if(intd==-1){
  884. taskItemLimit.setStyle("background-color","#E6240E");
  885. }else if(intd==0){
  886. taskItemLimit.setStyle("background-color","#fa8c15");
  887. }else{
  888. taskItemLimit.setStyle("background-color","#1b9aee");
  889. }
  890. //标签 taskTag等
  891. var taskItemTags = new Element("div.taskItemTags",{styles:this.css.taskItemTags}).inject(taskItemDetail);
  892. this.rootActions.TaskTagAction.listWithTask(d.id,function(json){
  893. json.data.each(function(data){
  894. var taskTagContent = new Element("div.taskTagContent",{styles:this.css.taskTagContent}).inject(taskItemTags);
  895. var taskTagColor = new Element("span",{styles:this.css.taskTagColor}).inject(taskTagContent);
  896. taskTagColor.setStyle("background-color",data.tagColor);
  897. new Element("span",{styles:this.css.taskTagText,text:data.tag}).inject(taskTagContent);
  898. }.bind(this));
  899. }.bind(this),null,false);
  900. if(d.workStatus=="completed"){ //如果已完成
  901. new Element("div.",{styles:this.css.taskItemComplete,title:this.lp.taskCompleteText}).inject(taskItemTitle,"top");
  902. //taskItemContainer.setStyles({"opacity":"0.5"});
  903. taskItemContainer.setStyles({"color":"grey"});
  904. taskItemLimit.destroy();
  905. taskItemHover.setStyles({"background-color":"#DEDEDE"});
  906. taskItemExecutor.setStyles({"opacity":"0.5"})
  907. }
  908. taskItemHover.setStyles({"height":taskItemContainer.getHeight()});
  909. // var drag = new Drag(taskItemContainer, {
  910. // "stopPropagation": true,
  911. // "compensateScroll": true,
  912. // "onStart": function(el, e){
  913. // this.doDragMove(e,taskItemContainer);
  914. // drag.stop();
  915. // }.bind(this)
  916. // });
  917. },
  918. openTask:function(id,callback){
  919. var data = {
  920. taskId:id
  921. };
  922. var opt = {
  923. "onPostClose":function(dd){
  924. if(!dd) return;
  925. if(dd.act == "remove"){
  926. if(callback){
  927. callback()
  928. }
  929. //this.createTaskGroup();
  930. }
  931. }.bind(this)
  932. };
  933. MWF.xDesktop.requireApp("TeamWork", "Task", function(){
  934. var task = new MWF.xApplication.TeamWork.Task(this,data,opt,{projectObj:this});
  935. task.open();
  936. }.bind(this));
  937. },
  938. openView:function(obj){
  939. this.naviTopMyTaskLayout.setStyles({"background-color":""});
  940. var _self = this;
  941. this.naviViewContainer.getElements(".naviItemContainer").each(function(d){
  942. this.naviItemChange(d,"leave")
  943. }.bind(this));
  944. this.naviItemChange(obj,"enter");
  945. if(this.viewContainer) delete this.viewContainer;
  946. if(this.viewListContainer) delete this.viewListContainer;
  947. if(this.viewSearchInput) delete this.viewSearchInput;
  948. this.taskContentLayout.empty();
  949. var viewContainer = this.viewContainer = new Element("div.viewContainer",{styles:this.css.viewContainer}).inject(this.taskContentLayout);
  950. viewContainer.addEvents({
  951. scroll:function(){
  952. var sTop = this.getScrollTop();
  953. var sHeight = this.getScrollHeight();
  954. var cHeight = viewContainer.getHeight();
  955. if(sHeight - sTop < cHeight+10 ){ //偏移量
  956. if(_self.viewLoading){
  957. _self.loadView(_self.curViewTaskId)
  958. }
  959. }
  960. }
  961. });
  962. var viewSearchContainer = new Element("div.viewSearchContainer",{styles:this.css.viewSearchContainer}).inject(viewContainer);
  963. var viewSearchContent = new Element("div.viewSearchContent",{styles:this.css.viewSearchContent}).inject(viewSearchContainer);
  964. var viewSearchInput = this.viewSearchInput = new Element("input",{styles:this.css.viewSearchInput,"name":"viewSearchInput","placeholder":this.lp.searchTask}).inject(viewSearchContent);
  965. viewSearchInput.addEvents({
  966. keypress:function(e){
  967. this.searchLoading = true;
  968. var keycode = (e.event.keyCode ? e.event.keyCode : e.event.which);
  969. if (keycode == 13 || keycode == 10) {
  970. var key = viewSearchInput.get("value").trim();
  971. if(key=="") return;
  972. //alert(key)
  973. viewSearchReset.show();
  974. if(this.searchLoading) this.loadView()
  975. }
  976. }.bind(this),
  977. focus:function(){
  978. viewSearchContent.setStyles({"border":"1px solid #4A90E2"})
  979. }.bind(this),
  980. blur:function(){
  981. viewSearchContent.setStyles({"border":"1px solid #DEDEDE"})
  982. }.bind(this)
  983. })
  984. var viewSearchSearch = new Element("div",{styles:this.css.viewSearchSearch}).inject(viewSearchContent);
  985. viewSearchSearch.addEvents({
  986. click:function(){
  987. if(viewSearchInput.get("value").trim()=="") return;
  988. viewSearchReset.show();
  989. this.loadView();
  990. }.bind(this)
  991. });
  992. var viewSearchReset = new Element("div",{styles:this.css.viewSearchReset}).inject(viewSearchContent);
  993. viewSearchReset.addEvents({
  994. click:function(){
  995. viewSearchReset.hide();
  996. viewSearchInput.set("value","");
  997. this.loadView();
  998. }.bind(this)
  999. });
  1000. var viewListContainer = this.viewListContainer = new Element("div.viewListContainer",{styles:this.css.viewListContainer}).inject(viewContainer);
  1001. this.loadView()
  1002. },
  1003. openSearch:function(key){
  1004. var _self = this;
  1005. if(this.viewListContainer) delete this.viewListContainer;
  1006. this.taskContentLayout.empty();
  1007. var viewContainer = new Element("div.viewContainer",{styles:this.css.viewContainer}).inject(this.taskContentLayout);
  1008. var viewListContainer = this.viewListContainer = new Element("div.viewListContainer",{styles:this.css.viewListContainer}).inject(viewContainer);
  1009. //this.loadView()
  1010. var data = {
  1011. project:this.data.id,
  1012. title:key
  1013. };
  1014. var tmpLoading = new Element("div.tmpLoading",{styles:{"background-color":"#ffffff"}}).inject(viewListContainer);
  1015. this.app.setLoading(tmpLoading);
  1016. this.searchLoading = false;
  1017. var filter = {
  1018. title:key
  1019. };
  1020. this.rootActions.TaskAction.listAllTaskNextWithFilter("(0)",100,this.data.id,filter,function(json){
  1021. viewListContainer.empty();
  1022. json.data.each(function(data){
  1023. this.loadViewItem(data)
  1024. }.bind(this));
  1025. if(json.count==0){
  1026. new Element("div.none",{styles:{
  1027. "height":"100px",
  1028. "line-height":"100px",
  1029. "width":"100%",
  1030. "text-align":"center",
  1031. "background-color":"#ffffff",
  1032. "font-size":"16px"
  1033. },text:"未查找到数据"}).inject(this.viewListContainer);
  1034. }
  1035. this.searchLoading = true;
  1036. }.bind(this))
  1037. //this.actions.taskListNext("(0)",100,data,function(json){
  1038. // viewListContainer.empty();
  1039. // json.data.each(function(data){
  1040. // this.loadViewItem(data)
  1041. // }.bind(this));
  1042. // if(json.count==0){
  1043. // new Element("div.none",{styles:{
  1044. // "height":"100px",
  1045. // "line-height":"100px",
  1046. // "width":"100%",
  1047. // "text-align":"center",
  1048. // "background-color":"#ffffff",
  1049. // "font-size":"16px"
  1050. // },text:"未查找到数据"}).inject(this.viewListContainer);
  1051. // }
  1052. // this.searchLoading = true;
  1053. //}.bind(this))
  1054. },
  1055. loadView:function(id){
  1056. //this.curNaviItem 所有工作,我负责的任务。。。。。
  1057. //key 搜索关键字
  1058. if(!(id)) {
  1059. this.viewListContainer.empty();
  1060. this.curCount = 0;
  1061. }
  1062. this.viewListContainer.getElements(".viewNext").destroy();
  1063. var data = {
  1064. project:this.data.id
  1065. };
  1066. if(this.viewSearchInput.get("value").trim()!=""){
  1067. data.title = this.viewSearchInput.get("value").trim();
  1068. }
  1069. var tmpLoading = new Element("div.tmpLoading",{styles:{"background-color":"#ffffff"}}).inject(this.viewListContainer);
  1070. this.app.setLoading(tmpLoading);
  1071. this.viewLoading = false;
  1072. // var filter = {
  1073. // //"title":this.viewSearchInput.get("value")||""
  1074. // }
  1075. var action = "listAllTaskNextWithFilter";
  1076. if(this.curNaviItem == this.lp.viewItemMy){ //我负责的任务
  1077. action = "listMyExecutTaskNextWithFilter"
  1078. }else if(this.curNaviItem == this.lp.viewItemFlow){ //未完成的任务
  1079. action = "listUncompletedTaskNextWithFilter"
  1080. }else if(this.curNaviItem == this.lp.viewItemComplete){ //已完成的任务
  1081. action = "listCompletedTaskNextWithFilter"
  1082. }else if(this.curNaviItem == this.lp.viewItemOver){ //逾期的任务
  1083. action = "listOverTimeTaskNextWithFilter"
  1084. }
  1085. this.rootActions.TaskAction[action](id||"(0)",20,this.data.id,data,function(json){
  1086. this.viewListContainer.getElements(".tmpLoading").destroy();
  1087. json.data.each(function(data){
  1088. this.loadViewItem(data);
  1089. this.curViewTaskId = data.id;
  1090. this.curCount = this.curCount + 1;
  1091. }.bind(this));
  1092. this.viewLoading = true;
  1093. if(json.count == 0){
  1094. new Element("div",{styles:this.css.taskSearchEmpty,text:this.lp.taskSearchEmpty}).inject(this.viewListContainer);
  1095. }
  1096. var sHeight = this.viewListContainer.getHeight();
  1097. var cHeight = this.viewContainer.getHeight();
  1098. if(sHeight<cHeight && this.curCount < json.count){
  1099. var viewNext = new Element("div.viewNext",{styles:this.css.viewNext,text:"下一页"}).inject(this.viewListContainer);
  1100. viewNext.addEvents({
  1101. click:function(){
  1102. this.loadView(this.curViewTaskId)
  1103. }.bind(this)
  1104. })
  1105. }
  1106. }.bind(this))
  1107. },
  1108. loadViewItem:function(data){
  1109. var viewItem = new Element("div.viewItem",{styles:this.css.viewItem}).inject(this.viewListContainer);
  1110. var viewColor = new Element("div.viewColor",{styles:this.css.viewColor}).inject(viewItem);
  1111. if(data.priority==this.lp.urgency){
  1112. //紧急
  1113. viewColor.setStyles({"background-color":"#fa8c15"});
  1114. }else if(data.priority==this.lp.emergency){
  1115. //特级
  1116. viewColor.setStyles({"background-color":"#E6240E"});
  1117. }
  1118. var viewName = new Element("div.viewName",{styles:this.css.viewName,text:data.name}).inject(viewItem);
  1119. var viewStatus = new Element("div.viewStatus",{styles:this.css.viewStatus,text:data.priority?data.priority.split("||")[0]:""}).inject(viewItem);
  1120. var viewDuty = new Element("div.viewDuty",{styles:this.css.viewDuty}).inject(viewItem);
  1121. var viewDutyIcon = new Element("div.viewDutyIcon",{styles:this.css.viewDutyIcon}).inject(viewDuty);
  1122. if(data.executor && data.executor!=""){
  1123. viewDutyIcon.set("text",data.executor.split("@")[0].substr(0,1));
  1124. viewDutyIcon.set("title",data.executor.split("@")[0])
  1125. }
  1126. if(data.workStatus == "completed"){
  1127. var completeIcon = new Element("div",{styles:this.css.taskItemComplete,title:this.lp.taskCompleteText}).inject(viewName,"top");
  1128. completeIcon.setStyles({"margin-top":"16px"});
  1129. viewItem.setStyles({"color":"#DEDEDE"});
  1130. viewColor.destroy();
  1131. viewDutyIcon.setStyles({"opacity":"0.5"});
  1132. }
  1133. viewItem.addEvents({
  1134. mouseover:function(){ this.setStyles({"background-color":"#F2F5F7"}) },
  1135. mouseout:function(){ this.setStyles({"background-color":"#ffffff"}) },
  1136. click:function(){
  1137. this.openTask(data.id,function(){ viewItem.destroy() }.bind(this))
  1138. }.bind(this)
  1139. })
  1140. },
  1141. createStatLayout:function(){
  1142. MWF.xDesktop.requireApp("TeamWork", "Stat", function(){
  1143. var stat = new MWF.xApplication.TeamWork.Stat(this.contentLayout,this.app,this.data,{ });
  1144. stat.load();
  1145. }.bind(this));
  1146. },
  1147. reloadTaskGroup:function(id){
  1148. var node;
  1149. if(id) node = this.taskContentLayout.getElementById(id);
  1150. if(!node)node = this.taskContentLayout.getElement("div[sortable='false']");
  1151. if(node){ //alert(id)
  1152. //console.log("id=============="+id);
  1153. this.rootActions.TaskListAction.get(this.currentProjectGroupData.id,id,function(json){
  1154. this.createTaskGroupItemLayout(node,json.data);
  1155. }.bind(this))
  1156. }
  1157. },
  1158. reloadInfor:function(){
  1159. //刷新页面上的一些信息,比如数量等未想好
  1160. },
  1161. test:function(){
  1162. }
  1163. });
  1164. MWF.xApplication.TeamWork.Project.NewTask = new Class({
  1165. Extends: MPopupForm,
  1166. options : {
  1167. "style": "default",
  1168. "width": 400,
  1169. "height": 250,
  1170. "top": null,
  1171. "left": null,
  1172. "bottom" : null,
  1173. "right" : null,
  1174. "minWidth" : 300,
  1175. "minHeight" : 220,
  1176. "closeByClickMask" : true,
  1177. "hasTopContent" : true,
  1178. "hasTop":true,
  1179. "hasBottom": false,
  1180. "hasIcon": false,
  1181. "title":""
  1182. },
  1183. _createTableContent:function(){
  1184. this.rootActions = this.app.rootActions;
  1185. if(this.formTopTextNode) this.formTopTextNode.set("text",this.lp.newTaskTitle);
  1186. //this.formTableArea
  1187. this.titleContainer = new Element("div.titleContainer",{styles:this.css.titleContainer}).inject(this.formTableArea);
  1188. this.titleValue = new Element("input.titleValue",{styles:this.css.titleValue,placeholder:this.lp.newTaskPlaceholder}).inject(this.titleContainer);
  1189. this.titleValue.addEvents({
  1190. keyup:function(e){
  1191. var keycode = (e.event.keyCode ? e.event.keyCode : e.event.which);
  1192. //console.log(keycode)
  1193. if (keycode == 13 || keycode == 10) {
  1194. this.okAction.click();
  1195. }else if(keycode == 27){
  1196. this.closeAction.click();
  1197. }
  1198. }.bind(this),
  1199. });
  1200. this.actionContainer = new Element("div.actionContainer",{styles:this.css.actionContainer}).inject(this.formTableArea);
  1201. this.okAction = new Element("div.okAction",{styles:this.css.okAction,text:this.lp.newTaskOk}).inject(this.actionContainer);
  1202. this.okAction.addEvents({
  1203. click:function(){
  1204. if(this.titleValue.get("value").trim()=="") return;
  1205. var data={
  1206. taskGroupId:this.data.taskGroupId,
  1207. taskListIds:this.data.taskListIds || [],
  1208. name: this.titleValue.get("value").trim()
  1209. };
  1210. this.rootActions.TaskAction.save(data,function(json){
  1211. if(json.data.id){
  1212. var data = {
  1213. projectObj:this.data.projectObj || null,
  1214. taskId:json.data.id
  1215. };
  1216. var opt = {
  1217. };
  1218. MWF.xDesktop.requireApp("TeamWork", "Task", function(){
  1219. var task = new MWF.xApplication.TeamWork.Task(this,data,opt,{projectObj:this.explorer});
  1220. task.open();
  1221. }.bind(this));
  1222. this.fireEvent("createTask");
  1223. this.close();
  1224. }
  1225. }.bind(this))
  1226. }.bind(this)
  1227. });
  1228. this.closeAction = new Element("div.closeAction",{styles:this.css.closeAction,text:this.lp.newTaskClose}).inject(this.actionContainer);
  1229. this.closeAction.addEvents({
  1230. click:function(){
  1231. this.close();
  1232. }.bind(this)
  1233. });
  1234. }
  1235. });
  1236. MWF.xApplication.TeamWork.Project.NewTaskGroup = new Class({
  1237. Extends: MPopupForm,
  1238. options : {
  1239. "style": "default",
  1240. "width": 400,
  1241. "height": 250,
  1242. "top": null,
  1243. "left": null,
  1244. "bottom" : null,
  1245. "right" : null,
  1246. "minWidth" : 300,
  1247. "minHeight" : 220,
  1248. "closeByClickMask" : true,
  1249. "hasTopContent" : true,
  1250. "hasTop":true,
  1251. "hasBottom": false,
  1252. "hasIcon": false,
  1253. "title":""
  1254. },
  1255. _createTableContent:function(){
  1256. this.rootActions = this.app.rootActions;
  1257. this.explorer = this.data.projectObj;
  1258. if(this.formTopTextNode) this.formTopTextNode.set("text",this.data.isNew?this.lp.taskGroupAdd:this.lp.taskGroupEdit);
  1259. //this.formTableArea
  1260. this.titleContainer = new Element("div.titleContainer",{styles:this.css.titleContainer}).inject(this.formTableArea);
  1261. this.titleValue = new Element("input.titleValue",{styles:this.css.titleValue,placeholder:this.lp.newTaskListPlaceholder}).inject(this.titleContainer);
  1262. var val = this.data.isNew?"":this.data.name;
  1263. this.titleValue.set("value",val);
  1264. this.actionContainer = new Element("div.actionContainer",{styles:this.css.actionContainer}).inject(this.formTableArea);
  1265. this.okAction = new Element("div.okAction",{styles:this.css.okAction,text:this.lp.newTaskOk}).inject(this.actionContainer);
  1266. this.okAction.addEvents({
  1267. click:function(){
  1268. if(this.titleValue.get("value").trim()=="") return;
  1269. var data={
  1270. id:this.data.id || "",
  1271. taskGroup:this.data.taskGroupId,
  1272. project:this.data.projectId,
  1273. name: this.titleValue.get("value").trim()
  1274. };
  1275. this.rootActions.TaskListAction.save(data,function(json){
  1276. this.fireEvent("createTask");
  1277. this.close(json);
  1278. if(this.explorer){
  1279. if(this.data.node){
  1280. if(json.data.id){
  1281. this.rootActions.TaskListAction.get(this.explorer.currentProjectGroupData.id,json.data.id,function(json){
  1282. this.explorer.createTaskGroupItemLayout(this.data.node,json.data)
  1283. }.bind(this));
  1284. }else{
  1285. this.explorer.createTaskGroup()
  1286. }
  1287. }else{
  1288. this.explorer.createTaskGroup()
  1289. }
  1290. }
  1291. }.bind(this))
  1292. }.bind(this)
  1293. });
  1294. this.closeAction = new Element("div.closeAction",{styles:this.css.closeAction,text:this.lp.newTaskClose}).inject(this.actionContainer);
  1295. this.closeAction.addEvents({
  1296. click:function(){
  1297. this.close();
  1298. }.bind(this)
  1299. });
  1300. }
  1301. });
  1302. MWF.xApplication.TeamWork.Project.TaskGroupMenu = new Class({
  1303. Extends: MWF.xApplication.TeamWork.Common.ToolTips,
  1304. options : {
  1305. // displayDelay : 300,
  1306. hasArrow:false,
  1307. event:"click"
  1308. },
  1309. _loadCustom : function( callback ){
  1310. var _self = this;
  1311. this.css = this.options.css;
  1312. this.lp = this.options.lp;
  1313. //this.data
  1314. this.menuTipLayout = new Element("div.menuTipLayout",{styles:this.css.menuTipLayout}).inject(this.contentNode);
  1315. this.menuTipTitle = new Element("div.menuTipTitle",{styles:this.css.menuTipTitle,text:this.lp.taskGroup}).inject(this.menuTipLayout);
  1316. this.menuTipEditContainer = new Element("div.menuTipContainer",{styles:this.css.menuTipContainer}).inject(this.menuTipLayout);
  1317. this.menuTipEditIcon = new Element("div.menuTipEditIcon",{styles:this.css.menuTipEditIcon}).inject(this.menuTipEditContainer);
  1318. this.menuTipEditText = new Element("div.menuTipEditText",{styles:this.css.menuTipText,text:this.lp.taskGroupEdit}).inject(this.menuTipEditContainer);
  1319. this.menuTipEditContainer.addEvents({
  1320. click:function(){
  1321. var data = this.data;
  1322. data.isNew = false;
  1323. var opt = {
  1324. };
  1325. var newTaskGroup = new MWF.xApplication.TeamWork.Project.NewTaskGroup(this,data,opt,{});
  1326. newTaskGroup.open();
  1327. this.close();
  1328. }.bind(this),
  1329. mouseover:function(){this.setStyles({"background-color":"#F7F7F7"})},
  1330. mouseout:function(){this.setStyles({"background-color":""})}
  1331. });
  1332. this.menuTipRemoveContainer = new Element("div.menuTipContainer",{styles:this.css.menuTipContainer}).inject(this.menuTipLayout);
  1333. this.menuTipRemoveIcon = new Element("div.menuTipRemoveIcon",{styles:this.css.menuTipRemoveIcon}).inject(this.menuTipRemoveContainer);
  1334. this.menuTipRemoveText = new Element("div.menuTipRemoveText",{styles:this.css.menuTipText,text:this.lp.taskGroupRemove}).inject(this.menuTipRemoveContainer);
  1335. this.menuTipRemoveContainer.addEvents({
  1336. click:function(e){
  1337. _self.app.confirm("warn",e,_self.app.lp.common.confirm.removeTitle,_self.app.lp.common.confirm.removeContent,300,120,function(){
  1338. if(_self.data.id){
  1339. _self.rootActions.TaskListAction.delete(_self.data.id,function(json){
  1340. this.close();
  1341. _self.close(json)
  1342. }.bind(this))
  1343. }
  1344. },function(){
  1345. this.close();
  1346. });
  1347. }.bind(this),
  1348. mouseover:function(){this.setStyles({"background-color":"#F7F7F7"})},
  1349. mouseout:function(){this.setStyles({"background-color":""})}
  1350. });
  1351. if(callback)callback();
  1352. }
  1353. });
  1354. MWF.xApplication.TeamWork.Project.NaviViewTip = new Class({
  1355. Extends: MWF.xApplication.TeamWork.Common.ToolTips,
  1356. options : {
  1357. // displayDelay : 300,
  1358. hasArrow:false,
  1359. event:"click"
  1360. },
  1361. _loadCustom : function( callback ){
  1362. var _self = this;
  1363. this.css = this.options.css;
  1364. this.lp = this.options.lp;
  1365. //this.data
  1366. this.menuTipLayout = new Element("div.menuTipLayout",{styles:this.css.menuTipLayout}).inject(this.contentNode);
  1367. this.menuTipTitle = new Element("div.menuTipTitle",{styles:this.css.menuTipTitle,text:this.lp.view}).inject(this.menuTipLayout);
  1368. this.menuTipEditContainer = new Element("div.menuTipContainer",{styles:this.css.menuTipContainer}).inject(this.menuTipLayout);
  1369. this.menuTipEditIcon = new Element("div.menuTipEditIcon",{styles:this.css.menuTipEditIcon}).inject(this.menuTipEditContainer);
  1370. this.menuTipEditText = new Element("div.menuTipEditText",{styles:this.css.menuTipText,text:this.lp.viewEdit}).inject(this.menuTipEditContainer);
  1371. this.menuTipEditContainer.addEvents({
  1372. click:function(){
  1373. }.bind(this),
  1374. mouseover:function(){this.setStyles({"background-color":"#F7F7F7"})},
  1375. mouseout:function(){this.setStyles({"background-color":""})}
  1376. });
  1377. this.menuTipRemoveContainer = new Element("div.menuTipContainer",{styles:this.css.menuTipContainer}).inject(this.menuTipLayout);
  1378. this.menuTipRemoveIcon = new Element("div.menuTipRemoveIcon",{styles:this.css.menuTipRemoveIcon}).inject(this.menuTipRemoveContainer);
  1379. this.menuTipRemoveText = new Element("div.menuTipRemoveText",{styles:this.css.menuTipText,text:this.lp.viewRemove}).inject(this.menuTipRemoveContainer);
  1380. this.menuTipRemoveContainer.addEvents({
  1381. click:function(e){
  1382. _self.app.confirm("warn",e,_self.app.lp.common.confirm.removeTitle,_self.app.lp.common.confirm.removeContent,300,120,function(){
  1383. },function(){
  1384. this.close();
  1385. });
  1386. }.bind(this),
  1387. mouseover:function(){this.setStyles({"background-color":"#F7F7F7"})},
  1388. mouseout:function(){this.setStyles({"background-color":""})}
  1389. });
  1390. if(callback)callback();
  1391. }
  1392. });
  1393. MWF.xApplication.TeamWork.Project.ProjectList = new Class({
  1394. Extends: MWF.xApplication.TeamWork.Common.ToolTips,
  1395. options : {
  1396. // displayDelay : 300,
  1397. hasArrow:false,
  1398. event:"click"
  1399. },
  1400. _loadCustom : function(callback){
  1401. var _self = this;
  1402. this.css = this.options.css;
  1403. this.lp = this.options.lp;
  1404. //this.data
  1405. //this.contentNode
  1406. this.itemLayout = new Element("div.itemLayout",{styles:this.css.itemLayout}).inject(this.contentNode);
  1407. this.app.setLoading(this.itemLayout);
  1408. this.rootActions.ProjectAction.listStarNextWithFilter("(0)",100,{},function(json){
  1409. this.app.setScrollBar(this.itemLayout);
  1410. this.itemLayout.empty();
  1411. if(json.data && json.data.length>0){
  1412. this.starText = new Element("div.starText",{styles:this.css.itemText,text:this.lp.starItem}).inject(this.itemLayout);
  1413. json.data.each(function(data){
  1414. var projectListContainer = new Element("div.projectListContainer",{styles:this.css.projectListContainer}).inject(this.itemLayout);
  1415. var projectListIcon = new Element("div.projectListIcon",{styles:this.css.projectListIcon}).inject(projectListContainer);
  1416. if(data.icon && data.icon!=""){
  1417. projectListIcon.setStyles({"background-image":"url('"+MWF.xDesktop.getImageSrc( data.icon )+"')"});
  1418. }
  1419. new Element("div.projectListText",{styles:this.css.projectListText,text:data.title}).inject(projectListContainer);
  1420. if(this.data.id == data.id){
  1421. new Element("div.projectListSelect",{styles:this.css.projectListSelect}).inject(projectListContainer);
  1422. }
  1423. projectListContainer.addEvents({
  1424. click:function(){
  1425. MWF.xDesktop.requireApp("TeamWork", "Project", function(){
  1426. var p = new MWF.xApplication.TeamWork.Project(this.container,this.app,data,{});
  1427. p.load();
  1428. }.bind(this));
  1429. }.bind(this),
  1430. mouseover:function () { this.setStyles({"background-color":"#F2F5F7"})},
  1431. mouseout:function () { this.setStyles({"background-color":""})}
  1432. });
  1433. }.bind(this))
  1434. }
  1435. var tmpContainer = new Element("div.tmpContainer").inject(this.itemLayout);
  1436. this.app.setLoading(tmpContainer);
  1437. this.rootActions.ProjectAction.listNextWithFilter("(0)",100,{},function(json){
  1438. tmpContainer.destroy();
  1439. this.allItemText = new Element("div.allItemText",{styles:this.css.itemText,text:this.lp.allItem}).inject(this.itemLayout);
  1440. json.data.each(function(data){
  1441. var projectListContainer = new Element("div.projectListContainer",{styles:this.css.projectListContainer}).inject(this.itemLayout);
  1442. var projectListIcon = new Element("div.projectListIcon",{styles:this.css.projectListIcon}).inject(projectListContainer);
  1443. if(data.icon && data.icon!=""){
  1444. projectListIcon.setStyles({"background-image":"url('"+MWF.xDesktop.getImageSrc( data.icon )+"')"});
  1445. }
  1446. new Element("div.projectListText",{styles:this.css.projectListText,text:data.title}).inject(projectListContainer);
  1447. if(this.data.id == data.id){
  1448. new Element("div.projectListSelect",{styles:this.css.projectListSelect}).inject(projectListContainer);
  1449. }
  1450. projectListContainer.addEvents({
  1451. click:function(){
  1452. MWF.xDesktop.requireApp("TeamWork", "Project", function(){
  1453. var p = new MWF.xApplication.TeamWork.Project(this.container,this.app,data,{});
  1454. p.load();
  1455. }.bind(this));
  1456. }.bind(this),
  1457. mouseover:function () { this.setStyles({"background-color":"#F2F5F7"})},
  1458. mouseout:function () { this.setStyles({"background-color":""})}
  1459. });
  1460. }.bind(this));
  1461. }.bind(this))
  1462. }.bind(this));
  1463. if(callback)callback();
  1464. }
  1465. });