列表上移下移功能实现

发布于:2024-11-29 ⋅ 阅读:(7) ⋅ 点赞:(0)

后台管理某列表需实现上移下移功能,并与前端展示列表排序相关。

现将开发完成过程笔记记录下来。

目录

列表增加属性

JQuery脚本

服务端

控制器

服务层

总结


列表增加属性

在循环渲染时,在table表格的tr上增加id和排序的属性值,以便传输后端修改相应记录。

代码如下:

{foreach name="list" item="v"}
<tr class="hover edit" data-val="{$v.sort}" data-id="{$v.id}">
    <td>{$v.title}</td>
    <td>¥{$v.reward_price}</td>
    <td>{$v.sales_price}</td>
    <td>{if $v.type == 1} - {else} {$v.sales_num} {/if}</td>
    <td>
        {if $v.type == 1}
        -
        {else}
        <input type="button" class="dsui-btn-edit up" value="上移">
        <input type="button" class="dsui-btn-edit down" value="下移">
        {/if}
    </td>
    <td class="align-center">
        <a href="javascript:void(0)" onclick="rewardEdit({$v.id})" class="dsui-btn-edit"><i class="iconfont"></i>编辑</a>
        {if $v.type == 0}
        <a href="javascript:void(0)" onclick="submit_delete({$v.id})" class="dsui-btn-del"><i class="iconfont"></i>删除</a>
        {/if}
    </td>
</tr>
{/foreach}

 

JQuery脚本

在jquery脚本中,编写上移下移事件,通过按钮上绑定的类名进行触发。

获取通过tr上设定的id和sort,传递给后端修改相应记录。

上移时需判断表格行是否第一行,这里因为我的第一行没有上下移动功能,故改为这样。

下移时,需判断表格是否最后一行。

代码如下:

$(function () {
    // 上移
    var up = $(".up");
    up.click(function () {
        var $tr = $(this).parents('tr');
        var now_id = $tr.attr('data-id');
        var now_val = $tr.attr('data-val');
        if (now_val > 2) {
            var last_id = $tr.prev().attr('data-id');
            var last_val = $tr.prev().attr('data-val');
            var data = {'id1':now_id, 'sort1':now_val, 'id2':last_id, 'sort2':last_val};
            editSort(data);
        }
    });

    // 下移
    var down = $(".down");
    var len = down.length;
    down.click(function () {
        var $tr = $(this).parents('tr');
        var now_id = $tr.attr('data-id');
        var now_val = $tr.attr('data-val');
        if ($tr.index() != len) {
            var last_id = $tr.next().attr('data-id');
            var last_val = $tr.next().attr('data-val');
            var data = {'id1':now_id, 'sort1':now_val, 'id2':last_id, 'sort2':last_val};
            editSort(data);
        }
    });

    /**
     * 修改排序
     * @param data
     */
    function editSort(data) {
        $.getJSON("{:url('YttReward/editSort')}", data, function(res){
            if (res.code != 1) {
                layer.msg(res.msg, {icon: 1});
            } else {
                window.location.reload();
            }
        });
    }
});

 

服务端

控制器

/**
 * 编辑奖励排序
 * @return void
 */
public function editSort()
{
// 接收所有值
    $param = $this->request->param();
    $res = $this->Service->editSort($param);
// 返回json格式数据
    ds_json_encode($res['code'], $res['msg']);
}

服务层

在服务层处理具体业务:验证参数,查询记录,修改记录。

代码如下:

/**
 * 编辑奖励排序
 * @param $param
 * @return array
 */
public function editSort($param)
{
    $rules      = [
        'id1'   => 'require|number',
        'sort1' => 'require|number',
        'id2'   => 'require|number',
        'sort2' => 'require|number',
    ];
    $messages   = [
        'id1.require'   => '请选择奖励',
        'id1.number'    => '奖励id参数为数字',
        'sort1.require' => '请输入排序',
        'sort1.number'  => '排序值为数字',
        'id2.require'   => '请选择奖励',
        'id2.number'    => '奖励id参数为数字',
        'sort2.require' => '请输入排序',
        'sort2.number'  => '排序值为数字',

    ];
    $validate = validate($rules, $messages);
    if (!$validate->check($param)) {
        return ds_callback(0, $validate->getError());
    }

    try {
        $info1 = $this->getInfo(['id' => $param['id1']]);
        $info2 = $this->getInfo(['id' => $param['id2']]);
        if (!$info1 || !$info2) {
            return ds_callback(0, '该记录不存在');
        }
        if ($info1['type'] == 1 || $info2['type'] == 1) {
            return ds_callback(0, '新手奖励不可修改排序');
        }
        $this->editData(['sort' => $param['sort2']], ['id' => $param['id1']]);
        $this->editData(['sort' => $param['sort1']], ['id' => $param['id2']]);
        return ds_callback(1, '操作成功');
    } catch (\Exception $e) {
        return ds_callback(0, $e->getMessage());
    }
}

总结

上移下移的列表功能前端脚本加后端结合实现。