fastadm关联查询及后台表单搜索等基本用法

本文介绍了一个基于PHP的职位列表查询实现方法,包括前后端交互流程、动态SQL构建、搜索条件处理及分页逻辑等关键部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先页面是这样的:

后台控制器:

/**
 * 查看
 */
public function index()
{
    //设置过滤方法
    $this->request->filter(['strip_tags']);
    if ($this->request->isAjax()) {
        //如果发送的来源是Selectpage,则转发到Selectpage
        if ($this->request->request('keyField')) {
            return $this->selectpage();
        }
        [$where, $sort, $order, $offset, $limit] = $this->buildparams();
        $where = [];
        $where_or = [];
        $filter = $this->request->get('filter', '');
        $sort = $this->request->get('sort',
            ! empty($this->model) && $this->model->getPk() ? $this->model->getPk() : 'id');
        $sort = $this->model->getTable() . '.' . $sort;
        $order = $this->request->get('order', 'DESC');
        $offset = $this->request->get('offset', 0);
        $limit = $this->request->get('limit', 0);
        if($filter){
            $filter = (array) json_decode($filter, true);
        }

        if(isset($filter['key_word']) && $filter['key_word']!= ''){
            $where_or[] = ['position.name',"like","%{$filter['key_word']}%"];
            $where_or[] = ['enterprise.ent_name',"like","%{$filter['key_word']}%"];
        }


        if(isset($filter['status']) && $filter['status']!= ''){
            $where[] = ['enterprise_position.status',"=",$filter['status']];
        }

        if(isset($filter['updatetime']) && !empty($filter['updatetime'])){
            $crawl_time = explode(' - ', $filter['updatetime']);
            $where[] = ['enterprise_position.updatetime', '>=', strtotime($crawl_time[0])];
            $where[] = ['enterprise_position.updatetime', '<=', strtotime($crawl_time[1])];
        }

        $member_qy_model = new \app\common\model\MemberQy();
        $table = $member_qy_model->getConfig('database') . '.' . $member_qy_model->getTable();
        $total = $this->model->alias('enterprise_position')
            ->join('category position', 'enterprise_position.position = position.id', 'left')
            ->join($table . ' enterprise', 'enterprise_position.e_id = enterprise.id', 'LEFT')
            ->where($where)
            ->whereOr($where_or)
            ->order($sort, $order)
            ->count();

        $list = $this->model->alias('enterprise_position')
            ->join('category position', 'enterprise_position.position = position.id', 'left')
            ->join($table . ' enterprise', 'enterprise_position.e_id = enterprise.id', 'LEFT')
            ->where($where)
            ->whereOr($where_or)
            ->field('enterprise_position.*,position.name as position_name,enterprise.ent_name as ent_name')
            ->order($sort, $order)
            ->limit($offset, $limit)
            ->select();

        $list = $list->toArray();
        foreach($list as $key => $val){
            $list[$key]['resume_num'] = $this->position_to_resume_model->where('position_id','=',$val['id'])->count();
            $list[$key]['salary_range'] = $val['salary_min'].'元-'.$val['salary_max'].'元';
        }
        $result = ['total' => $total, 'rows' => $list];

        return json($result);
    }

    return $this->view->fetch();
}

前台js:

define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {

    var Controller = {
        index: function () {
            // 初始化表格参数配置
            Table.api.init({
                extend: {
                    index_url: 'enterprise_position/index' + location.search,
                    add_url: '',
                    edit_url: '',
                    del_url: 'enterprise_position/del',
                    multi_url: 'enterprise_position/multi',
                    table: 'enterprise_position',
                },
                //禁用默认搜索
                search: false,
                //启用普通表单搜索
                commonSearch: true,
                //可以控制是否默认显示搜索单表,false则隐藏,默认为false
                searchFormVisible: true,
            });

            var table = $("#table");

            // 初始化表格
            table.bootstrapTable({
                url: $.fn.bootstrapTable.defaults.extend.index_url,
                pk: 'id',
                sortName: 'id',
                columns: [
                    [
                        {field: 'no',
                            title: __('序号'),
                            sortable: true,
                            operate:false,
                            align: "center",
                            width: 40,
                            formatter: function (value, row, index) {
                                //获取每页显示的数量
                                var pageSize=table.bootstrapTable('getOptions').pageSize;
                                //获取当前是第几页
                                var pageNumber=table.bootstrapTable('getOptions').pageNumber;
                                //返回序号,注意index是从0开始的,所以要加上1
                                return pageSize * (pageNumber - 1) + index + 1;
                            }
                        },
                        {field: 'position_name', title: __('Position'), operate:false},
                        {field: 'ent_name', title: __('E_id'), operate:false},
                        {field: 'key_word', title: __('关键字'),placeholder:'请输入职位或企业名称', visible:false},
                        {field: 'salary_range', title: __('薪资范围'), operate:false},
                        {field: 'place', title: __('Place'), operate:false},
                        {field: 'status', title: __('Status'), searchList: {"0":__('上线'),"1":__('下线')}, formatter: Table.api.formatter.status,visible: true},
                        {field: 'updatetime', title: __('Updatetime'),autocomplete:false, operate:'RANGE', addclass:'datetimerange', formatter: Table.api.formatter.datetime},
                        {
                            field: 'operate', title: __('Operate'), table: table,
                            events: Table.api.events.operate,
                            buttons: [{
                                name: 'detail',
                                text: __('查看'),
                                title:'职位信息',
                                icon: 'fa fa-list',
                                classname: 'btn btn-info btn-xs btn-detail btn-dialog',
                                url: function(row){
                                    return 'enterprise_position/detail?ids='+row.id;
                                }
                            },{
                                name: 'resume',
                                text: function (row) {
                                    return '简历('+row.resume_num+')';
                                },
                                title:'简历',
                                icon: 'fa fa-list',
                                classname: 'btn btn-xs btn-info btn-dialog',
                                url: function(row){
                                    return 'position_to_resume/index?ids='+row.id;
                                }
                            },{
                                name: 'online',
                                text: __('上线'),
                                icon: 'fa fa-list',
                                classname: 'btn btn-xs btn-success btn-ajax',
                                confirm:function (row) {
                                    return '是否确定上线该“'+row.position+'”职位?';
                                },
                                success:function (data,ret) {

                                },
                                url: function(row){
                                    return 'enterprise_position/online?ids='+row.id;
                                },
                            },{
                                name: 'offline',
                                text: __('下线'),
                                icon: 'fa fa-list',
                                confirm:function (row) {
                                    return '是否确定下线该“'+row.position+'”职位?';
                                },
                                success:function (data,ret) {

                                },
                                classname: 'btn btn-xs btn-warning btn-ajax',
                                url: function(row){
                                    return 'enterprise_position/offline?ids='+row.id;
                                },
                            }],
                            formatter: function (value, row, index) {
                                var that = $.extend({}, this);
                                var table = $(that.table).clone(true);
                                //状态是否已上线
                                if(row.status == 0){  //已上线
                                    $(table).data("operate-online", null);
                                    that.table = table;
                                }else{
                                    $(table).data("operate-offline", null);
                                    that.table = table;
                                }

                                return Table.api.formatter.operate.call(that, value, row, index);
                            }
                        }
                    ]
                ]
            });

            // 为表格绑定事件
            Table.api.bindevent(table);
        },
        add: function () {
            Controller.api.bindevent();
        },
        edit: function () {
            Controller.api.bindevent();
        },
        api: {
            bindevent: function () {
                Form.api.bindevent($("form[role=form]"));
            }
        }
    };
    return Controller;
});

最后关于后台搜索有时间 控件会出现历史搜索数据的问题可以这样解决:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值