Project.js 80 KB

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