fastadmin两级联动

记录:实现fastadmin 两级联动效果

后端代码:
ajax控制器

    /**
     * 读取年级数据,联动列表
     */
    public function grade()
    {
        $status = $this->request->get('status', '');
        $where = ['shop_id' => SHOP_ID];
        $gradelist = null;
        if ($status) {
            $where['status'] = $status;
        }

        $gradelist = Db::name('grade')->where($where)->field('id as value,name')->order('weigh desc,id desc')->select();

        $this->success('', '', $gradelist);
    }

     /**
     * 读取班级数据,联动列表
     */
    public function gradeClass()
    {
        $status = $this->request->get('status', '');
        $grade_id = $this->request->get('grade_id', '');
        $where = ['shop_id' => SHOP_ID];
        $gradelist = null;
        if ($grade_id || $grade_id != 0) {
            $where['grade_id'] = $grade_id;
            
            if ($status) {
                $where['status'] = $status;
            }
    
            $gradelist = Db::name('grade_class')->where($where)->field('id as value,name')->order('weigh desc,id desc')->select();
    
        }
        
        $this->success('', '', $gradelist);
    }

HTML代码:

    <!-- 方式一:一行展示 -->
    <!-- <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="first,second">
                <select class="first form-control" style="padding: 6px 25px 6px 20px;" data-rule="required" name="row[grade_id]" data-url="ajax/grade?status=normal"></select>
                <select class="second form-control" style="padding: 6px 25px 6px 20px;" data-rule="required" name="row[grade_class_id]" data-url="ajax/gradeClass?status=normal" data-query-name="grade_id"></select>
            </div>
        </div>
    </div> -->
    <!-- 方式二:两行展示 -->
    <div data-toggle="cxselect" data-selects="first,second">
        <div class="form-group col-xs-12 col-sm-6">
            <label class="control-label col-xs-12 col-sm-4">{:__('Grade_id')}:</label>
            <div class="col-xs-12 col-sm-8">
                <select class="first form-control" style="padding: 6px 25px 6px 20px;" data-rule="required" name="row[grade_id]" data-url="ajax/grade?status=normal">
                	<!-- 默认选中 -->
                	<option value="{$row.grade_id|htmlentities}" selected=""></option>
                </select>
            </div>
        </div>
        <div class="form-group col-xs-12 col-sm-6">
            <label class="control-label col-xs-12 col-sm-4">{:__('Grade_class_id')}:</label>
            <div class="col-xs-12 col-sm-8">
                <select class="second form-control" style="padding: 6px 25px 6px 20px;" data-rule="required" name="row[grade_class_id]" data-url="ajax/gradeClass?status=normal" data-query-name="grade_id">
                	<!-- 默认选中 -->
                	<option value="{$row.grade_class_id|htmlentities}" selected=""></option>
                </select>
            </div>
        </div>
    </div>

方式一页面效果:
在这里插入图片描述
方式二页面效果:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
FastAdmin 中实现动态下拉表单联动,可以使用 FastAdmin 自带的表单组件以及 jQuery 插件 Chained Selects。 具体实现步骤如下: 1. 定义两个联动的下拉框,如下: ```php $form->select('province_id', '省份')->options('/api/province'); $form->select('city_id', '城市')->options('/api/city')->rules('required'); ``` 其中 `province_id` 和 `city_id` 分别是表单项的 name 值,`/api/province` 和 `/api/city` 是获取数据的接口地址。 2. 在控制器中定义接口方法,用于获取城市数据,如下: ```php namespace app\admin\controller; use think\Controller; class ApiController extends Controller { public function province() { $provinceList = db('province')->select(); return json($provinceList); } public function city() { $provinceId = input('get.province_id'); $cityList = db('city')->where('province_id', $provinceId)->select(); return json($cityList); } } ``` 其中 `province` 方法返回所有省份数据,`city` 方法根据省份 ID 获取该省份下的城市数据。 3. 使用 Chained Selects 插件实现下拉框联动,如下: ```js $(function() { // 省份下拉框改变事件 $('select[name="province_id"]').change(function() { var provinceId = $(this).val(); // 清空城市下拉框 $('select[name="city_id"]').empty(); // 动态加载城市数据 $.getJSON('/admin/api/city', {province_id: provinceId}, function(data) { $.each(data, function(i, item) { $('select[name="city_id"]').append('<option value="' + item.id + '">' + item.name + '</option>'); }); // 触发城市下拉框的 change 事件 $('select[name="city_id"]').trigger('change'); }); }); // 城市下拉框改变事件 $('select[name="city_id"]').change(function() { // TODO: 根据城市 ID 加载其他数据 }); // 初始化省份下拉框 $('select[name="province_id"]').trigger('change'); }); ``` 其中 `change` 事件监听省份下拉框的改变,根据选中的省份 ID 动态加载城市数据,并将加载的城市数据添加到城市下拉框中。同时,触发城市下拉框的 `change` 事件,以便根据城市 ID 加载其他数据。最后,通过触发省份下拉框的 `change` 事件,完成初始化操作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值