easyui中单元格合并及增加复选框工具

公用方法:

/*
User: libie_lt
Date: 2021/2/22
Time: 上午 10:45
*/


/**
 * EasyUI DataGrid根据字段动态合并单元格,在onLoadSuccess中调用
 * 参数 dataGridId 要执行单元格合并的dataGrid的Id
 * 参数 colList 要合并的列,用逗号分隔(例如:"encode,idx,chebox");
 */
function mergeCellsByField(dataGridId, colList) {
    let ColArray = colList.split(",");
    let tTable = $("#" + dataGridId);
    let TableRowCnts = tTable.datagrid("getRows").length;
    let tmpA;
    let tmpB;
    let PerTxt = "";
    let CurTxt = "";
    for (let j = ColArray.length - 1; j >= 0; j--) {
        PerTxt = "";
        tmpA = 1;
        tmpB = 0;
        for (let i = 0; i <= TableRowCnts; i++) {
            if (i === TableRowCnts) {
                CurTxt = "";
            } else {
                CurTxt = tTable.datagrid("getRows")[i][ColArray[j]];
            }
            if (PerTxt === CurTxt) {
                tmpA += 1;
            } else {
                tmpB += tmpA;
                tTable.datagrid("mergeCells", {
                    index: i - tmpA,
                    field: ColArray[j],
                    rowspan: tmpA,
                    colspan: null
                });
                tmpA = 1;
            }
            PerTxt = CurTxt;
        }
    }
}


/**
 * 依据指定字段给dataGrid添加排序列和复选框列,在loadFilter中调用
 * @param data dataGrid数据源
 * @param flagField 标识字段名称
 * @param indexField 可选,序列字段名称;
 * @param checkboxField 可选,复选框字段名称,该复选框name为 "checkboxField",value为 flagField的value
 * @param onClickCallback 可选,复选框被单击时的回调函数,使用双引号及转义双引号。  参数:value 标志列的值,checked 是否选中
 * @returns {*}
 */
function addIdxAndCheckboxByField(data,flagField,indexField,checkboxField,onClickCallback){
    let cutIdx=0; //序號
    let cutEncode=''; //立項編碼
    data.rows.forEach((u) => {
        if (u[flagField]!==cutEncode){
            cutEncode=u[flagField];
            u[indexField]=++cutIdx;
        }else {
            u[indexField]=cutIdx;
        }
        u[checkboxField] = "<input type='checkbox' name='"+checkboxField+"' onclick='_DealChecked(\""+u[flagField]+"\","+onClickCallback+")' value='"+u[flagField]+"'>";
    });
    return data;
}

function _DealChecked(flagFieldValue,onClickCallback){
    let checkboxes = $(":checkbox[value=\""+flagFieldValue+"\"]");
    let checked = checkboxes[0].checked;
    onClickCallback(flagFieldValue,checked);
}

调用方法:

        let checkedEncode = new Set(); //存放已选中的复选框值
        $(function () {
            $('#dataGrid').datagrid({
                title:'排配專案時程',
                nowrap: false,
                striped: true,
                fitColumns: true,
                fit: true,
                url: ctx + 'XXXXXXX',
                remoteSort: false,
                singleSelect:true,
                // rownumbers:true,
                idField:'encode',
                columns:[[
                    {field:'chebox',title:'',width:30,},
                    {field:'idx',title:'序號',width:30,},
                    {field:'encode',title:'立項編碼',width:100,},
                    {field:'project_name',title:'專案名稱',width:60},
                    {field:'require_type',title:'需求類別',width:60},
                    {field:'dev_type',title:'開發方式',width:60},
                ]],
                pagination:true,
                pageSize:10,
                pageNumber:1,
                pageList:[10,20,30,40],
                loadFilter:data=>addIdxAndCheckboxByField(data,'encode','idx','chebox',onClickCheck),
                onLoadSuccess:data=>mergeCellsByField("dataGrid", "encode,idx,chebox"),
                // onSelect:(index, row)=>$('#dataGrid').datagrid("unselectRow",index),
            });
        });

        //複選框點擊事件
        function onClickCheck(value,checked) {
            // console.log(value,checked);
            if (checked){
                checkedEncode.add(value);
            } else {
                checkedEncode.delete(value);
            }
            // console.log(checkedEncode);
        }
        //複選框作為單元框使用時的點擊事件
        function onClickCheckAsRadio(value) {
            checkedEncode.forEach(u=>{
                let box = $(":checkbox[name=\"chebox\"][value=\""+u+"\"]")[0];
                checkedEncode.delete(u);
                box.checked=false;
            });
            let checkboxes = $(":checkbox[name=\"chebox\"][value=\""+value+"\"]")[0];
            checkboxes.checked=true;
            checkedEncode.add(value);
        }

效果如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值