var myCombos = new Array();
var windowOpenFunctions = new Array();
/**
* @Description: 下面自定义dhtmlx的ajax错误提示(重写)
* @Author: lynn.chen 陈立
* @Modified By:
* @Date: 2013-01-23
* @param: dhtmlx源码参数
*/
if(typeof(_dhtmlxError) != "undefined")
{
_dhtmlxError.prototype.throwError = function(type, name, params){
//alert(type + "---" + name + "---" + params[1]);
//alert(type + "---" + name + "---" + params[0].status);
if(typeof(params) != "undefined")
{
var status = params[0].status;
dealAjaxError(status);
}
return null;
};
}
/**
* @Description: 此方法为表单操作页面如何显示的方法,其它需要弹出框的地方,请使用createWindow()方法
* @Author: lynn.chen 陈立
* @Modified By:
* @Date: 2013-01-23
* @param: paramStr 打开页面或者弹出框的参数
*/
var winPath = "";//当前窗口界面的路径
function openWindow(paramStr, isWindow) {
//persCustomFieldAction!getAllField.action^900^430^新增人员
var params = paramStr.split("^");//获取参数值
winPath = params[0];
if(typeof(isWindow) != "undefined" && isWindow)
{
if(isWindow == "yes")
{
createWindow(paramStr);
}
else
{
getAddTemplate(params[0]);
}
}
else
{
if(system.isFormByWinOpen)
{
createWindow(paramStr);
}
else
{
getAddTemplate(params[0],"");
}
}
}
/**
* 创建顶层Top窗口,适用于iframe中需要将窗口弹在最外层时
*
* @author lynn.chen
* @since 2015年5月14日 下午1:51:05
*/
function createTopWindow(paramStr, html, confirmFun)
{
//如果为iframe弹窗的话则调用top弹窗,显示在外层
if(typeof(window.top.createWindow) != "undefined")
{
window.top.createWindow(paramStr, html, confirmFun);
}
else
{
createWindow(paramStr, html, confirmFun);
}
}
/**
* @Description: 创建窗口,窗口个数不受限制
* @Author: lynn.chen 陈立
* @Modified By:
* @Date: 2013-01-23
* @param: paramStr 弹出框的参数(path^x^y^w^h^title-----persCustomFieldAction!getAllField.action^0^0^900^430^导入)
*/
var fixedCWinId = "userWin";
var dhxWins;
var newWin;
function createWindow(paramStr, html, confirmFun)
{
paramStr = paramStr.replace("#","public_winTemplate.action");
if(!dhxWins)
{
dhxWins = new dhtmlXWindows();
//dhxWins.enableAutoViewport(false);
//dhxWins.attachViewportTo(document.body);
dhxWins.zIndexStep = 15; //grid分栏后,左边的z-index=11 --zhangc 2014-6-13
//dhxWins.setSkin((typeof(sysCfg) != "undefined" ? sysCfg.dhxSkin : "dhx_skyblue"));
//dhxWins.setImagePath("/public/controls/dhtmlx/dhtmlxWindows/codebase/imgs/");
dhxWins.attachEvent("onClose", function(win){
//此函数为窗口关闭之后,如何存在下一级的窗口,则对下一级窗口进行屏蔽处理
//win.setModal(false); //---将会导致下一个弹出框z-index每次增加zIndexStep(50),而当前窗口会关闭,没必要先屏蔽,lynn.chen 陈立
/*窗口关闭回调函数
* getCurrentWindow().onClose = function(){
return false;//返回false不关闭窗口
};*/
if($(".dhtmlx_window_active").size() == 0)
{
//$(window.top.document.body).removeClass("dhxwins_vp_dhx_web");
}
if(win.onClose)
{
var ret = win.onClose();
if(ret == false)
{
return;
}
}
if(win.onFormClose)//表单关闭回调函数
{
var ret = win.onFormClose();
if(ret == false)
{
return;
}
}
try
{
//销毁pagingToolbar
$(".dhtmlx_window_active .gridbox").each(function(index,element){
if(document.getElementById(this.id) && mygrids[this.id] && mygrids[this.id].pagingToolbar)
{
mygrids[this.id].pagingToolbar.unload();
}
});
//判断函数destroyComboxTree是否存在;如果存在则执行
if(typeof(destroyComboxTree) == "function")
{
destroyComboxTree();
}
$("div[class*='dhtmlxcalendar_in_input']").hide();//时间控件隐藏
$("div[class^='dhx_popup_dhx_']").hide();//popup提示控件隐藏
}
catch(e)
{
//alert("not function);
}
var lastId = 0;
dhxWins.forEachWindow(function(){
lastId++;
});
win.setModal(false);//是否进行屏蔽
if(lastId != 1)
{
var id = fixedCWinId + (lastId-1);
newWin = dhxWins.window(id);
newWin.setModal(true);//是否进行屏蔽
/*var newWinZIndex = $(newWin).css("z-index") - dhxWins.zIndexStep;
$(newWin).css("z-index", newWinZIndex);
$(".dhx_modal_cover_ifr").css("z-index", newWinZIndex -2);
$(".dhx_modal_cover_dv").css("z-index", newWinZIndex -2);*/
}
else
{
//视频ocx控件显示
$("iframe[src*='.action']:eq(0)").contents().find("#zkVideoOcx").css("visibility", "visible");
$("iframe[src*='.action']:eq(0)").contents().find(".videoOcx").css("visibility", "visible");
}
window.setTimeout(function(){
$(".dhxwin_active input[type=text][readonly!=readonly][disabled!='disabled'],.dhxwin_active input[type=password][readonly!=readonly][disabled!='disabled']").eq(0).focus();
}, 300);
return true;
});
document.onkeydown=esckeydown; //esc键关闭弹出框口
}
var title = "";
var idPrefix = 0;
dhxWins.forEachWindow(function() {
idPrefix++;
var oldId = fixedCWinId + idPrefix;
getCurrentWindow().setModal(false);//是否进行屏蔽
});
idPrefix++;//每次进来就来原有的窗口个数下加1
var id = fixedCWinId +idPrefix;
//globalCWinId = createWinId ? createWinId : fixedCWinId;
//path^x^y^w^h^title(persCustomFieldAction!getAllField.action^0^0^900^430^导入)
var params = paramStr.split("^");//获取参数值
newWin = dhxWins.createWindow(id, params[1]?params[1] : 0, params[2]?params[2] : 0, params[3]?params[3] : 750, params[4] ? params[4] : 300);
newWin.setText(params[5]? params[5] : title);
//添加“正在加载中……”功能
var loadingHtml = "

";
newWin.attachHTMLString(loadingHtml);
if(!params[1] && !params[2])
{
newWin.center();
}
else if(params[1] == 0 && params[2] == 0)
{
newWin.center();
}
newWin.setModal(true);//是否进行屏蔽
newWin.denyResize();//是否可以放大
newWin.button("park").hide();
newWin.button("minmax1").hide();
$(".dhxwin_button_close").attr("title", "Close");
newWin.bringToTop();
newWin.path = params[0];
//newWin.hideHeader();
//视频ocx控件隐藏,避免其覆盖弹出框
$("iframe[src*='.action']:eq(0)").contents().find("#zkVideoOcx").css("visibility", "hidden");
$("iframe[src*='.action']:eq(0)").contents().find(".videoOcx").css("visibility", "hidden");
for(var i = 0; i< windowOpenFunctions.length; i++)
{//自定义窗口打开接口
if(typeof(windowOpenFunctions[i]) == "function")
{
windowOpenFunctions[i].apply(this,[newWin]);
}
else if(typeof(windowOpenFunctions[i]) == "string" && typeof(window[windowOpenFunctions[i]])=="function")
{
window[windowOpenFunctions[i]].apply(this,[newWin]);
}
}
if(params[0] == "*")//表示直接使用html
{
if(html)
{
newWin.attachHTMLString(html);
}
}
else
{
//添加“正在加载中……”功能
var xmlHttpObj = createXMLHttpReuestObject();
var url = params[0];
var unParm = url.indexOf("?") != -1 ? "&" : "?";
xmlHttpObj.open("get",url + unParm + "un=" + Math.round(Math.random()*100000));
xmlHttpObj.url = url;
xmlHttpObj.win = newWin;
xmlHttpObj.onload = function(a){
var status = 200;
try
{
status = this.status;
}
catch(e)
{
status = 0;
}
try
{
if((this.readyState == 4 && status == 200) || status == 404 || status == 500)
{
var responseText = this.responseText;
try
{ //添加对返回结果的判断是否异常结果
var tempText = this.responseText.substring(0,20);
if(tempText.indexOf("ret") != -1 && (tempText.indexOf(sysCfg.warning) != -1 || tempText.indexOf(sysCfg.error) != -1))
{
//格式化返回的字符为对象
var responseJson = eval("("+this.responseText+")");
if(responseJson.ret == 500)
{
messageBox({messageType:"alert", text:responseJson.msg,callback:closeWindow});
}
return;
}
}
catch(e)
{
}
var repText = "";
var text = (html ? html : "");
if(responseText.indexOf(repText) != -1)
{
responseText = responseText.replace("", text);
}
else
{
responseText += text;
}
responseText = responseText.replace("confirmFun",confirmFun);
this.win.attachHTMLString(loadingHtml + responseText);
}
}
catch(e)
{
status = status;
throw e;
}
finally
{
//去除转圈处理和获取焦点
window.setTimeout(function(){
$("#progressWin" + id).remove();
$(".dhxwin_active input[type=text][readonly!=readonly][disabled!='disabled'],.dhxwin_active input[type=password][readonly!=readonly][disabled!='disabled']").eq(0).focus();
}, 300);
if(typeof(dealAjaxError) != "undefined")
{
status = status == 0 ? "201" : status;
dealAjaxError(status);
}
}
}
/*
xmlHttpObj.onreadystatechange = function()
{
alert("b");
}*/
xmlHttpObj.send(null);
}
//return newWin;
}
/**
* @Description: 根据不同浏览器,动态创建XMLHttpRequest对象
* @Author: 何朗 helang
* @Date: 2013-04-18
* @return 创建成功的XMLHttpRequest对象
*/
function createXMLHttpReuestObject()
{
var XMLHttpFactories = [
function(){return new XMLHttpRequest()},
function(){return new ActiveXObject("Msxml2.XMLHTTP")},
function(){return new ActiveXObject("Msxml3.XMLHTTP")},
function(){return new ActiveXObject("Microsoft.XMLHTTP")}
];
var xmlHttp = false;
for(var i=0; i 0)
{
return;
}
else if(myForms[objId])
{
myForms[objId].unload();//清空之前的myForm,否则会new多次,出现多个
}
attributes = attributes? attributes : new Array();
var size= attributes.size ? attributes.size : 22;
var buttonWidth = attributes.buttonWidth ? attributes.buttonWidth : 50;
buttonWidth = buttonWidth > 60 ? 60 : buttonWidth;
var inputWidth = attributes.inputWidth? attributes.inputWidth : 210;
var labelWidth = inputWidth;
var labelHeight = attributes.labelHeight ? attributes.labelHeight : 20;
var leftLabel = attributes.leftLabel ? attributes.leftLabel : "备选人员";
var rightLabel = attributes.rightLabel ? attributes.rightLabel : "已选人员";
if(attributes.isAllSelect == undefined)
{
var isAllSelect = true;
}
else
{
var isAllSelect = attributes.isAllSelect;
}
var allOffsetTop = size*6;
var offsetTop = isAllSelect ? 0 : size*8;
var allButtonType = isAllSelect ? "button" : "hidden";
formData = [
{
type: "settings",
position: "label-top",
labelWidth: labelWidth,
inputWidth: inputWidth,
labelHeight: labelHeight
},
{
type: "multiselect",
label: leftLabel,
name: "c_all",
size: size,
options: (leftOptions != null ? eval(leftOptions) : [])
},
{
type: "newcolumn"
},
{
type: "block",
inputWidth:"auto",
offsetLeft: 0,
list: [{
type: allButtonType,
name: "addAll",
value: ">>",
offsetLeft: 0,//(60-buttonWidth)/2,
offsetTop: allOffsetTop,
inputWidth: buttonWidth
}, {
type: "button",
name: "add",
value: " > ",
offsetLeft: 0,//(60-buttonWidth)/2,
offsetTop: offsetTop,
inputWidth: buttonWidth
}, {
type: "button",
name: "remove",
value: " < ",
offsetLeft: 0,//(60-buttonWidth)/2,
inputWidth : buttonWidth
}, {
type: allButtonType,
name: "removeAll",
value: "<<",
offsetLeft: 0,//(60-buttonWidth)/2,
inputWidth: buttonWidth
}]
},
{
type: "newcolumn"
},
{
type: "multiselect",
label: rightLabel,
name: "c_blocked",
size: size,
options: (rightOptions != null ? eval(rightOptions) : [])
}
];
myForms[objId] = new dhtmlXForm(objId, formData);
//按钮部分样式修复
$("#"+ objId +" .in_block").css("padding", "0 5px");
$("#"+ objId +" .dhxform_btn_txt").css("margin", "0 10px");
//下面2句是解决ie下已下拉框显示的问题
/* 暂时屏蔽,Occupancy有问题 $.browser.msie *******梁海波-20140410********* */
//myForms[objId].getSelect("c_blocked").options.add(new Option("0" , ""));
//$(myForms[objId].getSelect("c_blocked")).find('option').filter(':eq(0)').remove();
myForms[objId].attachEvent("onButtonClick", function(name){
if (name == "add" || name == "remove" || name == "addAll" || name == "removeAll")
{
changeContactState(objId, name == "add" || name == "addAll", name, isAllSelect, selectFunc, noselectFunc);
}
});
//双击
$(".dhxform_select[name^='c_all']").dblclick(function(){
changeContactState(objId, true, "add", isAllSelect,selectFunc, noselectFunc);
});
$(".dhxform_select[name^='c_blocked']").dblclick(function(){
changeContactState(objId, false, "remove", isAllSelect, selectFunc, noselectFunc);
});
//获取当前值
myForms[objId].getValue = function(){
var optValue = "";
var selectedOptions = myForms[objId].getSelect("c_blocked").options;
for ( var i = 0; i < selectedOptions.length; i++)
{
optValue += selectedOptions[i].value + ",";
}
return optValue != "" ? optValue.substring(0,optValue.length-1) : optValue;
};
}
function changeContactState(objId, block, name, isAllSelect, selectFunc, noselectFunc)
{
var ida = (block ? "c_all" : "c_blocked");
var idb = (block ? "c_blocked" : "c_all");
var sa = myForms[objId].getSelect(ida);
var sb = myForms[objId].getSelect(idb);
if(name == "addAll" || name == "removeAll")
{
for ( var i = 0; i < sa.options.length; i++)
{
sb.options.add(new Option(sa.options[i].text, sa.options[i].value));
}
for ( var i = 0; i < sa.options.length;)
{
$(sa).find('option').filter(':eq(' + i + ')').remove();
}
}
else
{
var t = myForms[objId].getItemValue(ida);
if(t.length == 0)
{
return;
}
eval("var k={'" + t.join(":true,") + "':true};");
var w = 0;
var ind = -1;
while(w < sa.options.length)
{
if(k[sa.options[w].value])
{
sb.options.add(new Option(sa.options[w].text,
sa.options[w].value));
$(sa).find('option').filter(':eq(' + w + ')').remove();
ind = w;
}
else
{
w++;
}
}
if(sa.options.length > 0 && ind >= 0)
{
if(sa.options.length > 0)
{
sa.options[t.length > 1 ? 0 : Math.min(ind,
sa.options.length - 1)].selected = true;
}
}
//单选
if(isAllSelect == false && block == true && sb.options.length > 1)
{
sa.options.add(new Option(sb.options[0].text, sb.options[0].value));
$(sb).find('option').filter(':eq(0)').remove();
}
}
//对已选数据列进行判断,是否已选数据
if(myForms[objId].getSelect("c_blocked").options.length > 0)
{
if(selectFunc)
{
selectFunc();
}
}
else
{
if(noselectFunc)
{
noselectFunc();
}
}
}
/**
* @Description: 打开表单页面,只适用于操作栏中进行调用
* @Author: lynn.chen 陈立
* @Modified By:
* @Date: 2013-03-06
* @param: id 操作时的参数,
* 形如persCustomFieldAction!getAllField.action^0^0^900^430为path^x^y^w^h^title
*/
function openWindowToForm(id)
{
var objId = "operate";
var winStr = id;
if(id.split("^")[0].indexOf("]") > 0)
{
objId = id.split("^")[0].substring(1,id.split("^")[0].indexOf("]"));
winStr = id.substring(id.split("^")[0].indexOf("]")+1);
}
if(operateToolbars[objId])
{
try
{
var isExistId = false;
operateToolbars[objId].forEachItem( function(itemId){
if(itemId == id)
{
isExistId = true;
return;
}
});
if(isExistId)
{
winStr += "^"+operateToolbars[objId].getItemText(id);
}
else
{
winStr += "^"+operateToolbars[objId].getListOptionText("moreActions",id);
}
}
catch(e)
{
winStr += "^"+operateToolbars["leftOperate"].getItemText(id);
}
}
openWindow(winStr);
}
/**
* @Description: 专门为导出提供,弹出窗口
* @Author: pokiz.xu
* id 的格式为accTransactionAction!export.action(type=XLS|PDF)^0^0^500^190#rightGridbox#leftOperate
* ^前面的为导出的action路径,#后面接着哪个grid,与哪个操作区域
* #后面的可以不填,如果填,需要两个一起填写
* (type=...)为导出页面显示的导出格式
* @Date: 2013-03-06
* @modify: gordon.zhang@zkteco.com 2014-12-18
*/
function openWindowForExport(id)
{
var winStr;
var objId = "operate";
var gridName;
var sourceId = id;
if(id.indexOf("#") >= 1)
{
gridName = id.substring(id.indexOf("#")+1, id.lastIndexOf("#"));
objId = id.substring(id.lastIndexOf("#") + 1, id.length);
id = id.substring(0, id.indexOf("#"));
}
var typeStr="";
if (id.indexOf("(type=")>=1)
{
var typeBegini = id.indexOf("(type=");
var typeEndi = id.substring(typeBegini).indexOf(")");
typeStr = id.substring(typeBegini,typeBegini+typeEndi);
typeStr = typeStr.split("=")[1];
id = id.substring(0,typeBegini)+id.substring(typeBegini+typeEndi+1);
}
var opStr;
if(id.indexOf("(select") > 0)
{
var opParamStr = id.substring(id.indexOf("(select") + "(select".length + 1, id.lastIndexOf(")"));
var val = $("input:hidden[name='"+opParamStr+"']").val();
opStr = val;
}
var winHtml = "";
if(operateToolbars[objId])
{
var parentId = operateToolbars[objId].getParentId(sourceId);
if(parentId != null && parentId.length > 0)//有父级存在
{
winHtml = operateToolbars[objId].getListOptionText(parentId,sourceId);
}
else
{
winHtml = operateToolbars[objId].getItemText(sourceId);
}
}
else
{
winHtml = "Export";
}
winStr = "^"+winHtml;
var actionName = id.split("^")[0];
var size = id.substring(id.indexOf("^"));
var actionInput = "";
var gridNameInput = "";
var custom = "";
var typeStr = "";
createWindow("public_opExportRecord.action" + size +winStr, actionInput + gridNameInput + custom+typeStr);
}
/**
* @Description: 已打开窗口的方式来进行操作,只适用于操作栏中进行调用
* @Author: lynn.chen 陈立
* @Modified By:
* @Date: 2013-03-06
* @param: id 操作时的参数,
* 形如persCustomFieldAction!getAllField.action^0^0^900^430为path^x^y^w^h^title
* 下面为需在弹窗前进行进行判断的配置
* persCustomFieldAction!getAllField.action?
* id=(id*{checkboxName:'ids',selectedNum:1,conditionMode:'!=',noSelectPrompt:'请选择你要操作的对象',noRightSelectPrompt:'只能选择一个对象进行操作',split:','})
* ^0^0^900^430
*/
var currentOperateId;
var operateObjId = "operate";
function openWindowByOperate(id)
{
var winStr = id;
if(id.split("^")[0].indexOf("]") > 0)
{
operateObjId = id.split("^")[0].substring(1,id.split("^")[0].indexOf("]"));
winStr = id.substring(id.split("^")[0].indexOf("]")+1);
}
else
{
operateObjId = "operate";
}
if(operateToolbars[operateObjId] && id.split("^").length > 6)
{
winStr += "^"+operateToolbars[operateObjId].getItemText(id);
}
if(id.indexOf("(id")>0)
{
var checkboxName;
var idStr = "(id)";
var selectedNum = 1;
var conditionMode = "!=";
var noSelectPrompt = "Please select the objects you want to operate!";
var noRightSelectPrompt = "Only one object can be selected at one time!";
var split = ",";
var idNum = 0;
if(id.indexOf("(id*")>0)
{
//(id*{checkboxName:'ids',selectedNum:1,conditionMode:'!=',noSelectPrompt:'请选择你要操作的角色',noRightSelectPrompt:'只能选择一个操作的角色',split:','})
var opParamStr = id.substring(id.indexOf("(id*") + "(id*".length, id.lastIndexOf(")"));
var opParams = eval("(" + opParamStr + ")");
checkboxName = opParams.checkboxName ? opParams.checkboxName : checkboxName;
selectedNum = opParams.selectedNum != undefined ? opParams.selectedNum : selectedNum;
conditionMode = opParams.conditionMode ? opParams.conditionMode : conditionMode;
noSelectPrompt = opParams.noSelectPrompt ? opParams.noSelectPrompt : noSelectPrompt;
noRightSelectPrompt = opParams.noRightSelectPrompt ? opParams.noRightSelectPrompt : noRightSelectPrompt;
split = opParams.split ? opParams.split : split;
idStr = id.substring(id.indexOf("(id*"), id.lastIndexOf(")")+1);
}
var checkboxVlaues = getGridCheckboxValue(checkboxName, split);
if(checkboxVlaues == "")
{
messageBox({messageType:"alert",text: noSelectPrompt});
return;
}
else
{
idNum = checkboxVlaues.split(split).length;
switch (conditionMode)
{
case "!=":
if(idNum != selectedNum)
{
messageBox({messageType:"alert",text: noRightSelectPrompt.format(selectedNum)});
return;
}
break;
case "==":
if(idNum == selectedNum)
{
messageBox({messageType:"alert",text: noRightSelectPrompt.format(selectedNum)});
return;
}
break;
case ">":
if(idNum > selectedNum)
{
//noRightSelectPrompt = "已选择{0},最多只能选择{1}个对象进行操作";
messageBox({messageType:"alert",text: noRightSelectPrompt.format(idNum,selectedNum)});
return;
}
break;
case ">=":
if(idNum >= selectedNum)
{
messageBox({messageType:"alert",text: noRightSelectPrompt.format(selectedNum)});
return;
}
break;
case "<":
if(idNum < selectedNum)
{
messageBox({messageType:"alert",text: noRightSelectPrompt.format(selectedNum)});
return;
}
break;
case "<=":
if(idNum > selectedNum)
{
var msg = "Selected items must not be more than {0}!";
messageBox({messageType:"alert",text: msg.format(selectedNum)});
return;
}
break;
default:
messageBox({messageType:"alert",text: "条件运算符不合法,必须为'!=,==,>,>=,<,<='"});
return;
break;
}
}
winStr = id.replace(idStr, checkboxVlaues);
}
var isExistId = false;
operateToolbars[operateObjId].forEachItem( function(itemId){
if(itemId == id)
{
isExistId = true;
return;
}
});
if(isExistId)
{
winStr += "^"+operateToolbars[operateObjId].getItemText(id);
}
else
{
winStr += "^" + operateToolbars[operateObjId].getListOptionText("moreActions",id);
}
currentOperateId = id;
createWindow(winStr);
}
/**
* @Description: 非打开窗口的方式来进行操作,非操作栏中同样可以进行调用
* @Author: lynn.chen 陈立
* @Modified By:
* @Date: 2013-03-06
* @param: id 操作时的参数,
* 形如persCustomFieldAction!getAllField.action为path
* 下面为需在弹窗前进行进行判断的配置
* [operateId]persCustomFieldAction!getAllField.action?
* id=(id*{checkboxName:'ids',selectedNum:1,conditionMode:'!=',noSelectPrompt:'请选择你要操作的对象',noRightSelectPrompt:'只能选择一个对象进行操作',split:',',gridName: 'gridbox'})^#自定义提示信息
*
*/
function executeOperate(id, callbackFun)
{
var opStr = id.split("^")[0];
if(id.indexOf("]") > 0)
{
operateObjId = id.substring(1,id.indexOf("]"));
opStr = id.substring(id.indexOf("]")+1);
}
else
{
operateObjId = "operate";
}
var idNum = 0;
var itemText = "";
var gridName = null;
if(id.indexOf("(id")>0)//判断是否是grid复选
{
var checkboxName;
var idStr = "(id)";
var selectedNum = 0;
var conditionMode = "==";
var noSelectPrompt = "Please select the objects you want to operate!";
var noRightSelectPrompt = "Only one object can be selected at one time!";
var split = ",";
var isOnline = false;
if(id.indexOf("(id*")>0)//这里是判断是否存在提示信息参数
{
//(id*{checkboxName:'ids',selectedNum:1,conditionMode:'!=',noSelectPrompt:'请选择你要操作的角色',noRightSelectPrompt:'只能选择一个操作的角色',split:','})
var opParamStr = id.substring(id.indexOf("(id*") + "(id*".length, id.lastIndexOf(")"));
var opParams = eval("(" + opParamStr + ")");
checkboxName = opParams.checkboxName ? opParams.checkboxName : checkboxName;
selectedNum = opParams.selectedNum != undefined ? opParams.selectedNum : selectedNum;
conditionMode = opParams.conditionMode ? opParams.conditionMode : conditionMode;
noSelectPrompt = opParams.noSelectPrompt ? opParams.noSelectPrompt : noSelectPrompt;
noRightSelectPrompt = opParams.noRightSelectPrompt ? opParams.noRightSelectPrompt : noRightSelectPrompt;
isOnline = opParams.isOnline ? opParams.isOnline : isOnline ;
split = opParams.split ? opParams.split : split;
gridName = opParams.gridName ? opParams.gridName : gridName;
idStr = id.substring(id.indexOf("(id*"), id.lastIndexOf(")")+1);
}
var checkboxVlaues = getGridCheckboxValue(checkboxName, split);
if(checkboxVlaues == "")
{
messageBox({messageType:"alert",text: noSelectPrompt});
return;
}
else
{
idNum = checkboxVlaues.split(split).length;
switch (conditionMode)
{
case "!=":
if(idNum != selectedNum)
{
messageBox({messageType:"alert",text: noRightSelectPrompt});
return;
}
break;
case "==":
if(idNum == selectedNum)
{
messageBox({messageType:"alert",text: noRightSelectPrompt});
return;
}
break;
case ">":
if(idNum > selectedNum)
{
messageBox({messageType:"alert",text: noRightSelectPrompt});
return;
}
break;
case ">=":
if(idNum >= selectedNum)
{
messageBox({messageType:"alert",text: noRightSelectPrompt});
return;
}
break;
case "<":
if(idNum < selectedNum)
{
messageBox({messageType:"alert",text: noRightSelectPrompt});
return;
}
break;
case "<=":
if(idNum >= selectedNum)
{
messageBox({messageType:"alert",text: noRightSelectPrompt});
return;
}
break;
default:
messageBox({messageType:"alert",text: "条件运算符不合法"});
return;
break;
}
}
opStr = opStr.replace(idStr, checkboxVlaues);
}
else if(id.indexOf("(select") > 0)
{
var opParamStr = id.substring(id.indexOf("(select") + "(select".length + 1, id.lastIndexOf(")"));
var val = $("input:hidden[name='"+opParamStr+"']").val();
opStr = id.substring(0, id.indexOf("custom=") + "custom=".length) + (val == undefined ? "" : val);
}
var msg = "Are you sure you want to perform the {0} operation?";//你确定要执行{0}操作吗?
if(id.split("^").length >= 2)//判断是否存在自定义文本
{
itemText = id.split("^")[1];
if(itemText.indexOf("#") >= 0)
{
msg = itemText.replace("#","");
}
}
else if(operateToolbars[operateObjId])//判断是否是Toolbar中的操作
{
var isExistId = false;
operateToolbars[operateObjId].forEachItem( function(itemId){
if(itemId == id)
{
isExistId = true;
return;
}
});
if(isExistId)//判断当前操作栏对象中是否存在该id,存在则直接获取文本(通过id来获取文本)
{
itemText = operateToolbars[operateObjId].getItemText(id);
}
else//不存在时从下来框中去获取,下拉框id统一使用moreActions
{
itemText += "^" + operateToolbars[operateObjId].getListOptionText("moreActions",id);
}
}
msg = msg.format(itemText);
var submit = function (result) {
if(result)
{
//这里判断该操作是否为ajax操作
if(opStr.indexOf(".action") > 0 || opStr.indexOf(".do") > 0)
{
var urlStr=opStr;
if(opStr.indexOf("?")!=-1){
urlStr=opStr.substr(0,opStr.indexOf("?"));
}
onLoading(function(){
$.ajax({
type: "POST",
url: urlStr,
data:parseURL2JSON(opStr),
dataType:"json",
async : true,
success: function(result)
{
if(callbackFun)
{
dealRetResult(result,callbackFun);
}
else
{
dealRetResult(result, undefined, gridName);
}
}
});
});
}
else//不是ajax则为执行函数
{
eval(opStr + '()');
}
}
return true; //close
};
messageBox({messageType:"confirm", text:msg, callback:submit});
currentOperateId = id;
}
/**
* @Description: 根据解析xml来创建操作栏,在list模版页面进行调用
* @Author: lynn.chen 陈立
* @Modified By:
* @Date: 2013-01-23
* @param: pageConfigXML 需要解析的xml路径
* @param: obId 用于显示对象的id,也就是一个页面可以出现多个,默认为list模版中的operate
* @param: callback 加载完回调函数
*/
var operateToolbars = new Array();
function createToolbar(pageConfigXML, obj, callback)
{
var obId = "operate";
pageConfigXML += (pageConfigXML.indexOf("?") > 0 ? "&" : "?") + "rootType=toolbars";
if(typeof(obj) == "undefined" || typeof(obj) == "string")//判断是否是对象id字符串
{
obId = (obj ? obj : obId);
operateToolbars[obId] = new dhtmlXToolbarObject(obId);
$("#" + obId).addClass("dhxToolbar");
}
else
{
obId = (obj.id ? obj.id : obId);
operateToolbars[obId] = obj;
}
//operateToolbars[obId].setSkin(sysCfg.dhxSkin);
operateToolbars[obId].attachEvent("onClick", function(id){
/****
this.objPull[this.idPrefix + "input_1"];
inputA = Toolbar.objPull[Toolbar.idPrefix+"input_1"].obj.firstChild;*/
});
operateToolbars[obId].setIconSize(18);
operateToolbars[obId].setIconsPath(sysCfg.rootPath + "/public/images/opToolbar/");
var path = pageConfigXML + (pageConfigXML.indexOf("?") == -1 ? "?" : "&") + "un=" + new Date().getTime() + "&" + $.param($.ajaxSetup().data);
operateToolbars[obId].loadXML(path, function(){
var $dhxToolbar = $(this.base);
if($dhxToolbar.size() == 1)
{
var toolbarWidth = 0;
$dhxToolbar.find("div.dhx_toolbar_btn").each(function(i){
toolbarWidth += $(this).outerWidth();
});
//$(".dhx_cell_cont_layout .dhxToolbar .dhxtoolbar_float_left div.dhx_toolbar_btn").
var left = $dhxToolbar.offset().left + 30;
if(left < 50 && $("iframe[src*='.action'],iframe[src*='.do']:eq(0)", parent.document).size() > 0)
{
left = $("iframe[src*='.action'],iframe[src*='.do']:eq(0)", parent.document).parent().offset().left + 40;
}
if((left + toolbarWidth) > $(window.top.document.body).width())
{
$(window.top.document.body).css("min-width",left + toolbarWidth);
window.top.resizeWindow();
}
}
if(typeof(callback) != "undefined")
{
callback();
}
});
}
/**
* @Description: 获取操作栏真实节点id
* @Author: lynn.chen 陈立
* @Date: 2015-01-22
* @param:toolbarId 操作栏对象div id
* @param:itemId 操作栏节点id
*/
function getToolbarRealItemId(toolbarId, itemId)
{
return operateToolbars[toolbarId].idPrefix + itemId;
}
/**
* @Description: 封装dhmlxmessage消息提示框
* @Author: helang 何朗
* @Date: 2013-04-22
* @param:paramsJson 传入的配置参数
下面是关于paramsJson格式的说明及实例,每个属性都有默认值:
confirmBox({
title:"提示信息",
type:"confirm-error dhtmlx-myCss",(dhtmlxmessage内置的三种type:confirm-warning confirm confirm-error)
ok:"确定",
cancel:"取消",
expire:3000,
text:"你确定要删除此条信息吗?",
messageType:"confirm",
callback:function(result){alert(11);},
width:250
});
title ok cancel text 分别对应消息提示框上相应的文本内容;
messageType指的是消息提示框类型(有confirm message alert三种);
callback是回调方法;
特别注意下type属性,这里可以自己定义样式,指定多个样式以空格分隔开,自定义的类样式中属性必须加!important标识且自定义样式必须用dhtmlx-xxxx这种格式类名。
expire当组件的messageType为message的时候,设定message提示框多少毫秒消失,width指当消息提示框类型为message的时候,所显示的提示框的宽度,默认250。
*/
function messageBox(paramsJson)
{
this.messageType = paramsJson.messageType ? $.trim(paramsJson.messageType) : "confirm";
this.types = "";
if(paramsJson.type)
{
this.typeArray = paramsJson.type.split(" ");
for(var i=0; i "+this.text,
expire:this.expire
});
//动态计算message的显示位置
//$($(".dhtmlx_message_area")[0]).css("left",(document.body.offsetWidth)/2-40);
//$($(".dhtmlx_message_area")[0]).css("top",(document.body.offsetHeight)/2);
//添加icon图片,并动态更新样式
var messageIconObj = $("#messageIconId");
messageIconObj.parent().css("text-align","center");
messageIconObj.parent().css("line-height","38px");
messageIconObj.parent().css("overflow","hidden");
messageIconObj.parent().css("height","38px");
messageIconObj.parent().css("padding-left","8px");
messageIconObj.parent().css("padding-right","8px");
messageIconObj.parent().parent().parent().css("width","auto");
messageIconObj.parent().parent().parent().css("display","inline-table");
var messageIconPath = "public/controls/dhtmlx/dhtmlxMessage/codebase/icons/";
//为message框动态指图标,succsee error loading warning 四种不同图标
switch (this.type)
{
case "success" :
messageIconObj.attr("src",messageIconPath+"message_success.png");
break;
case "error" :
messageIconObj.attr("src",messageIconPath+"message_error.png");
break;
case "loading" :
messageIconObj.attr("src",messageIconPath+"message_loading.gif");
break;
case "warning" :
messageIconObj.attr("src",messageIconPath+"message_warning.png");
break;
}
messageIconObj.css("vertical-align","middle");
break;*/
case "alert":
this.title = paramsJson.title ? $.trim(paramsJson.title) : "Prompt";
this.type = this.types ? $.trim(this.types) : "alert"; //'alert', 'alert-warning', 'alert-error
this.text = paramsJson.text ? $.trim(paramsJson.text) : "";
this.ok = paramsJson.ok ? $.trim(paramsJson.ok) : "OK";
this.callback = paramsJson.callback;
dhtmlx.alert({
title:this.title,
type:this.type,
text:this.text,
ok:this.ok,
callback:this.callback
})
break;
case "alert-warning":
this.title = paramsJson.title ? $.trim(paramsJson.title) : "Prompt";
this.type = this.types ? $.trim(this.types) : "alert"; //'alert', 'alert-warning', 'alert-error
this.text = paramsJson.text ? $.trim(paramsJson.text) : "";
this.ok = paramsJson.ok ? $.trim(paramsJson.ok) : "OK";
this.callback = paramsJson.callback;
dhtmlx.alert({
title:this.title,
type:this.messageType,
text:this.text,
ok:this.ok,
callback:this.callback
})
break;
}
//添加样式切换功能
/*$(".dhtmlx_popup_button").each(function(b){
$(this).hover(function(){
$(this).css("background","url(public/images/btn_bg_hover.jpg) repeat scroll 0 0 transparent");
},
function(){
$(this).css("background","url(public/images/btn_bg.jpg) repeat scroll 0 0 transparent");
});
});*/
}
/**
* 限制startTimeId和endTimeId不能大于当前时间
* startTimeId不能大于endTimeId
* @author colin.yao 2014-4-16 17:42:14
* @param mCal new出来的日期控件对象
* @param startTimeId
* @param endTimeId
* @param timeType 日期格式类型
* @param type 类型(1为开始,2为结束)
* @return
*/
function limitTime(mCal, startTimeId, endTimeId, timeType, type){
//获取当前日期
var myDate = new Date();
var oneYear = myDate.getFullYear();
var oneMonth = myDate.getMonth()+1;
var oneDay = myDate.getDate();
myDate = oneYear+"-"+oneMonth+"-"+oneDay;
var startTime = $("#"+startTimeId).val();
var endTime = $("#"+endTimeId).val();
if(timeType == 0)
{
mCal.setDateFormat(sysCfg.dhxShortDateFmt);
mCal.hideTime();
}
else
{
mCal.setDateFormat(sysCfg.dhxLongDateFmt);
}
if(type == 1)
{
if(endTime == "" || endTime == null)
{
mCal.setSensitiveRange(null, myDate);
}
else
{
mCal.setSensitiveRange(null, endTime);
}
}
else
{
if(startTime == "" || startTime == null)
{
mCal.setSensitiveRange(null, myDate);
}
else
{
mCal.setSensitiveRange(startTime, myDate);
}
}
}
/**
* 函数主要用于有开始时间和结束时间需要输入的情况
* @author liangm 20130427
* @param mCal 日期控件
* @param startTimeId 开始时间输入框id
* @param referTimeId 参照时间id(即当填写开始时间时,那么它的参照时间id即为结束时间输入框id,反之,亦然)
* @return
*/
function inputTime(mCal, startTimeId, referTimeId, timeType)
{
if(timeType == 0)
{
mCal.setDateFormat(sysCfg.dhxShortDateFmt);
mCal.hideTime();
}
else
{
mCal.setDateFormat(sysCfg.dhxLongDateFmt);
}
if (referTimeId == startTimeId)
{
mCal.setSensitiveRange($("#"+referTimeId).val() == "" ? null : $("#"+referTimeId).val(), null);
}
else
{
mCal.setSensitiveRange(null, $("#"+referTimeId).val() == "" ? null : $("#"+referTimeId).val());
}
}
/**
* 限制开始时间不能大于结束时间、结束时间不能小于开始时间
* @author Jason 20130620
* @param myCalendar new出来的日期控件对象
* @param startTimeId 开始时间输入框id
* @param referTimeId 参照时间id(即当填写开始时间时,那么它的参照时间id即为结束时间输入框id,反之,亦然)
* @return
*/
function inputDateTime(myCalendar, startTimeId, referTimeId)
{
if (referTimeId == startTimeId)
{
myCalendar.setSensitiveRange($("#"+referTimeId).val(), null);
}
else
{
myCalendar.setSensitiveRange(null, $("#"+referTimeId).val());
}
}
/**
* @Description: 创建长日期格式的dhx日历控件(格式如:2013-5-20 18:00:00)
* @Author: lynn.chen 陈立
* @Modified By:
* @Date: 2013-09-03
* @param: object 需要解析的xml路径
*/
var myCalendars = new Array();
function createLongDhxCalendar0(object, startTime)
{
var longCalendar;
var objArray = object.toString().split(",");//保存id值
//下面是同过ajax请求加载到相应控件中
longCalendar = new dhtmlXCalendarObject(object);
longCalendar.setDateFormat(sysCfg.dhxLongDateFmt);
if(startTime)
{
longCalendar.setSensitiveRange(startTime);
}
//longCalendar._strToDate(new Date(), sysCfg.dhxShortDateFmt);
setCalendarTopPosition(longCalendar,objArray);
myCalendars[object] = longCalendar;
return longCalendar;
}
/**
* @Description: 创建短日期格式的dhx日历控件(格式如:2013-5-20)
* @Author: lynn.chen 陈立
* @Modified By:
* @Date: 2013-09-03
* @param: object
*/
function createShortDhxCalendar0(object, startDate)
{
var shortCalendar;
var objArray = object.toString().split(",");//保存id值
//下面是同过ajax请求加载到相应控件中
shortCalendar = new dhtmlXCalendarObject(object);
shortCalendar.setDateFormat(sysCfg.dhxShortDateFmt);
if(startDate)
{
shortCalendar.setSensitiveRange(startDate);
}
shortCalendar.hideTime();//隐藏时间
setCalendarTopPosition(shortCalendar, objArray);
myCalendars[object] = shortCalendar;
return shortCalendar;
}
/**
* @Description: 自动判断给Calendar设置Position为Top
* @Author: lynn.chen 陈立
* @Modified By:
* @Date: 2013-09-03
* @param: calendar 日期控件对象
* @param: objArray 对象id数组
* @param: autoJudge 自动判断,false则是一定设置为top
*/
function setCalendarTopPosition(calendar, objArray, autoJudge)
{
autoJudge = typeof(autoJudge) == "undefined" || autoJudge == null || autoJudge ? true : false;
function doOnInpClick()
{
if(!autoJudge)//非自动,必须使用
{
this.calendar.setPosition($(this).offset().left, ($(this).offset().top - $(this.calendar.base).height()));
}
else if(($(this).offset().top + $(this.calendar.base).height()) > $(document.body).height() && $(this).offset().top > $(this.calendar.base).height())//动态判断位置
{
this.calendar.setPosition($(this).offset().left, ($(this).offset().top - $(this.calendar.base).height()));
}
};
var objectArray = (typeof(objArray) == "string" ? new Array([objArray]) : objArray);
for(var i = 0; i < objectArray.length; i++)
{
var obj = document.getElementById(objectArray[i]);
if(obj == null || !obj)
{
break;
}
if(String(obj.tagName).toLowerCase() == "input")
{
$(obj).bind("blur", function(){
if(this.calendar.isVisible())
{
var inputObj = this;
var t = window.setTimeout(function(){
inputObj.calendar.hide();
window.clearTimeout(t);
},50);
}
});
$(obj).bind("click", doOnInpClick);
obj.calendar = calendar;
obj.autoJudge = autoJudge;
}
}
objArray = null;
}
/**
* @Description: 给Layout设置Resize自动适应大小变化
* @Author: lynn.chen 陈立
* @Modified By:
* @Date: 2014-3-20
* @param: layout dhtmlXLayoutObject对象
*/
function setLayoutResize(layout)
{
layout.attachEvent("onPanelResizeFinish", setSizesGrid);//内部拖动
layout.attachEvent("onResize", setSizesGrid); //外部缩放
layout.attachEvent("onCollapse", setSizesGrid); //按钮缩
layout.attachEvent("onExpand", setSizesGrid);//按钮展开
layout.setSizes(false);
}
/**
* @Description: 重置grid大小
* @Author: lynn.chen 陈立
* @Modified By:
* @Date: 201312-27
* @param: girdName
*/
function resizeLayout(layoutName)
{
if(document.getElementById(layoutName))
{
var height = $("#" + layoutName).outerHeight() - $("#" + layoutName).position().top;
$("#" + layoutName).height(height);
}
}
/**
* @Description: 按钮操作模板高度重置方法
* @Author: lynn.chen 陈立
* @Modified By:
* @Date: 2015-01-23
*/
function opTemplateHeightResize()
{
if($(".dhxwin_active").size() > 0)
{
var $contentDiv = $(".dhxwin_active .content_div");
$contentDiv.height($(".dhxwin_active .content_td").height());
$contentDiv.css("overflow", "auto");
}
else
{
var $contentDiv = $(".dhx_cell_cont_layout .content_div");
$contentDiv.height($(".dhx_cell_cont_layout .content_td").height());
$contentDiv.css("overflow", "auto");
}
}
/**
*
* TODO 个性化导出
*
* @author chenpf
* @since 2015年11月9日 下午1:43:12
* @param id "reportId#gridName#reqParams
*/
function personalExport(id)
{
var params = id.split("#");
var reportId = params[0];
var gridName = params[1] || "gridbox";
var systemCode = $(document.getElementById("systemCode")).val();
var url = "basePNExportAction!exportPage.action?";
url = url + "systemCode=" + systemCode;
url = url + "&reportId=" + reportId + "&gridName=" + gridName;
if(typeof(params[2]) != "undefined")
{
var other = params[2].split("&");
var otherParams = "";
for(var i = 0; i < other.length; i++)
{
var pair = other[i].split("=");
otherParams = otherParams + "&" + pair[0] + "=";
if(pair[1].charAt(0) == ":" || pair[1].charAt(0) == "{")
{//替换变量
if(pair[1].charAt(0) == ":")
{//截取变量名
pair[1] = pair[1].substring(1);
}
if(pair[1].charAt(0) == "{")
{//截取变量名
pair[1] = pair[1].substring(1,pair[1].length - 1);
}
var paramValue = pair[1];
try
{//从当前作用域中获取
paramValue = eval(paramValue);
}
catch(e)
{//没有则从dom元素获取
paramValue = document.getElementById(pair[1]);
if(paramValue)
{
paramValue = $(paramValue).val();
}
else
{
paramValue = $("input[name='" + pair[1] + "']");
if(paramValue.length > 0)
{
paramValue = $(paramValue).val();
}
else
{
paramValue = pair[1];
}
}
}
otherParams = otherParams + paramValue;
}
else
{
otherParams = otherParams + pair[1];
}
}
url = url + otherParams;
}
if(typeof(params[3]) != "undefined")
{
url = url + params[3];
}
else{
url = url + "^0^0^550^250^Export Personalization";
}
createWindow(url);
}
/**
*
* TODO 选中左菜单节点
*
* @author Administrator
* @since 2016年12月14日 上午9:54:15
* @param accId
* @param menuId
*/
function selectLeftMenuNode(accId,menuId){
system.myAcc.cells(accId).open();
system.myAcc.cells(accId).dataObj.selectItem(menuId,true);
}