首先页面是这样的:
后台控制器:
/** * 查看 */ 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; });
最后关于后台搜索有时间 控件会出现历史搜索数据的问题可以这样解决: