Project.js 82 KB

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