瀏覽代碼

更新团队

jinfei 5 年之前
父節點
當前提交
bfe08d00e4

+ 9 - 3
o2web/source/x_component_TeamWork/Group.js

@@ -21,7 +21,7 @@ MWF.xApplication.TeamWork.Group = new Class({
         this.groupInContainer = new Element("div.groupInContainer",{styles:this.css.tooltip.group.groupInContainer}).inject(this.contentNode);
         this.groupIn = new Element("input.groupIn",{styles:this.css.tooltip.group.groupIn,type:"text",placeholder:this.lp.group.groupIn}).inject(this.groupInContainer);
         if(this.data.do == "edit"){
-            if(this.data.name) this.groupIn.set("value",this.data.name)
+            if(this.data.name) this.groupIn.set("value",this.data.name);
         }
         this.groupIn.addEvents({
             keyup:function(){
@@ -31,14 +31,20 @@ MWF.xApplication.TeamWork.Group = new Class({
                         "cursor":"",
                         "background-color":"#F0F0F0",
                         "color":"#666666"
-                    })
+                    });
                 }else{
                     this.groupAdd.setStyles({
                         "cursor":"pointer",
                         "background-color":"#4A90E2",
                         "color":"#FFFFFF"
-                    })
+                    });
                 }
+            }.bind(this),
+            focus:function(){
+                this.groupInContainer.setStyles({"border":"1px solid #4A90E2"});
+            }.bind(this),
+            blur:function(){
+                this.groupInContainer.setStyles({"border":"1px solid #A6A6A6"});
             }.bind(this)
         });
 

+ 9 - 3
o2web/source/x_component_TeamWork/GroupSelect.js

@@ -102,14 +102,20 @@ MWF.xApplication.TeamWork.GroupSelect = new Class({
                         "cursor":"",
                         "background-color":"#F0F0F0",
                         "color":"#666666"
-                    })
+                    });
                 }else{
                     this.groupAdd.setStyles({
                         "cursor":"pointer",
                         "background-color":"#4A90E2",
                         "color":"#FFFFFF"
-                    })
+                    });
                 }
+            }.bind(this),
+            focus:function(){
+                this.groupInContainer.setStyles({"border":"1px solid #4A90E2"});
+            }.bind(this),
+            blur:function(){
+                this.groupInContainer.setStyles({"border":"1px solid #A6A6A6"});
             }.bind(this)
         });
 
@@ -158,7 +164,7 @@ MWF.xApplication.TeamWork.GroupSelect = new Class({
         var _self = this;
         this.app.setLoading(this.commonGroupContainer);
         this.rootActions.ProjectGroupAction.listGroups(function(json){
-        //this.actions.groupList(function(json){
+            //this.actions.groupList(function(json){
             this.commonGroupContainer.empty();
             var data = json.data;
             this.allProjectGroup = json.data;

+ 17 - 9
o2web/source/x_component_TeamWork/NewProject.js

@@ -43,14 +43,20 @@ MWF.xApplication.TeamWork.NewProject = new Class({
                         "cursor":"",
                         "background-color":"#F0F0F0",
                         "color":"#666666"
-                    })
+                    });
                 }else{
                     this.newProjectAdd.setStyles({
                         "cursor":"pointer",
                         "background-color":"#4A90E2",
                         "color":"#FFFFFF"
-                    })
+                    });
                 }
+            }.bind(this),
+            focus:function(){
+                this.newProjectContainer.setStyles({"border":"1px solid #4A90E2"});
+            }.bind(this),
+            blur:function(){
+                this.newProjectContainer.setStyles({"border":"1px solid #A6A6A6"});
             }.bind(this)
         });
 
@@ -75,8 +81,7 @@ MWF.xApplication.TeamWork.NewProject = new Class({
                         pre.destroy();
                     }
                 }
-
-
+                this.newProjectDesContainer.setStyles({"border":"1px solid #4A90E2"});
             }.bind(this),
             blur:function(){
                 var v = this.newProjectDesIn.get("value");
@@ -96,7 +101,7 @@ MWF.xApplication.TeamWork.NewProject = new Class({
                         pre.destroy();
                     }
                 }
-
+                this.newProjectDesContainer.setStyles({"border":"1px solid #A6A6A6"});
             }.bind(this)
         });
 
@@ -116,26 +121,29 @@ MWF.xApplication.TeamWork.NewProject = new Class({
                             "z-index" : "102"
                         },
                         onClose:function(d){
+                            this.newProjectGroupContainer.setStyles({"border":"1px solid #A6A6A6"});
                             if(!d) return;
                             this.refreshGroup(function(){
                                 var res = [];
                                 d.each(function(dd){
                                     this.groupSearch(dd,function(json){
                                         if(json) res.push(json);
-                                    }.bind(this))
+                                    }.bind(this));
                                 }.bind(this));
                                 this.selectGroup = res;
                                 var resVal = [];
                                 res.each(function(dd){
-                                    resVal.push(dd.name)
+                                    resVal.push(dd.name);
                                 }.bind(this));
 
-                                this.newProjectGroupValue.set("text",resVal.join(","))
+                                this.newProjectGroupValue.set("text",resVal.join(","));
                             }.bind(this));
                         }.bind(this)
                     });
                     gs.load()
                 }.bind(this));
+                this.newProjectGroupContainer.setStyles({"border":"1px solid #4A90E2"});
+
             }.bind(this)
         });
 
@@ -160,7 +168,7 @@ MWF.xApplication.TeamWork.NewProject = new Class({
                 };
 
                 //this.actions.projectSave(data,function(json){
-                 this.rootActions.ProjectAction.save(data,function(json){
+                this.rootActions.ProjectAction.save(data,function(json){
                     this.close(json);
                 }.bind(this));
 

+ 345 - 211
o2web/source/x_component_TeamWork/Project.js

@@ -102,6 +102,20 @@ MWF.xApplication.TeamWork.Project = new Class({
                 this.createStatLayout();
             }.bind(this)
         });
+
+
+        //********************************
+
+
+
+
+
+
+        //************************************
+
+
+
+
         this.topBarSettingContainer = new Element("div.topBarSettingContainer",{styles:this.css.topBarSettingContainer}).inject(this.topBarLayout);
         this.topBarSettingMenuContainer = new Element("div.topBarSettingMenuContainer",{styles:this.css.topBarSettingMenuContainer}).inject(this.topBarSettingContainer);
         this.topBarSettingMenuContainer.addEvents({
@@ -182,16 +196,21 @@ MWF.xApplication.TeamWork.Project = new Class({
         this.naviTopSearchContainer = new Element("div.naviTopSearchContainer",{styles:this.css.naviTopSearchContainer}).inject(this.naviTop);
         this.naviTopSearchIn = new Element("input.naviTopSearchIn",{styles:this.css.naviTopSearchIn,placeholder:this.lp.searchTask}).inject(this.naviTopSearchContainer);
         this.naviTopSearchIn.addEvents({
-           keypress:function(e){
-               this.searchLoading = true;
-               var keycode = (e.event.keyCode ? e.event.keyCode : e.event.which);
-               if (keycode == 13 || keycode == 10) {
-                   var key = this.naviTopSearchIn.get("value").trim();
-                   if(key=="") return;
-                   if(this.searchLoading) this.openSearch(key)
-               }
-
-           }.bind(this)
+            keypress:function(e){
+                this.searchLoading = true;
+                var keycode = (e.event.keyCode ? e.event.keyCode : e.event.which);
+                if (keycode == 13 || keycode == 10) {
+                    var key = this.naviTopSearchIn.get("value").trim();
+                    if(key=="") return;
+                    if(this.searchLoading) this.openSearch(key)
+                }
+            }.bind(this),
+            focus:function(){
+                this.naviTopSearchContainer.setStyles({"border":"1px solid #4A90E2"})
+            }.bind(this),
+            blur:function(){
+                this.naviTopSearchContainer.setStyles({"border":"1px solid #DEDEDE"})
+            }.bind(this)
         });
 
         this.naviTopTaskContainer = new Element("div.naviTopTaskContainer",{styles:this.css.naviTopTaskContainer}).inject(this.naviTop);
@@ -284,6 +303,8 @@ MWF.xApplication.TeamWork.Project = new Class({
         this.naviView = new Element("div.naviView",{styles:this.css.naviView}).inject(this.naviLayout);
         this.naviViewTitleContainer = new Element("div.naviViewTitleContainer",{styles:this.css.naviViewTitleContainer}).inject(this.naviView);
         this.naviViewTitle = new Element("div.naviViewTitle",{styles:this.css.naviViewTitle,text:this.lp.viewTitle}).inject(this.naviViewTitleContainer);
+
+        /*  新增按钮
         this.naviViewAdd = new Element("div.naviViewAdd",{styles:this.css.naviViewAdd}).inject(this.naviViewTitleContainer);
         this.naviViewAdd.addEvents({
             click:function(){
@@ -301,6 +322,8 @@ MWF.xApplication.TeamWork.Project = new Class({
                 });
             }.bind(this)
         });
+        */
+
         this.createNaviViewItem();
     },
     createNaviViewItem:function(){
@@ -327,13 +350,13 @@ MWF.xApplication.TeamWork.Project = new Class({
                 this.naviItemMyContainer = new Element("div.naviItemContainer",{styles:this.css.naviItemContainer}).inject(this.naviViewContainer);
                 this.naviItemMyIcon = new Element("div.naviItemMyIcon",{styles:this.css.naviItemMyIcon}).inject(this.naviItemMyContainer);
                 this.naviItemMyText = new Element("div.naviItemText",{styles:this.css.naviItemText,text:this.lp.viewItemMy}).inject(this.naviItemMyContainer);
-                this.naviItemMyMore = new Element("div.naviItemMore",{styles:this.css.naviItemMore}).inject(this.naviItemMyContainer);
-                this.naviItemMyMore.addEvent(
-                    "click",function(e){
-                        this.openNaviViewMore(this.naviItemMyMore);
-                        e.stopPropagation();
-                    }.bind(this)
-                );
+                // this.naviItemMyMore = new Element("div.naviItemMore",{styles:this.css.naviItemMore}).inject(this.naviItemMyContainer);
+                // this.naviItemMyMore.addEvent(
+                //     "click",function(e){
+                //         this.openNaviViewMore(this.naviItemMyMore);
+                //         e.stopPropagation();
+                //     }.bind(this)
+                // );
                 this.naviItemMyContainer.addEvents({
                     click:function(){
                         this.curNaviItem = json.name;
@@ -347,13 +370,13 @@ MWF.xApplication.TeamWork.Project = new Class({
                 this.naviItemFlowContainer = new Element("div.naviItemContainer",{styles:this.css.naviItemContainer}).inject(this.naviViewContainer);
                 this.naviItemFlowIcon = new Element("div.naviItemFlowIcon",{styles:this.css.naviItemFlowIcon}).inject(this.naviItemFlowContainer);
                 this.naviItemFlowText = new Element("div.naviItemText",{styles:this.css.naviItemText,text:this.lp.viewItemFlow}).inject(this.naviItemFlowContainer);
-                this.naviItemFlowMore = new Element("div.naviItemMore",{styles:this.css.naviItemMore}).inject(this.naviItemFlowContainer);
-                this.naviItemFlowMore.addEvent(
-                    "click",function(e){
-                        this.openNaviViewMore(this.naviItemFlowMore);
-                        e.stopPropagation();
-                    }.bind(this)
-                );
+                //this.naviItemFlowMore = new Element("div.naviItemMore",{styles:this.css.naviItemMore}).inject(this.naviItemFlowContainer);
+                // this.naviItemFlowMore.addEvent(
+                //     "click",function(e){
+                //         this.openNaviViewMore(this.naviItemFlowMore);
+                //         e.stopPropagation();
+                //     }.bind(this)
+                // );
                 this.naviItemFlowContainer.addEvents({
                     click:function(){
                         alert("open")
@@ -366,13 +389,13 @@ MWF.xApplication.TeamWork.Project = new Class({
                 this.naviItemCompleteContainer = new Element("div.naviItemContainer",{styles:this.css.naviItemContainer}).inject(this.naviViewContainer);
                 this.naviItemCompleteIcon = new Element("div.naviItemCompleteIcon",{styles:this.css.naviItemCompleteIcon}).inject(this.naviItemCompleteContainer);
                 this.naviItemCompleteText = new Element("div.naviItemText",{styles:this.css.naviItemText,text:this.lp.viewItemComplete}).inject(this.naviItemCompleteContainer);
-                this.naviItemCompleteMore = new Element("div.naviItemMore",{styles:this.css.naviItemMore}).inject(this.naviItemCompleteContainer);
-                this.naviItemCompleteMore.addEvent(
-                    "click",function(e){
-                        this.openNaviViewMore(this.naviItemCompleteMore);
-                        e.stopPropagation();
-                    }.bind(this)
-                );
+                //this.naviItemCompleteMore = new Element("div.naviItemMore",{styles:this.css.naviItemMore}).inject(this.naviItemCompleteContainer);
+                // this.naviItemCompleteMore.addEvent(
+                //     "click",function(e){
+                //         this.openNaviViewMore(this.naviItemCompleteMore);
+                //         e.stopPropagation();
+                //     }.bind(this)
+                // );
                 this.naviItemCompleteContainer.addEvents({
                     click:function(){
                         alert("open")
@@ -385,13 +408,13 @@ MWF.xApplication.TeamWork.Project = new Class({
                 this.naviItemOverContainer = new Element("div.naviItemContainer",{styles:this.css.naviItemContainer}).inject(this.naviViewContainer);
                 this.naviItemOverIcon = new Element("div.naviItemOverIcon",{styles:this.css.naviItemOverIcon}).inject(this.naviItemOverContainer);
                 this.naviItemOverText = new Element("div.naviItemText",{styles:this.css.naviItemText,text:this.lp.viewItemOver}).inject(this.naviItemOverContainer);
-                this.naviItemOverMore = new Element("div.naviItemMore",{styles:this.css.naviItemMore}).inject(this.naviItemOverContainer);
-                this.naviItemOverMore.addEvent(
-                    "click",function(e){
-                        this.openNaviViewMore(this.naviItemOverMore);
-                        e.stopPropagation();
-                    }.bind(this)
-                );
+                // this.naviItemOverMore = new Element("div.naviItemMore",{styles:this.css.naviItemMore}).inject(this.naviItemOverContainer);
+                // this.naviItemOverMore.addEvent(
+                //     "click",function(e){
+                //         this.openNaviViewMore(this.naviItemOverMore);
+                //         e.stopPropagation();
+                //     }.bind(this)
+                // );
                 this.naviItemOverContainer.addEvents({
                     click:function(){
                         alert("open")
@@ -500,7 +523,7 @@ MWF.xApplication.TeamWork.Project = new Class({
         node.empty();
         var taskGroupItemTitleContainer = new Element("div.taskGroupItemTitleContainer",{styles:this.css.taskGroupItemTitleContainer}).inject(node);
         new Element("div.taskGroupItemTitleText",{styles:this.css.taskGroupItemTitleText,text:data.name}).inject(taskGroupItemTitleContainer);
-        new Element("div.taskGroupItemTitleCount",{styles:this.css.taskGroupItemTitleCount,text:"("+data.taskCount+")"}).inject(taskGroupItemTitleContainer);
+        var titleCount = new Element("div.taskGroupItemTitleCount",{styles:this.css.taskGroupItemTitleCount,text:"(-)"}).inject(taskGroupItemTitleContainer);
         if(data.control.sortable){
             var taskGroupItemTitleMore = new Element("div.taskGroupItemTitleMore",{styles:this.css.taskGroupItemTitleMore}).inject(taskGroupItemTitleContainer);
             taskGroupItemTitleMore.addEvents({
@@ -574,7 +597,8 @@ MWF.xApplication.TeamWork.Project = new Class({
         this.app.setLoading(taskGroupItemContainer);
 
         //this.actions.taskListByListId(this.data.id,data.id,function(json){
-         this.rootActions.TaskAction.listMyTaskWithTaskListId(this.data.id,data.id,function(json){
+        this.rootActions.TaskAction.listMyTaskWithTaskListId(this.data.id,data.id,function(json){
+            titleCount.set("text","("+json.count+")")
             taskGroupItemContainer.empty();
             var taskListData = json.data;
             //alert(JSON.stringify(taskListData));
@@ -589,11 +613,7 @@ MWF.xApplication.TeamWork.Project = new Class({
                 var time = 200;
                 taskItemContainer.addEvents({
                     click:function(e){
-                        //解决click和mousedown事件冲突
-                        if(upTime>0){
-                            this.openTask(d.id,function(){ taskItemContainer.destroy() }.bind(this));
-                            upTime = 0
-                        }
+                        this.openTask(d.id,function(){ taskItemContainer.destroy() }.bind(this));
                     }.bind(this),
                     mouseenter:function(){
                         int = window.setInterval(function(){
@@ -607,177 +627,228 @@ MWF.xApplication.TeamWork.Project = new Class({
                         window.clearInterval(int);
                         taskItemContainer.getElement(".taskItemHover").setStyles({"width":"5px"});
                     }.bind(this),
-                    mouseup:function(){
-                        upTime = new Date().getTime();
 
-                    },
-                    mousedown:function(e){
-                        var position = taskItemContainer.getPosition();
-                        var clone = taskItemContainer.clone(true,true);
-                        clone.removeClass("dragin");
-                        clone.setStyles({
-                            "top":position.y+"px",
-                            "left":position.x+"px",
-                            "z-index":"9999",
-                            "position":"absolute",
-                            "cursor":"move"
-                        });
-                        var _height = clone.getHeight().toInt() - 2;
-
-                        var myDrag = new Drag.Move(clone, {
-                            container: this.taskContentLayout,
-                            //handle: taskItemHover,
-                            droppables: $$('.dragin'),
-                            onStart:function(el){
-                                if(upTime>0){
-                                    myDrag.stop();
-                                }else{
-                                    el.inject($(document.body));
-                                    taskItemContainer.setStyles({"border":"1px dotted #000000","opacity":"0.3"});
-                                }
-                            },
-                            onLeave:function(el,dr){
-                                var pre = dr.getPrevious();
-                                if(pre && pre.get("class")=="taskItemInsertLine") {
+                });
+
+                var drag = new Drag(taskItemContainer, {
+                    "compensateScroll": true,
+
+                    container: this.taskContentLayout,
+                    "onStart": function(el, e){
+                        this.dragMove(el,e);
+                        drag.stop();
+                    }.bind(this)
+                });
+
+            }.bind(this));
+
+            //最后加一行占位
+            var emptyDrag = new Element("div.empty.dragin",{name:"item",styles:{
+                    "width":"100%", "height":"50px"
+                }}).inject(taskGroupItemContainer);
+
+        }.bind(this));
+
+    },
+
+    dragMove:function(el,e){
+        var _self = this;
+        var taskItemContainer = el;
+        var time = 200;
+        //this.cloneTaskItem = new Element("").inject()
+        var position = el.getPosition(this.taskContentLayout);
+        //var clone = this.cloneTaskItem = el.clone(true,true).inject($(document.body));
+        var clone = this.cloneTaskItem = el.clone(true,true).inject(this.taskContentLayout);
+        this.cloneTaskItem.removeClass("dragin");
+        this.cloneTaskItem.setStyles({
+            "top":position.y+"px",
+            "left":(position.x+this.taskContentLayout.getScroll().x)+"px",
+            "z-index":"9999",
+            "margin":"0px",
+            //"position":"position",
+            "cursor":"move"
+        });
+        el.setStyles({"border":"1px dotted #000000","opacity":"0.3"});
+        var _height = this.cloneTaskItem.getHeight().toInt() - 2;
+
+        this.ccc = 0;
+        var drag = new Drag.Move(this.cloneTaskItem, {
+            container: this.taskContentLayout,
+            //container: $$("#6a933366-5165-4153-bee2-30ec0c327d40"),
+            //"stopPropagation": true,
+            "compensateScroll": true,
+            "droppables": $$(".dragin"),
+            "onStart": function(){
+                // this.topBarTabItemStat.set("text",JSON.stringify(el.getPosition()));
+
+            }.bind(this),
+            "onDrag": function(el,e){
+                // var _width = el.getWidth().toInt();
+                //
+                // var  _l= el.getPosition().x;
+                // var _sl = this.taskContentLayout.getScrollLeft();
+                // var _w = this.container.getWidth().toInt() + _sl;
+                //
+                //
+                // //this.topBarTabItemStat.set("text",_width+p.x-_w_w);
+                //
+                // //this.taskContentLayout.scrollTo(this.taskContentLayout.getScrollLeft()+2,0);
+                //
+                // this.topBarTabItemStat.set("text",_l);
+                // var p1 = this.taskContentLayout.getPosition();
+                //
+                // this.ccc ++;
+                // //this.topBarTabItemStat.set("text",this.ccc);
+                //
+                // if(_l + _width == _w){ this.topBarTabItemStat.set("text","AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
+                //     //this.taskContentLayout.scrollTo(this.taskContentLayout.getScrollLeft()+100,0);
+                //     // scrInt =  window.setInterval(function(){
+                //     //     this.taskContentLayout.scrollTo(this.taskContentLayout.getScrollLeft()+500,0);
+                //     //
+                //     //     this.ccc ++;
+                //     //     this.topBarTabItemStat.set("text",this.ccc);
+                //     // }.bind(this),20)
+                // }
+
+
+            }.bind(this),
+            "onEnter": function(el,dr){
+                var pre = dr.getPrevious();
+                if(!pre || (pre && pre.get("class")!="taskItemInsertLine")){
+                    if(el.get("id")!=dr.get("id")){
+                        new Element("div.taskItemInsertLine",{styles:_self.css.taskItemInsertLine}).inject(dr,"before");
+                    }
+                }
+            }.bind(this),
+            "onLeave": function(el,dr){
+                var pre = dr.getPrevious();
+                if(pre && pre.get("class")=="taskItemInsertLine") {
+                    pre.destroy();
+                }
+            }.bind(this),
+            "onDrop": function(el, dr, e){
+
+                var taskId = el.get("id");
+                var taskInId = null;
+                var taskGroupInId = null;
+                var taskGroupFromId = null;
+                var taskGroupFromSortable = null;
+                var taskGroupInSortable = null;
+                el.setStyles({"cursor":""});
+                if(!dr){
+                    //没有移入,还原
+                    var fx = new Fx.Tween(el,{duration:time});
+                    fx.start(["top"] ,(el.getPosition(this.taskContentLayout).y)+"px", taskItemContainer.getPosition(this.taskContentLayout).y+"px");
+                    var fx2 = new Fx.Tween(el,{duration:time});
+                    fx2.start(["left"] ,(el.getPosition(this.taskContentLayout).x + this.taskContentLayout.getScrollLeft())+"px", (taskItemContainer.getPosition(this.taskContentLayout).x +  this.taskContentLayout.getScrollLeft())+"px");
+                    window.setTimeout(function(){
+                        taskItemContainer.setStyles({"border":"1px solid #e6e6e6","opacity":"1"});
+                        el.destroy()
+                    },time)
+                }else{
+                    if(el.get("id")==dr.get("id")){ //如果移动的是本身的拷贝,恢复
+                        taskItemContainer.setStyles({"border":"1px solid #e6e6e6","opacity":"1"});
+                        el.destroy();
+                    }else{
+                        taskInId = dr.get("id");
+                        taskGroupFromId = taskItemContainer.getParent().getParent().get("id");
+                        taskGroupInId = dr.getParent().getParent().get("id");
+                        taskGroupFromSortable = taskItemContainer.getParent().getParent().get("sortable");
+                        taskGroupInSortable = dr.getParent().getParent().get("sortable");
+                        var pre = dr.getPrevious();
+                        if(pre && pre.get("class")=="taskItemInsertLine") {  //this.topBarTabItemStat.set("text","change");
+                            //alert("taskid="+taskId+",taskInId="+taskInId+",taskgroupFromid="+taskGroupFromId+",taskGroupInId="+taskGroupInId);
+                            if(taskGroupInSortable == "false"){
+                                //未分类视图不允许移入,还原并删除el对象
+                                _self.app.notice("未分类列表不允许移入","error");
+                                taskItemContainer.setStyles({"border":"1px solid #e6e6e6","opacity":"1"});
+                                if(pre && pre.get("class")=="taskItemInsertLine"){
                                     pre.destroy();
+                                    el.destroy();
                                 }
-                            },
-                            onEnter:function(el,dr){
-                                var pre = dr.getPrevious();
-                                if(!pre || (pre && pre.get("class")!="taskItemInsertLine")){
-                                    if(el.get("id")!=dr.get("id")){
-                                        new Element("div.taskItemInsertLine",{styles:_self.css.taskItemInsertLine}).inject(dr,"before");
-                                    }
-                                }
-                            },
-                            onDrop:function(el, dr, e){
-                                var taskId = el.get("id");
-                                var taskInId = null;
-                                var taskGroupInId = null;
-                                var taskGroupFromId = null;
-                                var taskGroupFromSortable = null;
-                                var taskGroupInSortable = null;
-                                el.setStyles({"cursor":""});
-                                if(!dr){
-                                    //没有移入,还原
+                                return ;
+                            }
+                            var data = {
+                                taskId:taskId,
+                                behindTaskId:taskInId
+                            };
+                            _self.rootActions.TaskListAction.addTask2ListWithBehindTask(taskGroupInId,data,function(json){
+                                if(json.type == "success"){ //返回成功后再换位置
+
+                                    //fx fx2 动画clone到移入位置
                                     var fx = new Fx.Tween(el,{duration:time});
-                                    fx.start(["top"] ,el.getPosition().y+"px", taskItemContainer.getPosition().y+"px");
+                                    fx.start(["top"] ,el.getPosition(_self.taskContentLayout).y+"px", pre.getPosition(_self.taskContentLayout).y+"px");
                                     var fx2 = new Fx.Tween(el,{duration:time});
-                                    fx2.start(["left"] ,el.getPosition().x+"px", taskItemContainer.getPosition().x+"px");
+                                    fx2.start(["left"] ,(el.getPosition(_self.taskContentLayout).x + _self.taskContentLayout.getScrollLeft())+"px", (pre.getPosition(_self.taskContentLayout).x +  _self.taskContentLayout.getScrollLeft())+"px");
+                                    //利用pre撑大高度
+                                    pre.setStyles({"border":"0px","background-color":"#ffffff"});
+                                    //var fx3 = new Fx.Tween(pre,{duration:time});
+                                    //fx3.start(["height"] ,"0px", _height+"px");
+
+                                    //新建一个占用原来位置
+                                    var tmpdiv = taskItemContainer.clone();
+                                    tmpdiv.setStyles({"border":"0px","margin":"0px","height":(el.getHeight())+"px"});
+                                    tmpdiv.empty();
+                                    tmpdiv.inject(taskItemContainer,"before");
+
+                                    //设置原有位置none
+                                    taskItemContainer.setStyles({"display":"none"});
+
+                                    var __height = tmpdiv.getHeight().toInt() - 2;
+                                    //动画完成后插入真正的对象,恢复原位,并删除pre和clone
                                     window.setTimeout(function(){
-                                        taskItemContainer.setStyles({"border":"1px solid #e6e6e6","opacity":"1"});
-                                        el.destroy()
-                                    },time)
+                                        pre.destroy();
+                                        taskItemContainer.setStyles({"border":"1px solid #e6e6e6","display":"block","opacity":"1"});
+                                        taskItemContainer.inject(dr,"before");
+                                        //fx4把临时占用的位置删除
+                                        var fx4 = new Fx.Tween(tmpdiv,{duration:time});
+                                        fx4.start(["height"] ,__height+"px", "0px");
+                                        window.setTimeout(function(){
+                                            if(tmpdiv) tmpdiv.destroy()
+                                        },time);
+                                        //删除clone即el对象
+                                        el.destroy();
+                                    },time);
+
+                                    //刷新其他需要加载的位置,比如数量
+                                    var taskGroupFrom = taskItemContainer.getParent().getParent();
+                                    var taskGroupIn = dr.getParent().getParent();
+                                    //_self.actions.taskGroupGet(_self.currentProjectGroupData.id,taskGroupFromId,function(json){
+                                    _self.rootActions.TaskListAction.get(_self.currentProjectGroupData.id,taskGroupFromId,function(json){
+                                        taskGroupFrom.getElement(".taskGroupItemTitleCount").set("text","("+json.data.taskCount +")")
+                                    });
+                                    _self.rootActions.TaskListAction.get(_self.currentProjectGroupData.id,taskGroupInId,function(json){
+                                        taskGroupIn.getElement(".taskGroupItemTitleCount").set("text","("+json.data.taskCount +")")
+                                    })
                                 }else{
-                                    if(el.get("id")==dr.get("id")){ //如果移动的是本身的拷贝,恢复
-                                        taskItemContainer.setStyles({"border":"1px solid #e6e6e6","opacity":"1"});
+                                    //返回失败,还原并删除el对象
+                                    taskItemContainer.setStyles({"border":"1px solid #e6e6e6","opacity":"1"});
+                                    if(pre && pre.get("class")=="taskItemInsertLine"){
+                                        pre.destroy();
                                         el.destroy();
-                                    }else{
-                                        taskInId = dr.get("id");
-                                        taskGroupFromId = taskItemContainer.getParent().getParent().get("id");
-                                        taskGroupInId = dr.getParent().getParent().get("id");
-                                        taskGroupFromSortable = taskItemContainer.getParent().getParent().get("sortable");
-                                        taskGroupInSortable = dr.getParent().getParent().get("sortable");
-                                        var pre = dr.getPrevious();
-                                        if(pre && pre.get("class")=="taskItemInsertLine") {
-                                            //alert("taskid="+taskId+",taskInId="+taskInId+",taskgroupFromid="+taskGroupFromId+",taskGroupInId="+taskGroupInId);
-                                            if(taskGroupInSortable == "false"){
-                                                //未分类视图不允许移入,还原并删除el对象
-                                                _self.app.notice("未分类列表不允许移入","error");
-                                                taskItemContainer.setStyles({"border":"1px solid #e6e6e6","opacity":"1"});
-                                                if(pre && pre.get("class")=="taskItemInsertLine"){
-                                                    pre.destroy();
-                                                    el.destroy();
-                                                }
-                                                return ;
-                                            }
-                                            var data = {
-                                                taskId:taskId,
-                                                behindTaskId:taskInId
-                                            };
-                                            _self.rootActions.TaskListAction.addTask2ListWithBehindTask(taskGroupInId,data,function(json){
-                                                if(json.type == "success"){ //返回成功后再换位置
-
-                                                    //fx fx2 动画clone到移入位置
-                                                    var fx = new Fx.Tween(el,{duration:time});
-                                                    fx.start(["top"] ,el.getPosition().y+"px", pre.getPosition().y+"px");
-                                                    var fx2 = new Fx.Tween(el,{duration:time});
-                                                    fx2.start(["left"] ,el.getPosition().x+"px", pre.getPosition().x+"px");
-                                                    //利用pre撑大高度
-                                                    pre.setStyles({"border":"0px","background-color":"#ffffff","height":(el.getHeight().toInt())+"px"});
-                                                    //var fx3 = new Fx.Tween(pre,{duration:time});
-                                                    //fx3.start(["height"] ,"0px", _height+"px");
-
-                                                    //新建一个占用原来位置
-                                                    var tmpdiv = taskItemContainer.clone();
-                                                    tmpdiv.setStyles({"border":"0px"});
-                                                    tmpdiv.empty();
-                                                    tmpdiv.inject(taskItemContainer,"before");
-
-                                                    //设置原有位置none
-                                                    taskItemContainer.setStyles({"display":"none"});
-
-                                                    //动画完成后插入真正的对象,恢复原位,并删除pre和clone
-                                                    window.setTimeout(function(){
-                                                        pre.destroy();
-                                                        taskItemContainer.setStyles({"border":"1px solid #e6e6e6","height":_height+"px","display":"block","opacity":"1"});
-                                                        taskItemContainer.inject(dr,"before");
-                                                        //fx4把临时占用的位置删除
-                                                        var fx4 = new Fx.Tween(tmpdiv,{duration:time});
-                                                        fx4.start(["height"] ,_height+"px", "0px");
-                                                        window.setTimeout(function(){
-                                                            if(tmpdiv) tmpdiv.destroy()
-                                                        },time);
-                                                        //删除clone即el对象
-                                                        el.destroy();
-                                                    },time);
-
-                                                    //刷新其他需要加载的位置,比如数量
-                                                    var taskGroupFrom = taskItemContainer.getParent().getParent();
-                                                    var taskGroupIn = dr.getParent().getParent();
-                                                    //_self.actions.taskGroupGet(_self.currentProjectGroupData.id,taskGroupFromId,function(json){
-                                                    _self.rootActions.TaskListAction.get(_self.currentProjectGroupData.id,taskGroupFromId,function(json){
-                                                        taskGroupFrom.getElement(".taskGroupItemTitleCount").set("text","("+json.data.taskCount +")")
-                                                    });
-                                                    _self.actions.taskGroupGet(_self.currentProjectGroupData.id,taskGroupInId,function(json){
-                                                        taskGroupIn.getElement(".taskGroupItemTitleCount").set("text","("+json.data.taskCount +")")
-                                                    })
-                                                }else{
-                                                    //返回失败,还原并删除el对象
-                                                    taskItemContainer.setStyles({"border":"1px solid #e6e6e6","opacity":"1"});
-                                                    if(pre && pre.get("class")=="taskItemInsertLine"){
-                                                        pre.destroy();
-                                                        el.destroy();
-                                                    }
-                                                }
-                                            },function(xhr,text,error){
-                                                _self.app.showErrorMessage(xhr,text,error);
-                                                taskItemContainer.setStyles({"border":"1px solid #e6e6e6","opacity":"1"});
-                                                if(pre && pre.get("class")=="taskItemInsertLine"){
-                                                    pre.destroy();
-                                                    el.destroy();
-                                                }
-                                            });
-                                        }
                                     }
                                 }
-                            }
-                        });
-                        //传递鼠标事件e
-                        myDrag.start(e)
-                    }.bind(this)
-                });
-            }.bind(this));
+                            },function(xhr,text,error){
+                                _self.app.showErrorMessage(xhr,text,error);
+                                taskItemContainer.setStyles({"border":"1px solid #e6e6e6","opacity":"1"});
+                                if(pre && pre.get("class")=="taskItemInsertLine"){
+                                    pre.destroy();
+                                    el.destroy();
+                                }
+                            });
+                        }
+                    }
+                }
+            }.bind(this),
+            // "onCancel": function(el, e){ this._drag_cancel(dragging); }.bind(this),
+            //"onComplete": function(el, e){ if(scrInt) window.clearInterval(scrInt);}.bind(this),
+        });
+        drag.start(e);
+    },
+
 
-            //最后加一行占位
-            var emptyDrag = new Element("div.empty.dragin",{name:"item",styles:{
-                "width":"100%",
-                    "height":"50px"
-                }}).inject(taskGroupItemContainer);
 
 
-        }.bind(this));
-    },
     loadTaskNode:function(taskItemContainer,d){
         taskItemContainer.empty();
 
@@ -813,7 +884,19 @@ MWF.xApplication.TeamWork.Project = new Class({
         }.bind(this),null,false);
 
         taskItemHover.setStyles({"height":taskItemContainer.getHeight()});
+
+
+        // var drag = new Drag(taskItemContainer, {
+        //     "stopPropagation": true,
+        //     "compensateScroll": true,
+        //     "onStart": function(el, e){
+        //         this.doDragMove(e,taskItemContainer);
+        //         drag.stop();
+        //     }.bind(this)
+        // });
+
     },
+
     openTask:function(id,callback){
         var data = {
             taskId:id
@@ -844,6 +927,7 @@ MWF.xApplication.TeamWork.Project = new Class({
 
         if(this.viewContainer) delete this.viewContainer;
         if(this.viewListContainer) delete this.viewListContainer;
+        if(this.viewSearchInput) delete this.viewSearchInput;
         this.taskContentLayout.empty();
         var viewContainer = this.viewContainer = new Element("div.viewContainer",{styles:this.css.viewContainer}).inject(this.taskContentLayout);
         viewContainer.addEvents({
@@ -852,13 +936,53 @@ MWF.xApplication.TeamWork.Project = new Class({
                 var sHeight = this.getScrollHeight();
                 var cHeight = viewContainer.getHeight();
 
-                if(sHeight - sTop < cHeight+10){ //偏移量
+                if(sHeight - sTop < cHeight+10 ){ //偏移量
                     if(_self.viewLoading){
                         _self.loadView(_self.curViewTaskId)
                     }
                 }
             }
         });
+        var viewSearchContainer = new Element("div.viewSearchContainer",{styles:this.css.viewSearchContainer}).inject(viewContainer);
+        var viewSearchContent = new Element("div.viewSearchContent",{styles:this.css.viewSearchContent}).inject(viewSearchContainer);
+        var viewSearchInput = this.viewSearchInput = new Element("input",{styles:this.css.viewSearchInput,"name":"viewSearchInput","placeholder":this.lp.searchTask}).inject(viewSearchContent);
+        viewSearchInput.addEvents({
+            keypress:function(e){
+                this.searchLoading = true;
+                var keycode = (e.event.keyCode ? e.event.keyCode : e.event.which);
+                if (keycode == 13 || keycode == 10) {
+                    var key = viewSearchInput.get("value").trim();
+                    if(key=="") return;
+                    //alert(key)
+                    viewSearchReset.show();
+                    if(this.searchLoading) this.loadView()
+                }
+            }.bind(this),
+            focus:function(){
+                viewSearchContent.setStyles({"border":"1px solid #4A90E2"})
+            }.bind(this),
+            blur:function(){
+                viewSearchContent.setStyles({"border":"1px solid #DEDEDE"})
+            }.bind(this)
+        })
+
+        var viewSearchSearch = new Element("div",{styles:this.css.viewSearchSearch}).inject(viewSearchContent);
+        viewSearchSearch.addEvents({
+            click:function(){
+                if(viewSearchInput.get("value").trim()=="") return;
+                viewSearchReset.show();
+                this.loadView();
+            }.bind(this)
+        });
+        var viewSearchReset = new Element("div",{styles:this.css.viewSearchReset}).inject(viewSearchContent);
+        viewSearchReset.addEvents({
+            click:function(){
+                viewSearchReset.hide();
+                viewSearchInput.set("value","");
+                this.loadView();
+            }.bind(this)
+        });
+
         var viewListContainer = this.viewListContainer = new Element("div.viewListContainer",{styles:this.css.viewListContainer}).inject(viewContainer);
         this.loadView()
     },
@@ -895,25 +1019,40 @@ MWF.xApplication.TeamWork.Project = new Class({
         }.bind(this))
     },
     loadView:function(id){
+        //this.curNaviItem  所有工作,我负责的任务。。。。。
+        //key 搜索关键字
+
+        if(!(id)) {
+            this.viewListContainer.empty();
+            this.curCount = 0;
+        }
+
         this.viewListContainer.getElements(".viewNext").destroy();
         var data = {
             project:this.data.id
         };
+        if(this.viewSearchInput.get("value").trim()!=""){
+            data.title = this.viewSearchInput.get("value").trim();
+        }
         var tmpLoading = new Element("div.tmpLoading",{styles:{"background-color":"#ffffff"}}).inject(this.viewListContainer);
         this.app.setLoading(tmpLoading);
         this.viewLoading = false;
-        this.actions.taskListNext(id||"(0)",10,data,function(json){
+        // var filter = {
+        //     //"title":this.viewSearchInput.get("value")||""
+        // }
+        this.rootActions.TaskAction.listNextWithFilter(id||"(0)",10,data,function(json){
             this.viewListContainer.getElements(".tmpLoading").destroy();
             json.data.each(function(data){
                 this.loadViewItem(data);
                 this.curViewTaskId = data.id;
+                this.curCount = this.curCount + 1;
             }.bind(this));
             this.viewLoading = true;
 
             var sHeight = this.viewListContainer.getHeight();
             var cHeight = this.viewContainer.getHeight();
 
-            if(sHeight<cHeight){
+            if(sHeight<cHeight && this.curCount < json.count){
                 var viewNext = new Element("div.viewNext",{styles:this.css.viewNext,text:"下一页"}).inject(this.viewListContainer);
                 viewNext.addEvents({
                     click:function(){
@@ -922,11 +1061,6 @@ MWF.xApplication.TeamWork.Project = new Class({
                 })
             }
 
-            // if(sHeight - sTop < cHeight+10){ //偏移量
-            //     if(_self.viewLoading){
-            //         _self.loadView(_self.curViewTaskId)
-            //     }
-            // }
         }.bind(this))
     },
     loadViewItem:function(data){

+ 7 - 7
o2web/source/x_component_TeamWork/ProjectList.js

@@ -62,7 +62,7 @@ MWF.xApplication.TeamWork.ProjectList = new Class({
                 var naviTitle = new Element("div.naviTitle",{styles:this.css.naviTitle,text:this.lp.navi.title}).inject(this.naviContent);
                 naviTitle.addEvents({
                     click:function(){
-                        alert(1)
+
                     }.bind(this)
                 });
 
@@ -392,7 +392,7 @@ MWF.xApplication.TeamWork.ProjectList = new Class({
                         //this.reloadLayoutList();
                         if(json.data && json.data.id){
                             //this.actions.projectGet(json.data.id,function(jsonr){
-                              this.actions.get(json.data.id,function(jsonr){
+                            this.actions.get(json.data.id,function(jsonr){
                                 if(jsonr.data){
                                     this.openProject(jsonr.data)
                                 }
@@ -600,7 +600,7 @@ MWF.xApplication.TeamWork.ProjectList = new Class({
                 onClose:function(d){
                     //if(d && d.title){
                     //    data1.push({"title":d.title});
-                        if(d)this.reloadProjectGroup();
+                    if(d)this.reloadProjectGroup();
 
                     //}
                 }.bind(this)
@@ -921,8 +921,8 @@ MWF.xApplication.TeamWork.ProjectList = new Class({
             }.bind(this)
         });
 
-         var projectBlockItemName = new Element("div.projectBlockItemName",{styles:this.css.projectBlockItemName,text:d.title}).inject(projectBlockItemContainer);
-         var projectBlockItemDes = new Element("div.projectBlockItemDes",{styles:this.css.projectBlockItemDes,text:d.description||""}).inject(projectBlockItemContainer);
+        var projectBlockItemName = new Element("div.projectBlockItemName",{styles:this.css.projectBlockItemName,text:d.title}).inject(projectBlockItemContainer);
+        var projectBlockItemDes = new Element("div.projectBlockItemDes",{styles:this.css.projectBlockItemDes,text:d.description||""}).inject(projectBlockItemContainer);
     },
     loadSingleListItem:function(container,d){
         if(container) container.empty();
@@ -1020,12 +1020,12 @@ MWF.xApplication.TeamWork.ProjectList = new Class({
     setFav:function(d,callback){
         if(d.star){
             this.actions.unStar(d.id,function(d){
-            //this.actions.projectUnStar(d.id,function(d){
+                //this.actions.projectUnStar(d.id,function(d){
                 if(callback)callback(d)
             }.bind(this))
         }else if(!d.star){
             this.actions.star(d.id,function(d){
-            //this.actions.projectStar(d.id,function(d){
+                //this.actions.projectStar(d.id,function(d){
                 if(callback)callback(d)
             }.bind(this))
         }

+ 20 - 2
o2web/source/x_component_TeamWork/ProjectSetting.js

@@ -222,7 +222,7 @@ MWF.xApplication.TeamWork.ProjectSetting = new Class({
                 this.setStyles({"background-color":"#f5f5f5"});
                 customExitItemRemove.show();
                 customExitItemEdit.show();
-                },
+            },
             mouseout:function(){
                 this.setStyles({"background-color":""});
                 customExitItemRemove.hide();
@@ -322,6 +322,14 @@ MWF.xApplication.TeamWork.ProjectSetting = new Class({
         this.projectSettingTitleText = new Element("div.projectSettingTitleText",{styles:this.css.projectSettingTitleText,text:this.lp.projectTitle}).inject(this.projectSettingTitleContainer);
         this.projectSettingTitleDiv = new Element("div.projectSettingTitleDiv",{styles:this.css.projectSettingTitleDiv}).inject(this.projectSettingTitleContainer);
         this.projectSettingTitleIn = new Element("input.projectSettingTitleIn",{styles:this.css.projectSettingTitleIn,value:this.projectData.title || ""}).inject(this.projectSettingTitleDiv);
+        this.projectSettingTitleIn.addEvents({
+            focus:function(){
+                this.projectSettingTitleIn.setStyles({"border":"1px solid #4A90E2"});
+            }.bind(this),
+            blur:function(){
+                this.projectSettingTitleIn.setStyles({"border":"1px solid #A6A6A6"});
+            }.bind(this)
+        });
 
         // this.projectSettingContainer = new Element("div.projectSettingContainer",{styles:this.css.projectSettingContainer}).inject(this.formTableArea);
         this.projectSettingGroupContainer = new Element("div.projectSettingGroupContainer",{styles:this.css.projectSettingGroupContainer}).inject(this.projectSettingContainer);
@@ -338,6 +346,7 @@ MWF.xApplication.TeamWork.ProjectSetting = new Class({
                             "z-index" : "102"
                         },
                         onClose:function(d){
+                            this.projectSettingGroupDiv.setStyles({"border":"1px solid #A6A6A6"});
                             if(d){
                                 this.rootActions.ProjectGroupAction.listWithIds({ids:d},function(json){
                                     this.groups = json.data;
@@ -354,8 +363,9 @@ MWF.xApplication.TeamWork.ProjectSetting = new Class({
                             //this.newProjectGroupValue.set("text",d)
                         }.bind(this)
                     });
-                    gs.load()
+                    gs.load();
                 }.bind(this));
+                this.projectSettingGroupDiv.setStyles({"border":"1px solid #4A90E2"});
             }.bind(this)
         });
         this.projectSettingGroupValue = new Element("div.projectSettingGroupValue",{styles:this.css.projectSettingGroupValue}).inject(this.projectSettingGroupDiv);
@@ -374,6 +384,14 @@ MWF.xApplication.TeamWork.ProjectSetting = new Class({
 
         this.projectSettingDesContainer = new Element("div.projectSettingDesContainer",{styles:this.css.projectSettingDesContainer}).inject(this.projectSettingContainer);
         this.projectSettingDesIn = new Element("textarea.projectSettingDesIn",{styles:this.css.projectSettingDesIn,value:this.projectData.description||""}).inject(this.projectSettingDesContainer);
+        this.projectSettingDesIn.addEvents({
+            focus:function(){
+                this.projectSettingDesIn.setStyles({"border":"1px solid #4A90E2"});
+            }.bind(this),
+            blur:function(){
+                this.projectSettingDesIn.setStyles({"border":"1px solid #A6A6A6"});
+            }.bind(this)
+        });
 
         this.projectSettingContainer = new Element("div.projectSettingContainer",{styles:this.css.projectSettingContainer}).inject(this.projectSettingLayout);
         this.projectSettingConfirm = new Element("div.projectSettingConfirm",{styles:this.css.projectSettingConfirm,text:this.lp.confirm}).inject(this.projectSettingContainer);

+ 21 - 21
o2web/source/x_component_TeamWork/Stat.js

@@ -31,27 +31,27 @@ MWF.xApplication.TeamWork.Stat = new Class({
         var url = this.path+this.options.style+"/view.html";
         //o2.Actions.load("x_processplatform_assemble_surface").TaskAction.listMyPaging(1,20, function(json){
 
-            this.container.loadHtml(url, {"bind": {"lp": this.lp, "data": {}}, "module": this}, function(){
-
-            }.bind(this));
-
-            // this.content.loadHtml(url, {"bind": {"lp": this.lp, "data": json}, "module": this}, function(){
-            // 	this.doSomething();
-            // }.bind(this));
-            //
-            // o2.load(["js1", "js2"], {}, function(){});	//js
-            //
-            // o2.loadCss	//css
-            // o2.loadHtml("", {"dom": this.content})
-            // o2.loadAll	//js,css,html
-            //
-            // o2.loadAll({
-            // 	"css": [],
-            // 	"js":[],
-            // 	"html": []
-            // },
-            // 	)
-            //
+        this.container.loadHtml(url, {"bind": {"lp": this.lp, "data": {}}, "module": this}, function(){
+
+        }.bind(this));
+
+        // this.content.loadHtml(url, {"bind": {"lp": this.lp, "data": json}, "module": this}, function(){
+        // 	this.doSomething();
+        // }.bind(this));
+        //
+        // o2.load(["js1", "js2"], {}, function(){});	//js
+        //
+        // o2.loadCss	//css
+        // o2.loadHtml("", {"dom": this.content})
+        // o2.loadAll	//js,css,html
+        //
+        // o2.loadAll({
+        // 	"css": [],
+        // 	"js":[],
+        // 	"html": []
+        // },
+        // 	)
+        //
 
 
 

+ 107 - 31
o2web/source/x_component_TeamWork/Task.js

@@ -1,10 +1,11 @@
+// this.taskData 任务对象
 MWF.xApplication.TeamWork = MWF.xApplication.TeamWork || {};
 MWF.xApplication.TeamWork.Task = new Class({
     Extends: MPopupForm,
     Implements: [Options, Events],
     options: {
         "style": "default",
-        "width": 1000,
+        "width": 1200,
         "height": "90%",
         "top": null,
         "left": null,
@@ -37,10 +38,25 @@ MWF.xApplication.TeamWork.Task = new Class({
     },
     initialize: function (explorer, data, options, para) {
         this.setOptions(options);
-        this.explorer = explorer;
+        if(this.options.type && this.options.type=="window"){
+            // this.options.width = "100%";
+            // this.options.height = "100%";
+            this.explorer = explorer;
+            this.app = explorer;
+            this.container = this.app.content;
+            this.openType = "window"
+        }else{
+            this.explorer = explorer;
+            this.app = this.explorer.app;
+            this.container = this.app.content;
+            this.openType = "dialog"
+        }
 
-        this.app = this.explorer.app;
-        this.container = this.app.content;
+
+        // this.explorer = explorer;
+        //
+        // this.app = this.explorer.app;
+        // this.container = this.app.content;
         this.rootActions = this.app.rootActions;
         this.actions = this.rootActions.TaskAction;
 
@@ -51,7 +67,9 @@ MWF.xApplication.TeamWork.Task = new Class({
 
         this.load();
         this.lp = this.app.lp.task;
+        // this.lp = MWF.xApplication.TeamWork.LP.task;
     },
+
     close: function (data) {
         //愤愤愤愤
         this.fireEvent("queryClose");
@@ -97,6 +115,10 @@ MWF.xApplication.TeamWork.Task = new Class({
     _createTableContent: function () {
         var _self = this;
         this.getTaskData(function(){
+            if(this.openType == "window"){
+                this.app.setTitle(this.taskData.name);
+            }
+
             this.formTableArea.empty();
             this.topLayout = new Element("div.topLayout",{styles:this.css.topLayout}).inject(this.formTableArea);
             //this.topImage = new Element("div.topImage",{styles:this.css.topImage}).inject(this.topLayout);
@@ -104,6 +126,11 @@ MWF.xApplication.TeamWork.Task = new Class({
             if(this.isNew){
                 this.topContent.set("text",this.lp.newTask)
             }
+            this.topContent.addEvents({
+                click:function(e){
+                    layout.openApplication(e,"TeamWork.Task",null,{"taskId":this.data.taskId})
+                }.bind(this)
+            })
             this.topIconContainer = new Element("div.topIconContainer",{styles:this.css.topIconContainer}).inject(this.topLayout);
 
             //更多
@@ -151,7 +178,10 @@ MWF.xApplication.TeamWork.Task = new Class({
             this.topIconClose = new Element("div.topIconClose",{styles:this.css.topIconClose,title:this.lp.close}).inject(this.topIconContainer);
             this.topIconClose.addEvents({
                 click:function(){
-                    this.close()
+                    this.close();
+                    if(this.openType=="window"){
+                        this.app.close();
+                    }
                 }.bind(this),
                 mouseover:function(){
                     this.setStyles({"background-image":"url(/x_component_TeamWork/$Task/default/icon/icon_off_click.png)"});
@@ -442,7 +472,7 @@ MWF.xApplication.TeamWork.Task = new Class({
         this.tmpdynamicLoading = new Element("div").inject(this.dynamicContent,"top");
         this.app.setLoading(this.tmpdynamicLoading);
         this.rootActions.DynamicAction.listNextWithTask(id,count,taskId,data||{},function(json){
-        //this.actions.taskDynamicListNext(id,count,taskId,data||{},function(json){
+            //this.actions.taskDynamicListNext(id,count,taskId,data||{},function(json){
             if(this.tmpdynamicLoading)this.tmpdynamicLoading.destroy();
             //this.getDynamicStatus = false;
             if(json.type == "success"){
@@ -511,7 +541,7 @@ MWF.xApplication.TeamWork.Task = new Class({
             //转换表情
             for(var item in this.app.lp.emoji){
                 var val = this.app.lp.emoji[item]; //alert(val)
-                chattext = chattext.split("["+val+"]").join('<img style="margin:0px 2px;" src="/x_component_TeamWork/$Emoji/default/icon/'+item+'.png" />');
+                chattext = chattext.split("["+val+"]").join('<img style="margin:0px 2px; width:30px;height:30px;" src="/x_component_TeamWork/$Emoji/default/icon/'+item+'.png" />');
             }
             new Element("div.dynamicItemUserChat",{styles:{"margin-top":"5px"},html:chattext}).inject(dynamicItemText);
         }else{
@@ -519,7 +549,7 @@ MWF.xApplication.TeamWork.Task = new Class({
         }
         var dynamicItemTime = new Element("div.dynamicItemTime",{styles:this.css.dynamicItemTime}).inject(dynamicItem);
 
-        dynamicItemTime.set("text",this.app.compareWithNow(data.createTime).text);
+        dynamicItemTime.set("text",this.compareWithNow(data.createTime).text);
 
         //最后加一层清除浮动
         new Element("div.dynamicItemTime",{styles:{"clear":"both"}}).inject(dynamicItem);
@@ -554,8 +584,8 @@ MWF.xApplication.TeamWork.Task = new Class({
                         },
                         nodeStyles : {
                             "min-width":"200px",
-                            "max-width":"210px",
-                            "height":"80px",
+                            "max-width":"350px",
+                            "height":"150px",
                             "padding":"2px",
                             "border-radius":"5px",
                             "box-shadow":"0px 0px 4px 0px #999999",
@@ -569,7 +599,8 @@ MWF.xApplication.TeamWork.Task = new Class({
                         onClose:function(rd){
                             if(!rd) return;
                             if(rd.value && rd.value !=""){
-                                this.chatTextarea.set("value",this.chatTextarea.get("value")+"["+rd.value+"]")
+                                this.chatTextarea.set("value",this.chatTextarea.get("value")+"["+rd.value+"]");
+                                this.chatTextarea.focus();
                             }
                         }.bind(this)
                     });
@@ -587,7 +618,7 @@ MWF.xApplication.TeamWork.Task = new Class({
                 };
 
                 //this.actions.chatCreate(data,function(json){
-                 this.rootActions.ChatAction.create(data,function(json){
+                this.rootActions.ChatAction.create(data,function(json){
                     if(json.data.id){
                         this.rootActions.ChatAction.get(json.data.id,function(json){
                             var person = json.data.sender;
@@ -602,7 +633,7 @@ MWF.xApplication.TeamWork.Task = new Class({
                             var chattext = content.split("\n").join("<br/>");
                             for(var item in this.app.lp.emoji){
                                 var val = this.app.lp.emoji[item];
-                                chattext = chattext.split("["+val+"]").join('<img style="margin:0 2px;" src="/x_component_TeamWork/$Emoji/default/icon/'+item+'.png" />');
+                                chattext = chattext.split("["+val+"]").join('<img style="margin:0 2px; width:30px;height:30px;" src="/x_component_TeamWork/$Emoji/default/icon/'+item+'.png" />');
                             }
 
                             new Element("div.dynamicItemUserChat",{styles:{"margin-top":"5px"},html:chattext}).inject(dynamicItemText);
@@ -1096,7 +1127,7 @@ MWF.xApplication.TeamWork.Task = new Class({
                     click:function(){
                         _self.rootActions.TaskTagAction.removeTagRele(_self.taskData.id,data.id,function(json){
                             if(json.data.dynamics){
-                                json.data.dynamics.each(function(dd){ 
+                                json.data.dynamics.each(function(dd){
                                     _self.loadDynamicItem(dd,"bottom")
                                 })
                             }
@@ -1181,7 +1212,7 @@ MWF.xApplication.TeamWork.Task = new Class({
                 "autoUpdateElement": true,
                 "enterMode": 1,
                 "height": 100,
-                "width": 480,
+                "width": 580,
                 "readOnly": false,
                 "startupFocus" : true,
                 toolbar : [
@@ -1246,7 +1277,7 @@ MWF.xApplication.TeamWork.Task = new Class({
 
         }.bind(this));
     },
-    loadAttachment: function( area ){ alert("loadtaskatt")
+    loadAttachment: function( area ){
         MWF.xDesktop.requireApp("TeamWork", "TaskAttachment", function(){
             this.attachment = new MWF.xApplication.TeamWork.TaskAttachment( area, this.app, this.actions, this.app.lp, {
                 size:"max",
@@ -1551,20 +1582,20 @@ MWF.xApplication.TeamWork.Task = new Class({
                     var closeIcon = new Element("div.closeIcon",{styles:closeStyles}).inject(this);
                     closeIcon.addEvents({
                         click:function(e){
-                             var index = _self.taskData.participantList.indexOf(identity);
-                             if(index>-1){
-                                 _self.taskData.participantList.erase(identity)
-                             }
-
-                             _self.actions.updateParticipant(_self.taskData.id,{participantList:_self.taskData.participantList},function(json){
-                                 _self.createParticipateContainer();
-                                 if(json.data.dynamics){
-                                     json.data.dynamics.each(function(dd){
-                                         _self.loadDynamicItem(dd,"bottom")
-                                     })
-                                 }
-                                 _self.dynamicContent.scrollTo(0,_self.dynamicContent.getScrollSize().y);
-                             });
+                            var index = _self.taskData.participantList.indexOf(identity);
+                            if(index>-1){
+                                _self.taskData.participantList.erase(identity)
+                            }
+
+                            _self.actions.updateParticipant(_self.taskData.id,{participantList:_self.taskData.participantList},function(json){
+                                _self.createParticipateContainer();
+                                if(json.data.dynamics){
+                                    json.data.dynamics.each(function(dd){
+                                        _self.loadDynamicItem(dd,"bottom")
+                                    })
+                                }
+                                _self.dynamicContent.scrollTo(0,_self.dynamicContent.getScrollSize().y);
+                            });
                             e.stopPropagation();
                         }
                     });
@@ -1620,7 +1651,52 @@ MWF.xApplication.TeamWork.Task = new Class({
         };
 
         var selector = new MWF.O2Selector(this.app.content, options);
-    }
+    },
+    compareWithNow:function(dstr){
+        var result = {};
+
+        try{
+            var ct = Date.parse(dstr);
+            var intervalDay = 0;
+            var now = new Date();
+            var sep = now.getTime()-ct.getTime();
+            sep = sep/1000; //毫秒
+            //一分钟内,刚刚,一小时内,多少分钟前,2小时内,显示一小时前,2小时到今天00:00:00 显示 今天几点,本周内,显示本周几,几点几分,其他显示几月几日
+            var cttext = "";
+            if(sep<60){
+                cttext = "刚刚"
+            }else if(sep<3600){
+                cttext = Math.floor(sep/60)+"分钟前"
+            }else if(sep<7200){
+                cttext = "1小时前"
+            }else if(sep>7200 && ct.getFullYear() == now.getFullYear() && ct.getMonth()==now.getMonth() && ct.getDate() == now.getDate()){
+                cttext = "今天"+(ct.getHours()<10?("0"+ct.getHours()):ct.getHours())+":"+(ct.getMinutes()<10?"0"+ct.getMinutes():ct.getMinutes())
+            }else if(ct.getFullYear() == now.getFullYear() && ct.getMonth()==now.getMonth() && ct.getDate() == now.getDate()-1){
+                cttext = "昨天"+(ct.getHours()<10?("0"+ct.getHours()):ct.getHours())+":"+(ct.getMinutes()<10?"0"+ct.getMinutes():ct.getMinutes());
+            }else{
+                cttext = (ct.getMonth()+1) + "月"+ct.getDay()+"日"
+            }
+
+            var sepd = ct.getTime() - now.getTime();
+            sepd = sepd/1000;
+
+            if(sepd<0){
+                intervalDay = -1 //超时
+            }else if(sepd /(3600*24)<2){
+                intervalDay = 0 //一两天内
+            }else{
+                intervalDay = 1 //正常
+            }
+
+            result.intervalDay = intervalDay;
+            result.text = cttext;
+        }catch(e){
+            result.text = dstr;
+        }
+        //alert(dstr + "##############" + result.intervalDay)
+        return result;
+
+    },
 
 
 });

+ 1 - 1
o2web/source/x_component_TeamWork/TaskAttachmentList.js

@@ -271,7 +271,7 @@ MWF.xApplication.TeamWork.TaskAttachmentList = new Class({
         this.actions.attachmentDownloadUrl(attachment.id, this.data.id, callback);
     },
     getAttachment:function(id,callback){
-       this.actions.get(id,function(json){
+        this.actions.get(id,function(json){
             if(json.type == "success"){
                 if(callback)callback(json.data)
             }

+ 45 - 81
o2web/source/x_component_TeamWork/TaskMove.js

@@ -73,9 +73,7 @@ MWF.xApplication.TeamWork.TaskMove = new Class({
     },
     _createTableContent: function () {
 
-
-
-        this.formTableArea
+        // this.formTableArea
         this.topLayout = new Element("div.topLayout",{styles:this.css.topLayout}).inject(this.formTableArea);
         this.createTopLayout();
         this.contentLayout = new Element("div.contentLayout",{styles:this.css.contentLayout}).inject(this.formTableArea);
@@ -89,88 +87,50 @@ MWF.xApplication.TeamWork.TaskMove = new Class({
     },
     createContentLayout:function(){
         this.contentLayout.empty();
-        this.searchDiv = new Element("div.searchDiv",{styles:this.css.searchDiv}).inject(this.contentLayout);
-        this.searchInput = new Element("input.searchInput",{styles:this.css.searchInput,placeHolder:this.lp.searchPlace}).inject(this.searchDiv);
-        this.searchInput.addEvents({
-            keyup:function(e){
-                var keycode = (e.event.keyCode ? e.event.keyCode : e.event.which);
-                var key = this.searchInput.get("value").trim();
-                if(keycode == 13 && key !=""){
-                    this.total = 0;
-                    this.curCount = 0;
-                    this.searchReset.show();
-                    this.taskListLayout.empty();
-                    this.loadTaskList(null,key);
-                    this.createBottomLayout();
-                    delete this.selectedItem;
-                }
-            }.bind(this)
-        });
-        this.searchReset = new Element("div.searchReset",{styles:this.css.searchReset}).inject(this.searchDiv);
-        this.searchReset.addEvents({
-            mouseover:function(){ this.setStyles({"background-image":"url(/x_component_TeamWork/$TaskSub/default/icon/icon_off_click.png)"}) },
-            mouseout:function(){ this.setStyles({"background-image":"url(/x_component_TeamWork/$TaskSub/default/icon/icon_off.png)"}) },
-            click:function(){
-                this.total = 0;
-                this.curCount = 0;
-                this.searchInput.set("value","");
-                this.searchReset.hide();
-                this.taskListLayout.empty();
-                this.loadTaskList();
-                this.createBottomLayout();
-                delete this.selectedItem;
-            }.bind(this)
-        });
-        this.taskListLayout = new Element("div.taskListLayout",{styles:this.css.taskListLayout}).inject(this.contentLayout);
-        this.taskListLayout.addEvents({
+
+        this.taskGroupLayout = new Element("div.taskGroupLayout",{styles:this.css.taskGroupLayout}).inject(this.contentLayout);
+        this.taskGroupLayout.addEvents({
             scroll:function(){
-                var stop = this.taskListLayout.getScrollTop();
-                var cheight= this.taskListLayout.getSize().y;
-                var sheight = this.taskListLayout.getScrollHeight();
-                var borderWidth = this.taskListLayout.getBorder()["border-top-width"].toInt()+this.taskListLayout.getBorder()["border-bottom-width"].toInt();
+                var stop = this.taskGroupLayout.getScrollTop();
+                var cheight= this.taskGroupLayout.getSize().y;
+                var sheight = this.taskGroupLayout.getScrollHeight();
+                var borderWidth = this.taskGroupLayout.getBorder()["border-top-width"].toInt()+this.taskGroupLayout.getBorder()["border-bottom-width"].toInt();
                 if(sheight == stop + cheight-borderWidth && this.isLoaded && this.curCount < this.total){
-                    this.loadTaskList(this.listId);
+                    this.loadTaskGroup(this.listId);
                 }
             }.bind(this)
         });
-        this.loadTaskList()
+        this.loadTaskGroup()
     },
-    loadTaskList:function(id,key){
-        var tmploading = new Element("div.loading",{styles:{"width":"500px"}}).inject(this.taskListLayout);
+    loadTaskGroup:function(id,key){
+        var tmploading = new Element("div.loading",{styles:{"width":"500px"}}).inject(this.taskGroupLayout);
         this.app.setLoading(tmploading);
-        this.taskListLayout.scrollTo(0,this.taskListLayout.getScrollSize().y);
-        var id = this.listId = id||"(0)";
+        this.taskGroupLayout.scrollTo(0,this.taskGroupLayout.getScrollSize().y);
+        var id = this.groupId = id||"(0)";
         var count=10;
         var filter = {
             project:this.data.data.project
         };
         if(key && key!=""){
-            filter.title = key
+            filter.title = key;
         }
         this.total = this.total || 0;
         this.curCount = this.curCount || 0;
         this.isLoaded = false;
-        //alert("curcount="+this.curCount+"total="+this.total);alert(id)
-        //this.actions.taskListNext(id,count,filter,function(json){
-        this.actions.listNextWithFilter(id,count,filter,function(json){
-            this.total = json.count;
-            this.taskListData = json.data;
-            tmploading.destroy();
-            this.taskListData.each(function(d,i){
-                this.loadTaskItem(d);
-                id = d.id;
-                this.listId = d.id;
-                this.curCount = this.curCount + 1;
-                this.isLoaded = true;
-
-            }.bind(this));
-        }.bind(this))
 
+        //this.data.data.project
+        this.rootActions.TaskListAction.listWithTaskGroup("9513cfc6-78f8-4650-a4a2-ccdc081831c3",function(json){
+            tmploading.destroy();
+            json.data.each(function(d){
+                this.loadGroupItem(d);
+            }.bind(this))
+        }.bind(this));
     },
-    loadTaskItem:function(data){
+
+    loadGroupItem:function(data){
         var _self = this;
-        var taskItem = new Element("div.taskItem",{styles:this.css.taskItem,id:data.id}).inject(this.taskListLayout);
-        taskItem.addEvents({
+        var groupItem = new Element("div.groupItem",{styles:this.css.groupItem,id:data.id}).inject(this.taskGroupLayout);
+        groupItem.addEvents({
             mouseover:function(){
                 if(_self.selectedItem == this)return;
                 this.setStyles({"background-color":"#f2f5f7"})
@@ -182,10 +142,10 @@ MWF.xApplication.TeamWork.TaskMove = new Class({
             click:function(){
                 if(_self.selectedItem){
                     _self.selectedItem.setStyles({"background-color":""});
-                    _self.selectedItem.getElements(".taskName").setStyles({"color":"#666666"});
+                    _self.selectedItem.getElements(".groupName").setStyles({"color":"#666666"});
                 }
                 this.setStyles({"background-color":"#3da8f5"});
-                this.getElements(".taskName").setStyles({"color":"#ffffff"});
+                this.getElements(".groupName").setStyles({"color":"#ffffff"});
                 _self.okAction.setStyles({
                     "cursor":"pointer",
                     "background-color":"#4A90E2"
@@ -193,11 +153,11 @@ MWF.xApplication.TeamWork.TaskMove = new Class({
                 _self.selectedItem = this;
             }
         });
-        var taskName = new Element("div.taskName",{styles:this.css.taskName,text:data.name}).inject(taskItem);
-        var n = data.executor.split("@")[0];
-        n = n.substr(0,1);
-
-        var taskPerson = new Element("div.taskPerson",{styles:this.css.taskPerson,text:n}).inject(taskItem);
+        var groupName = new Element("div.groupName",{styles:this.css.groupName,text:data.name}).inject(groupItem);
+        // var n = data.executor.split("@")[0];
+        // n = n.substr(0,1);
+        //
+        // var taskPerson = new Element("div.taskPerson",{styles:this.css.taskPerson,text:n}).inject(taskItem);
     },
     createBottomLayout:function(){
         this.bottomLayout.empty();
@@ -205,14 +165,18 @@ MWF.xApplication.TeamWork.TaskMove = new Class({
         this.okAction.addEvents({
             click:function(){
                 if(this.selectedItem){
-                    var data = {
-                        parent : this.selectedItem.get("id"),
-                        id:this.data.data.id
-                    };
-                    this.actions.save(data,function(json){
-                        this.explorer._createTableContent();
-                        this.close();
-                    }.bind(this))
+                    if(this.selectedItem.get("id")=="6a933366-5165-4153-bee2-30ec0c327d40"){
+                        this.app.notice(this.lp.moveToSelf,"error");
+                        return;
+                    }
+                    // var data = {
+                    //     parent : this.selectedItem.get("id"),
+                    //     id:this.data.data.id
+                    // };
+                    // this.actions.save(data,function(json){
+                    //     this.explorer._createTableContent();
+                    //     this.close();
+                    // }.bind(this))
                 }
             }.bind(this)
         })

+ 13 - 2
o2web/source/x_component_TeamWork/TaskSub.js

@@ -80,6 +80,12 @@ MWF.xApplication.TeamWork.TaskSub = new Class({
                     this.createBottomLayout();
                     delete this.selectedItem;
                 }
+            }.bind(this),
+            focus:function(){
+                this.searchDiv.setStyles({"border":"1px solid #4A90E2"});
+            }.bind(this),
+            blur:function(){
+                this.searchDiv.setStyles({"border":"1px solid #A6A6A6"});
             }.bind(this)
         });
         this.searchReset = new Element("div.searchReset",{styles:this.css.searchReset}).inject(this.searchDiv);
@@ -191,10 +197,15 @@ MWF.xApplication.TeamWork.TaskSub = new Class({
                         return ;
                     }
 
-                    this.actions.save(data,function(json){
+                    this.actions.transformAsSubTask(this.data.data.id,this.selectedItem.get("id"),function(json){
                         this.explorer._createTableContent();
                         this.close();
-                    }.bind(this))
+                    }.bind(this));
+
+                    // this.actions.save(data,function(json){
+                    //     this.explorer._createTableContent();
+                    //     this.close();
+                    // }.bind(this))
                 }
             }.bind(this)
         })

+ 27 - 27
o2web/source/x_component_TeamWork/UploadImage.js

@@ -71,33 +71,33 @@ MWF.xApplication.TeamWork.UploadImage = new Class({
         //     }
         //     this.hotPicData = (json.data && json.data.length > 0) ? json.data[0] : {};
 
-            var html = "<table width='100%' bordr='0' cellpadding='5' cellspacing='0' styles='formTable'>" +
-                "<tr>" +
-                //"   <td styles='formTableTitle' lable='hotPicture'></td>" +
-                "   <td styles='formTableValue' item='hotPictureArea'></td>" +
-                "</tr>"+
-                "<tr>" +
-                //"   <td styles='formTableTitle'></td>" +
-                "   <td></td>" +
-                "</tr>"+
-                //"<tr>" +
-                //"   <td styles='formTableTitle'></td>" +
-                //"   <td styles='formTableValue' item='hotPictureActionArea'></td>" +
-                //"</tr>"
-                "</table>";
-            this.formTableArea.set("html", html);
-
-            MWF.xDesktop.requireApp("Template", "MForm", function () {
-                this.form = new MForm(this.formTableArea, this.data, {
-                    style: "default",
-                    isEdited: true,
-                    itemTemplate: {
-                        hotPicture: { text: this.lp.hotPicture }
-                    }
-                }, this.app, this.css);
-                this.form.load();
-                this.createIconNode();
-            }.bind(this), true);
+        var html = "<table width='100%' bordr='0' cellpadding='5' cellspacing='0' styles='formTable'>" +
+            "<tr>" +
+            //"   <td styles='formTableTitle' lable='hotPicture'></td>" +
+            "   <td styles='formTableValue' item='hotPictureArea'></td>" +
+            "</tr>"+
+            "<tr>" +
+            //"   <td styles='formTableTitle'></td>" +
+            "   <td></td>" +
+            "</tr>"+
+            //"<tr>" +
+            //"   <td styles='formTableTitle'></td>" +
+            //"   <td styles='formTableValue' item='hotPictureActionArea'></td>" +
+            //"</tr>"
+            "</table>";
+        this.formTableArea.set("html", html);
+
+        MWF.xDesktop.requireApp("Template", "MForm", function () {
+            this.form = new MForm(this.formTableArea, this.data, {
+                style: "default",
+                isEdited: true,
+                itemTemplate: {
+                    hotPicture: { text: this.lp.hotPicture }
+                }
+            }, this.app, this.css);
+            this.form.load();
+            this.createIconNode();
+        }.bind(this), true);
 
         // }.bind(this), null, false);
     },