FastAdmin 动态下拉(SelectPage)的使用

2024-12-19 11:51:12

1、视图层定义一个input

<input id="c-shop_id" data-rule="required" data-source="company/list" class="form-control selectpage" name="row[shop_id]" data-field="name" data-primary-key="id" data-pagination="true" data-page-size="10" type="text" value="">

其中,data-source 为数据源 URL

2、编写控制器

public function list()
{
    $this->model = (new ManystoreShop());
    $condition = [];
    $this->request->filter(['strip_tags']);

    //分页查询
    $word = $this->request->param()['q_word'][0];
    $page = $this->request->param('pageNumber');
    $limit = $this->request->param('pageSize');
    $limit = $limit ? $limit : 1;
    // 模糊搜索
	if (strlen($word) > 0) {
        $condition['name'] = ['like', '%'.$word.'%'];
    }
    if ($this->request->param("keyValue")) {
        $condition['id'] = $this->request->param("keyValue");
    }
    $total = $this->model->where($condition)
        ->order("id", "ASC")
        ->count();
    $list = $this->model
        ->where($condition)
        ->field('id,name')
        ->order("id", "ASC")
        ->limit($limit)
        ->page($page)
        ->select();
    $result = array("total" => $total, "rows" => $list);
    return json($result);
}

3、完成

传递参数 data-params

例如我获取数据时,需要在 add.html 或者 edit.html 传递参数,不要直接在视图页面编写JS,需要在对应 js 文件中做修改:

add: function () {
    $("#c-shop_id").data("params", function () {
        return {"city": localStorage.getItem('city')};
    });
    Controller.api.bindevent();
},

问题

测试时,发现打开编辑 edit.html 并没有返回原有的数据值,所以需要对控制器数据源 URL 进行一下修改:

原因是,当我们打开编辑页面时,数据源URL会进行一次请求,请求时会携带一个 keyvalue 的参数,这个参数就是我们对应的源ID,此时我们进行一次查询并返回一条查询的数据就可以了

if($this->request->request("keyValue")){
    $list = $this->model->field('id,name')->find([
        'id' => $this->request->request("keyValue")
    ]);
    return json(["total" => 1, "rows" => $list]);
}

此时可以看到,edit 初次加载就会获取到数据源信息

                        

原文链接:https://blog.csdn.net/weixin_43743720/article/details/128592189

免责申明:本站内容大部分来自互联网,部分来源于个人原创。仅供个人学习使用,本站不承担任何法律责任。如有侵权请联系删除!