Project.js 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760
  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.path = "/x_component_TeamWork/$Project/";
  20. this.cssPath = this.path+this.options.style+"/css.wcss";
  21. this._loadCss();
  22. this.data = data;
  23. },
  24. load: function () {
  25. this.container.setStyles({display:"flex"});
  26. this.container.empty();
  27. this.createTopBarLayout();
  28. this.createContentLayout();
  29. this.topBarTabItemTask.click();
  30. this.app.addEvent("resize", function(){
  31. this.resize();
  32. }.bind(this));
  33. },
  34. resize:function(){
  35. //alert("resize")
  36. //taskGroupItemContainer
  37. //taskGroupLayout,taskGroupItemContainer 自定义高度
  38. this.container.getElements(".taskGroupItemContainer").each(function(d){
  39. var pe = d.getParent();
  40. var pr_w = pe.getElement(".taskGroupItemTitleContainer").getHeight().toInt();
  41. var _h = pe.getHeight().toInt() - pr_w -10-10;
  42. d.setStyles({"height":_h+"px"})
  43. });
  44. },
  45. createTopBarLayout:function(){
  46. this.topBarLayout = new Element("div.topBarLayout",{styles:this.css.topBarLayout}).inject(this.container);
  47. this.topBarBackContainer = new Element("div.topBarBackContainer",{styles:this.css.topBarBackContainer}).inject(this.topBarLayout);
  48. this.topBarBackHomeIcon = new Element("div.topBarBackHomeIcon",{styles:this.css.topBarBackHomeIcon}).inject(this.topBarBackContainer);
  49. this.topBarBackHomeIcon.addEvents({
  50. click:function(){
  51. var pl = new MWF.xApplication.TeamWork.ProjectList(this.container,this.app,this.actions,{});
  52. pl.load();
  53. }.bind(this),
  54. mouseover:function(){
  55. var opt={
  56. axis: "y" //箭头在x轴还是y轴上展现
  57. };
  58. this.app.showTips(this.topBarBackHomeIcon,{_html:"<div style='margin:2px 5px;'>"+this.lp.backProject+"</div>"},opt);
  59. }.bind(this)
  60. });
  61. this.topBarBackHomeNext = new Element("div.topBarBackHomeNext",{styles:this.css.topBarBackHomeNext}).inject(this.topBarBackContainer);
  62. this.topBarBackHomeTextContainer = new Element("div.topBarBackHomeTextContainer",{styles:this.css.topBarBackHomeTextContainer}).inject(this.topBarBackContainer);
  63. this.topBarBackHomeText = new Element("div.topBarBackHomeText",{styles:this.css.topBarBackHomeText,text:this.data.title}).inject(this.topBarBackHomeTextContainer);
  64. this.topBarBackHomeArrow = new Element("div.topBarBackHomeArrow",{styles:this.css.topBarBackHomeArrow}).inject(this.topBarBackHomeTextContainer);
  65. this.topBarBackHomeTextContainer.addEvents({
  66. click:function(){
  67. var plist = new MWF.xApplication.TeamWork.Project.ProjectList(this.container, this.topBarBackHomeTextContainer, this.app, this.data, {
  68. css:this.css,
  69. lp:this.lp,
  70. axis : "y",
  71. position : { //node 固定的位置
  72. x : "right", //x轴上left center right, auto 系统自动计算
  73. y : "auto" //y 轴上top middle bottom, auto 系统自动计算
  74. },
  75. priorityOfAuto :{
  76. x : [ "center", "right", "left" ], //当position x 为 auto 时候的优先级
  77. y : [ "middle", "bottom", "top" ] //当position y 为 auto 时候的优先级
  78. },
  79. nodeStyles : {
  80. "min-width":"300px",
  81. "padding":"2px",
  82. "border-radius":"5px",
  83. "z-index" : "101"
  84. }
  85. });
  86. plist.load();
  87. }.bind(this),
  88. mouseover:function(){this.getElements("div").setStyles({"color":"#4a90e2"})},
  89. mouseout:function () { this.getElements("div").setStyles({"color":"#333333"}) }
  90. });
  91. this.topBarTabsContainer = new Element("div.topBarTabsContainer",{styles:this.css.topBarTabsContainer}).inject(this.topBarLayout);
  92. this.topBarTabItemTask = new Element("div.topBarTabItemTask",{styles:this.css.topBarTabItemTask,text:this.lp.task}).inject(this.topBarTabsContainer);
  93. this.topBarTabItemTask.addEvents({
  94. click:function(){
  95. this.topBarTabItemTask.setStyles({"color":"#4A90E2","border-bottom":"2px solid #4A90E2"});
  96. this.createTaskLayout();
  97. }.bind(this)
  98. });
  99. this.topBarTabItemStat = new Element("div.topBarTabItemStat",{styles:this.css.topBarTabItemStat,text:this.lp.stat}).inject(this.topBarTabsContainer);
  100. this.topBarTabItemStat.addEvents({
  101. click:function(){
  102. this.createStatLayout();
  103. }.bind(this)
  104. });
  105. this.topBarSettingContainer = new Element("div.topBarSettingContainer",{styles:this.css.topBarSettingContainer}).inject(this.topBarLayout);
  106. this.topBarSettingMenuContainer = new Element("div.topBarSettingMenuContainer",{styles:this.css.topBarSettingMenuContainer}).inject(this.topBarSettingContainer);
  107. this.topBarSettingMenuContainer.addEvents({
  108. click:function(){
  109. alert("open")
  110. }.bind(this),
  111. mouseover:function(){
  112. this.topBarSettingMenuContainer.getElements(".topBarSettingMenuIcon").setStyles({
  113. "background-image":"url(/x_component_TeamWork/$Project/default/icon/icon_caidan_click.png)"
  114. });
  115. this.topBarSettingMenuContainer.getElements(".topBarSettingMenuText").setStyles({
  116. "color":"#4A90E2"
  117. });
  118. }.bind(this),
  119. mouseout:function(){
  120. this.topBarSettingMenuContainer.getElements(".topBarSettingMenuIcon").setStyles({
  121. "background-image":"url(/x_component_TeamWork/$Project/default/icon/icon_caidan.png)"
  122. });
  123. this.topBarSettingMenuContainer.getElements(".topBarSettingMenuText").setStyles({
  124. "color":"#666666"
  125. });
  126. }.bind(this)
  127. });
  128. this.topBarSettingMenuIcon = new Element("div.topBarSettingMenuIcon",{styles:this.css.topBarSettingMenuIcon}).inject(this.topBarSettingMenuContainer);
  129. this.topBarSettingMenuText = new Element("div.topBarSettingMenuText",{styles:this.css.topBarSettingMenuText,text:this.lp.menu}).inject(this.topBarSettingMenuContainer);
  130. },
  131. createContentLayout:function(){
  132. this.contentLayout = new Element("div.contentLayout",{styles:this.css.contentLayout}).inject(this.container);
  133. },
  134. createTaskLayout:function(){
  135. if(this.contentLayout) this.contentLayout.empty();
  136. this.createNaviContent();
  137. this.createTaskContent();
  138. },
  139. createNaviContent:function(){
  140. if(this.naviLayout) this.naviLayout.destroy();
  141. this.naviLayout = new Element("div.naviLayout",{styles:this.css.naviLayout}).inject(this.contentLayout);
  142. this.app.setLoading(this.naviLayout);
  143. this.actions.projectNaviGet(this.data.id,function(json){
  144. this.projectGroupData = json.data;
  145. if(this.projectGroupData.groups && this.projectGroupData.groups.length>0){
  146. this.currentProjectGroupData = this.projectGroupData.groups[0];
  147. }
  148. this.naviLayout.empty();
  149. this.createNaviTask();
  150. this.createNaviView();
  151. }.bind(this));
  152. },
  153. createNaviTask:function(){
  154. if(!this.currentProjectGroupData) return;
  155. if(this.naviTop) this.naviTop.destroy();
  156. this.naviTop = new Element("div.naviTop",{styles:this.css.naviTop}).inject(this.naviLayout);
  157. this.naviTopSearchContainer = new Element("div.naviTopSearchContainer",{styles:this.css.naviTopSearchContainer}).inject(this.naviTop);
  158. this.naviTopSearchIn = new Element("input.naviTopSearchIn",{styles:this.css.naviTopSearchIn,placeholder:this.lp.searchTask}).inject(this.naviTopSearchContainer);
  159. this.naviTopTaskContainer = new Element("div.naviTopTaskContainer",{styles:this.css.naviTopTaskContainer}).inject(this.naviTop);
  160. this.naviTopTaskText = new Element("div.naviTopTaskText",{styles:this.css.naviTopTaskText,text:this.lp.task}).inject(this.naviTopTaskContainer);
  161. this.naviTopTaskAdd = new Element("div.naviTopTaskAdd",{styles:this.css.naviTopTaskAdd}).inject(this.naviTopTaskContainer);
  162. this.naviTopTaskAdd.addEvents({
  163. click:function(){
  164. var data = {
  165. taskGroupId:this.currentProjectGroupData.id,
  166. //projectId:this.data.id,
  167. taskListIds:[]
  168. };
  169. var opt = {
  170. onCreateTask:function(){
  171. this.createTaskGroup();
  172. }.bind(this)
  173. };
  174. var newTask = new MWF.xApplication.TeamWork.Project.NewTask(this,data,opt,{});
  175. newTask.open();
  176. }.bind(this),
  177. mouseover:function(){
  178. this.naviTopTaskAdd.setStyles({
  179. "background-image":"url(/x_component_TeamWork/$Project/default/icon/icon_zengjia_blue2_click.png)"
  180. });
  181. this.app.showTips(this.naviTopTaskAdd,{_html:"<div style='margin:2px 5px;'>"+this.lp.taskAdd+"</div>"});
  182. }.bind(this),
  183. mouseout:function(){
  184. this.naviTopTaskAdd.setStyles({
  185. "background-image":"url(/x_component_TeamWork/$Project/default/icon/icon_jia.png)"
  186. });
  187. }.bind(this)
  188. });
  189. this.naviTopMyTaskLayout = new Element("div.naviTopMyTaskLayout",{styles:this.css.naviTopMyTaskLayout}).inject(this.naviTop);
  190. this.naviTopMyTaskLayout.addEvents({
  191. click:function(){
  192. this.createTaskGroup();
  193. }.bind(this)
  194. });
  195. this.naviTopMyTaskContainer = new Element("div.naviTopMyTaskContainer",{styles:this.css.naviTopMyTaskContainer}).inject(this.naviTopMyTaskLayout);
  196. this.naviTopMyTaskText = new Element("div.naviTopMyTaskText",{styles:this.css.naviTopMyTaskText,text:this.lp.myTask}).inject(this.naviTopMyTaskContainer);
  197. this.naviTopMyTaskCount = new Element("div.naviTopMyTaskCount",{styles:this.css.naviTopMyTaskCount,text:"("+this.currentProjectGroupData.completedTotal+"/"+this.currentProjectGroupData.taskTotal+")"}).inject(this.naviTopMyTaskContainer);
  198. this.naviTopTaskLineContainer = new Element("div.naviTopTaskLineContainer",{styles:this.css.naviTopTaskLineContainer}).inject(this.naviTopMyTaskLayout);
  199. this.naviTopTaskLine = new Element("div.naviTopTaskLine",{styles:this.css.naviTopTaskLine}).inject(this.naviTopTaskLineContainer);
  200. this.loadTaskLine();
  201. this.naviTopMyTaskLayout.click();
  202. },
  203. loadTaskLine:function(){
  204. this.completeLine = new Element("div.completeLine",{styles:this.css.completeLine}).inject(this.naviTopTaskLine);
  205. this.completeLine.addEvents({
  206. mouseover:function(){
  207. this.app.showTips(this.completeLine,{_html:"<div style='margin:2px 5px;'>"+this.lp.taskCompleteText+":"+this.currentProjectGroupData.completedTotal+"</div>"});
  208. }.bind(this)
  209. });
  210. this.overLine = new Element("div.overLine",{styles:this.css.overLine}).inject(this.naviTopTaskLine);
  211. this.overLine.addEvents({
  212. mouseover:function(){
  213. this.app.showTips(this.overLine,{_html:"<div style='margin:2px 5px;'>"+this.lp.taskCompleteText+":"+this.currentProjectGroupData.overtimeTotal+"</div>"});
  214. }.bind(this)
  215. });
  216. if(this.currentProjectGroupData){
  217. var taskTotal = this.currentProjectGroupData.taskTotal;
  218. var completedTotal = this.currentProjectGroupData.completedTotal;
  219. var overtimeTotal = this.currentProjectGroupData.overtimeTotal;
  220. if(taskTotal){
  221. var _width = this.naviTopTaskLine.getWidth();
  222. var completePixel =_width * (completedTotal / taskTotal);
  223. var overPixel =_width * (overtimeTotal / taskTotal);
  224. this.completeLine.setStyles({"width":completePixel+"px"});
  225. this.overLine.setStyles({"width":overPixel+"px"});
  226. }
  227. }
  228. },
  229. createNaviView:function(){
  230. if(this.naviView) this.naviView.destroy();
  231. this.naviView = new Element("div.naviView",{styles:this.css.naviView}).inject(this.naviLayout);
  232. this.naviViewTitleContainer = new Element("div.naviViewTitleContainer",{styles:this.css.naviViewTitleContainer}).inject(this.naviView);
  233. this.naviViewTitle = new Element("div.naviViewTitle",{styles:this.css.naviViewTitle,text:this.lp.viewTitle}).inject(this.naviViewTitleContainer);
  234. this.naviViewAdd = new Element("div.naviViewAdd",{styles:this.css.naviViewAdd}).inject(this.naviViewTitleContainer);
  235. this.naviViewAdd.addEvents({
  236. click:function(){
  237. }.bind(this),
  238. mouseover:function(){
  239. this.naviViewAdd.setStyles({
  240. "background-image":"url(/x_component_TeamWork/$Project/default/icon/icon_zengjia_blue2_click.png)"
  241. });
  242. this.app.showTips(this.naviViewAdd,{_html:"<div style='margin:2px 5px;'>"+this.lp.viewAdd+"</div>"});
  243. }.bind(this),
  244. mouseout:function(){
  245. this.naviViewAdd.setStyles({
  246. "background-image":"url(/x_component_TeamWork/$Project/default/icon/icon_jia.png)"
  247. });
  248. }.bind(this)
  249. });
  250. this.createNaviViewItem();
  251. },
  252. createNaviViewItem:function(){
  253. var _self = this;
  254. if(this.naviViewContainer) this.naviViewContainer.destroy();
  255. this.naviViewContainer = new Element("div.naviViewContainer",{styles:this.css.naviViewContainer}).inject(this.naviView);
  256. this.viewData = this.viewData || this.projectGroupData.views;
  257. this.viewData.each(function(json){
  258. if(json.name==this.lp.viewItemAll){//所有任务
  259. this.naviItemAllContainer = new Element("div.naviItemContainer",{styles:this.css.naviItemContainer}).inject(this.naviViewContainer);
  260. this.naviItemAllIcon = new Element("div.naviItemAllIcon",{styles:this.css.naviItemAllIcon}).inject(this.naviItemAllContainer);
  261. this.naviItemAllText = new Element("div.naviItemText",{styles:this.css.naviItemText,text:this.lp.viewItemAll}).inject(this.naviItemAllContainer);
  262. this.naviItemAllContainer.addEvents({
  263. click:function(){
  264. },
  265. mouseenter:function(){ _self.naviItemChange(this,"enter")},
  266. mouseleave:function(){_self.naviItemChange(this,"leave")}
  267. });
  268. }else if(json.name==this.lp.viewItemMy){
  269. //我的任务
  270. this.naviItemMyContainer = new Element("div.naviItemContainer",{styles:this.css.naviItemContainer}).inject(this.naviViewContainer);
  271. this.naviItemMyIcon = new Element("div.naviItemMyIcon",{styles:this.css.naviItemMyIcon}).inject(this.naviItemMyContainer);
  272. this.naviItemMyText = new Element("div.naviItemText",{styles:this.css.naviItemText,text:this.lp.viewItemMy}).inject(this.naviItemMyContainer);
  273. this.naviItemMyMore = new Element("div.naviItemMore",{styles:this.css.naviItemMore}).inject(this.naviItemMyContainer);
  274. this.naviItemMyMore.addEvent(
  275. "click",function(e){
  276. this.openNaviViewMore(this.naviItemMyMore);
  277. e.stopPropagation();
  278. }.bind(this)
  279. );
  280. this.naviItemMyContainer.addEvents({
  281. click:function(){
  282. alert("open")
  283. }.bind(this),
  284. mouseenter:function(){ this.naviItemChange(this.naviItemMyContainer,"enter")}.bind(this),
  285. mouseleave:function(){ this.naviItemChange(this.naviItemMyContainer,"leave")}.bind(this)
  286. });
  287. }else if(json.name==this.lp.viewItemFlow){
  288. //未完成的任务
  289. this.naviItemFlowContainer = new Element("div.naviItemContainer",{styles:this.css.naviItemContainer}).inject(this.naviViewContainer);
  290. this.naviItemFlowIcon = new Element("div.naviItemFlowIcon",{styles:this.css.naviItemFlowIcon}).inject(this.naviItemFlowContainer);
  291. this.naviItemFlowText = new Element("div.naviItemText",{styles:this.css.naviItemText,text:this.lp.viewItemFlow}).inject(this.naviItemFlowContainer);
  292. this.naviItemFlowMore = new Element("div.naviItemMore",{styles:this.css.naviItemMore}).inject(this.naviItemFlowContainer);
  293. this.naviItemFlowMore.addEvent(
  294. "click",function(e){
  295. this.openNaviViewMore(this.naviItemFlowMore);
  296. e.stopPropagation();
  297. }.bind(this)
  298. );
  299. this.naviItemFlowContainer.addEvents({
  300. click:function(){
  301. alert("open")
  302. }.bind(this),
  303. mouseenter:function(){ this.naviItemChange(this.naviItemFlowContainer,"enter")}.bind(this),
  304. mouseleave:function(){ this.naviItemChange(this.naviItemFlowContainer,"leave")}.bind(this)
  305. });
  306. }else if(json.name==this.lp.viewItemComplete){
  307. //已完成任务
  308. this.naviItemCompleteContainer = new Element("div.naviItemContainer",{styles:this.css.naviItemContainer}).inject(this.naviViewContainer);
  309. this.naviItemCompleteIcon = new Element("div.naviItemCompleteIcon",{styles:this.css.naviItemCompleteIcon}).inject(this.naviItemCompleteContainer);
  310. this.naviItemCompleteText = new Element("div.naviItemText",{styles:this.css.naviItemText,text:this.lp.viewItemComplete}).inject(this.naviItemCompleteContainer);
  311. this.naviItemCompleteMore = new Element("div.naviItemMore",{styles:this.css.naviItemMore}).inject(this.naviItemCompleteContainer);
  312. this.naviItemCompleteMore.addEvent(
  313. "click",function(e){
  314. this.openNaviViewMore(this.naviItemCompleteMore);
  315. e.stopPropagation();
  316. }.bind(this)
  317. );
  318. this.naviItemCompleteContainer.addEvents({
  319. click:function(){
  320. alert("open")
  321. }.bind(this),
  322. mouseenter:function(){ this.naviItemChange(this.naviItemCompleteContainer,"enter")}.bind(this),
  323. mouseleave:function(){ this.naviItemChange(this.naviItemCompleteContainer,"leave")}.bind(this)
  324. });
  325. }else if(json.name==this.lp.viewItemOver){
  326. //已逾期任务
  327. this.naviItemOverContainer = new Element("div.naviItemContainer",{styles:this.css.naviItemContainer}).inject(this.naviViewContainer);
  328. this.naviItemOverIcon = new Element("div.naviItemOverIcon",{styles:this.css.naviItemOverIcon}).inject(this.naviItemOverContainer);
  329. this.naviItemOverText = new Element("div.naviItemText",{styles:this.css.naviItemText,text:this.lp.viewItemOver}).inject(this.naviItemOverContainer);
  330. this.naviItemOverMore = new Element("div.naviItemMore",{styles:this.css.naviItemMore}).inject(this.naviItemOverContainer);
  331. this.naviItemOverMore.addEvent(
  332. "click",function(e){
  333. this.openNaviViewMore(this.naviItemOverMore);
  334. e.stopPropagation();
  335. }.bind(this)
  336. );
  337. this.naviItemOverContainer.addEvents({
  338. click:function(){
  339. alert("open")
  340. }.bind(this),
  341. mouseenter:function(){ this.naviItemChange(this.naviItemOverContainer,"enter")}.bind(this),
  342. mouseleave:function(){ this.naviItemChange(this.naviItemOverContainer,"leave")}.bind(this)
  343. });
  344. }else{
  345. //自定义视图
  346. }
  347. }.bind(this));
  348. },
  349. naviItemChange:function(node,action){
  350. if(action == "enter"){
  351. node.setStyles({"background-color":"#F2F5F7"});
  352. var divs = node.getElements("div");
  353. divs[0].setStyles({"background-image":divs[0].getStyle("background-image").replace(".png","_click.png")});
  354. divs[1].setStyles({"color":"#4A90E2"});
  355. if(divs[2]){
  356. divs[2].setStyles({"background-image":divs[2].getStyle("background-image").replace(".png","_click.png")});
  357. }
  358. }else if(action == "leave"){
  359. node.setStyles({"background-color":""});
  360. var divs = node.getElements("div");
  361. divs[0].setStyles({"background-image":divs[0].getStyle("background-image").replace("_click.png",".png")});
  362. divs[1].setStyles({"color":"#2A2A2A"});
  363. if(divs[2]){
  364. divs[2].setStyles({"background-image":divs[2].getStyle("background-image").replace("_click.png",".png")});
  365. }
  366. }
  367. },
  368. openNaviViewMore:function(node){
  369. var tooltip = new MWF.xApplication.TeamWork.Project.NaviViewTip(this.container, node, this.app, {}, {
  370. css:this.css,
  371. lp:this.lp,
  372. axis : "y",
  373. nodeStyles : {
  374. "min-width":"100px",
  375. "padding":"2px",
  376. "border-radius":"5px",
  377. "z-index" : "101"
  378. },
  379. onPostLoad:function(){
  380. tooltip.node.setStyles({"opacity":"0"});
  381. var fx = new Fx.Tween(tooltip.node,{duration:200});
  382. fx.start(["opacity"] ,"0", "1");
  383. },
  384. onClose:function(rd){
  385. // customGroupItemContainer.set("atIn","no");
  386. // if(rd)_self.reloadProjectGroup();
  387. }
  388. });
  389. tooltip.load();
  390. },
  391. createTaskContent:function(){
  392. this.taskContentLayout = new Element("div.taskContentLayout",{styles:this.css.taskContentLayout}).inject(this.contentLayout);
  393. },
  394. createTaskGroup:function(){
  395. if(this.currentProjectGroupData && this.currentProjectGroupData.id){
  396. this.app.setLoading(this.taskContentLayout);
  397. this.actions.taskGroupList(this.currentProjectGroupData.id,function(json){
  398. this.taskContentLayout.empty();
  399. json.data.each(function(data,i){
  400. //if(i>0) return;
  401. var taskGroupLayout = new Element("div.taskGroupLayout",{styles:this.css.taskGroupLayout,id:data.id}).inject(this.taskContentLayout);
  402. this.createTaskGroupItemLayout(taskGroupLayout,data);
  403. }.bind(this));
  404. }.bind(this))
  405. }
  406. },
  407. createTaskGroupItemLayout:function(node,data){
  408. var taskGroupItemTitleContainer = new Element("div.taskGroupItemTitleContainer",{styles:this.css.taskGroupItemTitleContainer}).inject(node);
  409. new Element("div.taskGroupItemTitleText",{styles:this.css.taskGroupItemTitleText,text:data.name}).inject(taskGroupItemTitleContainer);
  410. new Element("div.taskGroupItemTitleCount",{styles:this.css.taskGroupItemTitleCount,text:"("+"0"+")"}).inject(taskGroupItemTitleContainer);
  411. var taskGroupItemTitleMore = new Element("div.taskGroupItemTitleMore",{styles:this.css.taskGroupItemTitleMore}).inject(taskGroupItemTitleContainer);
  412. taskGroupItemTitleMore.addEvents({
  413. click:function(){}.bind(this)
  414. });
  415. var taskGroupItemTitleAdd = new Element("div.taskGroupItemTitleAdd",{styles:this.css.taskGroupItemTitleAdd}).inject(taskGroupItemTitleContainer);
  416. taskGroupItemTitleAdd.addEvents({
  417. click:function(){}.bind(this)
  418. });
  419. var taskGroupItemContainer = new Element("div.taskGroupItemContainer",{styles:this.css.taskGroupItemContainer}).inject(node);
  420. var _h = node.getHeight().toInt()-taskGroupItemTitleContainer.getHeight().toInt() - 10 - 10;
  421. taskGroupItemContainer.setStyles({"height":_h+"px"});
  422. this.app.setScrollBar(taskGroupItemContainer);
  423. //this.app.setLoading(taskGroupItemContainer);
  424. this.actions.taskListByListId(data.id,function(json){
  425. taskGroupItemContainer.empty();
  426. // var taskListData = [
  427. // {
  428. // "name":"任务一",
  429. // "remark":"备注信息",
  430. // "status":"flow",
  431. // "person":"金飞"
  432. // },
  433. //
  434. //
  435. //
  436. //
  437. // {
  438. // "name":"任务一",
  439. // "remark":"备注信息",
  440. // "status":"flow",
  441. // "person":"金飞"
  442. // }
  443. //
  444. // ];
  445. // if(node.get("id")=="ed426176-dd36-4151-8b90-87e6c16e91eb") taskListData = [];
  446. var taskListData = json.data;
  447. //alert(JSON.stringify(taskListData));
  448. taskListData.each(function(d){
  449. var taskItemContainer = new Element("div.taskItemContainer",{styles:this.css.taskItemContainer}).inject(taskGroupItemContainer);
  450. var int;
  451. taskItemContainer.addEvents({
  452. click:function(){
  453. this.openTask(d.id)
  454. }.bind(this),
  455. mouseover:function(){
  456. int = window.setInterval(function(){
  457. if(taskItemHover.getWidth() == 10) return;
  458. taskItemHover.setStyles({
  459. "width":(taskItemHover.getWidth()+1)+"px"
  460. });
  461. }.bind(this),20)
  462. },
  463. mouseout:function(){
  464. window.clearInterval(int);
  465. taskItemHover.setStyles({"width":"0px"});
  466. }.bind(this)
  467. });
  468. var taskItemHover = new Element("div.taskItemHover",{styles:this.css.taskItemHover}).inject(taskItemContainer);
  469. var taskItemContent = new Element("div.taskItemContent",{styles:this.css.taskItemContent}).inject(taskItemContainer);
  470. var taskItemTitle = new Element("div.taskItemTitle",{styles:this.css.taskItemTitle,text:d.name}).inject(taskItemContent);
  471. taskItemHover.setStyles({"height":taskItemContainer.getHeight()})
  472. }.bind(this))
  473. }.bind(this));
  474. },
  475. openTask:function(id){
  476. var data = {
  477. taskId:id
  478. };
  479. var opt = {};
  480. MWF.xDesktop.requireApp("TeamWork", "Task", function(){
  481. var task = new MWF.xApplication.TeamWork.Task(this,data,opt);
  482. task.open();
  483. }.bind(this));
  484. },
  485. createStatLayout:function(){
  486. },
  487. test:function(){
  488. }
  489. });
  490. MWF.xApplication.TeamWork.Project.NewTask = new Class({
  491. Extends: MPopupForm,
  492. options : {
  493. "style": "default",
  494. "width": 400,
  495. "height": 250,
  496. "top": null,
  497. "left": null,
  498. "bottom" : null,
  499. "right" : null,
  500. "minWidth" : 300,
  501. "minHeight" : 220,
  502. "closeByClickMask" : true,
  503. "hasTopContent" : true,
  504. "hasTop":true,
  505. "hasBottom": false,
  506. "hasIcon": false,
  507. "title":""
  508. },
  509. _createTableContent:function(){
  510. if(this.formTopTextNode) this.formTopTextNode.set("text",this.lp.newTaskTitle);
  511. //this.formTableArea
  512. this.titleContainer = new Element("div.titleContainer",{styles:this.css.titleContainer}).inject(this.formTableArea);
  513. this.titleValue = new Element("input.titleValue",{styles:this.css.titleValue,placeholder:this.lp.newTaskPlaceholder}).inject(this.titleContainer);
  514. this.actionContainer = new Element("div.actionContainer",{styles:this.css.actionContainer}).inject(this.formTableArea);
  515. this.okAction = new Element("div.okAction",{styles:this.css.okAction,text:this.lp.newTaskOk}).inject(this.actionContainer);
  516. this.okAction.addEvents({
  517. click:function(){
  518. if(this.titleValue.get("value").trim()=="") return;
  519. var data={
  520. taskGroupId:this.data.taskGroupId,
  521. name: this.titleValue.get("value").trim()
  522. };
  523. this.actions.taskSave(data,function(json){
  524. if(json.data.id){
  525. var data = {
  526. taskId:json.data.id
  527. };
  528. var opt = {};
  529. MWF.xDesktop.requireApp("TeamWork", "Task", function(){
  530. var task = new MWF.xApplication.TeamWork.Task(this,data,opt);
  531. task.open();
  532. }.bind(this));
  533. this.fireEvent("createTask");
  534. this.close();
  535. }
  536. }.bind(this))
  537. }.bind(this)
  538. });
  539. this.closeAction = new Element("div.closeAction",{styles:this.css.closeAction,text:this.lp.newTaskClose}).inject(this.actionContainer);
  540. this.closeAction.addEvents({
  541. click:function(){
  542. this.close();
  543. }.bind(this)
  544. });
  545. }
  546. });
  547. MWF.xApplication.TeamWork.Project.NaviViewTip = new Class({
  548. Extends: MWF.xApplication.TeamWork.Common.ToolTips,
  549. options : {
  550. // displayDelay : 300,
  551. hasArrow:false,
  552. event:"click"
  553. },
  554. _loadCustom : function( callback ){
  555. var _self = this;
  556. this.css = this.options.css;
  557. this.lp = this.options.lp;
  558. //this.data
  559. this.naviViewTipLayout = new Element("div.naviViewTipLayout",{styles:this.css.naviViewTipLayout}).inject(this.contentNode);
  560. this.naviViewTipEditContainer = new Element("div.naviViewTipContainer",{styles:this.css.naviViewTipContainer}).inject(this.naviViewTipLayout);
  561. this.naviViewTipEditIcon = new Element("div.naviViewTipEditIcon",{styles:this.css.naviViewTipEditIcon}).inject(this.naviViewTipEditContainer);
  562. this.naviViewTipEditText = new Element("div.naviViewTipText",{styles:this.css.naviViewTipText,text:this.lp.viewEdit}).inject(this.naviViewTipEditContainer);
  563. this.naviViewTipEditContainer.addEvents({
  564. click:function(){
  565. }.bind(this),
  566. mouseover:function(){this.naviViewTipEditContainer.setStyles({"background-color":"#F7F7F7"})}.bind(this),
  567. mouseout:function(){this.naviViewTipEditContainer.setStyles({"background-color":""})}.bind(this)
  568. });
  569. this.naviViewTipRemoveContainer = new Element("div.naviViewTipContainer",{styles:this.css.naviViewTipContainer}).inject(this.naviViewTipLayout);
  570. this.naviViewTipRemoveIcon = new Element("div.naviViewTipRemoveIcon",{styles:this.css.naviViewTipRemoveIcon}).inject(this.naviViewTipRemoveContainer);
  571. this.naviViewTipRemoveText = new Element("div.naviViewTipText",{styles:this.css.naviViewTipText,text:this.lp.viewRemove}).inject(this.naviViewTipRemoveContainer);
  572. this.naviViewTipRemoveContainer.addEvents({
  573. click:function(e){
  574. _self.app.confirm("warn",e,_self.app.lp.common.confirm.removeTitle,_self.app.lp.common.confirm.removeContent,300,120,function(){
  575. },function(){
  576. this.close();
  577. });
  578. }.bind(this),
  579. mouseover:function(){this.naviViewTipRemoveContainer.setStyles({"background-color":"#F7F7F7"})}.bind(this),
  580. mouseout:function(){this.naviViewTipRemoveContainer.setStyles({"background-color":""})}.bind(this)
  581. });
  582. if(callback)callback();
  583. }
  584. });
  585. MWF.xApplication.TeamWork.Project.ProjectList = new Class({
  586. Extends: MWF.xApplication.TeamWork.Common.ToolTips,
  587. options : {
  588. // displayDelay : 300,
  589. hasArrow:false,
  590. event:"click"
  591. },
  592. _loadCustom : function(callback){
  593. var _self = this;
  594. this.css = this.options.css;
  595. this.lp = this.options.lp;
  596. //this.data
  597. //this.contentNode
  598. this.itemLayout = new Element("div.itemLayout",{styles:this.css.itemLayout}).inject(this.contentNode);
  599. this.app.setLoading(this.itemLayout);
  600. this.actions.projectStarListNext("(0)",100,{},function(json){
  601. this.app.setScrollBar(this.itemLayout);
  602. this.itemLayout.empty();
  603. if(json.data.length>0){
  604. this.starText = new Element("div.starText",{styles:this.css.itemText,text:this.lp.starItem}).inject(this.itemLayout);
  605. json.data.each(function(data){
  606. var projectListContainer = new Element("div.projectListContainer",{styles:this.css.projectListContainer}).inject(this.itemLayout);
  607. var projectListIcon = new Element("div.projectListIcon",{styles:this.css.projectListIcon}).inject(projectListContainer);
  608. if(data.icon && data.icon!=""){
  609. projectListIcon.setStyles({"background-image":"url('"+MWF.xDesktop.getImageSrc( data.icon )+"')"});
  610. }
  611. new Element("div.projectListText",{styles:this.css.projectListText,text:data.title}).inject(projectListContainer);
  612. if(this.data.id == data.id){
  613. new Element("div.projectListSelect",{styles:this.css.projectListSelect}).inject(projectListContainer);
  614. }
  615. projectListContainer.addEvents({
  616. click:function(){
  617. MWF.xDesktop.requireApp("TeamWork", "Project", function(){
  618. var p = new MWF.xApplication.TeamWork.Project(this.container,this.app,data,{});
  619. p.load();
  620. }.bind(this));
  621. }.bind(this),
  622. mouseover:function () { this.setStyles({"background-color":"#F2F5F7"})},
  623. mouseout:function () { this.setStyles({"background-color":""})}
  624. });
  625. }.bind(this))
  626. }
  627. this.actions.projectListNext("(0)",100,{},function(json){
  628. this.allItemText = new Element("div.allItemText",{styles:this.css.itemText,text:this.lp.allItem}).inject(this.itemLayout);
  629. json.data.each(function(data){
  630. var projectListContainer = new Element("div.projectListContainer",{styles:this.css.projectListContainer}).inject(this.itemLayout);
  631. var projectListIcon = new Element("div.projectListIcon",{styles:this.css.projectListIcon}).inject(projectListContainer);
  632. if(data.icon && data.icon!=""){
  633. projectListIcon.setStyles({"background-image":"url('"+MWF.xDesktop.getImageSrc( data.icon )+"')"});
  634. }
  635. new Element("div.projectListText",{styles:this.css.projectListText,text:data.title}).inject(projectListContainer);
  636. if(this.data.id == data.id){
  637. new Element("div.projectListSelect",{styles:this.css.projectListSelect}).inject(projectListContainer);
  638. }
  639. projectListContainer.addEvents({
  640. click:function(){
  641. MWF.xDesktop.requireApp("TeamWork", "Project", function(){
  642. var p = new MWF.xApplication.TeamWork.Project(this.container,this.app,data,{});
  643. p.load();
  644. }.bind(this));
  645. }.bind(this),
  646. mouseover:function () { this.setStyles({"background-color":"#F2F5F7"})},
  647. mouseout:function () { this.setStyles({"background-color":""})}
  648. });
  649. }.bind(this));
  650. }.bind(this))
  651. }.bind(this));
  652. if(callback)callback();
  653. }
  654. });
  655. MWF.xApplication.TeamWork.Project.NaviViewTip = new Class({
  656. Extends: MWF.xApplication.TeamWork.Common.ToolTips,
  657. options : {
  658. // displayDelay : 300,
  659. hasArrow:false,
  660. event:"click"
  661. },
  662. _loadCustom : function( callback ){
  663. var _self = this;
  664. this.css = this.options.css;
  665. this.lp = this.options.lp;
  666. //this.data
  667. this.naviViewTipLayout = new Element("div.naviViewTipLayout",{styles:this.css.naviViewTipLayout}).inject(this.contentNode);
  668. this.naviViewTipEditContainer = new Element("div.naviViewTipContainer",{styles:this.css.naviViewTipContainer}).inject(this.naviViewTipLayout);
  669. this.naviViewTipEditIcon = new Element("div.naviViewTipEditIcon",{styles:this.css.naviViewTipEditIcon}).inject(this.naviViewTipEditContainer);
  670. this.naviViewTipEditText = new Element("div.naviViewTipText",{styles:this.css.naviViewTipText,text:this.lp.viewEdit}).inject(this.naviViewTipEditContainer);
  671. this.naviViewTipEditContainer.addEvents({
  672. click:function(){
  673. }.bind(this),
  674. mouseover:function(){this.naviViewTipEditContainer.setStyles({"background-color":"#F7F7F7"})}.bind(this),
  675. mouseout:function(){this.naviViewTipEditContainer.setStyles({"background-color":""})}.bind(this)
  676. });
  677. this.naviViewTipRemoveContainer = new Element("div.naviViewTipContainer",{styles:this.css.naviViewTipContainer}).inject(this.naviViewTipLayout);
  678. this.naviViewTipRemoveIcon = new Element("div.naviViewTipRemoveIcon",{styles:this.css.naviViewTipRemoveIcon}).inject(this.naviViewTipRemoveContainer);
  679. this.naviViewTipRemoveText = new Element("div.naviViewTipText",{styles:this.css.naviViewTipText,text:this.lp.viewRemove}).inject(this.naviViewTipRemoveContainer);
  680. this.naviViewTipRemoveContainer.addEvents({
  681. click:function(e){
  682. _self.app.confirm("warn",e,_self.app.lp.common.confirm.removeTitle,_self.app.lp.common.confirm.removeContent,300,120,function(){
  683. },function(){
  684. this.close();
  685. });
  686. }.bind(this),
  687. mouseover:function(){this.naviViewTipRemoveContainer.setStyles({"background-color":"#F7F7F7"})}.bind(this),
  688. mouseout:function(){this.naviViewTipRemoveContainer.setStyles({"background-color":""})}.bind(this)
  689. });
  690. if(callback)callback();
  691. }
  692. });