fastadmin 三级联动 selectpage使用

本文详细介绍了如何在FastAdmin中实现三级联动的selectpage功能,从控制器代码的编写,到视图层模板的配置,再到JS层的交互逻辑,一步步教你完成这个功能的实现。

fastadmin 二级或多级联动 selectpage用法

效果https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdmF0YXIuY3Nkbi5uZXQvNy83L0IvMV9yYWxmX2h4MTYzY29tLmpwZw#pic_center]

控制器代码

根据业务自行修改 代码片.

//控制器层
public function getOrgUserInfo()
    {
        $condition = [];
        $this->request->filter(['strip_tags']);

        $params =$this->request->param();
        $organization_id = isset($params['custom']['organization_id']) ?$params['custom']['organization_id'] :0;
       	$condition['deleted'] = ['eq',0];
        $condition["organization_id"] = $organization_id;
        $condition[] = ['EXP',Db::raw("FIND_IN_SET(5,group_id)")];

		//分页查询
        $page = $this->request->param('pageNumber');
        $limit = $this->request->param('pageSize');
        $limit = $limit ? $limit : 1;
        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('uid as id,name')
            ->order("id", "ASC")
            ->limit($limit)
            ->page($page)
            ->select();
        $result = array("total" => $total, "rows" => $list);
        return json($result);
    }

视图层

//html
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
    <div class="form-group">
        <label for="c-organization_id"  class="control-label col-xs-12 col-sm-2">组织</label>
        <div class="col-xs-12 col-sm-6">
            <input id="c-organization_id"
                   class="form-control selectpage"
                   data-source="organization/organization/index"//数据来源  其他属性可参照fastadmin selectpage文档使用
                   data-pagination="true"//打开分页
                   data-page-size="10"//每页10条数据
                   data-rule="required"
                   name="row[organization_id]"
                   type="text"
                   value="">
        </div>
    </div>
    <div class="form-group">
        <label for="c-warehouse_uid" class="control-label col-xs-12 col-sm-2">库管员</label>
        <div class="col-xs-12 col-sm-6">
            <input id="c-warehouse_uid"
                   data-source="organization/org_user/getOrgUserInfo"
                   data-pagination="true"
                   data-page-size="5"
                   data-multiple="true"
                   class="form-control selectpage"
                   name="row[warehouse_keepers]"
                   type="text"
                   value="">
        </div>
    </div>
    <div class="form-group">
        <label for="c-name" class="control-label col-xs-12 col-sm-2">仓库名称</label>
        <div class="col-xs-12 col-sm-6">
            <input id="c-name" data-rule="required" class="form-control" name="row[name]" type="text" value="">
        </div>
    </div>

    <div class="form-group">
         <label class="control-label col-xs-12 col-sm-2">{:__('省市区')}:</label>
         <div class="col-xs-12 col-sm-8">
             <div class="form-inline" data-toggle="cxselect" data-selects="province,city,area">
                 <select class="province form-control" name="row[province_code]" data-url="Ajax/ourArea"></select>
                 <select class="city form-control" name="row[city_code]" data-query-name="province" data-url="Ajax/ourArea"></select>
                 <select class="area form-control" name="row[district_code]" data-query-name="city" data-url="Ajax/ourArea"></select>
             </div>
         </div>
     </div>
    <div class="form-group layer-footer">
        <label class="control-label col-xs-12 col-sm-2"></label>
        <div class="col-xs-12 col-sm-6">
            <button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
            <button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
        </div>
    </div>
</form>

JS层

//二级联动
 add: function () {
    $("#c-warehouse_uid").data("params", function(){
       	 const organization_id = $("#c-organization_id").val();
	     return {custom: {organization_id:organization_id}};
	     });
	     Controller.api.bindevent();
	 },
        edit: function () {
         $("#c-warehouse_uid").data("params", function(){
             const organization_id = $("#c-organization_id").val();
             return {custom: {organization_id:organization_id}};
         });
         Controller.api.bindevent();
        },
//三级联动例子   其他程序搬运至此,仅供参考,逻辑与二级联动相似,其他多级联动同样如此
add: function () {
     $("#c-category_id").data("params", function(){
        const brand_id = $("#c-brand_id").val();
         return {custom: {brand_id: brand_id}};
     });
     $("#c-category_id2").data("params", function(){
         const category_id = $("#c-category_id").val();
         return {custom: {category_id:category_id}};
     });
     Controller.api.bindevent();
 },
 
之前从网上找的三级联动都太老了,数据也都是很久之前的数据,所以自己把从国家统计局扒下来的省市县三级联动数据做了整理,目前最新的三级联动,童叟无欺。大家看北京市和天津市的几个分区就知道是最新的了。 INSERT INTO `address` VALUES (1, '110000', 0, '北京市', 1); INSERT INTO `address` VALUES (2, '110100', 110000, '市辖区', 2); INSERT INTO `address` VALUES (3, '110101', 110100, '东城区', 3); INSERT INTO `address` VALUES (4, '110102', 110100, '西城区', 3); INSERT INTO `address` VALUES (5, '110105', 110100, '朝阳区', 3); INSERT INTO `address` VALUES (6, '110106', 110100, '丰台区', 3); INSERT INTO `address` VALUES (7, '110107', 110100, '石景山区', 3); INSERT INTO `address` VALUES (8, '110108', 110100, '海淀区', 3); INSERT INTO `address` VALUES (9, '110109', 110100, '门头沟区', 3); INSERT INTO `address` VALUES (10, '110111', 110100, '房山区', 3); INSERT INTO `address` VALUES (11, '110112', 110100, '通州区', 3); INSERT INTO `address` VALUES (12, '110113', 110100, '顺义区', 3); INSERT INTO `address` VALUES (13, '110114', 110100, '昌平区', 3); INSERT INTO `address` VALUES (14, '110115', 110100, '大兴区', 3); INSERT INTO `address` VALUES (15, '110116', 110100, '怀柔区', 3); INSERT INTO `address` VALUES (16, '110117', 110100, '平谷区', 3); INSERT INTO `address` VALUES (17, '110118', 110100, '密云区', 3); INSERT INTO `address` VALUES (18, '110119', 110100, '延庆区', 3); INSERT INTO `address` VALUES (19, '120000', 0, '天津市', 1); INSERT INTO `address` VALUES (20, '120100', 120000, '市辖区', 2); INSERT INTO `address` VALUES (21, '120101', 120100, '和平区', 3); INSERT INTO `address` VALUES (22, '120102', 120100, '河东区', 3); INSERT INTO `address` VALUES (23, '120103', 120100, '河西区', 3); INSERT INTO `address` VALUES (24, '120104', 120100, '南开区', 3); INSERT INTO `address` VALUES (25, '120105', 120100, '河北区', 3); INSERT INTO `address` VALUES (26, '120106', 120100, '红桥区', 3); INSERT INTO `address` VALUES (27, '120110', 120100, '东丽区', 3); INSERT INTO `address` VALUES (28, '120111', 120100, '西青区', 3); INSERT INTO `address` VALUES (29, '120112', 120100, '津南区', 3); INSERT INTO `address` VALUES (30, '120113', 120100, '北辰区', 3); INSERT INTO `address` VALUES (31, '120114', 120100, '武清区', 3); INSERT INTO `address` VALUES (32, '120115', 120100, '宝坻区', 3); INSERT INTO `address` VALUES (33, '120116', 120100, '滨海新区', 3); INSERT INTO `address` VALUES (34, '120117', 120100, '宁河区', 3); INSERT INTO `address` VALUES (35, '120118', 120100, '静海区', 3); INSERT INTO `address` VALUES (36, '120119', 120100, '蓟州区', 3);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值