首先页面是这样的:

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

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

被折叠的 条评论
为什么被折叠?



