| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582 |
- // 这里是项目的公共代码
- // 项目根路径
- var prjpath='/thscm_supplier';
- var dhxSkin='dhx_skyblue';
- // ! 检查元素在数组中的位置. >=0 表示位置, 不存在返回-1.
- // ! 检查元素是否存在数组中, 存在返回>=0, 不存在返回-1.
- if( !Array.indexOf) {
- Array.prototype.indexOf = function (obj){
- for (var i = 0; i < this.length; i++) {
- if (this[i] == obj) {
- return i;
- }
- }
- return -1;
- };
- };
- // ! 判断对象是否是数组.
- function isArray(v){
- if( typeof(v) == 'object' )
- return Object.prototype.toString.call(v) === '[object Array]';
- else
- return false;
- };
- // ! 将一个对象转换为数组. 参数本身可能也是数组.
- function toArray(obj){
- var ar = new Array();
- if( typeof(obj) == 'string' )
- ar = obj.split(',');
- else if( typeof(obj) == 'object' ) {
- if( isArray(obj) )
- ar = obj;
- }
- else if( typeof(obj) == 'number' ){
- ar.push(obj);
- }
- else if( typeof(obj) == 'boolean' ){
- ar.push(obj);
- }
- return ar;
- };
- // ! 从数组中过滤掉不以 obj 开头的元素. 同时将截掉 obj
- // ! arr 可以是一个字符串(以','分隔)也可以是一个数组
- // ! 返回过滤后的数组.
- function filtrElement(obj,arr){
- if( typeof(obj) == 'undefined' ) return arr;
- var arDest = new Array(), arSrc = toArray(arr);
- var objlen = obj.length;
- for( var i = 0; i < arSrc.length; i++){
- var vidx = arSrc[i];
- if( vidx.substr(0,objlen)==obj)
- arDest.push(vidx.substr(objlen,vidx.length));
- }
- return arDest;
- };
- // ! 使用勾选的最初和最后状态确定操作. 返回的是操作数组(id|optType,id|optType). optType:0-删除;1-增加.
- // ! vOld-表示最初的勾选ID列表. 可以是','分隔的字符串, 也可以是数组
- // ! vNew-表示最后的勾选ID列表. 可以是','分隔的字符串, 也可以是数组
- // ! 返回的是需要提交的ID数组.
- function dealCheckItem(vOld, vNew){
- var arOpt = new Array(), arOld = toArray(vOld), arNew = toArray(vNew);
-
- // ! 第一步: 确定最后为增加的.
- if( 0 < arNew.length ){
- if( 0 >= arOld.length ){
- for( var i=0;i<arNew.length;i++)
- arOpt.push(arNew[i]+'|1');
- }
- else{
- var vidx = '';
- for( var i=0;i<arNew.length;i++){
- vidx = arNew[i];
- // ! 如果最初状态为勾选, 则不需要处理了. 仅需要处理最初未勾选的
- if( arOld.indexOf(vidx) < 0 )
- arOpt.push(vidx+'|1');
- }
- }
- }
-
- // ! 第二步: 确定最后为删除的.
- if( 0 < arOld.length ){
- if( 0 >= arNew.length ){
- for( var i=0;i<arOld.length;i++)
- arOpt.push(arOld[i]+'|0');
- }
- else{
- var vidx = '';
- for( var i=0;i<arOld.length;i++){
- vidx = arOld[i];
- // ! 如果最初状态为勾选, 并且最后状态为未勾选, 则表示需要删除.
- if( arNew.indexOf(vidx) < 0 )
- arOpt.push(vidx+'|0');
- }
- }
- }
- return arOpt;
- };
- // ! 取BODY对象宽度
- function getBodyWidth(){
- return document.body.clientWidth;
- };
- // ! BODY对象高度
- function getBodyHeight(){
- return document.body.clientHeight;
- };
- // ! 检查是否是数字
- function isNumber(s){
- if(typeof(s)=='undefined' || s.length<=0) return false;
- var strP=/^\d+(\.\d+)?$/;
- if(!strP.test(s)) return false;
- try{if(parseFloat(s)!=s) return false;}
- catch(ex){return false;}
- return true;
- };
- // ! 检查是否是整数
- function isInt(s){
- if(typeof(s)=='undefined' || s.length<=0) return false;
- var strP=/^\d+(\.\d+)?$/;
- if(!strP.test(s)) return false;
- try{if(parseInt(s)!=s) return false;}
- catch(ex){return false;}
- return true;
- };
- // ! 对中文的URL参数转码. 仅针对于 attachURL() 时需要. 其它的dhtmlx还不需要.
- function encodeZh(zh){
- if(typeof(zh)=='undefined') return;
- return encodeURIComponent(encodeURIComponent(zh));
- };
- // ! 返回经转码的 url. 仅针对于 attachURL() 时需要. 其它的dhtmlx还不需要.
- function encodeZhUrl(url){
- var num=url.indexOf("?");
- if( num <= 0 )
- return url;
- var newurl = url.substr(0,num+1);
- url=url.substr(num+1);
- var arrtmp=url.split("&");
- for(var i=0;i < arrtmp.length;i++){
- num=arrtmp[i].indexOf("=");
- if(num>0){
- if( i > 0 )
- newurl += "&";
- newurl += arrtmp[i].substring(0,num);
- newurl += "=";
- newurl += encodeURIComponent(encodeURIComponent(arrtmp[i].substr(num+1)));
- }
- }
- return newurl;
- };
- // ! 对于枚举值的字符串, 提取值. 例如: [1]-正常. 调用 splitEnumValue("[1]-正常") 返回:"1"
- function splitEmVal(str){
- var n1 = str.indexOf("[");
- if( n1 >= 0 ){
- var n2 = str.indexOf("]");
- if( n2 > 1 ){
- return str.substr(n1+1,n2-1);
- }
- }
- return "";
- };
- // ! art.dialog 提示消息
- function artAlert(vHint,vLock,vFun){
- var vL = vLock==false?false:true;
- var vOk = typeof(vFun)!='function'?true:vFun;
- try{
- art.dialog({
- id:'hint-msg',
- title: "<span style='font-size:12px;font-weight:bold;'>系统提示</span>",
- content: "<span style='font-size:12px;font-weight:bold;'>"+vHint+"</span>",
- ok: vOk,
- okValue:'确定',
- lock: vL
- });
- }catch(ex){}
- };
- // ! art.dialog 确认框
- function artConfirm(vHint,vFun){
- art.dialog({
- id:'cfm-msg',
- title: "<span style='font-size:12px;font-weight:bold;'>系统提示</span>",
- content: "<span style='font-size:12px;font-weight:bold;'>"+vHint+"</span>",
- cancel:true,
- cancelValue: '取消',
- ok: vFun,
- okValue:'确定',
- lock: true
- });
- };
- /**
- * 锁定提示框,返回提示框对象
- *
- * @param vHint
- * @returns 返回提示框对象
- */
- function artProgress(vHint){
- var artProgressObj;
- try{
- artProgressObj = art.dialog({
- id:'hint-msg',
- title: "<span style='font-size:12px;font-weight:bold;'>系统提示</span>",
- content: "<span style='font-size:12px;font-weight:bold;'>"+vHint+"</span>",
- lock: true,
- cancel:false
- });
- }catch(ex){}
- return artProgressObj;
- };
- // ! art.dialog tips
- function artTips(vHint){
- art.dialog({
- id:'tip-msg',
- title: false,
- content: "<span style='font-size:12px;'>"+vHint+"</span>",
- cancel: false,
- padding:10,
- height:30,
- time:2000
- });
- };
- // ! 返回标题. (设置了图片和字体)
- function getLayoutTitle(vTitle,vImg){
- var vret = "";
- if( typeof(vImg)=="string")
- vret = "<img src='"+prjpath+"/static/images/" + vImg + "' style='margin-left:4px;margin-right:4px;margin-bottom:-4px;'/>";
- // vret = "<img src='"+prjpath+"/static/images/" + vImg
- // +style='position:relative;left:30%;margin-left:4px;margin-right:4px;margin-bottom:-4px;'/>";
- vret += "<span style='position:relative;bottom:1%;font-size:12px;font-weight:bold;color:#1D417D;'>" + vTitle +"</span>";
- return vret;
- };
- // ! 返回标题. (设置了图片和字体)
- function getTabTitle(vTitle,vImg){
- var vret = "";
- if( typeof(vImg)=="string")
- // vret = "<img src='"+prjpath+"/static/images/" + vImg + "'
- // style='margin-left:-2px;margin-right:2px;margin-bottom:-3px;'/>";
- vret = "<img src='"+prjpath+"/static/images/" + vImg + "' style='position:relative;left:-5px;margin-right:0px;margin-bottom:-3px;'/>";
- // vret += "<span style='font-size:12px;font-weight:bold;color:#1D417D;'>" +
- // vTitle +"</span>";
- vret += "<span style='font-size:12px;color:#1D417D;'>" + vTitle +"</span>";
- return vret;
- };
- // ! ajax
- function post(url,param){
- // var loader = dhtmlxAjax.postSync(url,param);
- var loader = dhtmlx.ajax().sync().post(url,param);
- var msg = eval( '(' + loader.responseText + ')' );
- return msg;
- };
- // ! ajax post
- function postBusi(url,param,callBackOk,callBackFail){
- var msg = post(url,param);
- var vHint = "返回码: ["+msg.code+"]<p>返回消息: <p> "+msg.message;
- artAlert(vHint,false);
- if(1==msg.code){
- if(typeof(callBackOk)=='function') callBackOk();
- }else{
- if(typeof(callBackFail)=='function') callBackFail();
- }
- return msg;
- };
- // ! 装载 tree. 如果失败则弹出提示. 成功时不提示.
- function loadTree(tree,url,param){
- var loader = dhtmlx.ajax().sync().post(url,param);
- var msg = eval( '(' + loader.responseText + ')' );
- if( msg.code != 1 ){
- dhtmlx.alert("error_code:"+msg.code+";error_msg:"+msg.message);
- }else{
- // tree.setDataMode("json");
- // tree.loadJSONObject(eval('('+msg.body+')'));
- tree.parse(eval("("+msg.body+")"),"json");
- }
- return msg;
- };
- // ! 装载 grid. --lixia增加tipFlag来判定是否显示提示信息
- function loadGrid(vGrid,url,param,tipFlag){
- vGrid.clearAll();
- var msg = post(url,param);
- if( msg.code == 1 ){
- vGrid.parse(eval("("+msg.body+")"),"json");
- if(typeof(tipFlag)=='undefined' || tipFlag)
- artTips("提示:查询成功.");
- }
- else if( msg.code == 20001 ){
- if(typeof(tipFlag)=='undefined' || tipFlag)
- artTips("提示:不好意思,查询不到数据!");
- }
- else{
- var vHint = "系统出错啦!<p> error code:"+msg.code+"<p> error message:"+msg.message;
- if(typeof(tipFlag)=='undefined' || !tipFlag)
- artAlert(vHint);
- }
- };
- // ! 删除 grid. 一行记录(从服务端)
- function deleteGrid(vGrid,url,param){
- var vSelId = vGrid.getSelectedRowId();
- if( vSelId==null ){
- artAlert("删除记录时,请首先选择所需要删除的记录行!",false);
- return;
- }
- artConfirm("您确定要删除所选择的记录行数据吗?",function(){
- var msg = postBusi(url,param);
- if( msg.code == 1 )
- vGrid.deleteRow(vSelId);
- return msg;
- });
- };
- // ! dhtmlx grid--toolbar: 在四个通用按钮(add,update,delete,export),
- // 对应的回调函数分别为:addGT(),updateGT(),deleteGT(),exportGT()
- // ! vDis-表示是否显示,不显示必须设置为false
- function gridToolbar(vLayoutCell,vDis1,vDis2,vDis3,vDis4){
- var dhxGT = vLayoutCell.attachToolbar();
- dhxGT.setIconsPath(prjpath+"/static/images/");
- if( vDis1 != false ){
- dhxGT.addSeparator("sep0", 1);
- dhxGT.addButton("add", 1, "新增", "add.png");
- }
- if( vDis2 != false ){
- dhxGT.addSeparator("sep1", 2);
- dhxGT.addButton("update", 3, "修改", "edit.png");
- }
- if( vDis3 != false ){
- dhxGT.addSeparator("sep2", 4);
- dhxGT.addButton("delete", 5, "删除", "delete.png");
- }
- if( vDis4 != false ){
- dhxGT.addSeparator("sep3", 6);
- dhxGT.addButton("export", 7, "导出", "excel.png");
- }
- dhxGT.attachEvent("onClick", function(id){
- if( id=="add" ) addGT();
- else if( id == "update") updateGT();
- else if( id == "delete") deleteGT();
- else if( id == "export") exportGT();
- else;
- });
- };
- // ! 新建窗口. 该函数的调用: dhxWin = newWindos(dhxWin); //! 原因是 js 的参数没有引用的说法.
- // ! 必须定义 <div id="div_win"></div>
- var dhxWins;
- function createWindow(vId,vName,vX,vY,vWidth,vHeigh){
- if( null == dhxWins ){
- dhxWins = new dhtmlXWindows();
- // dhxWins.attachViewportTo("div_win");
- // dhxWins.setSkin("dhx_skyblue");
- // dhxWins.vp.style.border = "#a4bed4 1px solid";
- // dhxWins.vp.style.borderRadius = "2px";
- }
- var vWin = dhxWins.createWindow(vId, vX, vY, vWidth, vHeigh);
- vWin.button("minmax1").disable();
- vWin.button("park").hide();
- vWin.setText(vName);
- vWin.center();
- vWin.setModal(true);
- return vWin;
- };
- // ! 在子窗口(iFrame)中关闭窗口. 参数为在父页面中创建窗口时的名称
- function closeParentWin(vName){
- if( null != parent.dhxWins ){
- var vWin = parent.dhxWins.window(vName);
- if( null != vWin ){
- try{parent.$("body").focus();}catch(e){}
- vWin.close();
- vWin = null;
- }
- // parent.dhxWins.unload();
- // parent.dhxWins = null;
- }
- };
- // 对Date的扩展,将 Date 转化为指定格式的String
- // 月(M)、日(d)、小时(h)(24小时制)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
- // 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
- // 例子:
- // (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
- // (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
- Date.prototype.Format = function(fmt)
- {
- var o = {
- "M+" : this.getMonth()+1, // 月份
- "d+" : this.getDate(), // 日
- "h+" : this.getHours(), // 小时
- "m+" : this.getMinutes(), // 分
- "s+" : this.getSeconds(), // 秒
- "q+" : Math.floor((this.getMonth()+3)/3), // 季度
- "S" : this.getMilliseconds() // 毫秒
- };
- if(/(y+)/.test(fmt))
- fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
- for(var k in o)
- if(new RegExp("("+ k +")").test(fmt))
- fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
- return fmt;
- };
- // ! 返回当月的上一月1日的日期
- function getFirstDayOfPrivMonth(){
- var Nowdate=new Date();
- return new Date(Nowdate.getYear(),Nowdate.getMonth()-1,1,0,0,0);
- };
- // ! 返回当月的上一月最后一日的日期
- function getLastDayOfPrivMonth(){
- var Nowdate=new Date();
- var MonthNextFirstDay=new Date(Nowdate.getYear(),Nowdate.getMonth(),1,23,59,59);
- return new Date(MonthNextFirstDay-86400000);
- };
- /** 替换文本中的换行为</br>标签 */
- String.prototype.addBrTag = function(){
- var str = this;
- return str.replace(/\n/g, "</br>");
- };
- /** 替换文本中的</br>标签为换行 */
- String.prototype.removeBrTag = function(){
- var str = this;
- return str.replace(/<\/br\w*\/*>/g, "\n");
- };
- /** onFocus事件清除焦点 * */
- function clearFocus(name){
- document.getElementsByName(name)[0].blur();
- };
- /** 校验内容不能全为空格 */
- var regNotEmpty = /^\s*$/;
- function notEmpty(data){
- return !regNotEmpty.test(data);
- }
- /** url直接查询grid */
- /** vGrid grid对象,url数据加载url,layoutCell 可以为空 */
- function qryGridUtil (vGrid,url,layoutCell){
- if( typeof(layoutCell)!= 'undefined' )
- // debugger;
- layoutCell.progressOn();
- vGrid.clearAll();
- this.send(url,"POST",function(loader, res){
- var msg = eval( '(' + res + ')' );
- if( msg.code == 1 ){
- vGrid.parse(eval("("+msg.body+")"),"json");
- artTips("提示:查询成功.");
- }
- else if( msg.code == 20001 ){
- artTips("提示:不好意思,查询不到数据!");
- }
- else{
- var vHint = "系统出错啦!<p> error code:"+msg.code+"<p> error message:"+msg.message;
- artAlert(vHint);
- }
- if( typeof(layoutCell)!= 'undefined' )
- layoutCell.progressOff();
- });
- };
- // easy ui 数据加载,将dhtmlx的数据格式进行转换,并加载数据
- function loadEasyGrid(id,url,para,fs){
- var fields = fs.split(",");
- var easyData = {};
- var msg = post(url,para);
- var rows = [];
- if( msg.code == 1 ){
- var data = eval("("+msg.body+")");
- var datas = data.rows;
- for(var i=0;i<datas.length;i++){
- var po = {};
- var d = datas[i].data;
- for(var j=0;j<d.length;j++){
- po[fields[j]]=d[j];
- }
- rows.push(po);
- }
- }
- easyData.total=rows.length;
- easyData.rows=rows;
- $(id).datagrid('loadData', easyData);
- }
- jQuery.prototype.serializeObject=function(){
- var obj=new Object();
- $.each(this.serializeArray(),function(index,param){
- if(!(param.name in obj)){
- obj[param.name]=param.value;
- }
- });
- return obj;
- };
- $.extend($.fn.validatebox.defaults.rules, {
- /*equals: {
- validator: function(value,param){
- return value == $(param[0]).val();
- },
- message: 'Field do not match.'
- }, */
- regValid : {
- validator: function(value, param) {
- var m_reg = new RegExp(param[0]);
- if (!m_reg.test(value)) {
- $.fn.validatebox.defaults.rules.regValid.message = param[1];
- return false;
- }
- else {
- return true;
- }
- },
- message : ""
- },
- //强密码(必须包含大小写字母和数字的组合,可以使用特殊字符,长度在8-20之间)
- strongPwd: {
- validator: function(value, param){
- var pattern = new RegExp('^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9@_]{8,20}$');
- if(value===null && value.trim().length==0){
- return true;
- }
- //console.log(pattern);
- //console.log(pattern.test(value.trim()));
- return pattern.test(value.trim());
- },
- message: '密码长度为8~20位,且必须包含大小写字母和数字的组合!'
- }
- });
- //处理键盘事件 禁止后退键(Backspace)密码或单行、多行文本框除外
- function banBackSpace(e){
- var ev = e || window.event;//获取event对象
- var obj = ev.target || ev.srcElement;//获取事件源
-
- var t = obj.type || obj.getAttribute('type');//获取事件源类型
-
- //获取作为判断条件的事件类型
- var vReadOnly = obj.getAttribute('readonly');
- var vEnabled = obj.getAttribute('enabled');
- //处理null值情况
- vReadOnly = (vReadOnly == null) ? false : vReadOnly;
- vEnabled = (vEnabled == null) ? true : vEnabled;
-
- //当敲Backspace键时,事件源类型为密码或单行、多行文本的,
- //并且readonly属性为true或enabled属性为false的,则退格键失效
- var flag1=(ev.keyCode == 8 && (t=="password" || t=="text" || t=="textarea")
- && (vReadOnly==true || vEnabled!=true))?true:false;
-
- //当敲Backspace键时,事件源类型非密码或单行、多行文本的,则退格键失效
- var flag2=(ev.keyCode == 8 && t != "password" && t != "text" && t != "textarea")
- ?true:false;
-
- //判断
- if(flag2){
- return false;
- }
- if(flag1){
- return false;
- }
- }
-
- //禁止后退键 作用于Firefox、Opera
- document.onkeypress=banBackSpace;
- //禁止后退键 作用于IE、Chrome
- document.onkeydown=banBackSpace;
-
|