(function($){ $.fn.TimePlan = function (myParam, changeHandle) { //事件回调 //响应鼠标移动事件 function myMouseMove(t) { if (bMouseDown && null != myTimePlan.drawSection) { var i = Math.floor(getMouseDownPos(t.clientX) - myTimePlan.minClientX); //优化ie if (myTimePlan.drawEndClientX == i || myTimePlan.drawStartClientX == i) { return; } if (myMouseDownPos > i) { myTimePlan.drawEndClientX = myTimePlan.drawStartClientX; return; } if (pointInSection(myTimePlan.drawSection.day, i)) { return; } if (interSection(myTimePlan.drawSection.day, myMouseDownPos, i)) { return; } if (myParam.particle) { myTimePlan.drawEndClientX = myTimePlan.drawStartClientX + 1; } else { myTimePlan.drawEndClientX = i; } var n = myTimePlan.drawEndClientX - myTimePlan.drawStartClientX; myTimePlan.drawSection.width(n); $("#" + myTimePlan.id + "_tipsLeft").css({ left: myTimePlan.drawStartClientX + 34, top: 45 * myTimePlan.drawSection.day + 34 }).text(calcTimeByPos(myTimePlan.drawStartClientX).substring(0, 5)).show(); if (myParam.particle) { return;//时间点时不绘制右边信息 } $("#" + myTimePlan.id + "_tipsRight").css({ left: myTimePlan.drawEndClientX + 34, top: 45 * myTimePlan.drawSection.day + 34 }).text(calcTimeByPos(myTimePlan.drawEndClientX).substring(0, 5)).show(); } //拖整体处理 if (null != H && "" == mySectionSide) { //解决拖动选中文字的问题 window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty(); var distance = t.clientX - myTimePlan.minClientX - myMouseDownPos; var sPos = H.start + distance; //优化ie if (distance == 0) { return; } if (myTimeTip.is(":visible")) { myTimeTip.hide(); } //优化ie if (tmpSection && tmpSection.start == sPos) { return; } var ePos = sPos + (H.end - H.start); if (sPos < K.min || ePos > K.max) { return; } myCurSection.css({left: sPos}); tmpSection = {start: sPos, end: ePos}; $("#" + myTimePlan.id + "_tipsLeft").css({ left: sPos + 40, top: 45 * myCurSection.day + 34 }).text(calcTimeByPos(sPos).substring(0, 5)).show(); if (myParam.particle) { return;//时间点时不绘制右边信息 } $("#" + myTimePlan.id + "_tipsRight").css({ left: ePos + 40, top: 45 * myCurSection.day + 34 }).text(calcTimeByPos(ePos).substring(0, 5)).show(); } //拖边处理 if (null != H && "" != mySectionSide) { if (myParam.particle) { return;//时间点不处理拖边 } var sPos; var ePos; var distance = t.clientX - myTimePlan.minClientX - myMouseDownPos; //优化ie if (distance == 0) { return; } if (myTimeTip.is(":visible")) { myTimeTip.hide(); } //解决拖动选中文字的问题 window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty(); if ("left" == mySectionSide) { sPos = H.start + distance; ePos = H.end; //优化ie if (tmpSection && tmpSection.start == sPos) { return; } if (sPos < K.min || distance > 0 && sPos + 5 > ePos) { return; } } else { sPos = H.start; ePos = H.end + distance; //优化ie if (tmpSection && tmpSection.end == ePos) { return; } if (ePos > K.max || distance < 0 && sPos + 5 > ePos) { return; } } myCurSection.css({left: sPos, width: ePos - sPos}); tmpSection = {start: sPos, end: ePos}; $("#" + myTimePlan.id + "_tipsLeft").css({ left: sPos + 40, top: 45 * myCurSection.day + 34 }).text(calcTimeByPos(sPos).substring(0, 5)).show(); $("#" + myTimePlan.id + "_tipsRight").css({ left: ePos + 40, top: 45 * myCurSection.day + 34 }).text(calcTimeByPos(ePos).substring(0, 5)).show(); } } //响应鼠标抬起事件 function myMouseUp() { $("#" + myTimePlan.id + "_tipsLeft, #" + myTimePlan.id + "_tipsRight").hide(); bMouseDown = false; if (null != myTimePlan.drawSection) { if (myTimePlan.drawStartClientX == myTimePlan.drawEndClientX || 0 == myTimePlan.drawEndClientX) { myTimePlan.drawSection.unbind().remove(); myTimePlan.drawSection = null; return; } var t = { type: myEventType, start: myTimePlan.drawStartClientX, end: myTimePlan.drawEndClientX, enable: "0", number: "0" }; if ("patrol" == myEventType || "pattern" == myEventType || "preset" == myEventType || "auxoutput" == myEventType) { t.number = "1"; } for (var i = 0, n = 0, a = 0, o = myDays[myTimePlan.drawSection.day].length; o > a; a++) { n = myDays[myTimePlan.drawSection.day][a].start; if (myTimePlan.drawStartClientX > n) { //记录画的数量 i = a + 1; } } myDays[myTimePlan.drawSection.day].splice(i, 0, t); if ("undefined" == typeof myData[myTimePlan.drawSection.day]) { myData[myTimePlan.drawSection.day] = []; } myData[myTimePlan.drawSection.day].splice(i, 0, { type: t.type, sTime: calcTimeByPos(t.start), eTime: calcTimeByPos(myParam.particle ? t.start : t.end), enable: t.enable, number: t.number }); changeHandle(myData); myTimePlan.drawSection.end = myTimePlan.drawEndClientX; myTimePlan.drawSection.sec = t; myTimePlan.drawSection = null; myTimePlan.drawStartClientX = 0; myTimePlan.drawEndClientX = 0; } if (null != H && null != tmpSection) { var r = tmpSection.start; var s = tmpSection.end; H.start = r; H.end = s; curSectionData.sTime = calcTimeByPos(r); curSectionData.eTime = calcTimeByPos(myParam.particle ? r : s); myCurSection.start = r; myCurSection.end = s; tmpSection = null; } mySectionSide = ""; H = null; $(document).unbind("mousemove"); $(document).unbind("mouseup"); } //插入绘图类型 function insertDrawType() { if (null != myType && 0 != myType.length) { var t = ""; $.each(myType, function (n) { //"1":定时报警,"2":报警输入,"3":移动报警,"4":丢失报警,"5":侦测或端口,"6":遮挡报警,"7"侦测和端口 if(myType[n]=="1"){ t += '' } if(myType[n]=="2"){ t += '' } if(myType[n]=="3"){ t += '' } if(myType[n]=="4"){ t += '' } if(myType[n]=="5"){ t += '' } if(myType[n]=="6"){ t += '' } if(myType[n]=="7"){ t += '' } }); $("#" + myTimePlan.id + "_drawTypeSel").empty().append(t).show(); var i = ""; $.each(myType, function (n) { if(-1 == $.inArray(this.toString(), VCA)) { if(myType[n]=="1") { i += '
定时报警
'; } if(myType[n]=="2") { i += '
报警输入
'; } if(myType[n]=="3") { i += '
移动报警
'; } if(myType[n]=="4") { i += '
丢失报警
'; } if(myType[n]=="5") { i += '
侦测或端口
'; } if(myType[n]=="6") { i += '
遮挡报警
'; } if(myType[n]=="7") { i += '
侦测或端口
'; } } }); $("#" + myTimePlan.id + "_drawTypeShow").empty().append(i); insertTimeTipDlg(); } } //初始化所有section绘图 function insertSectionAll() { $("#" + myTimePlan.id + " ." + myTimePlan.prefix + "section").unbind().remove(); for (var t = 0; 8 > t; t++) { myDays[t] = []; } if (myTimeTip) { myTimeTip.hide(); } myCurSection = null; $("#" + myTimePlan.id + "_delete").prop("disabled", true); if (null != myData) { $.each(myData, function (t, i) { $.each(i, function (e, i) { var n = {}; n.type = i.type; if (myParam.particle) { i.eTime = i.sTime; } n.start = calcPosByTime(i.sTime); n.end = calcPosByTime(i.eTime); n.enable = i.enable; n.number = i.number || 0; myDays[t].push(n); var i = insertSection(t, n.type, n.start, n.end); i.sec = n; myTimePlan.dayTimePlans[t].append(i); }) }) } } //绘图复制到 function drawCopyTo() { $("#" + myTimePlan.id + " ." + myTimePlan.prefix + "section").unbind().remove(); $.each(myDays, function (t) { $.each(this, function () { var e = insertSection(t, this.type, this.start, this.end); e.sec = this; myTimePlan.dayTimePlans[t].append(e); }); }); } //把字符串转化为时间 function calcTimeByStr(e) { var t = 0; if ("" != e) { var i = e.split(":"); t = 60 * parseInt(i[0], 10) + parseInt(i[1], 10); } return t; } //根据时间计算位置 function calcPosByTime(e) { var t = 0; if ("" != e) { var i = e.split(":"); t = Math.round((60 * parseInt(i[0], 10) + parseInt(i[1], 10)) * myTimePlan.minuteWidth); } return t; } //根据位置计算时间 function calcTimeByPos(e) { var time = ""; if (e >= 0) { var i = e / myTimePlan.minuteWidth; var hour = ""; var minute = ""; hour = Math.floor(i / 60); if (10 > hour) { hour = "0" + hour; } minute = Math.floor(i % 60); if (10 > minute) { minute = "0" + minute; } time = hour + ":" + minute + ":00"; if (time == "24:00:00") { time = "23:59:00"; } } return time; } //背景颜色 var bgColor = { "1": "#2A88D7",//定时报警 "2": "#cd4242",//报警输入 "3": "#920783",//移动报警 "4": "#898989",//丢失报警 "5": "#00a651",//侦测或端口 "6": "#b38850",//遮挡报警 "7": "#00aeef"//侦测和端口 }; //插入区域,给新的section绑定事件 function insertSection(t, i, n, a) { var sPos = 0; var ePos = 0; var s = ""; sPos = n; ePos = "undefined" == typeof a ? n : a; sPos = Math.floor(sPos); ePos = Math.floor(ePos); s = bgColor[i]; if ("undefined" == typeof s) { s = bgColor["1"]; } var newSection = $("
").css({ position: "absolute", left: sPos, height: 34, width: ePos - sPos ? ePos - sPos : 1, background: s, boxSizing: "border-box" }); newSection.bind({ mouseover: function () { if (!bMouseDown) { for (var i = null, n = "", a = "", o = 0, r = myDays[t].length; r > o; o++) { i = myDays[t][o]; if (i.start == newSection.sec.start && i.end == newSection.sec.end) { n = myData[t][o].sTime; a = myData[t][o].eTime; break; } } n = n.substring(0, 5); a = a.substring(0, 5); var s = $("#" + myTimePlan.id + "_timeTipHover"); var c = ""; if (myParam.particle) { c += n; } else { c += n + " - " + a; } s.find("div").eq(0).html(c); //s.document.title=c; s.css({ left: $(newSection).position().left + $(newSection).outerWidth() / 2 +70, top: 60 * t + (85 - s.height()) }).unbind("show").show(); } }, mouseout: function () { $("#" + myTimePlan.id + "_timeTipHover").unbind("hide").hide(); }, mousedown: function (i) { mySectionSide = i.target.className == myTimePlan.prefix + "resizeLeft" ? "left" : i.target.className == myTimePlan.prefix + "resizeRight" ? "right" : ""; $("#" + myTimePlan.id + "_timeTipHover").hide(); //更改其他section if (null != myCurSection) { myCurSection.css({border: 0}); $("#" + myTimePlan.id + "_tipsLeft, #" + myTimePlan.id + "_tipsRight").hide(); $("." + myTimePlan.prefix + "resizeLeft", myCurSection).eq(0).hide(); $("." + myTimePlan.prefix + "resizeRight", myCurSection).eq(0).hide(); } $(this).css({border: "1px dotted #000000"}); if (!myParam.particle) { $("." + myTimePlan.prefix + "resizeLeft", this).eq(0).css("display", "inline-block"); $("." + myTimePlan.prefix + "resizeRight", this).eq(0).css("display", "inline-block"); } $("#" + myTimePlan.id + "_delete").prop("disabled", false); myCurSection = $(this); myCurSection.day = t; var n = this.sec || newSection.sec; myCurSection.start = n.start; myCurSection.end = n.end; myCurSection.enable = n.enable; myCurSection.number = n.number; if (null != myType && myType.length > 0) { $("#" + myTimePlan.id + "_drawTypeSel2").val(n.type); $("#" + myTimePlan.id + "_modalSel").find("select").val(n.enable); } if ("patrol" == n.type || "pattern" == n.type || "preset" == n.type || "auxoutput" == n.type) { $("#" + myTimePlan.id + "_drawNumberSel").val(n.number); } var c = myDays[myCurSection.day].length; for (var a = null, o = "", r = "", s = 0; c > s; s++) { a = myDays[myCurSection.day][s]; if (a.start == myCurSection.start && a.end == myCurSection.end) { o = myData[myCurSection.day][s].sTime; r = myData[myCurSection.day][s].eTime; myCurSection.oSec = myData[myCurSection.day][s]; break; } } o = o.split(":"); r = r.split(":"); myTimeTip.find(".txt").each(function (t) { 2 > t ? $(this).val(o[t]) : $(this).val(r[t - 2]); }); sectionMDExtend(n.type, n.number); showTimeTip(); } }); return newSection; } //显示编辑对话框 function showTimeTip() { if(null != myType && myType.length > 0 && $("#" + myTimePlan.id + "_drawTypeSel2").val() == "1") {//"1"为定时录像 $("#" + myTimePlan.id + "_modalSel").show(); } else { $("#" + myTimePlan.id + "_modalSel").hide(); } if (myParam.particle) { myTimeTip.find(".txt").eq(2).hide().prev().hide(); myTimeTip.find(".txt").eq(3).hide().prev().hide(); } else { myTimeTip.find(".txt").eq(2).show().prev().show(); myTimeTip.find(".txt").eq(3).show().prev().show(); } myTimeTip.css({ left: $(myCurSection).position().left + ($(myCurSection).outerWidth() / 2) + 30, top: 60 * myCurSection.day + (85 - myTimeTip.height()) }).show(); } //section鼠标按下扩展处理 function sectionMDExtend(t, n) { if ("patrol" == t || "pattern" == t || "preset" == t || "auxoutput" == t) { for (var a = ""; $("#" + myTimePlan.id + "_numberSel").empty().append($(a).width(147).attr("id", myTimePlan.id + "_drawNumberSel")); $("#" + myTimePlan.id + "_drawNumberSel").val(n); } else { $("#" + myTimePlan.id + "_numberSel").empty(); } } //鼠标位置是否在section内 function pointInSection(e, t) { var start = 0; var end = 0; var a = myDays[e].length; for (var n = 0; a > n; n++) { start = myDays[e][n].start; end = myDays[e][n].end; if (t >= start && end >= t) { return true; } } return false; } //检测新区域是否跨过旧区域 function interSection(e, t, i) { var start = 0; var end = 0; var o = myDays[e].length; for (var a = 0; o > a; a++) { start = myDays[e][a].start; end = myDays[e][a].end; if (start >= t && i >= end) { return true; } } return false; } //编辑时间时判断是否在其他区域内 function timeInOtherSection() { for (var e = null, t = 0, i = myDays[myCurSection.day].length; i > t; t++) { e = myDays[myCurSection.day][t]; if (e.start == myCurSection.start && e.end == myCurSection.end) { var n = myTimeTip.find(".txt"); var a = null; var o = null; var r = n.eq(0).val() + ":" + n.eq(1).val() + ":00"; var s = n.eq(2).val() + ":" + n.eq(3).val() + ":00"; if (myData[myCurSection.day][t].sTime == r && myData[myCurSection.day][t].eTime == s) { break; } if (t - 1 >= 0) { a = myData[myCurSection.day][t - 1]; } if (i > t + 1) { o = myData[myCurSection.day][t + 1]; } var c = calcTimeByStr(r); if (null != a && c <= calcTimeByStr(a.eTime)) { return true; } var u = calcTimeByStr(s); if (null != o && u >= calcTimeByStr(o.sTime)) { return true; } break; } } return false; } //是否还能创建section function caninsertSection(e) { return myDays[e].length == myParam.sectionNum ? false : true; } //获取鼠标按下位置 function getMouseDownPos(e) { return e < myTimePlan.minClientX ? myTimePlan.minClientX : e > myTimePlan.maxClientX ? myTimePlan.maxClientX : e; } //创建编辑对话框 function insertTimeTipDlg() { var n = "
" + "
" + "
" + // "
" + "
" + "
" + "
" + ":"+ ""+ " - " + ":"+ ""+ "
" + "
" + "删除 | 保存"; if (myParam.onScenceCfg) { n += " | " + myParam.lan + ""; }; n += "
" + "
"; myTimeTip = $(n); if ($("#" + myTimePlan.id + "_timetip").length > 0) { $("#" + myTimePlan.id + "_timetip").unbind().remove(); } $(myTimePlan).append(myTimeTip); if (null != myType && myType.length > 0) { $("#" + myTimePlan.id + "_typeSel").append($("#" + myTimePlan.id + "_drawTypeSel").clone().width(147).attr("id", myTimePlan.id + "_drawTypeSel2")); //绘图事件模板选择 var modal= ""; modal += ''; //$("#" + myTimePlan.id + "_modalSel").empty().append(modal).show(); myEventType = myType[0]; $("#" + myTimePlan.id + "_drawTypeSel2").change(function () { sectionMDExtend($(this).val(), 1); showTimeTip(); }); } myTimeTip.bind("click", function (e) { e.stopPropagation(); }); //给输入框注册键盘弹起事件 myTimeTip.find(".txt").each(function (t) { if (0 == t % 2) { $(this).bind("keyup", function (event) { validHour(this); }); } else { $(this).bind("keyup", function (event) { validMinute(this); }); } }); //点击关闭按钮的时候,编辑框消失 myTimeTip.find(".close").eq(0).click(function () { myTimeTip.hide(); }); //点击删除的时候,删除单个section myTimeTip.find(".ctrl").eq(0).click(function () { $("#" + myTimePlan.id + "_delete").click(); }); //点击保存的时候,编辑框消失,且根据输入的时间判断位置改变 myTimeTip.find(".ctrl").eq(1).click(function () { if (myParam.particle) { var t = myTimeTip.find(".txt"); t.eq(2).val(t.eq(0).val()); t.eq(3).val(t.eq(1).val()); } if (myParam.particle || validTime()) { if (timeInOtherSection()) { alert(Config.Language.GetStr(9120)); } else { var n = myTimeTip.find(".txt"); var a = n.eq(0).val() + ":" + n.eq(1).val() + ":00"; var o = n.eq(2).val() + ":" + n.eq(3).val() + ":00"; var sPos = calcPosByTime(a); var ePos = calcPosByTime(o); var l = null; var d = myDays[myCurSection.day].length; for (var u = 0; d > u; u++) { l = myDays[myCurSection.day][u]; if (l.start == myCurSection.start && l.end == myCurSection.end) { if (null != myType && myType.length > 0) { l.type = $("#" + myTimePlan.id + "_drawTypeSel2").val(); l.enable = $("#" + myTimePlan.id + "_modalSel").find("select").val(); var p = bgColor[l.type]; "undefined" == typeof p && (p = bgColor["1"]); myCurSection.css({background: p}); myData[myCurSection.day][u].type = l.type; myData[myCurSection.day][u].enable = l.enable; l.number = "0"; ("patrol" == l.type || "pattern" == l.type || "preset" == l.type || "auxoutput" == l.type) && (l.number = $("#" + myTimePlan.id + "_drawNumberSel").val()); myData[myCurSection.day][u].number = l.number; } myCurSection.css({ left: sPos, width: ePos - sPos ? ePos - sPos : 1 }), l.start = sPos, l.end = ePos, myData[myCurSection.day][u].sTime = a, myData[myCurSection.day][u].eTime = o; break } } myTimeTip.hide(); } } else { alert(Config.Language.GetStr(9120)); } }); if (myParam.onScenceCfg) { myTimeTip.find(".ctrl").eq(2).click(function () { myParam.onScenceCfg(myCurSection); }); } } //判断小时输入是否有效 function validHour(t) { if (Number(t.value) <= 23) { //if (24 == Number(t.value)) { // $(t).next().val("00"); //} } else { t.value = "00"; } } //判断分钟输入是否有效 function validMinute(t) { if (Number(t.value) <= 59) { //if (24 == Number($(t).prev().val())) { // t.value = "00"; //} } else { t.value = "00"; } } //创建复制到对话框 function insertCopytoDlg() { var t = "" + "" + "" + "" + "" : " ", t += ""; t += "
"; t += myParam.holiday ? " 
"; if ($("#" + myTimePlan.id + "_checkboxs").length > 0) { $("#" + myTimePlan.id + "_checkboxs").unbind().remove(); } myCopyTo = $(t); $(myTimePlan).append(myCopyTo); $("#" + myTimePlan.id + "_checkall").click(function () { $("#" + myTimePlan.id + "_checkboxs ." + myTimePlan.prefix + "checkbox").not(":first").not(":disabled").prop("checked", $(this).prop("checked")) }); $("#" + myTimePlan.id + "_checkboxs ." + myTimePlan.prefix + "checkbox").not(":first").click(function (t) { $(this).prop("disabled") && t.preventDefault(); if ($("#" + myTimePlan.id + "_checkboxs ." + myTimePlan.prefix + "checkbox").not(":first").not(":checked").length > 0) { $("#" + myTimePlan.id + "_checkall").prop("checked", false); } else { $("#" + myTimePlan.id + "_checkall").prop("checked", true); } }); $("#" + myTimePlan.id + "_ok").click(function () { myCopyTo.hide(); dataCopyTo(); }); $("#" + myTimePlan.id + "_cancel").click(function () { myCopyTo.hide(); }) } //复制数据到其他星期 function dataCopyTo() { var t; var n = -1; var a = $.extend(true, [], myDays[selectDay]); var o = []; $("#" + myTimePlan.id + "_checkboxs ." + myTimePlan.prefix + "checkbox").not(":first").each(function () { if ($(this).prop("checked") && !$(this).prop("disabled")) { n = $(this).attr("day"); o.push(n); myDays[n] = []; $.extend(true, myDays[n], a); myData[n] = []; $.each(a, function (i) { t = myData[selectDay][i].scenePatrol; if (t) { t = $.extend(true, [], t); } myData[n][i] = { type: this.type, sTime: myData[selectDay][i].sTime, eTime: myData[selectDay][i].eTime, enable: this.enable, number: this.number } }); } }); drawCopyTo(); if (myParam.onScenceCfg) { myParam.onScenceCfg("copyto", selectDay, o); } } //判断时间范围是否有效 function validTime() { var t = myTimeTip.find(".txt"); $.each(t, function () { if ("" == $.trim($(this).val())) { $(this).val("00"); } if (parseInt($(this).val(), 10) < 10) { $(this).val("0" + parseInt($(this).val(), 10)); } }); var sTime = 60 * Number(t.eq(0).val()) + Number(t.eq(1).val()); var eTime = 60 * Number(t.eq(2).val()) + Number(t.eq(3).val()); return sTime >= eTime ? false : true; } //插入timeplan_day function insertDay(name) { var weeks=["星期一","星期二","星期三","星期四","星期五","星期六","星期日"]; var e = []; var t = ["mon", "tue", "wed", "thu", "fri", "sat", "sun", "hol"]; for (var i = 0; 8 > i; i++) { if (7 == i) { e.push('