fullcalendar 日程控件 后台实时交互实现 (后端代码)
发布于 11 年前 作者 sdfcbs91 4957 次浏览 最后一次编辑是 8 年前

由于都是ajax,所以 采用几个js文件关联 ajax接收文件(ajax.js): var FullCalendar = require("./…/moudels/fullCalendar.js"); module.exports = function(app){ app.post("/insertCalendar",filter.authorize ,function(req,res){ FullCalendar.insertCalendar(req,res,function(){ res.send({status:0}); }); }); app.post("/findCalendar",filter.authorize ,function(req,res){ FullCalendar.findCalendar(req,res,function(data){ var dat = []; for(i in data){ var start = data[i].start; var end = data[i].end; start.setDate(start.getDate());//解决客户端日期BUG +1 end.setDate(end.getDate());

            var y_start = start.getFullYear(),m_start = start.getMonth(),d_start = start.getDate(),hh_start = start.getHours(),mm_start = start.getMinutes();
            var y_end = end.getFullYear(),m_end = end.getMonth(),d_end = end.getDate(),hh_end = end.getHours(),mm_end = end.getMinutes();
            //start date对象给客户端传递,出现数据打乱。单个时间分钟传送
            dat.push(
                {_id:data[i]._id,
                title:data[i].title,
                y_start:y_start, m_start:m_start, d_start:d_start,hh_start : hh_start, mm_start: mm_start,
                y_end :y_end, m_end:m_end, d_end: d_end, hh_end: hh_end,mm_end : mm_end,
                /*start:new Date(y_start,m_start,d_start,hh_start,mm_start),
                end:new Date(y_end,m_end,d_end,hh_end,mm_end),
                start:start,
                end:end,*/
                allDay:data[i].allDay}
            );
            //console.log(hh_start +":"+mm_start + "*_*"+hh_end+":"+mm_end);
            //console.log(start+"*_*"+end);
        }
        res.send({status:0,events:dat});
        
    });
});
app.post("/updateCalendar",filter.authorize ,function(req,res){
    FullCalendar.updateCalendar(req,res,function(){
        res.send({status:0});
    });
});
app.post("/updateDateCalendar",filter.authorize ,function(req,res){
    FullCalendar.updateDateCalendar(req,res,function(){
        res.send({status:0});
    });
});
app.post("/updateDateTimeCalendar",filter.authorize ,function(req,res){
    FullCalendar.updateDateTimeCalendar(req,res,function(){
        res.send({status:0});
    });
});
app.post("/updateTimeCalendar",filter.authorize ,function(req,res){
    FullCalendar.updateTimeCalendar(req,res,function(){
        res.send({status:0});
    });
});
app.post("/removeCalendar",filter.authorize ,function(req,res){
    FullCalendar.removeCalendar(req,res,function(){
        res.send({status:0});
    });
});

}

数据库处理文件(fullCalendar.js): var status = require(’./…/status’); var mongoose = status.mongoose; var db = status.db; var Schema = mongoose.Schema;

var calendar = db.model(‘calendar’,new Schema({ user:String ,title:String ,url:String
,innerdate:{type:Date, default: Date.now} ,update:{type:Date, default: Date.now} ,start:{type:Date, default: Date.now} ,end:{type:Date, default: Date.now} ,allDay:Boolean }));

var Calendar = function(){};

//添加新calendar Calendar.prototype.insertCalendar = function(req,res,func){ var func = func ||function(){} var start = new Date(req.body.start),end = new Date(req.body.end); //start.setHours(0); var cal = new calendar({user:req.session.name,title:req.body.title,url:req.body.url,innerdate:Date(),update:Date(),start:start,end:end,allDay:req.body.allDay}); cal.save(function(err){ if(err){ throw err; } func(req,res); }); }

//查找 Calendar.prototype.findCalendar = function(req,res,func){ var func = func ||function(){} calendar.find({user:req.session.name},function(err,data){ func(data); }); }

//标题更新 Calendar.prototype.updateCalendar = function(req,res,func){ var func = func ||function(){} calendar.update({user:req.session.name,_id:req.body._id},{$set:{ update:Date(),title:req.body.title}}, function(err){ if(err){ console.log(err); }

  func();
}

);
}

//整天更新 Calendar.prototype.updateDateCalendar = function(req,res,func){ var func = func ||function(){} calendar.find({user:req.session.name,_id:req.body._id},function(err,data){ if(data.length>0){

  var start = data[0].start,end = data[0].end;
  
  start.setDate(start.getDate()+parseInt(req.body.dayDelta));

  end.setDate(end.getDate()+parseInt(req.body.dayDelta));
  calendar.update({user:req.session.name,_id:req.body._id},{$set:{
    update:Date(),start:start,end:end,allDay:true}},
    function(err){
      if(err){
        console.log(err);
      }
      
      func();
    }
  );
}
func();

});
}

//时间、天数更新 Calendar.prototype.updateDateTimeCalendar = function(req,res,func){ var func = func ||function(){} calendar.find({user:req.session.name,_id:req.body._id},function(err,data){ if(data.length>0){ var start = new Date(req.body.start);

  if(data[0].allDay == true){
    var dayDelta = parseInt(req.body.dayDelta);

    
      var end = new Date(req.body.start);

      end.setDate(start.getDate()),end.setHours(start.getHours() + 2);
    
  }else{
    var dayDelta = parseInt(req.body.dayDelta),minuteDelta = parseInt(req.body.minuteDelta);
    var end = data[0].end;
    //end.setDate(end.getDate()+dayDelta-1),end.setMinutes(end.getMinutes()+minuteDelta);
    end.setDate(end.getDate()+dayDelta),end.setMinutes(end.getMinutes()+minuteDelta);
  }
  calendar.update({user:req.session.name,_id:req.body._id},{$set:{update:Date(),start:start,end:end,allDay:false}},function(err){
    if(err){
      console.log(err);
    }
    func(0);
  });
}else{
  func(1);  
}

});
}

//时间更新 eventsize 也可能天数 Calendar.prototype.updateTimeCalendar = function(req,res,func){ var func = func ||function(){} calendar.find({user:req.session.name,_id:req.body._id},function(err,data){ if(data.length>0){ var dayDelta = parseInt(req.body.dayDelta),minuteDelta = parseInt(req.body.minuteDelta); var end = data[0].end; end.setDate(end.getDate()+dayDelta),end.setMinutes(end.getMinutes()+minuteDelta); if(parseInt(req.body.dayDelta) == 0){

    calendar.update({user:req.session.name,_id:req.body._id},{$set:{update:Date(),end:end,allDay:false}},function(err){
      if(err){
        console.log(err);
      }
      func(0);
    });
}else{
  console.log("天数改变");
  calendar.update({user:req.session.name,_id:req.body._id},{$set:{update:Date(),end:end,allDay:true}},function(err){
      if(err){
        console.log(err);
      }
      func(0);
    });
}

}else{ func(1);
}

});
}

//删除单条calendar Calendar.prototype.removeCalendar = function(req,res,func){ var func = func ||function(){} calendar.remove({_id:req.body._id},function(err){ if(err){ throw err; } func(req,res); }); }

module.exports = new Calendar();

到此,交互功能完成,严格测试,火狐goole下完美运行,体验很爽

回到顶部