NewProject.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. MWF.xApplication.TeamWork = MWF.xApplication.TeamWork || {};
  2. MWF.xApplication.TeamWork.NewProject = new Class({
  3. Extends: MWF.xApplication.TeamWork.Common.Popup,
  4. options:{
  5. "closeByClickMask" : false
  6. },
  7. open: function (e) {
  8. //设置css 和 lp等
  9. var css = this.css;
  10. this.cssPath = "../x_component_TeamWork/$NewProject/"+this.options.style+"/css.wcss";
  11. this._loadCss();
  12. if(css) this.css = Object.merge( css, this.css );
  13. this.lp = this.app.lp.newProject;
  14. this.fireEvent("queryOpen");
  15. this.isNew = false;
  16. this.isEdited = false;
  17. this._open();
  18. this.fireEvent("postOpen");
  19. },
  20. _createTableContent: function () {
  21. //var a = new Element("div.aaa",{styles:{"width":"100px","height":"100px","background-color":"#f00"},text:"f分分分f分分f分分分f分分分"}).inject(this.formTableArea);
  22. // alert(JSON.stringify(this.css.projectAdd))
  23. // alert(JSON.stringify(this.lp))
  24. this.newProjectTop = new Element("div.newProjectTop",{styles:this.css.newProjectTop}).inject(this.formTableArea);
  25. this.newProjectTopText = new Element("div.newProjectTopText",{styles:this.css.newProjectTopText,text:this.lp.title}).inject(this.newProjectTop);
  26. this.newProjectTopClose = new Element("div.newProjectTopClose",{styles:this.css.newProjectTopClose}).inject(this.newProjectTop);
  27. this.newProjectTopClose.addEvents({
  28. click:function(){this.close()}.bind(this)
  29. });
  30. this.newProjectContainer = new Element("div.newProjectInContainer",{styles:this.css.newProjectContainer}).inject(this.formTableArea);
  31. this.newProjectIn = new Element("input.newProjectIn",{styles:this.css.newProjectIn,type:"text",placeholder:this.lp.name}).inject(this.newProjectContainer);
  32. this.newProjectIn.addEvents({
  33. keyup:function(){
  34. var v = this.newProjectIn.get("value");
  35. if(v.trim()==""){
  36. this.newProjectAdd.setStyles({
  37. "cursor":"",
  38. "background-color":"#F0F0F0",
  39. "color":"#666666"
  40. });
  41. }else{
  42. this.newProjectAdd.setStyles({
  43. "cursor":"pointer",
  44. "background-color":"#4A90E2",
  45. "color":"#FFFFFF"
  46. });
  47. }
  48. }.bind(this),
  49. focus:function(){
  50. this.newProjectContainer.setStyles({"border":"1px solid #4A90E2"});
  51. }.bind(this),
  52. blur:function(){
  53. this.newProjectContainer.setStyles({"border":"1px solid #A6A6A6"});
  54. }.bind(this)
  55. });
  56. this.newProjectDesContainer = new Element("div.newProjectDesContainer",{styles:this.css.newProjectDesContainer}).inject(this.formTableArea);
  57. this.newProjectDesIn = new Element("textarea.newProjectDesIn",{styles:this.css.newProjectDesIn,placeholder:this.lp.description}).inject(this.newProjectDesContainer);
  58. this.newProjectDesIn.addEvents({
  59. focus:function(){ //32px
  60. // var v = this.newProjectDesIn.get("value");
  61. // if(v.trim()==""){ return;
  62. // //this.newProjectDesIn.setStyle("line-height","");
  63. // var _h = 36;
  64. // //alert(this.newProjectDesContainer.getHeight()+_h)
  65. // this.newProjectDesContainer.setStyles({"height":(this.newProjectDesContainer.getHeight()+_h)+"px"});
  66. // this.newProjectDesIn.setStyles({"height":(this.newProjectDesIn.getHeight()+_h)+"px"});
  67. // this.formAreaNode.setStyles({"height":(this.formAreaNode.getHeight()+_h)+"px"});
  68. // this.formNode.setStyles({"height":(this.formNode.getHeight()+_h)+"px"});
  69. // this.formTableContainer.setStyles({"height":(this.formTableContainer.getHeight()+_h)+"px"});
  70. // this.formTableArea.setStyles({"height":(this.formTableArea.getHeight()+_h)+"px"});
  71. // this.formContentNode.setStyles({"height":(this.formContentNode.getHeight()+_h)+"px"});
  72. //
  73. // var pre = this.formTableContainer.getPrevious();
  74. // if(pre){
  75. // pre.destroy();
  76. // }
  77. // }
  78. this.newProjectDesContainer.setStyles({"border":"1px solid #4A90E2"});
  79. }.bind(this),
  80. blur:function(){
  81. // var v = this.newProjectDesIn.get("value");
  82. // if(v.trim()==""){ return;
  83. // //this.newProjectDesIn.setStyle("line-height","32px");
  84. // var _h = 36;
  85. // this.newProjectDesContainer.setStyles({"height":(this.newProjectDesContainer.getHeight()-_h-2)+"px"});
  86. // this.newProjectDesIn.setStyles({"height":(this.newProjectDesIn.getHeight()-_h-2)+"px"});
  87. // this.formAreaNode.setStyles({"height":(this.formAreaNode.getHeight()-_h)+"px"});
  88. // this.formNode.setStyles({"height":(this.formNode.getHeight()-_h)+"px"});
  89. // this.formTableContainer.setStyles({"height":(this.formTableContainer.getHeight()-_h)+"px"});
  90. // this.formTableArea.setStyles({"height":(this.formTableArea.getHeight()-_h)+"px"});
  91. // this.formContentNode.setStyles({"height":(this.formContentNode.getHeight()-_h)+"px"});
  92. //
  93. // var pre = this.formTableContainer.getPrevious();
  94. // if(pre){
  95. // pre.destroy();
  96. // }
  97. // }
  98. this.newProjectDesContainer.setStyles({"border":"1px solid #A6A6A6"});
  99. }.bind(this)
  100. });
  101. this.newProjectGroupText = new Element("div.newProjectGroupText",{styles:this.css.newProjectGroupText,text:this.lp.group}).inject(this.formTableArea);
  102. this.newProjectGroupContainer = new Element("div.newProjectGroupContainer",{styles:this.css.newProjectGroupContainer}).inject(this.formTableArea);
  103. this.newProjectGroupValue = new Element("div.newProjectGroupValue",{styles:this.css.newProjectGroupValue,text:""}).inject(this.newProjectGroupContainer);
  104. this.newProjectGroupArrow = new Element("div.newProjectGroupArrow",{styles:this.css.newProjectGroupArrow}).inject(this.newProjectGroupContainer);
  105. this.newProjectGroupContainer.addEvents({
  106. click:function(){
  107. var node = this.newProjectGroupContainer;
  108. var data = {groups:this.selectGroup};
  109. //alert(JSON.stringify(this.selectGroup))
  110. MWF.xDesktop.requireApp("TeamWork", "GroupSelect", function(){
  111. var gs = new MWF.xApplication.TeamWork.GroupSelect(this.container, node, this.app, data, {
  112. axis : "y",
  113. nodeStyles : {
  114. "z-index" : "102"
  115. },
  116. onClose:function(d){
  117. this.newProjectGroupContainer.setStyles({"border":"1px solid #A6A6A6"});
  118. if(!d) return;
  119. this.refreshGroup(function(){
  120. var res = [];
  121. d.each(function(dd){
  122. this.groupSearch(dd,function(json){
  123. if(json) res.push(json);
  124. }.bind(this));
  125. }.bind(this));
  126. this.selectGroup = res;
  127. var resVal = [];
  128. res.each(function(dd){
  129. resVal.push(dd.name);
  130. }.bind(this));
  131. this.newProjectGroupValue.set("text",resVal.join(","));
  132. }.bind(this));
  133. }.bind(this)
  134. });
  135. gs.load()
  136. }.bind(this));
  137. this.newProjectGroupContainer.setStyles({"border":"1px solid #4A90E2"});
  138. }.bind(this)
  139. });
  140. this.newProjectTemplateText = new Element("div.newProjectTemplateText",{styles:this.css.newProjectTemplateText,text:this.lp.template}).inject(this.formTableArea);
  141. this.newProjectTemplateContainer = new Element("div.newProjectTemplateContainer",{styles:this.css.newProjectTemplateContainer}).inject(this.formTableArea);
  142. this.newProjectTemplateValue = new Element("div.newProjectTemplateValue",{styles:this.css.newProjectTemplateValue,text:""}).inject(this.newProjectTemplateContainer);
  143. this.newProjectTemplateArrow = new Element("div.newProjectTemplateArrow",{styles:this.css.newProjectTemplateArrow}).inject(this.newProjectTemplateContainer);
  144. this.newProjectTemplateContainer.addEvents({
  145. click:function(){
  146. var tm = new MWF.xApplication.TeamWork.NewProject.TemplateSelect(this.container, this.newProjectTemplateContainer, this.app, {}, {
  147. css:this.css, lp:this.lp, axis : "y",
  148. position : { //node 固定的位置
  149. x : "auto",
  150. y : "middle"
  151. },
  152. nodeStyles : {
  153. "min-width":"200px",
  154. "width":"265px",
  155. "padding":"2px",
  156. "border-radius":"5px",
  157. "box-shadow":"0px 0px 4px 0px #999999",
  158. "z-index" : "201",
  159. "min-height":"250px"
  160. },
  161. onPostLoad:function(){
  162. tm.node.setStyles({"opacity":"0","top":(tm.node.getStyle("top").toInt()+4)+"px"});
  163. var fx = new Fx.Tween(tm.node,{duration:400});
  164. fx.start(["opacity"] ,"0", "1");
  165. },
  166. onClose:function(rd){
  167. this.newProjectTemplateContainer.setStyles({"border":"1px solid #cccccc"});
  168. if(!rd) return;
  169. this.newProjectTemplateValue.set("text",rd.title);
  170. this.templateId = rd.id;
  171. // if(rd.act == "remove"){
  172. // this.close(rd);
  173. // if(this.data.projectObj){ //reload project
  174. // this.data.projectObj.createTaskGroup()
  175. // }
  176. // }
  177. }.bind(this)
  178. },null,this);
  179. tm.load();
  180. this.newProjectTemplateContainer.setStyles({"border":"1px solid #4A90E2"});
  181. }.bind(this)
  182. });
  183. this.newProjectAdd = new Element("div.newProjectAdd",{styles:this.css.newProjectAdd,text:this.lp.add}).inject(this.formTableArea);
  184. this.newProjectAdd.addEvents({
  185. click:function(){
  186. var v = this.newProjectIn.get("value").trim();
  187. var des = this.newProjectDesIn.get("value");
  188. if(v=="") return;
  189. var groups = [];
  190. if(this.selectGroup){
  191. this.selectGroup.each(function(d){
  192. groups.push(d.id);
  193. });
  194. }
  195. var data = {
  196. "title":v,
  197. "description":des,
  198. "groups":groups,
  199. "templateId":this.templateId || ""
  200. };
  201. //this.actions.projectSave(data,function(json){
  202. this.rootActions.ProjectAction.save(data,function(json){
  203. this.close(json);
  204. }.bind(this));
  205. }.bind(this)
  206. });
  207. },
  208. groupSearch:function(id,callback){
  209. var res = null;
  210. this.allGroupList.each(function(d){
  211. if(d.id == id) res = d;
  212. }.bind(this));
  213. if(callback)callback(res);
  214. },
  215. refreshGroup:function(callback){
  216. //this.actions.groupList(function(json){
  217. this.rootActions.ProjectGroupAction.listGroups(function(json){
  218. this.allGroupList = json.data;
  219. if(callback)callback();
  220. }.bind(this))
  221. }
  222. });
  223. MWF.xApplication.TeamWork.NewProject.TemplateSelect = new Class({
  224. Extends: MWF.xApplication.TeamWork.Common.ToolTips,
  225. options : {
  226. // displayDelay : 300,
  227. hasArrow:false,
  228. event:"click"
  229. },
  230. _loadCustom : function( callback ){
  231. this.rootActions = this.app.rootActions;
  232. var _self = this;
  233. this.css = this.options.css;
  234. this.lp = this.options.lp;
  235. //this.data
  236. //this.contentNode
  237. //debugger;
  238. var topTemplateTitle = new Element("div.topTemplateTitle",{ styles:this.css.topTemplateTitle, text: this.lp.templateTitle }).inject(this.contentNode);
  239. this.tempateContainer = new Element("div.tempateContainer",{ styles:this.css.tempateContainer }).inject(this.contentNode);
  240. this.rootActions.ProjectTemplateAction.listNextWithFilter("(0)",100,{},function(json){
  241. //alert(json.data.length)
  242. json.data.each(function(data){
  243. this.templateItem(data)
  244. }.bind(this))
  245. }.bind(this));
  246. if(callback)callback();
  247. },
  248. templateItem:function(data){
  249. var _self = this;
  250. var templateItemContainer = new Element("div.templateItemContainer",{styles:this.css.templateItemContainer, id:data.id}).inject(this.tempateContainer);
  251. var templateItemIcon = new Element("div.templateItemIcon",{styles:this.css.templateItemIcon}).inject(templateItemContainer);
  252. var templateItemTitle = new Element("div.templateItemTitle",{styles:this.css.templateItemTitle,text:data.title}).inject(templateItemContainer);
  253. templateItemContainer.addEvents({
  254. mouseover:function(){
  255. this.setStyles({"background-color":"rgb(242,245,247)"});
  256. },
  257. mouseout:function(){
  258. this.setStyles({"background-color":"#ffffff"});
  259. },
  260. click:function(){
  261. var res = {};
  262. res.id = data.id;
  263. res.title = data.title;
  264. this.close(res)
  265. }.bind(this)
  266. });
  267. }
  268. });