zoukankan      html  css  js  c++  java
  • easyui 部分封装方法

    /**
     * 包含easyui的扩展和常用的方法
     * @author libin
     * @version 20121013
     */
    var sy = $.extend({}, sy); //类似命名空间

    /************************** easyui 部分 *********************************/
    /**
     * 使panel和datagrid在加载时提示
     */
    $.fn.panel.defaults.loadingMessage = '加载中....';
    $.fn.datagrid.defaults.loadMsg = '加载中....';

    sy.editRow = undefined;

    /**
     * 通用错误提示
     * 用于datagrid/treegrid/tree/combogrid/combobox/form加载数据出错时的操作
     */
    var easyuiErrorFunction = function(XMLHttpRequest) {
     $.messager.progress('close');
     $.messager.alert('加载错误', '出现异常');
    };
    $.fn.datagrid.defaults.onLoadError = easyuiErrorFunction;
    $.fn.treegrid.defaults.onLoadError = easyuiErrorFunction;
    $.fn.tree.defaults.onLoadError = easyuiErrorFunction;
    $.fn.combogrid.defaults.onLoadError = easyuiErrorFunction;
    $.fn.combobox.defaults.onLoadError = easyuiErrorFunction;
    $.fn.form.defaults.onLoadError = easyuiErrorFunction;

    /**
     * 为datagrid、treegrid增加表头菜单,用于显示或隐藏列,注意:冻结列不在此菜单中
     */
    var createGridHeaderContextMenu = function(e, field) {
     e.preventDefault();
     var grid = $(this);/* grid本身 */
     var headerContextMenu = this.headerContextMenu;/* grid上的列头菜单对象 */
     if (!headerContextMenu) {
      var tmenu = $('<div style="100px;"></div>').appendTo('body');
      var fields = grid.datagrid('getColumnFields');
      for ( var i = 0; i < fields.length; i++) {
       var fildOption = grid.datagrid('getColumnOption', fields[i]);
       if (!fildOption.hidden) {
        $('<div iconCls="icon-ok" field="' + fields[i] + '"/>').html(fildOption.title).appendTo(tmenu);
       } else {
        $('<div iconCls="icon-empty" field="' + fields[i] + '"/>').html(fildOption.title).appendTo(tmenu);
       }
      }
      headerContextMenu = this.headerContextMenu = tmenu.menu({
       onClick : function(item) {
        var field = $(item.target).attr('field');
        if (item.iconCls == 'icon-ok') {
         grid.datagrid('hideColumn', field);
         $(this).menu('setIcon', {
          target : item.target,
          iconCls : 'icon-empty'
         });
        } else {
         grid.datagrid('showColumn', field);
         $(this).menu('setIcon', {
          target : item.target,
          iconCls : 'icon-ok'
         });
        }
       }
      });
     }
     headerContextMenu.menu('show', {
      left : e.pageX,
      top : e.pageY
     });
    };
    $.fn.datagrid.defaults.onHeaderContextMenu = createGridHeaderContextMenu;
    $.fn.treegrid.defaults.onHeaderContextMenu = createGridHeaderContextMenu;

    /**
     * 扩展datagrid,添加动态增加或删除Editor的方法
     * 例子如下,第二个参数可以是数组
     * datagrid.datagrid('removeEditor', 'cpwd');
     * datagrid.datagrid('addEditor', [ { field : 'ccreatedatetime', editor : { type : 'datetimebox', options : { editable : false } } }, { field : 'cmodifydatetime', editor : { type : 'datetimebox', options : { editable : false } } } ]);
     *
     */
    $.extend($.fn.datagrid.methods, {
     addEditor : function(jq, param) {
      if (param instanceof Array) {
       $.each(param, function(index, item) {
        var e = $(jq).datagrid('getColumnOption', item.field);
        e.editor = item.editor;
       });
      } else {
       var e = $(jq).datagrid('getColumnOption', param.field);
       e.editor = param.editor;
      }
     },
     removeEditor : function(jq, param) {
      if (param instanceof Array) {
       $.each(param, function(index, item) {
        var e = $(jq).datagrid('getColumnOption', item);
        e.editor = {};
       });
      } else {
       var e = $(jq).datagrid('getColumnOption', param);
       e.editor = {};
      }
     }
    });

    /**
     * 扩展datagrid的editor
     * 增加带复选框的下拉树
     * 增加日期时间组件editor
     * 增加多选combobox组件
     */
    $.extend($.fn.datagrid.defaults.editors, {
     combocheckboxtree : {
      init : function(container, options) {
       var editor = $('<input />').appendTo(container);
       options.multiple = true;
       editor.combotree(options);
       return editor;
      },
      destroy : function(target) {
       $(target).combotree('destroy');
      },
      getValue : function(target) {
       return $(target).combotree('getValues').join(',');
      },
      setValue : function(target, value) {
       $(target).combotree('setValues', sy.getList(value));
      },
      resize : function(target, width) {
       $(target).combotree('resize', width);
      }
     },
     datetimebox : {
      init : function(container, options) {
       var editor = $('<input />').appendTo(container);
       editor.datetimebox(options);
       return editor;
      },
      destroy : function(target) {
       $(target).datetimebox('destroy');
      },
      getValue : function(target) {
       return $(target).datetimebox('getValue');
      },
      setValue : function(target, value) {
       $(target).datetimebox('setValue', value);
      },
      resize : function(target, width) {
       $(target).datetimebox('resize', width);
      }
     },
     multiplecombobox : {
      init : function(container, options) {
       var editor = $('<input />').appendTo(container);
       options.multiple = true;
       editor.combobox(options);
       return editor;
      },
      destroy : function(target) {
       $(target).combobox('destroy');
      },
      getValue : function(target) {
       return $(target).combobox('getValues').join(',');
      },
      setValue : function(target, value) {
       $(target).combobox('setValues', sy.getList(value));
      },
      resize : function(target, width) {
       $(target).combobox('resize', width);
      }
     }
    });

    /**
     * 增加formatString功能
     * 使用方法:sy.fs('字符串{0}字符串{1}字符串','第一个变量','第二个变量');
     * @returns 格式化后的字符串
     */
    sy.formatString = function(str) {
     for ( var i = 0; i < arguments.length - 1; i++) {
      str = str.replace("{" + i + "}", arguments[i + 1]);
     }
     return str;
    };

    /**
     * 将form表单元素的值序列化成对象
     * @returns object
     */
    sy.serializeObject = function(form) {
     var o = {};
     $.each(form.serializeArray(), function(index) {
      if (o[this['name']]) {
       o[this['name']] = o[this['name']] + "," + this['value'];
      } else {
       o[this['name']] = this['value'];
      }
     });
     return o;
    };
    /**
     * 编辑行,用于选择多行
     */
    sy.datagridEditSelections = function(jq) { 
     var rows = jq.datagrid('getSelections');
     if (rows.length == 1) { // 只选择了一行
      if (sy.editRow != undefined) { 
       sy.ensureUniqueEditRow(jq, sy.editRow);
      }
      if (sy.editRow == undefined) {   
       sy.editRow = jq.datagrid('getRowIndex', rows[0]);
       jq.datagrid('beginEdit', sy.editRow);
       jq.datagrid('selectRow', sy.editRow);  
      }
     } else {
      $.messager.show({ msg : '请选择一项进行修改!', title : '错误' });
     }
    };
    /**
     * 只能选择一行进行编辑
     */
    sy.datagridEditSelected = function(jq) { 
     var row = jq.datagrid('getSelected');
     if(row){
      var rowIndex = jq.datagrid('getRowIndex',row);
      if(sy.editRow != rowIndex){
       jq.datagrid('endEdit', sy.editRow);
       jq.datagrid('beginEdit', rowIndex);
      }
      sy.editRow = rowIndex;
     }else{ 
      $.messager.alert('提示信息','请选择要编辑的行!','info');
     }
    };
    /**
     * 根据行的索引进行编辑
     */
    sy.datagridEditByRowIndex = function(jq,rowIndex) { 
     if(sy.editRow != rowIndex){
      jq.datagrid('endEdit', sy.editRow);
      jq.datagrid('beginEdit', rowIndex);
     }
     sy.editRow = rowIndex;
    };

    /**
     * 判断当前是否只有一行在编辑
     */
    sy.ensureUniqueEditRow = function(jq){
     if (sy.editRow != undefined ) {
      $.messager.alert('提示信息','请先保存当前的数据在进行其他操作!','info');
      return ;
     }
    };
    /**
     * 添加行
     * @param jq  table的id,转化成jquery对象
     * @param row 添加行初始化时的行数据
     * @param editRow 当前是否有行在编辑
     */
    sy.datagridAdd =function(jq,row,flag) {
     if(!jq.datagrid('validateRow',sy.editRow)){
      return ;
     }
     if (sy.editRow != undefined) {
      if(flag == "edit"){
       sy.ensureUniqueEditRow(jq, sy.editRow);
      }else{
       jq.datagrid('endEdit', sy.editRow);
       sy.editRow = undefined;
      }
     }
     if(sy.editRow == undefined){
      jq.datagrid('unselectAll');
      jq.datagrid('appendRow', row);
      sy.editRow = jq.datagrid('getRows').length - 1;
      jq.datagrid('selectRow', sy.editRow);
      jq.datagrid('beginEdit', sy.editRow);
     }
     return sy.editRow;
    };


    sy.datagridOperatorAjaxMethod = function(jq,rows, optname,url,data) {
     if (rows.length > 0) {
      $.messager.confirm('提示信息', '您确定要'+optname+'当前所选行吗?', function(r) {
       if (r) {
        $.ajax({
         url : url,
         data : data,
         dataType : 'json',
         success : function(data) {
          if(data.success == true){
           jq.datagrid('load');
           $.messager.show({ title : '提示信息', msg :data.message });
          }else{
           $.messager.show({ title : '提示', msg : data.message });
          }
         }
        });
       }
      });
     } else {
      $.messager.alert('提示信息', '请选择要'+optname+'的记录!', 'error');
     }
    };
    /** 结束编辑 */
    sy.datagridEndEdit = function(jq){
     if (sy.editRow != undefined) {
      jq.datagrid('endEdit', sy.editRow);
      sy.editRow = undefined;
     }
    };
    /** 取消当前行编辑 */
    sy.datagridCancelRowEdit = function(jq){
     if (sy.editRow != undefined) {
      jq.datagrid('cancelEdit', sy.editRow);
       sy.editRow = undefined;
     }
    };
    /** 取消所有编辑 */
    sy.datagridCancelAllRowsEdit = function(jq){
     jq.datagrid('rejectChanges');
     sy.editRow = undefined;
    };
    /** 取消所有编辑 */
    sy.datagridCancelAllRowsEdit2 = function(jq){
     jq.datagrid('rejectChanges');
     sy.editRow = undefined;
    };
    //加载字典
    sy.loadDictionary = function(id,typeid){
     $("#"+id+"").combobox({  
         url:root+"/base/doCodeAct!getCodeValueByType?codeTypeId="+typeid,  
         valueField:'codeNum',
      textField:'codeName'
     });
    };
    //加载字典
    sy.loadAllDictionary = function(map){
     $.each( map, function(i, n){
      sy.loadDictionary(i,n); 
     });
    };
    /**
     * 屏蔽非法的操作
     * @param jq 当前在操作的datagrid
     * @param field 行的字段
     * @param enablevalue 对应行字段操作的有效值
     * @param operator 操作符合,< = >,>= ...
     * @param message 当出现非法操作时的提示信息,不包括编辑行
     * @returns {Boolean}
     */
    function judgeOperatorItemIsEnabled(jq,field,enablevalue,operator,message){
     var selected = jq.datagrid('getSelections');
     if(selected.length >0){ 
      for(var i=0;i<selected.length;i++){
       var up = selected[i].field;
       if(operator == "="){
        if(up != enablevalue){
         $.messager.alert('提示信息',message,'warning'); return false;
        } 
       }else if(operator == ">"){
        if(up < enablevalue){
         $.messager.alert('提示信息',message,'warning'); return false;
        } 
       }
       else if(operator == "<"){
        if(up > enablevalue){
         $.messager.alert('提示信息',message,'warning'); return false;
        } 
       }  
      }  
     }else{
      $.messager.alert('提示信息','请先选中要操作的记录!','warning');
      return false;
     }
     return true;
    }
    /**
     * 判断编辑的行是否唯一
     * @returns {Boolean}
     */
    function judgeUniqueItemInSels(){
     var selected = emEquipmentSupplierGrid.datagrid('getSelections');
     if(selected.length >1){
      $.messager.alert('提示信息','请选择一项进行编辑!','warning');
      emEquipmentSupplierGrid.datagrid('clearSelections');
     }else if(selected.length == 0 ){
      $.messager.alert('提示信息','请先选中要操作的记录!','warning');
     }else{
      return true;
     }
     return false;
    }

    /**
     * 将数据转化成json时确定数据类型的返回值
     * @param value 值
     * @returns 返回它原来的值或带引号的默认值
     */
    sy.ensureDataGridFieldTypeToJson = function(value) {
     if (typeof value == "string") {
      if(value){
       return '"'+value+'"';
      }else{
       return '"'+'"';
      }
     }
     if (typeof value == "number") {
      if(value){
       return value;
      }else{
       return 0;
      }
     }
    };
    /**
     * 将数据转化成json时确定数据类型的返回值
     * @param value 值
     * @returns 返回它原来的值或带引号的默认值
     */
    sy.ensureDataGridFieldTypeToString = function(value) {
     if (typeof value == "string") {
      if(value){
       return value;
      }else{
       return '';
      }
     }
     if (typeof value == "number") {
      if(value){
       return value;
      }else{
       return 0;
      }
     }
    };
    /**
     * 将datagrid行的数据转化成json格式 [{},{}]
     * @param rows 表示行
     * @param colNames 表示需要转换的列名的一个数组
     */
    sy.formatRowsToJson = function(rows,colNames){
     var jsonData="[";
     var result="{";
     var json ="";
     if(colNames.length<1 || rows.length<1){
      return jsonData+"]";
     }
     for(var i=0;i<rows.length;i++){
      for(var j=0;j<colNames.length;j++){
       if(rows[i][colNames[j]]){
        json = json + '"'+colNames[j]+'":'+ sy.ensureDataGridFieldTypeToJson(rows[i][colNames[j]])+",";
       }
      }
      if(json.length>0){
       json = json.substring(0, json.length-1);
       result = result + json +"},{";
       json="";
      }else{
       return jsonData+"]";
      } 
     }
     jsonData = jsonData + result.substring(0, result.length-2) + "]";
     return jsonData;
    };

    /**
     * 将datagrid行的数据转化成json格式,{"name":"tom"}|{}
     * @param rows 表示行
     * @param colNames 表示需要转换的列名的一个数组
     */
    sy.formatRowsToJsonBySplit = function(rows,colNames,split){
     var jsonData="";
     var result="{";
     var json ="";
     if(colNames.length<1 || rows.length<1){
      return jsonData;
     }
     for(var i=0;i<rows.length;i++){
      for(var j=0;j<colNames.length;j++){
       if(rows[i][colNames[j]]){
        json = json + '"'+colNames[j]+'":'+ sy.ensureDataGridFieldTypeToJson(rows[i][colNames[j]])+",";
       }
      }
      if(json.length>0){
       json = json.substring(0, json.length-1);
       result = result + json +"}"+split+"{";
       json="";
      }else{
       return jsonData;
      } 
     }
     jsonData = jsonData + result.substring(0, result.length-1);
     return jsonData;
    };

    /**
     * 将datagrid行的数据转化成字符串格式,a+b+|a+b+|
     * @param rows 表示行
     * @param colNames 表示需要转换的列名的一个数组
     * @param prefix 列名的前缀
     */
    sy.formatStringToFillForm = function(rows,colNames,prefix){
     var json ="";
     if(rows.length==1){
      for(var j=0;j<colNames.length;j++){
       if(rows[colNames[j]]){
        json = json +"'"+ prefix+colNames[j]+"':"+rows[colNames[j]]+",";
       }
       json = json.substring(0, json.length-1);
      }
     }
     return json;
    };
    /**
     * 将datagrid行的数据转化成json格式,{"name":"tom"}|{}
     * @param rows 表示行
     * @param colNames 表示需要转换的列名的一个数组
     */
    sy.formatRowsToJsonBySplit = function(rows,colNames,split){
     var jsonData="";
     var result="{";
     var json ="";
     if(colNames.length<1 || rows.length<1){
      return jsonData;
     }
     for(var i=0;i<rows.length;i++){
      for(var j=0;j<colNames.length;j++){
       if(rows[i][colNames[j]]){
        json = json + '"'+colNames[j]+'":'+ sy.ensureDataGridFieldTypeToJson(rows[i][colNames[j]])+",";
       }
      }
      if(json.length>0){
       json = json.substring(0, json.length-1);
       result = result + json +"}"+split+"{";
       json="";
      }else{
       return jsonData;
      } 
     }
     jsonData = jsonData + result.substring(0, result.length-1);
     return jsonData;
    };

  • 相关阅读:
    UnxUtils让windows下的dos命令变为linux下的命令
    Python多线程&进程
    Web前端工程师-优秀简历汇总
    最详细的Vuex教程
    Vue2.0 探索之路——生命周期和钩子函数的一些理解
    理解 $nextTick 的作用
    使用git rebase合并多次commit
    vim 退出命令(保存、放弃保存)
    Vue获取DOM元素样式 && 样式更改
    Vue Router的配置
  • 原文地址:https://www.cnblogs.com/lbangel/p/3045852.html
Copyright © 2011-2022 走看看