批量更改会员权限

我们通常都会遇到这样的一个需求,那就是批量操作!像这样:

前端页面代码(一个tr的代码)及解析:

<tr>
    <td><input name="ids" type="checkbox" class="dr_select" value="{$t.uid}" /></td>
    <td>{$t.uid}</td>
    <td>{$t.name}</td>
    <td>{if $t[groupid]==1}
                待审核
        {else if $t[groupid]==3}
                独立经纪人
        {else if $t[groupid]==4}
                职业经纪人
        {else}
                其他
        {/if}
    </td>
</tr>

这里会员组名称是根据会员组id来判别的,用的是php脚本(poscms的写法),记录是用foreach循环输出的,

最后一行全选的前端代码如下:

    <tr>
        <th><input id="dr_select" type="checkbox" onClick="dr_selected()" />
        </th>
        <td colspan="10"  >
            <label>
                <button onClick="changeGroup()">修改为</button>
            </label>
            <label>
                <select id="groupid">
                    <option value="1" selected> 待审核 </option>
                    <option value="4" > 职业经纪人 </option>
                    <option value="3" > 独立经纪人 </option>
                </select>
            </label>
        </td>
    </tr>

全选函数dr_selected():

function dr_selected() {
    if ($("#dr_select").prop("checked")) {
        $(".dr_select").prop("checked", true);
    } else {
        $(".dr_select").prop("checked", false);
    }
}

“修改为”按钮单击事件changeGroup():

function changeGroup() {
    //获取记录条目中的所有复选框DOM
    var obj = $("input:checkbox[name='ids']");
    //获取单选框的值
    var groupid = $("#groupid").val();
    //定义一个数组ids来装所有选中条目的id值
    var ids = [];
    for(k in obj){
        if(obj[k].checked)
            ids.push(obj[k].value);
    }
    //向后台发起ajax请求,传递ids和将要转变的会员组id值
    $.ajax({
        type: "GET",
        url: siteurl,
        dataType: "json",
        data:{
            "c":"api",
            "m":"changegroup",
            "ids":ids,
            "groupid":groupid
            },
        success: function(text) {
            var _iframe = window.parent;
            var _div =_iframe.document.getElementById('rightMain');
            _div.contentWindow.location.reload(true);
        },
        error: function(text) {
            var _iframe = window.parent;
            var _div =_iframe.document.getElementById('rightMain');
            _div.contentWindow.location.reload(true);
        }
    });
}

由于不知道接口会不会出现“返回数据类型不是json的”错误,success回调和error回调都将刷新当前iframe页面,对于200OK

状态ajax执行回调的不确定性,之前已经作过详解,不明白的可以参考博主的这篇博客:https://www.cnblogs.com/eco-just/p/9094940.html

其实这里应该将iframe刷新的代码封装成一个函数,避免大家看得混乱,这里就不作封装了,但是实际写的时候要注意封装。

接下来看接口是怎么处理的(admin.php?c=api&m=changegroup):

public function changegroup() {
        $ids = $this->input->get('ids');
        $groupid = $this->input->get('groupid');
        foreach ($ids as $id) {  
              $data = array('groupid'=>$groupid,);
              $this->db->where('uid', $id);
              $this->db->update('mt_member', $data);
        }
    }

这里也不难理解,获取前台传来的ids数组和将转换的groupid,然后遍历这个ids数组,对每个id对应的数据库记录,

进行groupid字段的更改。

至此,批量操作的流程就已经完成了!

原文地址:https://www.cnblogs.com/eco-just/p/9102923.html